#!/usr/bin/perl -w use strict; use vars '@dict'; open(DICT, '); close DICT; sub match_crypto { my @pattern = split //, $_[0]; my (@letters,%slots,@matches); WORDS: foreach my $word (@dict) { next unless length $word == @pattern; @letters = split //, $word; %slots = (); for (my $i = 0; $i < @letters; ++$i) { next WORDS if $letters[$i] eq $pattern[$i]; if (exists $slots{$pattern[$i]}) { next WORDS unless $slots{$pattern[$i]} eq $letters[$i]; } else { $slots{$pattern[$i]} = $letters[$i]; } } push @matches, $word; } @matches; }