我想知道如何在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;
答案 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)使用PERLLIB
或PERL5LIB
环境变量
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副本时创建的标准模块。它包含构建的所有参数。永远不应该在标准库文件夹之外找到它。