in reply to Re^2: Parse a file and store it in hash of hashes
in thread Parse a file and store it in hash of hashes
First of all follow the wise suggestions of the precise monk afoken.
That said, with the code you posted, and in particular $rec = $1 I get the error Global symbol "$rec" requires explicit package name at pm16012017.pl line 12. but is probably a typo.
In addition i think you just need a hash not a HashOfHash.
Now about your code: if next unless s/^\[(.*?)\]\s*//; is intended to skip the first line must probably be: next if s/^\[(.*?)\]\s*//;
Even with this you get errors about undefined values: Use of uninitialized value in hash element at inifile16012017.pl line 15, foreach line of data and the following datastructure:
$VAR1 = ''; $VAR2 = { 'FIFTH' => '12345', 'COMMENT' => '"Perl parsing"', 'SEVENTH' => 'QWERTY', 'FOURTH' => '"RANDOM"', 'SECOND' => '"ID"', 'FIRST' => '"TEST"', 'THIRD' => '123', 'SIXTH' => '6789' };
If you intended to have CELL_NAME as root element you need to not skip the line with it and have $rec declared outside the loop, to have it ad disposal during the loop:
my $rec; while ( <$fh> ) { if (s/^\[(.*?)\]\s*//){$rec = $1}
The resulting datastructure (dumped with Data::Dump with dd prettier method) will be:
( "CELL_NAME", { COMMENT => "\"Perl parsing\"", FIFTH => 12345, FIRST => "\"TEST\"", FOURTH => "\"RANDOM\"", SECOND => "\"ID\"", SEVENTH => "QWERTY", SIXTH => 6789, THIRD => 123, }, )
L*
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^4: Parse a file and store it in hash of hashes
by Sonali (Novice) on Jan 16, 2017 at 09:51 UTC | |
by Discipulus (Canon) on Jan 16, 2017 at 10:06 UTC | |
by Sonali (Novice) on Jan 16, 2017 at 11:45 UTC | |
by johngg (Canon) on Jan 16, 2017 at 12:22 UTC | |
by afoken (Chancellor) on Jan 16, 2017 at 14:08 UTC | |
by Corion (Patriarch) on Jan 16, 2017 at 11:51 UTC |