2012-06-25 40 views
3

我试图复制我的代码在Linux上使用Perl执行的代码。我将示例8-6中的代码复制并粘贴到Perl & XML中。如果我的理解对不对,我应该能够运行Perl代码,将此代码放在终端在Perl中使用XPath

xmlPerl.pl mydatafile.xml "/inventory/category/item/name" 

但是当我尝试运行Perl的文件,这是行不通的。这是错误:

[[email protected] ~]# perl xmlPerl.pl 
Can't locate XML/XPath.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at xmlPerl.pl line 3. 
BEGIN failed--compilation aborted at xmlPerl.pl line 3. 

我在做什么错?我认为这与我的代码开始时的XML和XPath名称有关。我是否需要安装某些内容来使用XPath框架?我在RedHat 5.5上运行。

+0

从[堆栈溢出的Perl FAQ](http://stackoverflow.com/questions/tagged/perl?排序=常见问题):[什么是最简单的方法来安装缺少的Perl模块?](http://stackoverflow.com/questions/65865/whats-the-easiest-way-to-install-a-missing-perl-module ) – daxim

+0

尝试获得一本讲授[LibXML](http://www.xmlsoft.org/)的现代书籍,请参阅[在Perl中执行XPath XPath查询XML数据的最简单方法是什么?](http:// stackoverflow.com/questions/5275610/what-is-the-easiest-way-to-do-xpath-querying-of-xml-data-in-perl) – daxim

回答

9

perldiag安装它照例:

Can't locate %s

You said to do (or require, or use) a file that couldn't be found. Perl looks for the file in all the locations mentioned in @INC , unless the file name included the full path to the file. Perhaps you need to set the PERL5LIB or PERL5OPT environment variable to say where the extra library is, or maybe the script needs to add the library name to @INC . Or maybe you just misspelled the name of the file. See require in perlfunc and lib .

您没有安装XML::XPath模块,或者Perl没有找到它。与CPAN安装模块:

> cpan XML::XPath 

或包管理器:

> apt-get install libxml-xpath-perl 

或者,如果它已经安装了说,它是PERL5LIB环境变量:

> PERL5LIB=/path/to/lib perl ... 

@INC变量:

BEGIN { 
    unshift(@INC, '/path/to/lib'); 
} 

lib编译指示:

use lib '/path/to/lib'; 
+0

这工作,安装和一切,但现在我得到这个错误 - “没有路径找到/usr/lib/per5/site_perl/5.8.8/XML/XPath.pm行65”我也使用cpan安装它。 – PolarisUser

0

答案是在错误的第一部分:

Can't locate XML/XPath.pm 

在Perl,巨大的好处是使用模块或库,其他人已经为你写的,你可以重复使用。在这种情况下,有人编写了一个名为XML :: XPath的模块(在Perl中,路径由'::'描述),您只需要安装它。安装它最简单的方法是通过cpan,它是一个安装了大多数Perl安装的工具。只要运行:

cpan 
(you'll be dropped into a different command prompt) 
install XML::XPath 

这将走出去,获取XML :: XPath的,解压缩,生成Makefile文件,检查相关性(和安装任何缺失),使之,测试它,并安装它您。有关使用CPAN的更多信息,请查看here

+0

这工作,它安装和一切,但现在我越来越这个错误 - “在/usr/lib/per5/site_perl/5.8.8/XML/XPath.pm line 65找不到路径”我也使用cpan安装了它。 – PolarisUser

3

这是来自尝试use未安装模块的标准错误。你应该安装它。

理想情况下使用OS包;例如在Debian衍生的OS(比如Debian或Ubuntu)

$ apt-get install libxml-xpath-perl 

做不到这一点,则可以使用CPAN

$ cpan XML::XPath 
+0

啊我明白了。我在RedHat 5.5上运行它,我会试着看看我能否找到它的安装。我会回复它的解决方案!谢谢! – PolarisUser

+0

这工作,它安装和一切,但现在我得到这个错误 - “没有路径找到/usr/lib/per5/site_perl/5.8.8/XML/XPath.pm行65”我也使用cpan安装它。 – PolarisUser

+0

那么,没有找到错误的路径很可能是一个实际的XPath错误,抱怨它无法在您的数据结构中找到请求的节点。这听起来不像perl错误。 – LeoNerd