在进行 Perl 编码时,我遇到的一个小烦恼是必须记住从输入中读取的一行。是的,经过多年的编码,记住这样做几乎是自动的,但仍然很烦人。
Perl(强烈首选的核心模块)中是否有任何编译指示、模块或其他任何东西可以自动使用<>
运算符读取每一行?
除了您已经提到的水源过滤器之外,恐怕我不知道在这里您的目的是什么算作“黑客”。你认为这些显而易见的解决方案中的任何一个都是“黑客”吗?
*CORE::readline
在当前包中覆盖*CORE::GLOBAL::readline
所有包READLINE
使用自定义方法处理与类的联系<>
运算符的运算符重载你试过那些了吗?
其中,我认为第一个,或者可能是第二个,最有可能做你想做的事,并且用最少的麻烦。
请注意,所有这四种解决方案都只需要纯 Perl 即可。它们甚至不需要任何核心模块,更不用说任何 CPAN 模块了。
我想你已经知道这一点,但是当你将命令行选项-nl
组合在一起时,你会得到你想要的行为(假设你想要隐式while(<>)
循环:
$ perl -nle 'printf q{%s}, $_'
通常这两个选项用于通过 bash 命令行运行简短的 perl 命令,但我想没有什么可以阻止您在脚本中执行此操作:
#!/usr/bin/perl -nl
# puts the newline back on if you use print:
# print
# does not put the newline back on
printf '%s', $_;
此处对此行为的简要说明:http ://www.perlmonks.org/?node_id=324749