2012-09-12 61 views
-1

在探索另一種答案sarathi的current file line number question,我寫了這一個班輪與期望,這將打印的所有文件的第一行提供:爲什麼__LINE__在這個Perl單線程中不斷摺疊?

$ 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

檢查我的編輯打印所有文件的第一行。 – Vijay

回答

5

__LINE__對應於Perl源代碼中的行號,而不是輸入文件中的行號。

+1

我很享受我的'啊哈!'這裏的時刻。應該仔細閱讀['perldata'](http://perldoc.perl.org/perldata.html#Special-Literals)... – Zaid

4

__LINE__是源行號,即程序行號。 $.會給你輸入文件的行號。

,如果你想打印的所有文件的所有第一線,那麼你可以試試這個:

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

是!什麼混淆了我是使用當前文件名和您的問題的上下文 – Zaid