use strict; my %hash1 = ( A => 5, B => 7, C => 2, D => 8, ); my %hash2 = ( 1234 => "A,C", 4567 => "A,B,D", 5678 => "C", ); while ( my( $key2, $val2 ) = each %hash2 ) { my %keys1; @keys1{ split /,/, $val2 } = (); my @missing = grep { not exists $keys1{$_} } keys %hash1; print "hash2 key '$key2' is missing values '@missing'\n"; }