我在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上找到这个问题。
答案 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