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.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.