Perl 捕获子进程的 STDERR 和 STDOUT

Perl catching STDERR and STDOUT of subprocess

我有 Perl 脚本正在执行另一个脚本。我如何确保在执行 CONNECTION.pl 时,我将捕获 STDERR 和 STDOUT,以便我可以将其放入父脚本的日志中?波纹管是来自父脚本的代码:

my $systemcmd ='perl bin/CONNECTION.pl "'.$expanded_sql.'" "'.$tmp_file.'" "'.$fetch.'"';

eval {
  my $rc = system($systemcmd );
};

if ($@) {
  $errmsg = $@;
  croak {message=>$errmsg};
  unlink $tmp_file;
} 

尝试使用 Capture::Tiny to wrap the call to system

此外,将 Perl 脚本 CONNECTION.pl 更改为一个模块并从您的脚本中 use 它可能比再次调用 perl 更干净。