モジュールの 1 つで、特定のバイナリ ( 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 $?'
Perl 5.10.1を使用した Debian Squeeze または Ubuntu Natty では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を調べたいように見えますが、実際には:
- この動作の違いを理解する
- 可能であれば、これ以上依存関係を避ける
編集:これがchroot環境で実行されていることを忘れていました.SqueezeシステムとPreciseシステムの両方で、それが関連している場合(/dev
ファイルシステムの違いなど)。