0
:2つの外部プロセス間の配管はメモリを節約しますか?私は、外部コマンドを実行するためにこれをやって、先頭に追加いくつかのデータと別の外部コマンドにすべてを送った
(外部プロセスから返された)$contents
が小さい場合(それは多くの場合、あまりだの罰金です
my $prepend = 'foo foo foo';
my $contents = `command`;
open(my $handle, "|-", "command_2"))
print $handle $prepend . $contents;
close $handle;
1kよりも大きい)が、大きければ(10,20,30MBまで)、これは不必要にメモリを消費すると思われます。
だから私はそれを変更:
my $prepend = 'foo foo foo';
open(my $handle_in, "-|", "command"))
open(my $handle_out, "|-", "command_2"))
print $handle_out $prepend;
while (<$handle_in>) {
print $handle_out $_;
}
close $handle_in;
close $handle_out;
これは実際にはメモリを節約していますか? command
が多くのMBのデータを返すと、パフォーマンスに問題がありますか?これを行うより良い方法はありますか?
'File :: Copy'を使用して、入力を出力ファイルハンドルにコピーすることができます。 http://perldoc.perl.org/File/Copy.html – shawnhcorey
@shawnhcoreyありがとう。それはバッファーサイズのコントロールを持っているようにも見えます。私がやりとったことの間に本当の違いがあるかどうか知っていますか?それはおそらく同じですか、それとも最適化されていますか? – messy
'File :: Copy'は標準モジュールであり、Perlとともにインストールされます。標準モジュールを最適化することができれば、それらは通常あります。 – shawnhcorey