核心Perl中是否有任何内容可以自动从“<>”中选择行运营商?

时间:2012-04-14 15:28:25

标签: perl input

我在进行Perl编码时遇到的一个小烦恼是必须记住选择从输入中读取的行。是的,经过多年的编码,它几乎是自动记住这样做的,但仍然很烦人。

Perl中是否存在任何编译指示,模块或其他任何内容(强烈偏好的核心模块),它会自动使用<>运算符来阻塞读取的每一行?

2 个答案:

答案 0 :(得分:5)

除了你已经提到的那些非常糟糕的源过滤器之外,我恐怕我不知道在这里你的目的是什么“黑客”。您是否认为这些明显的解决方案都是“黑客”?

  1. 覆盖当前包中的*CORE::readline
  2. 覆盖所有套餐中的*CORE::GLOBAL::readline
  3. 使用自定义READLINE方法
  4. 处理与班级的关系
  5. 运算符重载<>运算符
  6. 你试过那些吗?

    其中,我认为第一个,或者可能是第二个,最有可能以最少量的大惊小怪做你想做的事。

    请注意,所有这四个解决方案除了纯粹的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