从`>`切换到`<`破坏了我的一线

时间:2019-01-23 13:31:19

标签: perl

我要过滤包含超过3个项目的行

perl -ne  'print if split > 2' file.txt

但是当我想过滤少于3个项目的行时,我将无法使用

perl -ne  'print if split < 2' file.txt
#Unterminated <> operator at -e line 1.

我可以解决其中任何一个问题

perl -ne 'print if not split > 2' file.txt
perl -ne 'print if 2 > split' file.txt

但是我想知道为什么表达式只对<>之一失败。

1 个答案:

答案 0 :(得分:9)

经过一番挖掘,然后查看您帖子上的评论,我想我已经找到了答案。解析器在看到split <时试图理解您的意思。调用拆分时没有括号,它需要猜测要传递的拆分参数数(需要0-3,有关详细信息,请参见perldoc -f split。)

因此,似乎默认情况下假定您尝试使用至少一个参数来调用它,该参数看起来像空文件句柄<>的开头。如果发现它不完整,则会打印错误并中止。

这说明了修复程序对您的帖子发表评论的原因。它们都清楚地说明了split将不带任何参数被调用,并且解析器不应查找表达式,然后可以将<字符视为运算符。