一時的にstdoutをメモリ変数にリダイレクトしたいとします。プリントは私の変数に正しくリダイレクトされますが、パイプの出力ではありません(私の例ではbc)。何が起こっている?STDOUTがパイプ出力をキャッチしない変数にリダイレクトされました
#!/usr/bin/perl
my $stdout_sink;
open(my $orig_stdout, ">&STDOUT") || die $!;
close STDOUT;
open(STDOUT, ">", \$stdout_sink) || die $!;
# produce some output in different ways
print "before bc\n"; # ok
open my $fh, "| bc";
print $fh "2+2\n"; # not ok
close $fh;
close STDOUT;
open(STDOUT, ">&", $orig_stdout) || die $!;
print "$stdout_sink";
実際の出力に含まは次のようになります。
before bc
予想される出力:
before bc
4
'bc'はforkされ、独立したSTDOUTを持つ別のプロセスとして実行されます。 ['IPC :: Run3'](https:// metacpan)のようなものを使って実行する必要があります。org/pod/IPC :: Run3)を使用して結果を取得します。 – Borodin
これが亀裂を通って落ちた場合のリマインダは、[誰かが私の質問に答えるとどうすればいいですか?](http://stackoverflow.com/help/someone-answers) – zdim