my $seen = 0; my @carmakers; while () { chop; my ($id, $maker, $make) = split(",", $_); if ($id != $seen) { my %maker; $maker{'thismaker'} = $maker; my @makes; my %make = ('thismake' => $make); push(@makes, \%make); $maker{'makes'} = \@makes; push(@carmakers, \%maker); # problem1 $seen = $id; } else { my %make = ('thismake' => $make); push(@makes, \%make); # problem2 $maker{'makes'} = \@makes; } }