http://www.perlmonks.org?node_id=504600


in reply to How to Parse a Text into HoA

You need to: 1)remember the $fname across loops, so define it outside; 2)also you need to my %hoa; 3) there is no need to define that $content.

use Data::Dumper; use strict; use warnings; my %hoa; my $fname; while (my $line = <DATA>) { chomp $line; if ($line =~ /^[a-z]/ ) { $fname = $line; } elsif ($line =~ /^[0-9]+,/) { push @{$hoa{$fname}}, $line; } } print Dumper(\%hoa); __DATA__ >data set dm01 >instances 0,-869,foofoofoofoofoofoofoofoo,28 0,-853,barbarbarbarbar,14 >data set yst02 >instances 0,-1566,quxquxquxqux,9 0,-1545,bembembem,9 0,-1394,birbirbirbir,9 >data set mus03 >instances 0,-1274,tingtingtingting,11 0,-1220,tongtongtong,11 0,-475,bubububu,11 0,-459,catcatcatcatcat,11