in reply to Fast Way to Return Unique Array of Array

This is not what the function is supposed to do. Take a look at the source code. It only understands the first level of your AoA. Copy and paste, modify a little bit:

use Data::Dumper; my @AoA = (['a','b','c'], ['a','b','c'], ['a','b','d'], ['a','b','d']); my @uAoA = uniq(@AoA); sub uniq () { #updated, the prototype was taken out my %h; map { $h{$_}++ == 0 ? $_ : () } @_; print Dumper \%h; }

Run it , you get print out similar to this:

$VAR1 = { 'ARRAY(0x224ff8)' => 1, 'ARRAY(0x18c3a2c)' => 1, 'ARRAY(0x1875904)' => 1, 'ARRAY(0x224ef0)' => 1 };

Now it is obvious, all those four elements of the LIST are different and uniqe, and that's why the entire original AOA is returned.

Update:

Just to extend a little bit. uniq will work with this code, base on the way the AoA is formed. The input AoA is logically equal to your AoA. And the output is now the same as what you wanted. (I am not saying that this is a solution for you, as you probably cannot form your data like this or cannot do it easily. This only demos the nature of uniq(). )

use Data::Dumper; use List::MoreUtils qw(uniq); use strict; use warnings; my $a = ['a','b','c']; my $b = ['a','b','d']; my @AoA = ($a, $a, $b, $b); my @uAoA = uniq(@AoA); print Dumper(\@uAoA);

Why does it work? Because the uniq function sees two uniq array refs.