gpt4 book ai didi

perl - 如何为 CGI 脚本设置 Perl 的 @INC?

转载 作者:行者123 更新时间:2023-12-05 09:00:17 25 4
gpt4 key购买 nike

我有以下最简单的 Perl CGI 脚本:

use strict;
use warnings;
use CGI();
use CGI::Carp qw(fatalsToBrowser);

use Template;

print CGI::header();

foreach(@INC) {
print "$_\n";
}

调用 ( http://[..]/cgi-bin/p.cgi ) 时出现以下错误:

Can't locate Template.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /home/pistacchio/webapps/htdocs/cgi-bin/p.cgi line 8.
BEGIN failed--compilation aborted at /home/pistacchio/webapps/htdocs/cgi-bin/p.cgi line 8.

我确保安装了模板,并且确实在从 shell 运行该程序时它可以工作(加载模板)并输出:

Content-Type: text/html; charset=ISO-8859-1

/home/pistacchio/lib/perl5
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
/home/pistacchio/lib/perl5/lib
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/5.8.8

模板安装在/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi

[pistacchio@web118 i386-linux-thread-multi]$ pwd
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
[pistacchio@web118 i386-linux-thread-multi]$ ls
auto perllocal.pod Template Template.pm

此目录在 env 中正确列出,并且如前所述,在 @INC 中列出。在@INC 中它显示了两次,所以我什至试图在调用use Template 之前弹出它,但没有结果。来自 env:

[pistacchio@web118 i386-linux-thread-multi]$ env
[..]
PERL5LIB=/home/pistacchio/lib/perl5:/home/pistacchio/lib/perl5/lib:/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
[..]

删除 use Template 可以解决这个问题。

最佳答案

网络服务器不作为您的用户运行,因此它的环境不是您的用户环境。您可以根据您的网络服务器以多种方式进行设置。在 Apache 中,您可以使用 SetEnv指令:

 SetEnv PERL5LIB /path/to/your/libs

这适用于其下的所有内容。例如,如果您将它放在 .htaccess 文件中,它适用于该目录下的所有内容。

如果您做不到那样的事情,您将无法使用 lib 在每个脚本中自己设置 @INC 的值。语用。

关于perl - 如何为 CGI 脚本设置 Perl 的 @INC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com