0
我這樣做是爲了運行一個外部命令,在前面加上一些數據,並把它們發送到另一個外部命令:兩個外部進程之間的管道是否可以節省內存?
my $prepend = 'foo foo foo';
my $contents = `command`;
open(my $handle, "|-", "command_2"))
print $handle $prepend . $contents;
close $handle;
這是罰款時$contents
(從外部過程返回)小(這是較少比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