我在进行Perl编码时遇到的一个小烦恼是必须记住选择从输入中读取的行。是的,经过多年的编码,它几乎是自动记住这样做的,但仍然很烦人。
Perl中是否存在任何编译指示,模块或其他任何内容(强烈偏好的核心模块),它会自动使用<>
运算符来阻塞读取的每一行?
答案 0 :(得分:5)
除了你已经提到的那些非常糟糕的源过滤器之外,我恐怕我不知道在这里你的目的是什么“黑客”。您是否认为这些明显的解决方案都是“黑客”?
*CORE::readline
*CORE::GLOBAL::readline
READLINE
方法<>
运算符你试过那些吗?
其中,我认为第一个,或者可能是第二个,最有可能以最少量的大惊小怪做你想做的事。
请注意,所有这四个解决方案除了纯粹的Perl之外什么都不需要。它们甚至不需要任何核心模块,更不用说任何CPAN模块了。
答案 1 :(得分:0)
我想你已经知道了,但是当你将命令行选项-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