Binish A R wrote:
> I've a file, which has entries like the following ...
>
> IDENTIFIER1=value1;
> IDENTIFIER2=value2;
> IDENTIFIER3=value3;
>
> etc
>
> I've got to parse the above file and am using a hash to do the same ...
Have you thought about using one of the many modules on CPAN that does this
for you?
> Here is my code ...
>
>
> while (<>) {
> chomp;
> next if /^#/;
> next if /^$/;
> %CONF = split /=/;
> }
>
>
> But %CONF contains only the last key/value pair :-/
That is because the contents of the hash %CONF are being replaced by the
assignment to the hash.
> So I had to modify the above script to
>
> while (<>) {
> chomp;
> next if /^#/;
> next if /^$/;
> $ref = [ split /=/ ];
> $CONF{$ref->[0]} = $ref->[1];
> }
>
> The above is working fine.
That is because it is the correct way to ADD data to a hash.
> So my question is why isn't the first code working?
> I don't want to use too many variables in my script,
> even with my second script I needed an extra variable viz $ref.
If you make the results from split() local to the while loop using my() then
they will not affect the number of variables outside the while loop.
my ( $key, $value ) = split /=/;
$CONF{ $key } = $value;
}
# End of loop so $key and $value are no longer in scope.
> Is it possible to get the job done using the first script?
No, however you can do it by reading the whole file into a list and processing
that:
my %CONF = map split( /=/ ), grep !/^$/, grep !/^#/, map { chomp; $_ } <>;
P.S. Could you please not send graphics files to the list? TIA
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>