如何让Perl找到我的模块?

时间:2009-11-25 22:56:33

标签: perl http

sh-3.2# perl -v

This is perl, v5.8.9 built for darwin-2level
...


sh-3.2# perl 2348.pl 
Can't locate HTTP/Cookies.pm in @INC (@INC contains: /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level /opt/local/lib/perl5/site_perl/5.8.9 /opt/local/lib/perl5/site_perl /opt/local/lib/perl5/vendor_perl/5.8.9/darwin-2level /opt/local/lib/perl5/vendor_perl/5.8.9 /opt/local/lib/perl5/vendor_perl /opt/local/lib/perl5/5.8.9/darwin-2level /opt/local/lib/perl5/5.8.9 .) at 2348.pl line 24.
BEGIN failed--compilation aborted at 2348.pl line 24.


sh-3.2# find / | grep -i "Cookies\.pm"
/System/Library/Perl/Extras/5.10.0/HTTP/Cookies.pm
/System/Library/Perl/Extras/5.8.9/HTTP/Cookies.pm
/usr/local/ActivePerl-5.10/lib/HTTP/Cookies.pm

如何解决这个问题?我知道我必须编辑@INC但它在哪里? :)

6 个答案:

答案 0 :(得分:5)

您在非标准位置安装了HTTP::Cookies。您可以使用cpan HTTP::Cookies/opt/lang/bin/cpan HTTP::Cookies重新安装。

另见What's the easiest way to install a missing Perl module?

答案 1 :(得分:3)

我想你应该试试

perl -I /System/Library/Perl/Extras/5.8.9 -e'use HTTP::Cookies;'

答案 2 :(得分:2)

您可以在脚本中修改@INC

BEGIN {
    unshift(@INC, '/System/Library/Perl/Extras/5.8.9/');
    use HTTP::Cookies;
}

(更新了brian d foy的建议)

答案 3 :(得分:0)

@INC只是引用你的包含的数组,就像“路径”一样。

尝试

do '/usr/local/ActivePerl-5.10/lib/HTTP/Cookies.pm'

并使用HTTP :: Cookies应该可以正常工作。

编辑:您还可以找到@INC中的内容

$myincludes = join(", ",@INC);
print $myincludes;

答案 4 :(得分:0)

看起来您正在使用基于'/ opt / local'目录的自定义编译的Perl。需要调查的两件事:你从哪里运行Perl? /usr/bin还有另一个吗?我猜你在找到的库和你正在使用的自定义库之间有一个系统安装的(在这种情况下你可能想使用cpan实用程序将你想要的模块安装到自定义位置)。

答案 5 :(得分:0)

您无法“编辑”@INC。它被锁定在二进制文件中。 (是的,有一些Windows安装程序可以使用500个NUL来填充@INC的值,这样他们就可以对值进行热补丁,但是不要去那里。)

因此,为@INC创建新值的唯一方法是重新编译Perl发行版。