如何在Perl中重新分发非核心模块?

如何在Perl中重新分发非核心模块?,perl,Perl,我对Perl比较陌生,需要一些帮助来重新分发非核心模块。这就是整个故事 Perl脚本中使用了两个非核心模块:XML::Simple和SOAP::Lite。我正在使用的版本(目前在Windows上)是草莓Perl,因此这两个模块已经包括在内。但是,我们不知道最终用户(Unix/Linux系统)是否有这两个模块,因为他们可能只有标准版本,因此只有核心模块。我的目标是让最终用户尽可能少地进行配置/安装 首先,我尝试查看是否有任何类似于XML::Simple和SOAP::Lite的核心模块。不幸的是,我

我对Perl比较陌生,需要一些帮助来重新分发非核心模块。这就是整个故事

Perl脚本中使用了两个非核心模块:XML::SimpleSOAP::Lite。我正在使用的版本(目前在Windows上)是草莓Perl,因此这两个模块已经包括在内。但是,我们不知道最终用户(Unix/Linux系统)是否有这两个模块,因为他们可能只有标准版本,因此只有核心模块。我的目标是让最终用户尽可能少地进行配置/安装

首先,我尝试查看是否有任何类似于XML::SimpleSOAP::Lite的核心模块。不幸的是,我没有找到任何(如果我错了,请纠正我)

所以我想现在唯一的选择就是重新分配这两个模块。我检查了这两个模块是否允许重新分配。我现在的问题是怎么做。我试着在谷歌上搜索关键词“PerlRedistrible”,但没有发现任何有用的东西。我的猜测是,我们使用exporter工具来实现这一点。但这两个模块相当复杂,它们有几个嵌套的文件夹/pm文件(还有一大堆其他文件,如MAKE、pod、ini文件),所以我不确定该怎么办。我发现使用exporter的示例非常简单:它们只有一个pm文件和一个pl文件,并且它们被放在一个文件夹中

此外,我愿意接受任何其他更好的方法来处理这个问题。我们的目标是确保所有最终用户都能以最少的配置/安装工作量使用我的脚本,因为我们不希望他们遇到一大堆兼容性问题


任何帮助都将不胜感激。谢谢=D

只需在Makefile.PL或Build.PL中声明对模块的依赖关系,然后向它们提供以下安装说明:

cpanm script.tar.gz

我想详细说明一下@ikegami说

具有,因此安装您的模块的人需要CPAN访问才能进行构建,无论您是为他们提供该模块,还是将其列为依赖项。否则,您将需要提供整个依赖关系树,在这一点上,您最终将使用perlbrew,可能是carton,可能是local::lib,然后您可能会决定需要下一个更高级别并生成RPM和DEB


最好只提供您的脚本(打包为CPAN模块),在其中列出您的依赖项,并让芯片落在它们可能落在的地方。

Perl最好的地方之一是CPAN,即全面的Perl归档网络。它是一种镜像服务,大约从Perl 5最初问世时起,就允许人们通过Perl附带的标准通用工具
cpan
客户端共享有用的附加模块,如
XML::Simple
SOAP::Lite
。几乎所有的Perl发行版(如草莓Perl和linux附带的大多数Perl发行版)都配置了一个CPAN客户机并随附。这个客户端让人们只需知道模块的名称就可以从CPAN下载和安装模块

CPAN上几乎所有的模块分布都遵循完全相同的布局。它们通常有一个
Makefile.PL
文件(如果它使用ExtUtils::MakeMaker生成安装脚本)、
Build.PL
文件(如果它使用Module::Build生成安装脚本),或者两者都有。这些Perl脚本一旦运行,就会创建一个“Makefile”或“Build”文件,可以让您安装模块并验证是否满足所有先决条件

如果您以前从未制作过Perl发行版,那么您可以从CPAN下载任何您想要的发行版,并查看它们的布局。一旦你看到一个文件夹和文件位置,你就会非常直观。它们通常与根目录中的安装脚本和支持文件(如自述文件)一起布置,与
lib
目录中的自定义模块(您制作的模块)一起布置,与
t
目录中的单元测试一起布置

如果你是新手,我建议你看看基于
Build.PL
的;这些是纯基于Perl的安装脚本。如果您决定制作一个基于Module.PL的发行版,那么很容易指定您的模块发行版需要
XML::Simple
SOAP::Lite
。首先,创建一个基本的基于Module::Build的安装脚本。这看起来像:

use Module::Build;
my $build = Module::Build->new(
    module_name => 'Foo::Bar',
    license  => 'perl',
    requires => {
        'perl'          => '5.6.1',
        'Some::Module'  => '1.23',
        'Other::Module' => '>= 1.2, != 1.5, < 2.0',
    },
);
$build->create_build_script;
)

要安装模块,步骤如下所示:

cd folder\where\my\lib\is
perl Build.PL
Build
Build test
Build install
这将创建安装工具,准备用于测试的文件夹(通常只是将内容复制到简单模块的构建库区域),运行
t
文件夹中的所有.t脚本(“测试”,通常用于在安装之前对模块进行单元测试),最后,将模块安装到PC的Perl站点库中

Build
脚本作为“设置”阶段的一部分,将查看您的先决条件,并在您还没有先决条件时发出警告


然后,正如中所指出的,如果您使用cpanm客户端安装库,cpan客户端将自动为您下载、测试和安装依赖项!或者,基于
Build.PL
的安装程序也有“installdeps”选项,这将做同样的事情。然后,任何和所有依赖项(以及可能的递归依赖项)都会自动下载、测试和安装,即使它们将来会发生更改。

Hi Robert。非常感谢您的详细解释。我只是想确保我理解正确。因此,本质上我需要将脚本打包为发行版的一部分,并让最终用户一起安装(我的脚本、依赖项:SOAP::Lite和XML::Simple)?那么最终用户将如何运行我的脚本?通过说“使用”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。然后,你就会放弃
cd folder\where\my\lib\is
perl Build.PL
Build
Build test
Build install