use strict; my (@newarray,@array1,@array2); #Fill @array1 and @array2 with hashrefs here... my $count = 0; foreach my $element1 (@array1) { foreach my $element2 (@array2) { foreach my $key (keys %{$element1}) { next if (%{$element1}->{$key} == %{$element2}->{$key}); %{$newarray[$count]} = %{$element1}; my $val = $newarray[$count]->{$key}; delete $newarray[$count]->{$key}; %{$newarray[$count]}->{'CHANGED'} = $val; } } }