#!/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 );