use strict; my @data = qw/a mnk ab m b bc abcd cd bcd bd m nk/; @data = sort {length($b) <=> length($a)} @data; my @result = (); while (@data) { push @result, $data[0]; @data = grep { $data[0] !~ /\Q$_\E/ } @data; } print "@result\n"; #### ... while (@data) { push @result, $data[0]; @data = grep { index($data[0], $_) == -1 } @data; } ...