在探索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下运行。
答案 0 :(得分:5)
__LINE__
对应于Perl源中的行号,而不是输入文件中的行号。
答案 1 :(得分:4)
__LINE__
是源行号,即程序行号。
$.
会为您提供输入文件行号。
如果你想打印所有文件的所有第一行,那么你可以试试这个:
perl -lne '$.=0 if eof;print $_ if ($.==1)' *.txt