#usr/bin/perl use Data::Dumper qw(Dumper); foreach $x(@arr) { I will do something and i will put something into an array called @val for each of the $x $hash{$x}=[@val]; } print Dumper \%hash; foreach $y(@arr1) { I will do something and i will put something into an array called @val2 for each of the $y $hash2{$x}=[@val2]; } print Dumper \%hash2; my %result; foreach $key(keys %hash1) { if(!exists $hash{$key}) { $result{$a}=$hash1{$key}; next; } foreach $new(keys %$key) { $result{$key}{$new}=$hash{$key}{$new} if(!exists $hash{$key}{$new} && $hash1{$key}{$new}) eq $hash{$key}{$new}); } } print Dumper \%result;