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*
In reply to Re^3: Parse a file and store it in hash of hashes
by Discipulus
in thread Parse a file and store it in hash of hashes
by Sonali
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |