use strict; use warnings ; use Data::Dumper ; use List::MoreUtils; sub has_dups { my $arr = shift ; my %counter ; foreach ( @$arr ) { return 1 if $counter{$_}++ ; } return 0 ; } # @A contains pairs of duplicate values my @A = (1 << 60, 2 ** 60, 1 << 63, 2 ** 63) ; # @B contains two unique values my $approx = sqrt 2.0; my @B = ("$approx" + 0, sqrt 2.0) ; my @D = grep { !has_dups($_) } ( \@A, \@B ) ; print Dumper(\@D), "\n"; @D = grep {List::MoreUtils::uniq(@$_) == @$_} (\@A,\@B); print Dumper(\@D), "\n"; my @list = @A; my @uniq = sort keys %{ { map { $_, 1 } @list } }; print Dumper(\@uniq); __END__ Outputs: $VAR1 = [ [ '1152921504606846976', '1.15292150460684698e+18', '9223372036854775808', '9.22337203685477581e+18' ] ]; $VAR1 = [ [ '1152921504606846976', '1.15292150460684698e+18', '9223372036854775808', '9.22337203685477581e+18' ] ]; $VAR1 = [ '1.15292150460684698e+18', '1152921504606846976', '9.22337203685477581e+18', '9223372036854775808' ];