use strict; use warnings; use Data::Dumper; my @AOA1 = ( [2003,1],[2003,3],[2003,4],[2004,1] ); my @AOA2 = ( [2003,1],[2003,2],[2003,3],[2003,4],[2003,5],[2003,6], [2003,7],[2003,8],[2003,9],[2003,10],[2003,11],[2003,12], [2004,1],[2004,2] ); my @diff = diff_AoA(\@AOA1, \@AOA2); print Dumper \@diff; sub diff_AoA { my @AofArray_refs = @_; my %seen; foreach my $array_ref( @AofArray_refs ) { foreach my $array ( @$array_ref ){ my $key = join (",", map { qq("$_") } @$array ); $seen{$key}{COUNT}++; $seen{$key}{ARRAY_REF} = [ @$array ]; } } my @diff_array; foreach my $key ( keys %seen ) { push @diff_array, $seen{$key}{ARRAY_REF} if $seen{$key}{COUNT} < 2; } return @diff_array; };