我在Ubuntu 16.04.1 LTS上使用默认安装的Apache和mod_perl,我也用默认的JSON::XS复制了这个,我从CPAN JSON-XS-3.02更新到最新的。
如果我不使用mod_perl,下面的代码在所有情况下都可以工作。
下面的脚本和html工作时,通过mod_cgi perl与POST和GET请求。
然而,如果我使用mod_perl和我使用POST(如所提供的html),它失败了,"Hello"不打印,我在apache日志文件中得到以下错误。
用法:JSON:: XS::新(klass)。
如果我通过GET方法传递相同的参数,脚本可以正常工作。
test2.pl
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use JSON::XS;
my $q = new CGI();
print $q->header(-type => 'text/plain');
my $action = $q->param('a');
my $json_str = '{"foo":"bar"}';
my $pscalar = JSON::XS->new->utf8->decode($json_str);
print "Hello";
exit 1;
HTML调用上面的(在服务器上命名为test2.pl)
<html>
<body>
<form action="test2.pl" method="POST">
<input type="text" name="a"/>
<button type="submit">
</form>
</body>
</html>
好的,所以这是一个相当徒劳的追逐,分析apache核心转储和堆栈跟踪,修复错误,并不真的存在…长话短说。
我试图添加一个包含目录到我的perl使用
PerlSwitches - i/usr/地方/lib/site_perl/my_new_directory
作为其中一部分,我添加了
PerlOptions +Parent,这样我就可以为每个虚拟主机获得一个新的解释器,这样我的-I一次只对一个虚拟主机有效。
在我启用mod_perl之前我已经添加了这些标志,所以当我启用mod_perl时,它就是不工作。
通过删除PerlOptions +Parent,事情开始像预期的那样工作。
作为旁注,+Parent似乎使事情变得不稳定。