与perl 5.10.1一样,IPC :: Open3 :: open3()不能与perl 5.14.2一起使用吗?

Cos*_*imo 4 perl ipc ipcopen3

在我们的一个模块中,我们检查给定的二进制(varnishd)是否存在,如果存在,我们运行其他测试.

为了执行检查,我们正在使用IPC::Open3,如下所示(示例为了清晰起见而被剥离):

perl -MIPC::Open3 -le '
    my $binary = "varnishd";
    my $pid = IPC::Open3::open3(my($in, $out), undef, $binary, "-V");
    waitpid $pid, 0; print $?'
Run Code Online (Sandbox Code Playgroud)

在Debian Squeeze或Ubuntu Natty下,使用perl 5.10.1,如果varnishd在系统上找不到,则会打印出来65280.如果更改$binaryperl,则(正确)打印0.

但是,使用Ubuntu Precise和perl 5.14.2,这不再以相同的方式工作,并产生以下结果:

$ perl -MIPC::Open3 -le '
    my $binary = "varnishd";
    my $pid = IPC::Open3::open3(my($in, $out), undef, $binary, "-V");
    waitpid $pid, 0; print $?'
open3: exec of varnishd -V failed at -e line1
Run Code Online (Sandbox Code Playgroud)

$binary例如perl,当我更改为存在的东西时,它会正常工作并打印0.

$ perl -MIPC::Open3 -le '
    my $binary = "perl";
    my $pid = IPC::Open3::open3(my($in, $out), undef, $binary, "-V");
    waitpid $pid, 0; print $?'
0
Run Code Online (Sandbox Code Playgroud)

阅读其他问题和答案,看起来我想看看IPC :: Run,但我想实际上:

  • 了解这种行为差异
  • 如果可能,请避免任何依赖

编辑:忘了提到这些东西是在chroot环境下运行的,Squeeze和Precise系统,如果这完全相关(/dev例如文件系统的差异?).

ike*_*ami 10

您注意到错误 修复.

在你所谓的5.10.1版本中,open3报告程序运行并退出代码255.这些都不是真的.

在你所谓的5.14.2版本中,open3抛出一个异常,因为它总是被记录下来,并且它总是为其他一些问题做了.如果需要,您可能会发现无法启动孩子eval BLOCK.