@words = qw (perl lerp lepp wombat); $pattern = ".e.."; @pattern_elements = split "", $pattern; word: foreach $word (@words) { my @bag = qw (p r l); # Reset bag my @letters = split "", $word; print "\nTesting $word...\n"; for my $i(0...$#letters) { my $element = $pattern_elements[$i]; # Create a character class with the letter bag my $class = '['.join ("", @bag).']'; if ($letters[$i] =~ m/($class)/) { # If matched, remove the letter from the bag @bag = grep /[^$1]/, @bag; } elsif ($letters[$i] eq $element) { next; } else { print "$word not matched\n"; next word; } } print "$word matched!\n" if @bag == 0; }