use Data::Dumper; my %islanders; while () { chomp; my ($key, $cnt, $fruit) = split / /; $key =~ s/://g; $islanders{$key}{$fruit} += $cnt; } print Dumper(\%islanders); __DATA__ Gilligan: 1 coconut Skipper: 3 coconuts Gilligan: 1 banana Ginger: 2 papayas Professor: 3 coconuts MaryAnn: 2 papayas