「Programming Perl」の本にはスニペットがあります (切り取られています):
デフォルトでは、 when(EXPR) は、
$_;
つまりの暗黙のスマートマッチとして扱われ$_ ~~ EXPR
ます。ただし、when への EXPR 引数が以下にリストされている 10 の例外的な形式の 1 つである場合、ブール値の結果に対して直接評価され、スマートマッチングは発生しません。
...
/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
ここで何が起こっているのか理解できません。誰か助けてくれませんか?
事前に感謝します。