从Perl的Simple HTTP Server中的qx //退出代码总是-1?

时间:2013-07-27 21:20:00

标签: perl

我正在尝试使用Perl的HTTP::Server::Simple::CGI模块在​​远程计算机上运行命令并使用qx//返回其输出,但$?似乎只返回-1 - 命令是否成功(我非常想知道它是否成功)。

特别是,我已将$who文档页面http://metacpan.org/pod/HTTP::Server::Simple#EXAMPLE中示例中的行设置HTTP::Server::Simple::CGI更改为此命令:

my $who = qx/cat some_file/."\nReturns $?";

$?显示为-1文件是否存在。它显然基本上正常工作,因为文件的内容如果存在则显示。与此对比

perl -le 'print qx/cat some_file/."\nReturns $?"'

表示失败时返回256或成功时返回0。顺便说一下,在错误的情况下,它报告了stderr的失败 - 而不是简单案例所做的事情。

我应该使用$?做一些特别的事情吗?

我使用的是Perl 5.14.2,Ubuntu 12.04。

1 个答案:

答案 0 :(得分:4)

我通过HTTP::Server::Simple::CGI进行了跟踪,似乎将$SIG{'CHLD'}='IGNORE'设置为防范僵尸进程的预防措施。

在调用local $SIG{'CHLD'}='DEFAULT'之前立即设置qx//允许我访问返回码。