如何为 apache2 mod_cgi 指定 Perl 版本?

How to specify Perl version for apache2 mod_cgi?

我在 Fedora 21 系统上安装了其他版本的 Perl。 在 PATH 上,我的自定义 Perl (5.10.0) 优先于发行版的默认 Perl (5.18.4)

user$ perl -v
> This is perl, v5.10.0 built for x86_64-linux

root# perl -v
> This is perl, v5.10.0 built for x86_64-linux

但是,在 Apache 提供的脚本中打印 Perl 版本时,它似乎使用的是 "wrong" 版本:

5.018004

如何让 Apache 使用特定版本的 Perl?

使用纯 CGI 时,OS(通过 #! 行)负责选择解释器。正如我们已经确定的那样,shebang 指向了错误版本的解释器。

最简单的方法是编辑它。如果您需要同一个脚本根据调用上下文使用两个不同的 perl 版本,您可以在 shebang 中使用类似 #!/usr/bin/env perl 的东西来让它尊重环境,然后更改 apache 的 PATH 变量.

如果您无法编辑 shebang,如果您不介意将此特定版本用于整个网络服务器,则可以选择通过 mod_perl(确保针对所需版本进行编译)。

另一种方法是 运行 某种容器(chroot、lxc、docker 或仅使用挂载命名空间)中的网络服务器,以便您的 /usr/bin/perl 指向一些其他版本的解释器。