use strict; use Bit::Vector; my @data = qw/a mnk ab m b bc abcd cd bcd bd m nk/; @data = sort {length($b) <=> length($a)} @data; @data = map [$_, uc($_), Bit::Vector->new_Enum(256, join(',', map ord($_), (split //, uc($_))))->Block_Read()], @data; my @result = (); while (@data) { push @result, $data[0][0]; @data = grep { ($data[0][2] & $_->[2]) ne $_->[2] or index($data[0][1], $_->[1]) == -1 } @data; } print "@result\n";