考虑一个字符串,如响应头:HTTP/1.1 404 Not Found
。
我很好奇你是否可以使用smartmatch (~~
or double tilde) operator和正则表达式的组合来搜索匹配的不完整或子集。
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条件似乎遵循返回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;
答案 0 :(得分: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;
THING ~~ THING
应该做的事情总是不和谐,所以Perl正在转向更清晰的事情,可能类似于Smart::Match的THING ~~ FUNC(THING)
方法。