in reply to Re^3: Parse a file and store it in hash of hashes
in thread Parse a file and store it in hash of hashes

Yes you were correct about the typo at line 12. But I need HoH because my file is a collection of cell values like shown below. I had only posted one of the cells.

[CELL_NAME1] COMMENT = "Perl parsing" FIRST = "TEST1" SECOND = "ID1" THIRD = 123 FOURTH = "RANDOM" FIFTH = 12345 SIXTH = 6789 SEVENTH = QWERTY [CELL_NAME2] COMMENT = "Tester" FIRST = "TEST2" SECOND = "ID2" THIRD = 1234 FOURTH = "FOUR" FIFTH = 12345 SIXTH = BOARD SEVENTH = MOUSE [CELL_NAME3] COMMENT = "Parser" FIRST = "TEST3" SECOND = "ID3" THIRD = 12345 FOURTH = "FIVE" FIFTH = 12345 SIXTH = PAD SEVENTH = KEY

I need to generate a HoH structure for this.

Replies are listed 'Best First'.
Re^5: Parse a file and store it in hash of hashes
by Discipulus (Canon) on Jan 16, 2017 at 10:06 UTC
    The answer is already there

    L*

    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

      Thank you. I was able to parse and dump the data into a file. Is there any function to sort the cell names after they are dumped? Because everything is dumped in a haphazard manner.

        Data::Dumper's Sortkeys method may help you.

        johngg@shiraz:~ > perl -Mstrict -Mwarnings -MData::Dumper -E ' open my $inFH, q{<}, \ <<EOF or die $!; [CELL_NAME1] COMMENT = "Perl parsing" FIRST = "TEST1" SECOND = "ID1" THIRD = 123 FOURTH = "THREE" FIFTH = 12345 SIXTH = 6789 SEVENTH = QWERTY [CELL_NAME2] COMMENT = "Tester" FIRST = "TEST2" SECOND = "ID2" THIRD = 1234 FOURTH = "FOUR" FIFTH = 12345 SIXTH = BOARD SEVENTH = MOUSE [CELL_NAME3] COMMENT = "Parser" FIRST = "TEST3" SECOND = "ID3" THIRD = 12345 FOURTH = "FIVE" FIFTH = 12345 SIXTH = PAD SEVENTH = KEY EOF my %HoH = do { local $/ = q{}; map { my @record = split m{\n}; my $key = shift @record; $key =~ s{[\[\]]}{}g; $key => { map { split m{\s*=\s*}, $_, 2 } @record }; } <$inFH>; }; print Data::Dumper ->new( [ \ %HoH ], [ qw{ *HoH } ] ) ->Sortkeys( 1 ) ->Dumpxs();' %HoH = ( 'CELL_NAME1' => { 'COMMENT' => '"Perl parsing"', 'FIFTH' => '12345', 'FIRST' => '"TEST1"', 'FOURTH' => '"THREE"', 'SECOND' => '"ID1"', 'SEVENTH' => 'QWERTY', 'SIXTH' => '6789', 'THIRD' => '123' }, 'CELL_NAME2' => { 'COMMENT' => '"Tester"', 'FIFTH' => '12345', 'FIRST' => '"TEST2"', 'FOURTH' => '"FOUR"', 'SECOND' => '"ID2"', 'SEVENTH' => 'MOUSE', 'SIXTH' => 'BOARD', 'THIRD' => '1234' }, 'CELL_NAME3' => { 'COMMENT' => '"Parser"', 'FIFTH' => '12345', 'FIRST' => '"TEST3"', 'FOURTH' => '"FIVE"', 'SECOND' => '"ID3"', 'SEVENTH' => 'KEY', 'SIXTH' => 'PAD', 'THIRD' => '12345' } );

        Update: Amended map { split m{\s*=\s*} } @record to map { split m{\s*=\s*}, $_, 2 } @record to address afoken's point.

        Cheers,

        JohnGG

        If you mean by "dump the data" that you are using Data::Dumper, have a look at $Data::Dumper::Sortkeys.

        If not, maybe you can show us what you mean by "dump" and "haphazard manner".