use warnings; use strict; use Data::Compare; use Data::Dumper; my $arefs = [ [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, ], [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, ], [ { BIRTH => "11/04/2014", CODE => 4, NAME => "Mike D", NUMBER => 5555, }, ], ]; my $no_dups_aref; while (my $aref = shift @$arefs){ my $dup = 0; for (@$arefs){ $dup = Compare($aref, $_); last if $dup; } next if $dup; push @$no_dups_aref, $aref; } print Dumper @$no_dups_aref;