是~~短路运营商?

时间:2011-05-06 09:30:13

标签: perl operators smartmatch

来自perlsyn的Smart matching in detail部分:

  

智能匹配运营商   尽可能短路。

~~short circuit operators&&||等有什么共同之处吗?

2 个答案:

答案 0 :(得分:4)

这里短路的意思是,一旦布尔结果建立,评估就会停止。

perl -E "@x=qw/a b c d/; for (qw/b w/) { say qq($_ - ), $_ ~~ @x ? q(ja) : q(nein) }"

对于输入b,Perl不会查看b@x后面的元素。另一方面,引用的文档所引用的grep内置函数将处理整个列表,即使所需的所有内容都可能是布尔值。

perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ - ), scalar grep $_, @x ? q(ja) : q(nein) }"

答案 1 :(得分:4)

是的,从某种意义上说,当其中一个参数是数组或哈希时,~~只会检查元素,直到它能确定结果为止。

例如,在sub x { ... }; my %h; ...; %h ~~ \&x中,仅当x%h的所有键返回true时,智能匹配才返回true;如果一个调用返回false,则匹配可以立即返回false而不检查其余的键。这类似于&&运算符。

另一方面,在/foo/ ~~ %h中,如果只找到一个与正则表达式匹配的键,则智能匹配可以返回true;这类似于||