为什么即使我安装了perl-DateTime RPM,当我使用DateTime模块时,“无法在@INC中找到Sub / Identify.pm”?

时间:2017-03-08 10:38:57

标签: linux perl

我正在尝试在CentOS中使用模块DateTime,所以我安装了它:

yum install perl-DateTime

然后将use DateTime添加到我的脚本中,但是我收到此错误:

Can't locate Sub/Identify.pm in @INC (@INC contains:
/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi
/root/perl5/lib/perl5/5.16.3
/root/perl5/lib/perl5/x86_64-linux-thread-multi /root/perl5/lib/perl5
/usr/local/lib64/perl5 /usr/local/share/perl5
/usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl
/usr/lib64/perl5 /usr/share/perl5 .) at
/root/perl5/lib/perl5/namespace/autoclean.pm line 200. Compilation
failed in require at /root/perl5/lib/perl5/DateTime/Locale.pm line 11.
BEGIN failed--compilation aborted at
/root/perl5/lib/perl5/DateTime/Locale.pm line 11. Compilation failed
in require at /usr/lib64/perl5/vendor_perl/DateTime.pm line 45. BEGIN
failed--compilation aborted at
/usr/lib64/perl5/vendor_perl/DateTime.pm line 45. Compilation failed
in require at myscript.pl line 8. BEGIN failed--compilation aborted
at myscript.pl line 8.

我不知道发生了什么。我已经通过CPAN安装了几个软件包。这是我第一次尝试使用yum install,但它不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

TL; DR

这就是混合通过软件包管理器和CPAN安装的模块的原因。

看起来您使用yum安装了DateTime,但使用CPAN安装了DateTime :: Locale。您可以通过错误消息中的依赖关系链来看到这一点:

/root/perl5/lib/perl5/namespace/autoclean.pm --> CPAN
/root/perl5/lib/perl5/DateTime/Locale.pm     --> CPAN
/usr/lib64/perl5/vendor_perl/DateTime.pm     --> yum

最新版本的namespace :: autoclean依赖于Sub :: Identify,@INC似乎没有。

yum是否安装了缺少依赖项的软件包?不,当namespace :: autoclean不是依赖项时,它安装了旧版本的DateTime :: Locale:

$ cpan -D DateTime::Locale | grep -oP '[\d.]+(?=\s+up)'     # newest version
1.14
$ yum info perl-DateTime-Locale | grep -oP 'Version\D+\K.+' # yum version
0.45
$ rpm -q --requires perl-DateTime-Locale | grep autoclean
$

但是由于你将/root/perl5/lib/perl5放在@INC中的系统perl目录之前,你正在加载CPAN安装的版本,它需要namespace :: autoclean和Sub :: Identify。当然,百胜无法知道这一点。

我不确定为什么Sub :: Identify丢失了......你可能已将其删除,或者它可能只是安装在@INC之外。您可以尝试使用CPAN重新安装它,但最好是:

  • /root/perl5/*删除@INC,仅在系统perl中使用yum安装模块
  • 使用perlbrewplenv创建您自己的perl本地安装并使用cpan
  • 安装模块