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 に答える