sub possible_match { my ($word1, $word2) = @_; return undef unless length( $word1 ) == length( $word2 ); my ( %one, %two ); for ( 0 .. length( $word1 ) - 1) { my $c1 = substr($word1, $_, 1); my $c2 = substr($word2, $_, 1); return undef if exists $one{ $c1 } and $one{ $c1 } ne $c2; return undef if exists $two{ $c2 } and $two{ $c2 } ne $c1; $one{ $c1 } = $c2; $two{ $c2 } = $c1; } return \%one; }