use strict; use warnings; my @array = map {[split]} ('11 12', '11 13', '9 8 7', '3 4', '11 4'); ORIG: for (my $i=0; $i<=$#array; $i++) { for my $j ($i+1..$#array) { my %seen; my @unique = grep {! $seen{$_}++} @{$array[$i]}, @{$array[$j]}; if (@unique < @{$array[$i]} + @{$array[$j]}) { $array[$i] = \@unique; splice @array, $j, 1; redo ORIG; } } $array[$i] = join ' ', @{$array[$i]}; } print "$_\n" for (@array);