反转智能匹配操作数操作符不会产生相同的结果

时间:2012-09-29 09:01:34

标签: perl

我在Smart Matching Operator ..

的工作中遇到了一个奇怪的问题

我已经读过使用Smart Matching Operator(~~)时操作数的顺序无关紧要,并且它给出了相同的结果..但是在我下面显示的一个例子中,这不起作用.. < / p>

我想检查一个元素是否属于某个给定数组的元素之一。 以下是我尝试的两种方式: -

第一种方式: - ($ result ~~ @nums)

#!/perl/bin
use v5.14;

my @nums = qw( 1 2 3 27 42 );
my $result = 27;

say "The result [$result] is one of the input values (@nums)" if $result ~~ @nums;

第二种方式: - (@nums ~~ $ result)

#!/perl/bin
use v5.14;

my @nums = qw( 1 2 3 27 42 );
my $result = 27;

say "The result [$result] is one of the input values (@nums)" \
                                 if @nums ~~ $result;

然而,第一种方法是正常工作,它正在打印语句,但在第二种方式,它不打印..

即。 : - @nums ~~ $result $result ~~ @nums

的结果不同

我无法理解为什么会发生这种情况。

任何人都可以帮助我。我无法在SO上找到这个问题。

1 个答案:

答案 0 :(得分:6)

根据perlop,它说(在许多其他内容中):

  

通常最好大声朗读“in”,“inside of”或“包含”   在“,因为左边的操作数经常在右边查找   操作数。

您可能希望查看该表,尤其是以下部分:

Left      Right      Description and pseudocode                               
===============================================================
Any       ARRAY      smartmatch each ARRAY element[3]                   
                like: grep { Any ~~ $_ } ARRAY
Any       Num        numeric equality                                  
                 like: Any == Num

并记住,如果Any是数组且Num是标量,则以下内容相同:

Any == Num <=> scalar(Any) == Num