如何模仿-l内部脚本

时间:2013-04-17 21:13:40

标签: perl

是否有一种简单的方法可以模仿-l脚本中perl命令行开关的效果? (当然,我总是可以chomp每行,然后在我打印的每一行上附加“\ n”,但重点是避免必须这样做。)

3 个答案:

答案 0 :(得分:5)

没有。您可以使用"\n"自动附加$\,但您必须自己添加chomp。

以下是-l的工作原理。

$ perl -MO=Deparse -ne 'print $_'
LINE: while (defined($_ = <ARGV>)) {
    print $_;
}

$ perl -MO=Deparse -lne 'print $_'
BEGIN { $/ = "\n"; $\ = "\n"; }      # -l added this line
LINE: while (defined($_ = <ARGV>)) {
    chomp $_;                        # -l added this line
    print $_;
}

(评论是我的。)请注意-lchomp $_生成的循环开始时添加了文字-n(如果您使用{{1},它只会这样做}或-n)。没有变量可以设置为模仿该行为。

一个鲜为人知的事实是-p-l-n通过在编译之前将代码文本包装在您提供的代码周围来工作。

答案 1 :(得分:3)

是的,请在 shebang strictures 之后在脚本开头使用此功能:

$/ = $\ = "\n"; # setting the output/input record separator like OFS in awk

并在循环中使用:

chomp;
print;

或者像这样:

use strict; use warnings;
use English qw/-no_match_vars/;

$OUTPUT_RECORD_SEPARATOR = "\n";

while (<>) {
    chomp;
    print;
}

我不建议使用

#!/usr/bin/perl -l

为了更清晰=)

请参阅perldoc perlvar

答案 2 :(得分:1)

您可以将它添加到shebang系列中:

#!/usr/bin/perl -l