. is-bad-word, $needle (.. , ), @badwords any, True.
, (\w+), .
: (\w+) ( ), , ( , a dollar). , @badwords, ero .
, !
my @badwords = <one zero yellow>;
my @parsefails = q:to/EOF/.lines;
zero dollar
roze dollar
erzo dollar
one dollar
noe dollar
oen dollar
yellow dollar
wolley dollar
EOF
my @parsepasses = q:to/EOF/.lines;
thousand dollar
million dollar
dog dollar
top dollar
meme dollar
EOF
sub is-bad-word($needle) {
return $needle.comb.sort eq any(@badwords).comb.sort
}
use Test;
plan @parsefails + @parsepasses;
for flat (@parsefails X False), (@parsepasses X True) -> $line, $should-pass {
my $succ = so $line ~~ / ^ (\w+) \s <!{ is-bad-word($0.Str) }> 'dollar' /;
ok $succ eqv $should-pass, "$line -> $should-pass";
}
done-testing;