perl:IPC::Open3无法使用FCGI打开STDERR

perl:IPC::Open3无法使用FCGI打开STDERR,perl,stderr,fastcgi,ipcopen3,Perl,Stderr,Fastcgi,Ipcopen3,我正在用我的fcgi脚本测试Git::Repository。我既不能创建git对象,也不能使用该模块运行任何git命令。IPC::Open3::Open3失败,错误为: 在/usr/local/lib/perl/5.10.1/FCGI.pm第125行不是全局参考 我在FCGI::OPEN()中添加了一个cluck,在IPC::Open3::xopen()中添加了一个warn,下面是我得到的结果: mod_fcgid: stderr: IPC::Open3::xopen() called with

我正在用我的fcgi脚本测试Git::Repository。我既不能创建git对象,也不能使用该模块运行任何git命令。IPC::Open3::Open3失败,错误为:

在/usr/local/lib/perl/5.10.1/FCGI.pm第125行不是全局参考

我在FCGI::OPEN()中添加了一个cluck,在IPC::Open3::xopen()中添加了一个warn,下面是我得到的结果:

mod_fcgid: stderr: IPC::Open3::xopen() called with args: GLOB(0xe92360) <&=5 
mod_fcgid: stderr: IPC::Open3::xopen() called with args: GLOB(0xe92438) >&=9 
mod_fcgid: stderr: IPC::Open3::xopen() called with args: GLOB(0xe92498) >&=12 
mod_fcgid: stderr: FCGI::OPEN() called with args: FCGI::Stream=SCALAR(0x14e43f0) >&=12 
mod_fcgid: stderr:  at /usr/local/lib/perl/5.10.1/FCGI.pm line 125 
mod_fcgid: stderr: \tFCGI::Stream::OPEN('FCGI::Stream=SCALAR(0x14e43f0)', '>&=12') called at /usr/share/perl/5.10/IPC/Open3.pm line 67 
mod_fcgid: stderr: \tIPC::Open3::xopen('GLOB(0xe92498)', '>&=12') called at /usr/share/perl/5.10/IPC/Open3.pm line 162 
mod_fcgid: stderr: 
mod_fcgid: stderr: \tIPC::Open3::_open3('open3', 'MyModule', 'GLOB(0x1a56078)', 'GLOB(0x1906738)', 'GLOB(0x12f5430)' , '/usr/bin/git', '--version') called at /usr/share/perl/5.10/IPC/Open3.pm line 233 
mod_fcgid: stderr: \tIPC::Open3::open3('GLOB(0x1a56078)', 'GLOB(0x1906738)', 'GLOB(0x12f5430)', '/usr/bin/git', '--version') called at /usr/local/lib/site_perl/MyModule.pm line 113
我可以用IPC::Run::start替换open3,一切正常。但我真的很想知道STDERR到底出了什么问题。这是FCGI.pm或Open3.pm的bug还是我做错了什么

我在debian上运行Apache2.2.16,其中包含libapache2 mod fcgid 1:2.3.6、libfcgi perl 0.71-1和libcgi fast perl 5.10.1。Perl版本是5.10.1

如何复制:

use CGI::Fast;
use Symbol ();
use IPC::Open3 qw(open3);

while (my $cgi = new CGI::Fast) {
    my $pid;
    my $in  = Symbol::gensym;
    my $out = Symbol::gensym;
    my $err = Symbol::gensym;    

    $pid = open3( $in, $out, $err, '/usr/bin/git', '--version');

}

这应在最新版本(1.102)的系统命令中修复:

补丁是

您没有提到您正在使用的模块的版本。这是在我的示例代码之前提到的。该死,对不起。我不习惯阅读linux软件包名称。:)我有一个模块在FCGI下产生了相同的错误,因为它在执行fork/exec,在子进程中它重定向STD in/OUT/ERR,但是FCGI绑定了(一些)这些句柄。解开这些句柄(在重新打开之前的子进程中)对我来说很有效,但同样,切换到IPC::Open3而不是手动执行fork/exec也是如此。
use CGI::Fast;
use Symbol ();
use IPC::Open3 qw(open3);

while (my $cgi = new CGI::Fast) {
    my $pid;
    my $in  = Symbol::gensym;
    my $out = Symbol::gensym;
    my $err = Symbol::gensym;    

    $pid = open3( $in, $out, $err, '/usr/bin/git', '--version');

}