我正在尝试在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
,但它不起作用。有什么想法吗?
答案 0 :(得分:3)
这就是混合通过软件包管理器和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重新安装它,但最好是: