如何编辑@INC条目以包含模块的新目录

时间:2012-04-01 19:40:09

标签: linux perl apache cgi centos

我想知道如何在perl设置中添加新目录,以便搜索要包含的模块?

当我运行此行时:

perl -w /var/www/cgi-bin/upload.cgi

我收到以下错误:

Can't locate config.pm in @INC (@INC contains: . /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8) at /var/www/cgi-bin/upload.cgi line 5.
BEGIN failed--compilation aborted at /var/www/cgi-bin/upload.cgi line 5.

我搜索了Google,显然我应该将/var/www/cgi-bin作为文件夹包含在内,以便Perl可以找到并包含它。

更多信息

这是该计划的前几行:

use strict;
use lib '.';
use XFSConfig; #this was fixed by using -I command line switch
use XUpload; # this returns as an error!!!
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use LWP::UserAgent;

3 个答案:

答案 0 :(得分:5)

有几种方法,其中许多方法都包含在perlfaq8: How do I add a directory to my include path at runtime?

1)使用-I命令行开关

perl -w -I/var/www/cgi-bin /var/www/cgi-bin/upload.cgi

2)使用PERLLIBPERL5LIB环境变量

export PERLLIB="$PERLLIB:/var/www/cgi-bin"
perl -w /var/www/cgi-bin/upload.cgi

PERL5LIB="$PERL5LIB:/var/www/cgi-bin" perl -w /var/www/cgi-bin/upload.cgi

3)在代码中使用lib编译指示

# somewhere near the top of  /var/www/cgi-bin/upload.cgi
use strict;
use warnings;
use lib '/var/www/cgi-bin';

答案 1 :(得分:1)

最简单的是mylib

use mylib;

它在相对于脚本的名为lib /和../lib/的目录中进行搜索。它正确处理符号链接。


如果您需要更多灵活性,可以使用lib

use lib $lib_dir;

相同
BEGIN { unshift @INC, $lib_dir; }

例如,要查看与脚本相同的目录,可以使用

use Cwd            qw( realpath );
use File::Basename qw( dirname );

use lib dirname(realpath($0));

您也可以在command line上提供。

perl -I$lib_dir script.pl

最后,如果要全局设置,可以在登录脚本中设置环境变量PERL5LIB

export PERL5LIB=$lib_dir

(将$lib_dir替换为相关路径。)

答案 2 :(得分:0)

问题很可能是你没有正确拼写Config。它以大写 C 开头,如果你弄错了,Perl将找不到该模块。

默认情况下@INC包含. - Perl程序的当前工作目录 - 作为其最后一个条目,因此Perl程序通常会查找与源文件相同的目录中的文件作为最后一个胜地。

Config是在构建Perl副本时创建的标准模块。它包含构建的所有参数。永远不应该在标准库文件夹之外找到它。