_LINE__在这个Perl单线程中是否经常折叠?

时间:2012-09-12 10:26:08

标签: perl constantfolding

在探索sarathi current file line number question的另一个答案时,我写了这个单行,期望它会打印所有文件的第一行:

$ 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下运行。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

__LINE__是源行号,即程序行号。 $.会为您提供输入文件行号。

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

perl -lne '$.=0 if eof;print $_ if ($.==1)' *.txt