【发布时间】:2017-08-17 04:18:28
【问题描述】:
我在 Windows 7 上,我下载了一个名为 XML::XPath 的 CPAN module,我想在我编写的脚本中使用它。
我不能在我的机器上修改@INC,我不能在我的机器上修改环境变量,我不能在我的机器上运行make,我不能在我的机器上使用包管理器。
所以为了使用该模块,我去了CPAN网站,下载了该模块的.tar.gz文件,并将其解压缩到我项目中的lib文件夹中。我这样做是因为this guide 建议我可以在我的脚本上下文中使用use lib 来引用下载的模块:
向脚本添加 use lib 语句会将目录添加到 @INC 以用于该特定脚本。不管是谁在什么环境下运行它。
我的脚本名为test.pl。我正在尝试使用XML::XPath 模块来解析一个名为test.xml 的XML 文件。这是我的目录结构的示例:
C:/
→ sandbox/
test.pl
test.xml
→ lib/
→ XML-XPath-1.13/
XPath.pm
→ XPath/
XMLParser.pm
(etc.)
这是我的test.pl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
use lib qw("C:/sandbox/lib/XML-XPath-1.13");
my $xml_file = "C:/sandbox/test.xml";
my $result;
if (-f $xml_file) {
$result = XML::XPath->new(filename => "$xml_file");
}
当我使用perl test.pl 运行此脚本时,脚本失败并出现以下错误:
无法在 test.pl 第 10 行通过包“XML::XPath”找到对象方法“new”(也许您忘记加载“XML::XPath”?)。
我可以用use lib 解决这个错误吗?
编辑:
当我将use XML::XPath; 添加到我的test.pl 脚本时,如下所示:
#!/usr/bin/perl
use strict;
use warnings;
use lib qw("C:/sandbox/lib/XML-XPath-1.13");
我收到如下错误:
在@INC 中找不到 XML/XPath.pm
但如上所述,我无法在我的机器上实际修改@INC 或重新编译 Perl。
【问题讨论】:
-
也许您忘记加载“XML::XPath”? - 那么您的
use XML::XPath呢?use lib仅指定要查找的路径。 -
那个模块的目录结构看起来有点怪,即使你加了
use XML::XPath;也行不通。 1.13 版本是 2003 年的,但幸运的是,有更新的版本具有正确的目录结构:(例如,一个月前的 1.42)。 -
@SteffenUllrich 我已将
use XML::XPath;添加到我的test.pl脚本中(在第4 行,在我的use lib参考下方),但现在我收到与Perl 在@ 中查找相关的错误987654347@ 用于脚本,我无法修改@INC。我已经更新了我的问题以反映这一点。 -
再深入一点,似乎 XML::XPath 依赖于需要编译的 XML::Parser 模块。除非您有完整的 Perl 工具链可用(即可以编译 C 代码并安装模块),否则您无法使用此模块。仅提取 tarball 仅适用于纯 Perl 模块。
-
@amon 该模块确实存在,它位于我项目的
lib/XML-XPath-1.13/XPath/目录中。你能详细说明为什么我不能使用它吗?
标签: perl