Perl はスクリプトから一部をパイプし、一部を画面に出力します

Perl はスクリプトから一部をパイプし、一部を画面に出力します

Perl スクリプトから、一部の出力を画面にパイプし、その他の選択した出力をパイプするにはどうすればよいですか?

答え1

異なるファイル ハンドルを使用します。

STDOUTデフォルトでは、 と の両方がありますSTDERR。Perlprintの 関数は、実際には の省略形ですprint STDOUT

端末では、 にSTDOUTファイル ハンドルが与えられ1STDERRにファイル ハンドルが与えられます2

各ファイル ハンドルに印刷し、それぞれを /dev/null にリダイレクトする例を次に示します。

$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
  • 最初のコマンドは両方を出力します。
  • 2番目のコマンドは破棄しSTDOUTて印刷しますSTDERR
  • 3番目のコマンドは破棄しSTDERRて印刷しますSTDOUT

独自のファイル ハンドル (ログ ファイルなど) を宣言し、代わりにそこに出力することもできます。を参照してくださいperldoc -f open

答え2

おそらく、perlipc のドキュメント、特に名前付きパイプのセクションを読むことになるでしょう。

http://perldoc.perl.org/perlipc.html#名前付きパイプ

perlipc - Perl プロセス間通信 (シグナル、FIFO、パイプ、安全なサブプロセス、ソケット、セマフォ)

外部プログラムとの双方向 (読み取りと書き込み) 通信が必要な場合は、IPC::Open2 または IPC::Open3 モジュール (標準の perl ライブラリ、上記の URL にも記載されています) が役立ちます。

関連情報