Win8 Strawberry 5.8.9.5 (32) Wed 08/17/2022 14:20:47 C:\@Work\Perl\monks >perl use strict; use warnings; use autodie; use Data::Dump qw(dd pp); # word-per-line dictionary. use constant DICTIONARY => 'C:/@Work/moby/mwords/354984si.ngl'; use constant TOKENS => pack('C*', 0 .. 255); open my $fh, '<', DICTIONARY; TEMPLATE: for my $template (qw(neocene abcdbab Mississippi abccbccbddb)) { my $et = essence($template); printf "template '$template' (tokenized %s): \n", pp $et; my $count = 0; WORD: while (my $word = <$fh>) { chomp $word; my $ew = essence($word); next WORD unless $et eq $ew; print " '$word' \n"; ++$count; } # end while WORD printf " (%d words) \n", $count; seek $fh, 0, 0; # for next dictionary pass } # end for TEMPLATE close $fh; sub essence { my ($string, ) = @_; my $essence; my $t = 0; my %seen; $essence .= $seen{$_} ? $seen{$_} : ($seen{$_} = substr TOKENS, $t++, 1) for split '', $string; return $essence; } ^Z template 'neocene' (tokenized "\0\1\2\3\1\0\1"): 'kaitaka' 'lauhala' 'metreme' 'neocene' 'tempete' (5 words) template 'abcdbab' (tokenized "\0\1\2\3\1\0\1"): 'kaitaka' 'lauhala' 'metreme' 'neocene' 'tempete' (5 words) template 'Mississippi' (tokenized "\0\1\2\2\1\2\2\1\3\3\1"): 'mississippi' (1 words) template 'abccbccbddb' (tokenized "\0\1\2\2\1\2\2\1\3\3\1"): 'mississippi' (1 words)