Учитывая несколько тестовых случаев
my @match = (
"foo is bar",
"hello bar",
);
my @reject = (
"foobar",
"foo bar",
);
Вы, конечно, можете сделать это, передав результаты одного шаблона другому:
my @control = grep !/foo\s*bar/, grep /bar/ => @match, @reject;
Мы также можем сделать это с одним:
my $nofoo = qr/
( [^f] |
f (?! o) |
fo (?! o \s* bar)
)*
/x;
my $pattern = qr/^ $nofoo bar /x;
Но не верьте мне на слово.
for (@match) {
print +(/$pattern/ ? "PASS" : "FAIL"), ": $_\n";
}
for (@reject) {
print +(/$pattern/ ? "FAIL" : "PASS"), ": $_\n";
}