我的任务是使用外部实用程序(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);