我正在过滤包含3个以上项目的行
perl -ne 'print if split > 2' file.txt
Run Code Online (Sandbox Code Playgroud)
但是当我想要过滤少于3个项目的行时,我无法使用
perl -ne 'print if split < 2' file.txt
#Unterminated <> operator at -e line 1.
Run Code Online (Sandbox Code Playgroud)
我可以用其中任何一个来解决它
perl -ne 'print if not split > 2' file.txt
perl -ne 'print if 2 > split' file.txt
Run Code Online (Sandbox Code Playgroud)
但是我想知道为什么表达式只会失败一个<,>.
经过一番挖掘,看看你帖子上的评论,我想我找到了答案.解析器试图理解你看到的意思split <.在调用split时没有括号,需要猜测要传递多少个参数进行拆分(需要0-3,perldoc -f split有关详细信息,请参阅参考资料).
因此,默认情况下,您似乎假设您尝试使用至少一个参数调用它,该参数看起来像空文件句柄的开头<>.当它看到它不完整时,它会输出错误并中止.
这解释了为什么修补程序对您的帖子工作发表了评论.它们都明确表示不使用参数调用split,并且解析器不应该查找表达式,<然后可以将该字符视为运算符.