根据perlop:Smartmatch-Operator,以下代码:
use 5.012;
my @array = qw/1 2/;
print @array ~~ 2
? "true"
: "false";
应该使用规则
左右描述和伪代码
================================================== =============任何Num数字相等(如:Any == Num)
但输出是“假”。但我认为
@array == 2
应该是真的。我哪里出错?
答案 0 :(得分:5)
我不确定这个问题,但也许这会有所帮助:代码编译为与数组 ref 的智能匹配:
$ perl -MO=Deparse -e '@a = (1, 2); print @a ~~ 2'
@a = (1, 2);
print \@a ~~ 2;
-e syntax OK
所以你实际上是在检查引用相等性,在大多数情况下这应该是假的。 ;)但是,检查数组的长度对于智能匹配运算符来说可能太容易了,因为可以使用==
完成:
$ perl -le '@a = (42, 17); print @a == 2'
1
我更喜欢这种方法,因为Perl程序员对你正在测试的内容更为明显。
请注意,智能匹配不对称。撤消订单会对该阵列执行grep搜索:
$ perl -nle '@a = (42, 17); print $_ ~~ @a ? "ok" : "no"'
1
no
2
no
17
ok