Perlスクリプトを使用したプロセスの置き換え

Perlスクリプトを使用したプロセスの置き換え

私にはパールがあります。スクリプトこれには次のパラメータが必要です。

count.pl OUTPUT_FILE INPUT_FILE

私が望むのは、INPUT_FILEを明示的に指定するのではなく、プロセス置換を使用することです。たとえば、次のようになります。

count.pl count.txt <(cat test.txt)

しかし、スクリプトはプロセスの置き換えから何の入力も受け取らないようです。

私は何が間違っていましたか?

答え1

スクリプト使用-T the-source-fileファイルに含まれていることを確認するテキスト

この-T演算子はファイルの先頭を読み、経験的な方法を使用してテキストのように見えることを確認します。ただし、ファイルが<(...)この例のようなパイプである場合、読み取った内容を再度読み取ることはできません。

次の方法でこれを再現できます。

$ perl -e '$file = shift; -T $file; open F, "<", $file; print while <F>' <(seq 1867)

1861
1862
1863
1864
1865
1866
1867

-T8KiBのデータが出力から消費され、ループからseq読み取れなくなったことを確認してください。while <F>

=(...)ここでは、パイプの代わりに一時ファイルを使用するzshとそのプロセス代替フォームを使用できます。またはシェル(... | psub -f)に。fishまたは、-Tスクリプトから呼び出しを削除します。または<<>>/で動作し<>(ファイル引数が渡されていない場合はstdinでも機能します)、stdoutから出力されるようにスクリプトを再構築します。ストリーミング方式ですべてのファイルを処理するため、ファイル名をパラメータとして使用する点を本当に理解していません。

関連情報