in reply to Re: A little config parsing.
in thread A little config parsing.

Thanks that worked great, but then I went to test the results with
for my $i (1 .. $sites_config{'total_sites'}) { print "$sites_config{$i}{'site_name'}\n"; }
What I don't get is how $i is getting auto incremented.

Replies are listed 'Best First'.
Re: Re: Re: A little config parsing.
by Chmrr (Vicar) on Jan 11, 2002 at 08:14 UTC

    $i is the loop variable for your for loop. Perl sets it to every value in the list that the loop is iterating over -- in this case, the list of numbers from 1 to $sites_config{'total_sites'}.

    As an aside, any particular reason you're using a hash and not an array? It seems like you're mixing metaphors a bit to have </code>$site_config{'some_string'}</code> be at the same level as $site_config{$some_site_number}.

    perl -pe '"I lo*`+$^X$\"$]!$/"=~m%(.*)%s;$_=$1;y^`+*^e v^#$&V"+@( NO CARRIER'

      I find it easier to work with just one hash to store whatever I need than to have multiple arrays to store the same thing and try and guess the number of where something is stored to retrive it.

        I think I wasn't clear. What I meant is, have a key in your %sites_config hash whose value is an anonymous array, which contains all of your sites. Thusly, you don't have to keep track of the total_sites on your own, nor use numbers as keys in a hash, and so on. I'd probably write something like:

        my %sites_config = parse_sites_config(); sub parse_sites_config { open SITES_CFG, "< $sites_conf" or die "Couldn't open $sites_conf: $ +!"; my %options; while(<SITES_CFG>) { chomp; s/\/\/\s+.*//g; # Get rid of comments; next unless length; my($key, $operator, $value) = split/\s*(=>?)\s*/, $_, 2; if ($operator eq "=>") { push @{$options{sites}}, {site_name => $key, site_url => $value}; } else { $options{sites}[-1]{$key} = $value; } } return %options; } # Later.. for my $site (@{$sites_config{sites}}) { print $site->{site_name}, "\n"; }

        perl -pe '"I lo*`+$^X$\"$]!$/"=~m%(.*)%s;$_=$1;y^`+*^e v^#$&V"+@( NO CARRIER'