【问题标题】:Using XML::Twig locally without installing in Perl在本地使用 XML::Twig 而无需在 Perl 中安装
【发布时间】:2014-01-13 16:17:33
【问题描述】:

我用 Perl 编写了一个相对较大的脚本。它的一部分现在应该能够操作 XML 数据。据我所知 XML::Twig 将是这种操作的合适模块。由于完成的程序没有在我的机器上运行并且我无法在目标系统上安装额外的包,我决定在本地使用 XML::Twig。因此,我将其复制到脚本的子文件夹中,并使用 use lib "$FindBin::Bin/foreign/"; 加载它(Twig.pm 在路径 foreign/XML/Twig.pm 下找到)和 use XML::Twig;

在我的 Windows 7 机器上,它运行良好。现在我在Linux环境(Ubuntu)上试了一下,以后需要,报错如下:

在@INC 中找不到模块 XML::Parser::Expat 的可加载对象

我真的不想编写自己的库,而且我无法在这个系统上安装额外的包(但它应该在这种情况下工作)。我们将不胜感激每一个建议。

【问题讨论】:

  • “我无法在此系统上安装额外的软件包”不是真的。如果可以从 SO 安装代码,则可以从 CPAN 安装代码。
  • CPAN 找不到镜像,因为端口被管理员阻止
  • CPAN 被阻止但不是这样?如果你愿意,我可以把文件复制过来。
  • 对不起,我不知道你说的“SO”是什么意思?
  • 这个站点,StackOverflow

标签: xml perl porting


【解决方案1】:

您不仅需要在本地复制 XML::Twig,还需要 Twig 使用的所有其他非核心模块(以及由 Twig 使用的模块等使用)。

它可能在您的 PC 上运行的一个原因是您在该 PC 上安装了 XML::Parser::Expat,但它不在 Linux 机器上。将此(以及所有其他依赖模块)包含在您的“外部”文件夹中,您可以创建脚本+模块的“可移植”版本。

为了回答操作员对这个初始帖子的后续评论,XML::Parser::Expat 不是 XML::Parser 的一部分,它是独立的。请参阅我的 XML::Parser 副本开头的这一部分:

BEGIN {
  require XML::Parser::Expat;
  $VERSION = '2.41';
  die "Parser.pm and Expat.pm versions don't match"
    unless $VERSION eq $XML::Parser::Expat::VERSION;
}

【讨论】:

  • 我已经在路径中添加了XML::Parser 模块,但它并没有改变任何东西...如果我是对的,这应该是包含XML::Parser::Expat 的模块?
  • 见我帖子的第二部分。这是一个单独的模块/文件。
  • 我明白,但我找不到下载链接或其他东西...始终作为 XML::Parser 的一部分,例如:search.cpan.org/~toddr/XML-Parser-2.41/Expat/Expat.pm
  • 如果将 Expat.pm 复制到“foreign/XML/Parser/Expat.pm”,那不行吗?如果没有,请分享您的“外部”文件夹树的确切当前内容,以及您现在遇到的错误。我编辑您的帖子可能比尝试在此处添加评论更容易。
  • 您的诊断不正确。只有安装了一些 XML::Parser::Expat 时才会出现该消息。
【解决方案2】:

缺少一些 XML::Parser::Expat。重新安装它。

它是 CPAN 上 XML-Parser 分发的一部分。按照 README 文件中的说明进行操作。

【讨论】:

  • 怎么样?请记住,sudo apt-get install ... 之类的内容不是一个选项。
  • 如果无法安装依赖的库,请重写代码以不使用这些库。
  • 嗯,我正在努力避免从头开始编写 XML 解析器......因此我想检查是否还有其他可能性
  • 按照说明我需要通过perl Makefile.PL 安装它,但我没有足够的用户权限
  • 如果不清楚,建议perl Makefile.PL 下方的行建议了另一种用法,允许您指定要安装文件的位置。 perl Makefile.PL PREFIX=~/perl5 LIB=~/perl5/lib是我开始使用perlbrew之前使用的。
猜你喜欢
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
相关资源
最近更新 更多