in reply to Remove duplicated data from array ref

Not sure why you have an AoA with only single element sub-arrays but here's a way to do what you want.

johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -MData::Dumper - +E ' my $data = [ [ 123 ], [ 789 ], [ 456 ], [ 123 ], [ 543 ], ]; my @uniq = do { my %seen; grep { not $seen{ $_->[ 0 ] } ++ } @{ $data }; }; print Data::Dumper->Dumpxs( [ \ @uniq ], [ qw{ *uniq } ] );' @uniq = ( [ 123 ], [ 789 ], [ 456 ], [ 543 ] );

I hope this is helpful.

Update: Note that Eily's approach building a hash then using keys can also be made to work but the order of the elements is not (necessarily) preserved due to the way the hashing algorithm assigns keys to hash buckets. Because we want to preserve the array references we have to use those as the values, the keys being their content. From Perl 5.14 keys and values can take a scalar reference to a hash, as I do here.

johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -MData::Dumper - +E ' my $data = [ [ 123 ], [ 789 ], [ 456 ], [ 123 ], [ 543 ], ]; my @uniq = values { map { $_->[ 0 ] => $_ } @{ $data } }; print Data::Dumper->Dumpxs( [ \ @uniq ], [ qw{ *uniq } ] );' @uniq = ( [ 789 ], [ 543 ], [ 456 ], [ 123 ] );

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^2: Remove duplicated data from array ref
by Anonymous Monk on Nov 14, 2016 at 15:32 UTC
    Thank you, it works!