为什么我的Perl程序抱怨“无法在@INC中找到URI.pm”?

时间:2010-02-17 09:10:24

标签: perl installation module

我是Perl的新手。运行脚本时出现以下错误:

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.

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

5 个答案:

答案 0 :(得分:8)

  • 可能您没有安装URI。它可能不会保存在您的计算机上的任何位置,也可能会“安装”在某个位置。

    • 如果它尚未安装,则需要从CPAN安装它。
    • 如果您将其保存到您的计算机上,您只需要让系统知道从哪里获取它。

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

因此,如果您无法在@INC中列出的目录中安装模块,那么有各种方法。

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

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

    use lib '/path/to/URI/module';
    use URI;
    
  3. 最后一种方法是,您可以按运行进行操作。您可以使用命令行-I上的perl -I/path/to/URI/module -e 1开关运行perl(请参阅perlrun

答案 1 :(得分:7)

@INC中的非标准路径(例如/usr/local/packagesperl_remote等)向我表明这是为特定目的安装的自定义perl,可能会降低功能防止恶作剧。

询问系统管理员。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

罪魁祸首原来是SELinux,禁用它立即解决了这个问题。有关/ var / log / messages信息的更多详细信息可以找到here。{/ p>可以找到这个以及其他常见的抱怨。

答案 4 :(得分:0)

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