0

在探索 sarathi 的当前文件行号问题的替代答案时,我写了这个单行代码,期望它会打印提供的所有文件的第一行:

$ perl -ne 'print "$ARGV : $_" if __LINE__ == 1;' *txt

这没有按预期工作;所有的行都被打印出来了。

运行单行-MO=Deparse显示条件不存在。我认为这是因为它在编译时已被常量折叠:

$  perl -MO=Deparse -ne 'print "$ARGV : $_" if __LINE__ == 1;' *txt
LINE: while (defined($_ = <ARGV>)) {
    print "$ARGV : $_";
}
-e syntax OK

但为什么?

在 Perl 5.8.8 下运行。

4

2 回答 2

5

__LINE__对应于 Perl 源代码中的行号,而不是输入文件中的行号。

于 2012-09-12T10:33:39.327 回答
4

__LINE__是源代码行号,即程序行号。 $.会给你输入文件的行号。

如果你想打印所有文件的所有第一行,那么你可以试试这个:

perl -lne '$.=0 if eof;print $_ if ($.==1)' *.txt
于 2012-09-12T10:40:46.513 回答