在没有模块的服务器上运行Perl脚本

时间:2012-12-10 16:45:13

标签: perl package

我需要运行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。)at   test.pl第7行.BEGIN失败 - 编译在test.pl第7行中止。

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

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

3 个答案:

答案 0 :(得分:1)

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

Perl模块应该包含一个package语句,为它们提供名称。当您进入主程序部分时,您需要自己的package main;声明。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

请考虑安装perlbrewcpanminus来代替使用lib编译指示,这是为了手动添加和/或更新模块而设计的。< / p>

perlbrew旨在通过在您的Perl脚本中指定#!/usr/bin/env perl作为解释器行,同时向source ~/perl5/perlbrew/etc/bashrc添加${HOME}/.bash_profile这一行来定位本地版本来实现利用率你想要的Perl。