3

从perlsyn的智能匹配详细部分:

智能匹配运算符尽可能短路。

与短路运算符(,等)~~有什么共同点吗?&&||

4

2 回答 2

4

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

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

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

perl -E "@x=qw/a b c/; for (qw/b d/) { say qq($_ - ), scalar grep $_, @x ? q(ja) : q(nein) }"
于 2011-05-06T10:02:45.557 回答
4

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

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

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

于 2011-05-06T10:08:07.197 回答