在我们的一个模块中,我们检查给定的二进制文件(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 $?'
在Debian Squeeze或Ubuntu Natty下, perl 5.10.1 ,如果在系统上找不到varnishd
,则会为我打印65280
。
如果您将$binary
更改为perl
,则(正确)打印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
当我将$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
阅读其他问题和答案,看起来我想查看IPC::Run,但我想实际上:
/dev
文件系统差异,例如?)。