use strics, use Data::Dumper; my @AoA = (['a','b','c'], ['a','b','c'], ['a','b','d'], ['a','b','d'] ); my $h,$uAoA; map {$h->{join '-',@$_} = 1} @AoA; push @{$uAoA},[split '_',keys %{$h}]; print Data::Dumper $uAoA;