#!/usr/bin/perl -w use strict; use Data::Dumper; my @array1= ( {a=>1,b=>2,c=>3,d=>4}, {w=>0,x=>1,y=>2,z=>3} ); my @array1= ( {a=>1,b=>2,c=>3,d=>4}, {w=>0,x=>4,y=>2,z=>3} ); my @diff; foreach my $i ( 0..$#array1 ) { foreach my $key ( keys %{$array1[$i]} ) { if( $array1[$i]->{$key} ne $array2[$i]->{$key} ) { $diff[$i]= { %{$array1[$i]} }; $diff[$i]->{CHANGED}= delete $diff[$i]->{$key}; last; } } } print Dumper( \@diff ); #### $VAR1 = [ undef, { 'w' => 0, 'CHANGED' => 1, 'y' => 2, 'z' => 3 } ];