2

ここでの作業で奇妙な問題に直面していSmart Matching Operatorます..

を使用している間のオペランドの順序はSmart Matching Operator(~~)問題ではないことを読みましたが、同じ結果が得られます..しかし、以下に示す例では、これは機能しません..

要素が特定の配列の要素の1つであるかどうかを確認したい..
以下は、私が試した2つの方法です:-

最初の方法: - ($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;

2 番目の方法: - (@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;

ただし、最初の方法は正常に機能しており、ステートメントを印刷していますが、2番目の方法では印刷していません..

すなわち: -@nums ~~ $resultと同じ結果を与えていません$result ~~ @nums

なぜこれが起こっているのか理解できませ

ん。誰か助けてください。SOでこの問題を見つけることができません。

4

1 に答える 1

6

perlopによると、(他の多くのものの中でも)次のように書かれています:

多くの場合、左側のオペランドは右側のオペランドの内側で検索されるため、「in」、「inside of」、または「contained 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 に答える