Win8 Strawberry 5.8.9.5 (32) Mon 09/06/2021 1:53:18 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings use Data::Dump qw(dd); # for debug my @words = ( # added a few extra 'words' '', 'x', 'a', 's', 'aa', 'as', 'es', 'is', 'os', 'sh', 'si', 'so' ); dd '@words:', \@words; # for debug # map words to sorted words. my %sorted = map { $_ => join('', sort split //) } @words; dd 'sorted words hash:', \%sorted; # for debug print "----------------------------\n"; for my $regex (qw(.?a? a?.? s?.? .?s?)) { my $rx_full = qr{ ^ $regex $ }x; # faster if used often # my $rx_full = qr{ \A $regex \z }xms; # i prefer \A \z \Z and /xms tail print "Matches for FULL regex pattern: $rx_full \n"; for my $word (@words) { print "'$sorted{$word}' -> '$word' " if $sorted{$word} =~ $rx_full; } print "\n----------------------------\n"; } ^Z ( "\@words:", ["", "x", "a", "s", "aa", "as", "es", "is", "os", "sh", "si", "so"], ) ( "sorted words hash:", { "" => "", "a" => "a", "aa" => "aa", "as" => "as", "es" => "es", "is" => "is", "os" => "os", "s" => "s", "sh" => "hs", "si" => "is", "so" => "os", "x" => "x", }, ) ---------------------------- Matches for FULL regex pattern: (?x-ism: ^ .?a? $ ) '' -> '' 'x' -> 'x' 'a' -> 'a' 's' -> 's' 'aa' -> 'aa' ---------------------------- Matches for FULL regex pattern: (?x-ism: ^ a?.? $ ) '' -> '' 'x' -> 'x' 'a' -> 'a' 's' -> 's' 'aa' -> 'aa' 'as' -> 'as' ---------------------------- Matches for FULL regex pattern: (?x-ism: ^ s?.? $ ) '' -> '' 'x' -> 'x' 'a' -> 'a' 's' -> 's' ---------------------------- Matches for FULL regex pattern: (?x-ism: ^ .?s? $ ) '' -> '' 'x' -> 'x' 'a' -> 'a' 's' -> 's' 'as' -> 'as' 'es' -> 'es' 'is' -> 'is' 'os' -> 'os' 'hs' -> 'sh' 'is' -> 'si' 'os' -> 'so' ----------------------------