use strict; use warnings; my (@sets, $n, %c, @u, @a); while () { chomp; push @sets, [split /,/]; } for (@sets) { $c{$_}++ for (@$_); } $n = $#sets + 1; for (@sets) { print '[' . join(',', @$_) . '] = ['; @u = (); @a = (); for (@$_) { if ($c{$_} != $n) { push(@u, [$_, $c{$_}]); } else { push (@a, $_); } } for ((sort {@$a[1] cmp @$b[1]} @u)[0..1]) { print @$_[0] . ','; } print $a[0] . "]\n"; } __DATA__ 1,2,3,4,5,6 3,4,5,7,8 3,6,8,9 #### for (@sets) { $c{$_}++ for (@$_); }