如何使用perlbrew w / Apache提供CGI脚本?

时间:2014-06-17 16:24:54

标签: apache perl cgi perlbrew

错误日志:

[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?

3 个答案:

答案 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。

相关问题