
Perl スクリプトから、一部の出力を画面にパイプし、その他の選択した出力をパイプするにはどうすればよいですか?
答え1
異なるファイル ハンドルを使用します。
STDOUT
デフォルトでは、 と の両方がありますSTDERR
。Perlprint
の 関数は、実際には の省略形ですprint STDOUT
。
端末では、 にSTDOUT
ファイル ハンドルが与えられ1
、STDERR
にファイル ハンドルが与えられます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 にも記載されています) が役立ちます。