-3

我正在尝试安装 cpan 模块。但是出现以下错误

请为此提供解决方案

cpan[3]> install xml::xpath
Going to read '/Users/user/.cpan/Metadata'
  Database was generated on Sun, 07 Apr 2013 09:53:02 GMT
Warning: Cannot install xml::xpath, don't know what it is.
Try the command

    i /xml::xpath/

to find objects with matching identifiers.

cpan[4]> i/xml::xpath/
Catching error: "Can't locate object method \"xpath/\" via package \"i/xml\" (perhaps you forgot to load \"i/xml\"?) at /System/Library/Perl/5.12/CPAN.pm line 375, <FIN> line 4.\cJ" at /System/Library/Perl/5.12/CPAN.pm line 391
    CPAN::shell() called at /System/Library/Perl/5.12/App/Cpan.pm line 295
    App::Cpan::_process_options('App::Cpan') called at /System/Library/Perl/5.12/App/Cpan.pm line 364
    App::Cpan::run('App::Cpan') called at /usr/bin/cpan5.12 line 12

cpan[5]> 
4

1 回答 1

4

不是安装错误。您似乎忘记了 和 正则表达式之间的空格i

要搜索模块,我推荐MetaCPAN 站点

Perl 模块区分大小写。模块的正确名称是XML::XPath.


cpan 模块似乎做了一些元编程,你把它弄错了:

命令的第一个非空格字符串被视为方法名称,因此

cpan[n]> foo

会做

my $method = "foo";
$shell->$method; # like $shell->foo

但是,您可以使用方法的完全限定名称来调用其他包中的方法。一个常见的情况是SUPER伪包:

MyClass->SUPER::new(@args);

仅仅因为你不能声明包含特殊字符的包和子类并不意味着不可能使用它们。所以完全限定的方法名i/xml::xpath/被分成一个包名i/xml和一个子名xpath/

在常规 Perl 代码中使用这样的名称是不可能的,但是由于使用变量作为方法名称的技巧,可以绕过解析器。

于 2013-04-08T10:53:54.363 回答