> my @numbers = 1, 3, 5;
> 1 ~~ /@numbers/; #
?1?
Run Code Online (Sandbox Code Playgroud)
是相同的:
> 1 ~~ /1 | 3 | 5/
?1?
Run Code Online (Sandbox Code Playgroud)
但是当元素是Range对象时,它无法匹配:
> my @ranges = 1..3.item, 4..6.item;
[1..3 4..6]
> 1 ~~ /@ranges/
Nil
> 1 ~~ /|@ranges/
Nil
> 1 ~~ /||@ranges/
Run Code Online (Sandbox Code Playgroud)
\n\n\n为什么单个数字无法匹配数组中的 Range 对象?
\n
根据文档:
\n\n\n\n\n[数组]各个元素的插值规则与标量相同
\n
根据同一文档部分,标量(不是正则表达式)的规则是:
\n\n\n\n\n插入字符串化值
\n
范围对象,例如1..3字符串化为1 2 3:
my $range = 1..3;\nput $range; # 1 2 3\nput so \'1\' ~~ / $range /; # False\nput so \'1 2 3\' ~~ / $range /; # True\nRun Code Online (Sandbox Code Playgroud)\n\n因此,正如霍利建议的那样,也许可以:
\n\nmy @ranges = flat 1..3, 4..6;\nsay @ranges; # [1 2 3 4 5 6]\nsay 1 ~~ /@ranges/; # \xef\xbd\xa21\xef\xbd\xa3\nRun Code Online (Sandbox Code Playgroud)\n\n或者有什么原因你不想要这样吗?(另请参阅西蒙对霍利的回答的评论。)
\n