2

考虑一个字符串,例如响应标头:HTTP/1.1 404 Not Found

我很好奇您是否可以使用智能匹配~~或双波浪号)运算符和正则表达式的组合来搜索不完整的匹配项或匹配项的子集。

my $head    = q{HTTP/1.1 404 Not Found};
my @success = (200, 201);
my @failure = (404, 409);

# Array First
say q{Success} if @success ~~ $head;
say q{Fail}    if @failure ~~ $head;

# Array Second
say q{Success} if $head ~~ @success ;
say q{Fail}    if $head ~~ @failure ;

我知道这可以通过某种循环、grep 或 map 来完成。但我正在检查可以做什么~~和不能做什么的可能性。

该文档非常具有描述性,并且对于大多数 lhs/rhs 条件似乎遵循[all in left side] == [all in right side]评估的返回 true。

也就是说,如果$head只是$head=q{200}它会匹配的数字(例如 )。


预期结果将类似于:

my $head      = q{HTTP/1.1 201 OK};
my @success   = qw(200 201);
say q{Success} if grep{$head =~ /$_/ } @success;
4

1 回答 1

1

正如 Schwern 之前指出的,智能匹配运算符目前被标记为实验性/已弃用[1],因此不建议切换到智能匹配运算符。

此外,无论如何构建一个正则表达式可能会更好。

my @success = (200, 201);
my @failure = (404, 409);

my $success_pat = join '|', map quotemeta, @success;
my $failure_pat = join '|', map quotemeta, @failure;

my $success_re = qr/$success_pat/;
my $failure_re = qr/$failure_pat/;

say q{Success} if $head =~ $success_re;
say q{Fail}    if $head =~ $failure_re;

  1. 每个特定THING ~~ THING对象应该做什么总是不和谐的,所以 Perl 正在转向更清晰的东西,可能类似于Smart::MatchTHING ~~ FUNC(THING)方法。
于 2013-05-30T19:29:04.787 回答