use strict; use warnings; #my @array = ([11,12], [11,13], [9,8,7], [3,4], [11,4]); my @array = ([0], [0,1], [0,1,2], [1,2,3], [6,4,5]); ORIG: for my $i (0..$#array) { 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; } } } print join(' ', @$_), "\n" for (@array);