2

我在Smart Matching Operator..的工作中遇到了一个奇怪的问题

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

我想检查一个元素是否在给定数组的元素之一中。
以下是我尝试的两种方法:-

第一种方式: - ($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 上找到这个问题。

4

1 回答 1

6

根据perlop,它说(在许多其他东西中):

通常最好将其朗读为“in”、“inside of”或“is contains in”,因为左操作数通常在右操作数内部查找。

您可能想查看那里的表格,尤其是以下部分:

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
于 2012-09-29T09:07:48.247 回答