my @list1 = qw/a b c d e f g/; my @list2 = qw/a b c d e /; my %one = ( a => 1, b => 1, c => 1 ); my %two = ( f => 1, g => 1 ); for my $key ( keys %one ) { if ( grep {$_ eq $key} @list1 and grep {$_ eq $key} @list2) { print "File 1 $key", $/ } } for my $key ( keys %two ) { unless ( grep {$_ eq $key} @list1 and grep {$_ eq $key} @list2 ) { if ( grep {$_ eq $key} @list1 or grep {$_ eq $key} @list2 ) { print "File 2 $key", $/; } } }