如何为 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
指向一些其他版本的解释器。
我在 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
指向一些其他版本的解释器。