错误日志:
[Tue Jun 17 12:08:35 2014] [error] [client 172.18.40.199] Perl v5.16.0 required--this is only v5.10.1, stopped at index.cgi line 2.
[Tue Jun 17 12:08:35 2014] [error] [client 172.18.40.199] BEGIN failed--compilation aborted at index.cgi line 2.
[Tue Jun 17 12:08:35 2014] [error] [client 172.18.40.199] Premature end of script headers: index.cgi
这是以用户身份运行的:'支持'并支持运行perlbrew w / switch设置为5.16.3,如下所示:
# su - support
print() on closed filehandle $fh at /loader/0x1cb94a8/App/perlbrew.pm line 19.
-bash-4.1$ perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux
我需要做些什么才能确保Apache执行index.cgi w / perlbrew安装的perl?
答案 0 :(得分:2)
操作系统执行由被要求执行的脚本(#!
)的shebang(index.cgi
)行标识的解释器。这只是一个问题,即使用perlbrew
指定您安装的解释器的路径。
执行which perl
(更熟悉)或perl -E'say $^X'
(更可靠?)来确定所需的值。
让我们举个例子。
在我的机器上,我使用5.18.2的线程版本时得到以下内容。 (你会得到不同的东西。)
$ which perl
/home/ikegami/usr/perlbrew/perls/5.18.2t/bin/perl
$ perl -E'say $^X'
/home/ikegami/usr/perlbrew/perls/5.18.2t/bin/perl
所以我将以下内容用作index.cgi
的第一行:
#!/home/ikegami/usr/perlbrew/perls/5.18.2t/bin/perl
答案 1 :(得分:2)
使用合适的perl / bash shebang ..
以下将完美地运作
#!/bin/bash
export PERLBREW_ROOT=/opt/perlbrew
export PERLBREW_HOME=/tmp/.perlbrew
export SHELL=/bin/bash #not really needed
unset XTERM_SHELL #not really needed
source ${PERLBREW_ROOT}/etc/bashrc
perlbrew use perl-5.21.9 > /dev/null 2>&1 # you can add your version here...
eval 'exec perl -x -wS $0 ${1+"$@"}' if 0;
#! -*-perl-*-
# line 10 The above line/string resets the perldebug line-numbering...
print "The perl interpretter running this code is $^X\n" ;
print "This is perl version $^V\n" ;
print "Hello PerlBrew \n" ;
die "This should be line number 14\n" ;
print "x\n" ;
这将导致......
The perl interpretter running this code is /opt/perlbrew/perls/perl-5.21.9/bin/perl5.21.9
This is perl version v5.21.9
Hello PerlBrew
This should be line number 14
希望这会有所帮助......
答案 2 :(得分:0)
index.cgi中有一个shebang吗?它指向哪个perl?
我相信shebang应该指向你的自定义perl而不是你所展示的系统perl。