与perl smartmatch运算符相关的问题

x33g5p2x  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(129)

对于给定的输入文件words.txt,按升序过滤所有包含字符的行
f

bot
art
are
boat
toe
flee
reed

1)的

# perl -F -lane 'print if $_ eq join "", sort @F' f
bot
art

2)的

# perl -F -lane '@b = sort @F;if(@F~~@b){print $_}' f 
bot
art

前两种方法都是正确的,为什么第三种方法没有结果呢?
3)的

# perl -F -lane 'print if sort @F~~@F' f

另外,smartmatch运算符(~~)是否有缺点

fcwjkofz

fcwjkofz1#

首先,不应该使用smartmatch运算符。
这是一个实验性的功能。(使用它会导致一个警告与5.18+,即使你没有启用警告,虽然警告可以静音。)它可以在任何时候改变或删除。
此外,它被认为是一个失败的实验。它的设计被认为是错误的。
你有两个问题。
第一个是优先问题。sort @F ~~ @F意味着sort( @F ~~ @F )。Parens会解决这个问题。

( sort @F ) ~~ @F

但这也不起作用。你没有数组或数组引用在左边,所以你没有得到你想要的ARRAY ~~ ARRAY行为。要得到那个行为,你可以使用

[ sort @F ] ~~ @F

相关问题