%hash3 = map { $_->{year}.$->{month}.$_->{day}.$_->{hhmm}= $_ } @array1; for(@array2){ $k=$_->{year}.$->{month}.$_->{day}.$_->{hhmm}; if(!defined $tmp{$k}){ $hash3{$k}=$_; }else{ $hash3{$k}->{data2}=$_->{data2}; } } @array3=map { $hash3{$_} } sort keys %hash3; #or just @array3=values %hash3; #if you don't care about sorting