私の仕事は、外部ユーティリティ (addr2line) を使用して perl スクリプトからいくつかのデータをフィルタリングすることです。データサイズはかなり大きいです。プログラムに大量のデータを出力し、(プログラムからスクリプトに)stdin
大量のデータを読み取る必要があります。stdout
今は でこれをやっていますがIPC::Open2
、読み書きを混ぜません。これは合法ですか?Open2
パイプ内の任意のサイズのデータをバッファリングしますか?
私のコード:
my $cmd="addr2line -e $prog_name ";
use IPC::Open2;
local (*Reader, *Writer);
my $pid = open2(\*Reader, \*Writer, $cmd);
for(@requests) { # this array is HUGE, 100s of thousands of entries
print Writer "$_\n";
}
close Writer;
for(@requests) {
$function_name = <Reader>;
$filesource = <Reader>;
#... store ..
}
close Reader;
waitpid($pid,0);