我在Ubuntu 16.04.1 LTS上使用Apache和mod_perl的默认安装,我也使用默认的JSON :: XS重现了这一点,并且我从CPAN JSON-XS-3.02更新到最新版本。
如果我不使用mod_perl,下面的代码适用于所有情况。
通过mod_cgi将perl与POST和GET请求一起使用时,下面的脚本和html工作。
但是,如果我使用的是mod_perl并且我使用了POST(如提供的html中那样),则会失败," Hello"不打印,我的apache日志文件中出现以下错误。
用法:JSON :: XS :: new(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>
答案 0 :(得分:0)
好的所以这是一次相当疯狂的追逐,分析apache核心转储和堆栈跟踪,修复那些并非真正存在的错误......长话短说。
我试图使用
将include目录添加到我的perlPerlSwitches -I / usr / local / lib / site_perl / my_new_directory
作为其中的一部分,我添加了
PerlOptions + Parent 以便我为每个虚拟主机获取一个新的解释器,这样我的-I一次只对一个虚拟主机有效。
我在启用mod_perl之前添加了这些标志,所以当我启用mod_perl时,它从未起作用。
删除 PerlOptions + Parent 的内容已按预期启动。
作为旁注,看起来+父母在一般情况下让事情变得难以理解。