looks good but my configs don't us "=" there is just a space ... so could
one use my ($key,$value) = split/\ /; to split the kay and the value ?

On 7/14/06, Jeff Peng <[EMAIL PROTECTED]> wrote:

Hello,

Follow the conditions,the resolving way is not so complicated as yours.I
would give my sample way,hope it's useful to you.

here is the config file's content:
================
$ cat config.txt
;test file
# comment lines

IP = 1.2.3.4
PORT = 80
PREFORK_CHILDS = 5
MIN_SPARE_CHILDS

here is the sample script:
================
$ cat test.pl
use strict;
use Data::Dumper;
my %hash;

open HD,"config.txt" or die $!;
while(<HD>){
    next if /^\s*#|^\s*;/;
    next if /^\s*$/;

    my ($key,$value) = split/=/;
    $key =~ s/^\s+|\s+$//g;
    $value =~ s/^\s+|\s+$//g;

    $hash{$key} = $value || 'nodefined';
}
close HD;

print Dumper \%hash;

__END__


Run it and get the result output:

$ perl test.pl
$VAR1 = {
          'PREFORK_CHILDS' => '5',
          'IP' => '1.2.3.4',
          'MIN_SPARE_CHILDS' => 'nodefined',
          'PORT' => '80'
        };


>From: "Gregory Machin" <[EMAIL PROTECTED]>
>To: beginners@perl.org
>Subject: regex and parsing config file directives..
>Date: Fri, 14 Jul 2006 11:18:40 +0200
>
>Hi.
>Sorry to bother but I can't get this script to work..
>It is supposed to parse the openvpn config,
>1) any line starting with a ";" is to be ignored
>2) all directives are written to a hash where the key is the directive
and
>the value is the  value of the  directive .
>3) if the directive is present but no value is set then the key must be
set
>to the directive and the value must be set to "defined" or the same value
>as
>the key..
>
>this is the script so far
>
>
>#!/usr/bin/perl
>#
>
>use strict;
>
># vars
>my @tmp_load_file;
>my @tmp_directive;
>my %directive;
>#
>sub get_config_file {
>my $line; #used in while for outputing each line.
>print "opening config file for processing\n\n";
>open(IN, "< /etc/openvpn/client.conf");
>
>while (<IN>){
>
>   if (( $_ =~ /^#/ ) || ( $_ =~ /^\ /) || ( $_ =~ /^\n/) ){
>   } else {
>   chomp;         push(@tmp_directive , $_ );
>           }
>}
>
>close (IN);
>}
>
>get_config_file;
>
>
>
>sub config_hash {
>       ##### regex used in the function
>       ## /.+\s(.+) used to find the option set for that directive. "dev
>tun" will return "tun"
>   my $value ;
>foreach (@tmp_directive) {
>   #print "$_";       if ( $_ != /^\;/) {
>   } else {
>       /^([\w|-]+)\s(.+)/ ;
>       print " $1 => $2 \n";
>       $directive{$1} = $2 ;
>   }        if ( $_ != /^\;/) {
>   } else {
>       /^([\w|-]+)\n/ ;
>       #print ">> $1 => $1 \n";
>       #$value = "1" unless $2;
>       $directive{$1} = $1 ;
>   }      }
>}
>
>
>config_hash ;
>
>my $key; my $value;#
>
>print ">>>>>>>>>>>>>>>\n\n";
>for $key (keys %directive){
>  $value = $directive{$key};
>  print "$key => $value\n";
>}
>
>this it the output..
>[EMAIL PROTECTED] openvpn]$ perl passconfig.pl
>opening config file for processing
>
>=>
>dev => tun0
>proto => tcp
>remote => 192.168.1.1 1194
>resolv-retry => infinite
>=>
>=>
>=>
>ca => ca.crt
>cert => greg.crt
>key => greg.key
>cipher => AES-128-CBC
>=>
>verb => 3
>>>>>>>>>>>>>>>>
>
>=>
>proto => tcp
>cert => greg.crt
>dev => tun0
>ca => ca.crt
>key => greg.key
>remote => 192.168.1.1 1194
>verb => 3
>cipher => AES-128-CBC
>resolv-retry => infinite
>
>
>
>Many Thanks
>Greg
>
>
>
>--
>Gregory Machin
>[EMAIL PROTECTED]
>www.linuxpro.co.za





--
Gregory Machin
[EMAIL PROTECTED]
www.linuxpro.co.za

Reply via email to