apache DocumentRoot能否更改perl@INC?

apache DocumentRoot能否更改perl@INC?,perl,apache2,cgi,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 到 所以,如果CGI脚本具有CPAN模块依赖项,它将无法正确运行

我注意到,如果我在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 

所以,如果CGI脚本具有CPAN模块依赖项,它将无法正确运行


为什么会发生这种情况?

您似乎有两个不同的问题

当您想使用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
中)

您似乎有两个不同的问题

当您想使用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
中)

看起来您的服务器上安装了两个Perl,即更改
文档root
更改了执行CGI脚本时使用的Perl二进制文件。我有根据地猜测,Perl 5.28.1安装为
/opt/Perl/bin/Perl
,Perl 5.22.1安装为
/usr/bin/Perl
。看起来您的服务器上安装了两个Perl,即更改
DocumentRoot
更改了CGI脚本执行时使用的Perl二进制文件。我有根据地猜测,Perl 5.28.1安装为
/opt/Perl/bin/Perl
,Perl 5.22.1安装为
/usr/bin/Perl