Apache DocumentRoot可以更改perl @INC吗?

时间:2019-03-25 09:06:51

标签: perl apache2 cgi

我注意到,如果我在VirtualHost apache2配置中更改了DocumentRoot,则perl @INC也从以下版本更改了

/opt/perl/lib/perl5/site_perl/5.28.0/x86_64-linux 
/opt/perl/lib/perl5/site_perl/5.28.0 
/opt/perl/lib/perl5/5.28.0/x86_64-linux 
/opt/perl/lib/perl5/5.28.0 

/var/www_local/WWWHub 
/var/www_local/WWWHub/work
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.22.1/
/Usr/local/share/perl/5.22.1 
/usr/lib/x86_64-linux-gnu/perl5/5.22 
/usr/share/perl5 
/usr/lib/x86_64-linux-gnu/perl/5.22 
/usr/share/perl/5.22 
/usr/local/lib/site_perl
/usr/lib/x86_64-linux-gnu/perl-base

因此,如果CGI脚本具有CPAN模块依赖项,则它将无法正确运行。

为什么会发生?

1 个答案:

答案 0 :(得分:0)

您似乎有两个不同的问题。

要使用Perl 5.22.1的内部版本,则使用的是Perl 5.28.0。

要解决此问题,请调整脚本的shebang(#!)行以引用正确的Perl构建。

例如,您可能正在使用

#!/opt/perl/bin/perl

您可能要使用的是

#!/usr/bin/perl

您希望找到相对于脚本位置安装的模块。

脚本应为此使用use lib和相对于$RealBin的路径。

use FindBin qw( $RealBin );
use lib $RealBin, "$RealBin/work";

(我假设脚本位于/var/www_local/WWWHub中。)