Perlスクリプトを使用して特定の出力を画面や他の選択した出力にパイプするにはどうすればよいですか?
答え1
別のファイルハンドルを使用してください。
STDOUT
デフォルトでは、とがありますSTDERR
。 Perlの関数はprint
実際に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#Named-Pipes
perlipc - Perlプロセス間通信(信号、fifo、パイプ、安全なサブプロセス、ソケット、セマフォ)
外部プログラムとの双方向(読み取りおよび書き込み)通信が必要な場合は、IPC :: Open2またはIPC :: Open3モジュール(標準のPerlライブラリ、上記のURLにも説明されています)が便利です。