13

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

Perl(强烈首选的核心模块)中是否有任何编译指示、模块或其他任何东西可以自动使用<>运算符读取每一行?

4

2 回答 2

5

除了您已经提到的水源过滤器之外,恐怕我不知道在这里您的目的是什么算作“黑客”。你认为这些显而易见的解决方案中的任何一个都是“黑客”吗?

  1. *CORE::readline在当前包中覆盖
  2. 覆盖 *CORE::GLOBAL::readline所有包
  3. READLINE使用自定义方法处理与类的联系
  4. <>运算符的运算符重载

你试过那些了吗?

其中,我认为第一个,或者可能是第二个,最有可能做你想做的事,并且用最少的麻烦。

请注意,所有这四种解决方案都只需要纯 Perl 即可。它们甚至不需要任何核心模块,更不用说任何 CPAN 模块了。

于 2012-04-14T16:45:18.570 回答
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

于 2012-04-14T17:28:29.050 回答