对于给定的输入文件单词.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
另外,智能匹配运营商(~~
)是否有缺点
首先,您不应该使用智能匹配运算符。
这是一个实验性功能。(即使未启用警告,使用它也会导致 5.18+ 的警告,尽管警告可以静音。它可以随时更改或删除。
此外,它被认为是一个失败的实验。它的设计被认为是有缺陷的。
你有两个问题。
第一个是优先级问题。sort @F ~~ @F
意味着sort( @F ~~ @F )
。帕伦斯会解决这个问题。
( sort @F ) ~~ @F
但这也行不通。左侧没有数组或数组引用,因此无法获得所需的ARRAY ~~ ARRAY
行为。要获得这种行为,您可以使用
[ sort @F ] ~~ @F