in reply to Simple regex wordlist question

You could do it with regular expression look-aheads. You have to make sure that you cater for input that has duplicate letters, e.g. butter or banana. You can mandate the length of result words in the regex without having to cut down your dictionary file.

use strict; use warnings; my $dictFile = q{2of12.txt}; open my $dictFH, q{<}, $dictFile or die qq{open: $dictFile: $!\n}; chomp(my @words = <$dictFH>); close $dictFH or die qq{close: $dictFile: $!\n}; my $input = shift; my $charCt = length $input; my %chars; $chars{$_} ++ for split m{}, $input; my $charsWanted = join q{}, map { qq{(?=@{ [ qq{.*$_} x $chars{$_} ] })} } keys %chars; my $wordLength = qq{(?=.{@{ [ length $input ] }}\$)}; my $rxDict = qr{(?x)^$charsWanted$wordLength}; print map { qq{$_\n} } grep { m{$rxDict} } @words;

This seems to work quite fast, the reading of the dictionary file taking most of the time.

Cheers,

JohnGG