我有一个数组,以下测试返回true:
1 ~~ @a
Run Code Online (Sandbox Code Playgroud)
然而,以下测试返回false:
@a ~~ 1
Run Code Online (Sandbox Code Playgroud)
我在Learning Perl中读到,智能匹配运算符两侧的值的放置并不重要,但显然在上面的代码中它确实如此.这是为什么?这两个陈述是否检查了不同的内容?
Qui*_*ith 13
除了其他答案之外,Perl 5.10.1更改列表还有一个关于对~~运算符所做更改的部分:
智能匹配运算符
~~不再是可交换的.智能匹配的行为现在主要取决于其右手参数的类型.
因此,在进行这些更改之前,学习Perl可能是正确的.
yst*_*sth 11
5.10.0中的~~版本基于当时的perl6设计,该设计是可交换的.由于5.10.0需要很长时间才能发布,到它出现时,perl6 smartmatch已经大大改进(包括不再是可交换的),但perl5开发中没有人及时注意到修复perl5的实现.它在5.10.1中得到修复,没有人应该依赖旧的5.10.0规则.这对我来说是个不一致的行为记录在一本印刷书籍中.