对于给定的输入文件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运算符(~~
)是否有缺点
1条答案
按热度按时间fcwjkofz1#
首先,不应该使用smartmatch运算符。
这是一个实验性的功能。(使用它会导致一个警告与5.18+,即使你没有启用警告,虽然警告可以静音。)它可以在任何时候改变或删除。
此外,它被认为是一个失败的实验。它的设计被认为是错误的。
你有两个问题。
第一个是优先问题。
sort @F ~~ @F
意味着sort( @F ~~ @F )
。Parens会解决这个问题。但这也不起作用。你没有数组或数组引用在左边,所以你没有得到你想要的
ARRAY ~~ ARRAY
行为。要得到那个行为,你可以使用