CPAN在Ubuntu上出现各种错误

6
我只是想运行一个简单的perl程序,从xml文件中导入数据并导出到数据库。 使用Mysql无法工作,所以在从cpan获取Mysql.pm失败后,我改用了DBD::mysql。 然而,我无法安装任何东西。我试图安装xml解析器模块,但无论您尝试安装哪个模块,cpan都会出现这些错误。
install xml::parser
CPAN: Storable loaded ok (v2.20)
Going to read '/root/.cpan/sources/authors/01mailrc.txt.gz'
CPAN: Compress::Zlib loaded ok (v2.02)
............................................................................DONE
Going to read '/root/.cpan/sources/modules/02packages.details.txt.gz'
Warning: Your /root/.cpan/sources/modules/02packages.details.txt.gz does not contain a Line-Count header.
Please check the validity of the index file by comparing it to more
than one CPAN mirror. I'll continue but problems seem likely to
happen.
CPAN: Time::HiRes loaded ok (v1.9719)
Warning: Your /root/.cpan/sources/modules/02packages.details.txt.gz does not contain a Last-Updated header.
Please check the validity of the index file by comparing it to more
than one CPAN mirror. I'll continue but problems seem likely to
happen.
DONE
Going to read '/root/.cpan/sources/modules/03modlist.data.gz'
Catching error: "Can't locate object method \"data\" via package \"CPAN::Modulelist\" (perhaps you forgot to load \"CPAN::Modulelist\"?) at (eval 29) line 1.\cJ at /usr/share/perl/5.10/CPAN/Index.pm line 518\cJ\cICPAN::Index::rd_modlist('CPAN::Index', '/root/.cpan/sources/modules/03modlist.data.gz') called at /usr/share/perl/5.10/CPAN/Index.pm line 85\cJ\cICPAN::Index::reload('CPAN::Index') called at /usr/share/perl/5.10/CPAN.pm line 955\cJ\cICPAN::exists('CPAN=HASH(0xa225610)', 'CPAN::Module', 'xml::parser') called at /usr/share/perl/5.10/CPAN/Shell.pm line 1243\cJ\cICPAN::Shell::expandany('CPAN::Shell', 'xml::parser') called at /usr/share/perl/5.10/CPAN/Shell.pm line 1639\cJ\cICPAN::Shell::rematein('CPAN::Shell', 'install', 'xml::parser') called at /usr/share/perl/5.10/CPAN/Shell.pm line 1935\cJ\cICPAN::Shell::__ANON__('CPAN::Shell', 'xml::parser') called at /usr/share/perl/5.10/CPAN.pm line 375\cJ\cIeval {...} called at /usr/share/perl/5.10/CPAN.pm line 372\cJ\cICPAN::shell() called at /usr/bin/cpan line 198\cJ" at /usr/share/perl/5.10/CPAN.pm line 391
    CPAN::shell() called at /usr/bin/cpan line 198
Going to read '/root/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Going to read '/root/.cpan/sources/modules/02packages.details.txt.gz'
Warning: Your /root/.cpan/sources/modules/02packages.details.txt.gz does not contain a Line-Count header.
Please check the validity of the index file by comparing it to more
than one CPAN mirror. I'll continue but problems seem likely to
happen.
Warning: Your /root/.cpan/sources/modules/02packages.details.txt.gz does not contain a Last-Updated header.
Please check the validity of the index file by comparing it to more
than one CPAN mirror. I'll continue but problems seem likely to
happen.
cpanDONE
Going to read '/root/.cpan/sources/modules/03modlist.data.gz'
No history written (no histfile specified).
Lockfile removed.
Can't locate object method "data" via package "CPAN::Modulelist" (perhaps you forgot to load "CPAN::Modulelist"?) at (eval 31) line 1.
 at /usr/share/perl/5.10/CPAN/Index.pm line 518
    CPAN::Index::rd_modlist('CPAN::Index', '/root/.cpan/sources/modules/03modlist.data.gz') called at /usr/share/perl/5.10/CPAN/Index.pm line 85
    CPAN::Index::reload('CPAN::Index') called at /usr/share/perl/5.10/CPAN.pm line 692
    CPAN::all_objects('CPAN=HASH(0xa225610)', 'CPAN::Distribution') called at /usr/share/perl/5.10/CPAN/Shell.pm line 1046
    CPAN::Shell::failed('CPAN::Shell', 2, 1) called at /usr/share/perl/5.10/CPAN.pm line 413
    eval {...} called at /usr/share/perl/5.10/CPAN.pm line 413
  CPAN::shell() called at /usr/bin/cpan line 198

我做错了什么吗?我尝试搜索这些错误,但没有人有正确的解决方案。在配置文件中是否有设置需要更改?


如果您正在安装到系统Perl,则必须在sudo下运行cpan。如果您设置了perlbrew Perl并将模块安装到本地Perl,则该问题将消失。 - DavidO
1
尝试删除似乎已损坏的/root/.cpan/sources/modules/02packages.details.txt.gz文件,然后再次尝试。如果这也不起作用,我会遵循Arjuna Del Toso下面的建议。 - salva
2
@DavidO:不,你只需要在 CPAN 配置中包含 sudo 在 mbuild_install_build_command 和 make_install_make_command 中。但看起来他已经以 root 身份运行了。 - ysth
6个回答

17

如果没有人能回答你的问题,我建议尝试使用一个新的CPAN,类似于:

cd && mv .cpan .cpan-bak

然后尝试重新安装该模块。

希望这可以帮到你。


索引文件的镜像出现了一些问题,因此像你所解释的那样重新开始将会有所帮助。 - daxim
在2014年,这对我很有帮助!非常感谢 :) - Oscar Vasquez

4

我遇到了类似的问题。

情况:

尝试安装Catalyst::Plugin::AutoCRUD

使用的perl版本是perlbrew-5.14.2

解决方法:

问题出在我在cpan安装命令前加了sudo:

不起作用的命令:

sudo cpan Catalyst::Plugin::AutoCRUD

工作:

chown -R myusername:myusergroup ~/.cpan
cpan Catalyst::Plugin::AutoCRUD

原因:因为我在我的用户帐户下安装了perlbrew+cpan,而不是作为root安装,因此所有后续的cpan模块安装都必须使用相同的用户进行操作。


3
当我的连接到Perl网站超时时,我也遇到了同样的问题。 /root/.cpan/sources/modules/02packages.details.txt.gz仅包含网络超时的信息,/root/.cpan/sources/modules/03modlist.data.gz也是垃圾。通过仅删除这些文件并在网络较不繁忙时尝试重新获取,然后文件就被正确获取,并且一切正常工作。

2
请检查您的"cpan"(安装程序)版本是否与您的"perl"版本匹配...
通过执行以下操作进行检查:cpan --versionperl -v 我在尝试安装另一个模块时遇到了同样的错误,原来我使用的"cpan"版本是作为5.8.8 perl包的一部分编译的,但在这里工作的默认"perl"版本是5.8.5版本,因此cpan正在使用引用不正确的5.8.8 perl基本库来编译C代码,而这个库在5.8.5 perl基本库中实现时不兼容。
解决方法很简单,只需使用完整路径调用正确的"cpan"程序 "/usr/.../perl/5.8.5/bin/cpan module_name"即可。
这种不同版本软件包的不同二进制文件默认设置的小矛盾是我们管理员的疏忽,确实给我们带来了很多困扰。

1

0
在我的情况下,我需要使用sudo -H运行cpan来获取我的本地网络设置(如代理)。所以: cd && mv .cpan .cpan-bak
然后: sudo -H cpan
默认回答cpan配置(这次错误没有出现)。
然后我就能安装任何模块了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接