2010-02-17 118 views
3

我是新来的Perl。当我运行脚本时,出现以下错误:为什么我的Perl程序抱怨“无法在@INC中找到URI.pm”?

Can't locate URI.pm in @INC (@INC contains: /usr/local/packages/perl_remote/5.6.1/lib/5.6.1/i86pc-solaris /usr/local/packages/perl_remote/5.6.1/lib/5.6.1 /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/i86pc-solaris /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1 /usr/local/packages/perl_remote/5.6.1/lib/site_perl .) at (eval 2) line 3. 
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/HTTP/Request.pm line 3. 
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/UserAgent.pm line 10. 
BEGIN failed--compilation aborted at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/UserAgent.pm line 10. 
Compilation failed in require at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/Simple.pm line 26. 
BEGIN failed--compilation aborted at /usr/local/packages/perl_remote/5.6.1/lib/site_perl/5.6.1/LWP/Simple.pm line 26. 
Compilation failed in require at txotf_0_install.pl line 35. 
BEGIN failed--compilation aborted at txotf_0_install.pl line 35.

这可能是什么原因以及如何让脚本工作。任何帮助将不胜感激。

+0

您通常可以通过从错误消息中搜索关键词来找到答案。在这种情况下,搜索只是为了“定位”导致你到http://stackoverflow.com/questions/65865/cant-locate-foo-pm-in-inc-whats-the-easiest-way-to-install -a缺失-perl的 – 2010-02-26 01:20:56

回答

8
  • 可能你没有安装URI。它可能不会保存在您的机器的任何位置,或者它可能“安装”在某个位置。

    • 如果只是没有安装,那么你需要从CPAN安装它。
    • 如果您将它保存到您的机器中,您只需让系统知道从哪里获得它。

如果你必须从CPAN安装它,您可能需要管理员权限才能把它列出的目录。但CPAN将允许您将其安装到用户目录,因此您仍然可以安装它。

所以,如果你不能在@INC列出的目录中安装模块,那么有各种方法。

  1. Perl 5读取一个名为PERL5LIB的环境变量。该“阵列”中的任何目录将为,前缀为@INC。因此,目录结构$ENV{PERL5LIB}中的任何内容都将优于任何系统目录。 (请参见here

  2. 另一种方法是按脚本use lib编译指示还将指定的目录插入到@INC中。 (见lib

    use lib '/path/to/URI/module'; 
    use URI; 
    
  3. 最后一种方法,你可以做到这一点每运行。你可以用-I交换机命令行perl -I/path/to/URI/module -e 1上运行perl(见perlrun

1

数组@INC包含查找要评估的Perl脚本的位置列表。您的脚本不会运行,因为它不在@INC列表中。要么:

  1. 将脚本放在@INC位置之一中;或
  2. 将文件的位置添加到$ PATH环境变量;或
  3. 当您调用脚本时指定脚本的完整路径。
+2

的问题,也可以使URI.pm模块没有安装(在我的Ubuntu liburi-perl软件包,但我不知道该模块的Solaris上的名字) – ccheneson 2010-02-17 09:48:22

+0

好,未安装或安装目录不在@INC中。 – 2010-02-26 01:21:22

7

非标准的路径中@INC(如/usr/local/packagesperl_remote等)表示,我认为这是安装了用于特定目的的自定义perl可能会减少功能以防止恶作剧。

询问系统管理员。

0

这并不是说任何其他的答案都不是很好的建议(他们很可能解决您的问题),但我遇到了类似的问题,让我困惑了几个小时。虽然我不确定这是否解决了OP的问题,但也许有人在将来遇到这个问题会省下一些时间排除故障......

我发现在新的CentOS服务器上,尽管@INC报告了我的自定义路径包括库以及尽管正确设置了所有文件和目录权限,但mod_perl仍在使用消息“无法找到”有问题的模块。这令人费解,因为Apache PerlRequire使用的相同“use lib”语句的类似脚本能够毫无问题地运行。

罪魁祸首竟然是SELinux,并且立即禁用了它。关于/ var/log/messages信息的更多细节使我对此以及其他一般抱怨的发现可以找到here

0

在我的情况下,我只是将perl文件夹复制到另一台机器,并将bin文件夹的路径添加到PATH环境变量中。为了解决这个问题,我必须运行适当的ActivePerl安装,最后为perl设置所有环境。

相关问题