的Perl:错误消息:不容定位...在@INC(Perl: error message: can´t

2019-06-27 02:43发布

我想compilate 这个纸条 ,但我有这样的信息:

无法找到电子邮件/ Address.pm在@公司(@公司包含:C:/草莓/ perl的/ lib目录C:/草莓/ perl的/网站/ lib目录C:\草莓\ perl的\供应商\ LIB)在C: /草莓/ perl的/ lib目录/正则表达式/通用/电子邮件/ Address.pm线9. BEGIN失败 - 编译位于C中止:/草莓/ perl的/ lib目录/正则表达式/通用/电子邮件/ Address.pm 9行编译失败要求在(EVAL 1)第1行BEGIN失败 - 汇编中C中止:\例子\ script2.pl线4。

我不明白,因为我真的有这个根

C:/strawberry/perl/lib/Regexp/Common/Email/Address.pm

有谁知道为什么我有这样的错误消息时,我尝试compilate我的纸条?

非常感谢


我试图用这句话:

使用LIB 'C:/草莓/ perl的/ lib目录/正则表达式/通用/电子邮件';

并把作为评价这两个句子:

use Regexp::Common qw[Email::Address];
  use Email::Address

然后我得到这个错误

Global symbol "%RE" requires explicit package name at C:\examples\script2.pl lin
e 10.Execution of C:\examples\script2.pl aborted due to compilation errors.

从来就在采取一看perldiag

全球符号“%s”需要明确的包名(F)你说:“使用严格”或“使用严格瓦尔”,这表明所有变量必须被词法范围(使用“我”或“国家”),宣布事先使用“我们”,或明确资格说全局变量在(使用“::”)的包。

但我觉得对我来说有点理论由我明白,你必须使用的代码的乞讨了一句“使用”使用软件包。

顺便说一句,这是我的代码:

 use Regexp::Common qw[Email::Address];
  use Email::Address;
  while (<>) {
  my (@found) = /($RE{Email}{Address})/g;
  my (@addrs) = map $_->address, Email::Address->parse("@found");
  print "X-Addresses: ", join(", ", @addrs), "\n";
  }

我得到这个代码从一个问题,我问过的。

Answer 1:

我认为这个问题是,你必须Regexp::Common::Email::Address安装。 然而,你还需要Email::Address ,这是一个独立的模块。 也就是说,你也应该安装在模块C:/strawberry/perl/lib/Email/Address.pm

尝试使用CPAN安装Email::Address ,请参阅什么是安装缺少的Perl模块最简单的方法?


多一点解释更新:

Perl模块以分层方式组织。 该::包分离等于在你的模块库路径的目录。 模块的全名/含义从包装本身的名称和在其中安装的路径导出的。 假设你有模块调用Restaurant::BillHat::BillNames::Male::Bill 。 您将有三种叫法不同文件Bill.pm ,但他们代表了完全不同的概念。 他们会彼此其路径在你的模块库中区分开来。



文章来源: Perl: error message: can´t locate … in @INC