sub matchrule { my ( $old, $highs, $word ) = @_; $old eq $word and return 0; my $newmask = ( $old ^ $word ) =~ tr/\0/\xff/cr; ( $newmask & $highs ) =~ tr/5// and return 0; my $tiles = "@tiles"; $tiles =~ s/$_// or return 0 for ( $newmask & $word ) =~ /\w/g; return 1; } #### 'hello' ^ 'world' => "\37\n\36\0\13" #### my $newmask = ('hello' ^ 'world') =~ tr/\0/\xff/cr => "\377\377\377\0\377" #### ("\377\377\377\0\377" & '14222') => "142\0002" #### "\377\377\377\0\377" & 'world' => "wor\0d"