1

我需要运行一个 perl 脚本来收集将在不同的 unix 服务器上部署和执行的系统信息。

现在我正在编写并测试它,我收到了这个错误。

在 @INC 中找不到 XML/DOM.pm(@INC 包含:/usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl / usr/lib64/perl5 /usr/share/perl5 .) 在 test.pl 第 7 行。 BEGIN 失败 - 编译在 test.pl 第 7 行中止。

所以我只是在使用 XML::DOM,它应该是 Perl 的一部分,但它不适用于 5.10.1 这个特定服务器上的这个版本。

无论如何,有没有一种方法可以创建和设计我的脚本并将模块打包到其中,同时保留 .pl 扩展名,这是该脚本的要求?

4

3 回答 3

1

如果模块不需要编译库,您可以通过将模块中的文本复制到 .pl 文件中来包含它们。这是一个可怕的黑客,但它应该工作。

Perl 模块应该包含一个包声明,给出它们的名字。当你进入你的主程序部分时,你需要一个package main;你自己的声明。

于 2012-12-10T16:48:49.063 回答
1

您可以将模块放在任何目录中,然后通过pragma将该目录包含在搜索模块lib。请注意,模块Foo::Bar必须在文件MY-ROOT/Foo/Bar.pm中,并且可能不在MY-ROOT/Bar.pmMY-ROOT您的模块目录在哪里。

use lib 'MY-ROOT';
use Foo::Bar;

但是,这只适用于纯 Perl 模块,不支持 XS。

于 2012-12-10T17:02:30.750 回答
1

代替使用libamon 建议的编译指示,考虑安装perlbrewcpanminus,它们旨在协同工作以添加和/或更新模块。

perlbrew旨在通过#!/usr/bin/env perl在您的 Perl 脚本中指定为解释器行,同时添加类似的行source ~/perl5/perlbrew/etc/bashrc${HOME}/.bash_profile定位所需的本地 Perl 版本。

于 2012-12-10T22:56:29.767 回答