3

有没有一种简单的方法来模拟脚本中-l命令行开关的效果?perl(当然,我总是可以在chomp每一行都添加“\n”到我打印的每一行,但关键是要避免这样做。)

4

3 回答 3

5

"\n"不,您可以通过 using获得自动附加$\,但您必须自己添加 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 $_;
}

(评论是我的。)请注意,在生成的循环开头-l添加了一个文字(并且只有在使用or时才会这样做)。您无法设置任何变量来模仿该行为。chomp $_-n-n-p

一个鲜为人知的事实是-l,-n-p在编译之前将样板文本包裹在您提供的代码周围。

于 2013-04-17T22:18:25.197 回答
3

是的,请尝试在shebangstrictures之后的脚本开头使用它:

$/ = $\ = "\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

于 2013-04-17T21:16:24.043 回答
1

您可以将其添加到您的 shebang 行:

#!/usr/bin/perl -l
于 2013-04-17T21:16:09.720 回答