my ( %fruits, %newHASH ); # find all the fruit names foreach my $country ( keys %HASH ) { foreach my $fruit ( keys %{ $HASH{$country} } ) { $fruit =~ m/([a-z]+)[A-Z]+/; # [A-Z]+ included for distinction $fruits{$1}++; $newHASH{$country}{$1} = $HASH{$country}{$fruit}; } } # find which fruits are missing foreach my $country ( keys %newHASH ) { foreach my $fruit ( keys %fruits ) { if( not exists $newHASH{$country}{$fruit} ) { print "$country is missing $fruit!\n"; } } } #### %HASH $country $fruit = 1 $fruit = 1 #### %HASH $country = [ $fruit, $fruit... ]