在“Programming Perl”一书中有一个片段(删减):
默认情况下,when(EXPR) 被视为隐式智能匹配,
$_;
即$_ ~~ EXPR
. 但是,如果 when 的 EXPR 参数是下面列出的 10 种异常形式之一,则直接评估它以获得布尔结果,并且不会发生智能匹配:
...
/REGEX/、$foo =~ /REGEX/ 或 $foo =~ EXPR 形式的正则表达式匹配。
这是什么意思evaluated directly for a Boolean result
?
例子:
#!/usr/bin/perl
use v5.14;
my @a = ('aaa', 'bbb', 'ccc');
given(@a) {
when (/a/) { say '@a contains an a'; }
default { say '@a does not contain an a' }
}
当我运行它时,输出会不时变化:
@a does not contain an a
@a contains an a
@a does not contain an a
@a does not contain an a
我不明白这里发生了什么,有人能这么乐于助人吗?
提前欣赏。