Perl脚本可以安装自己的CPAN依赖项吗?

fbr*_*eto 17 installation perl dependencies automation cpan

我有一个Perl脚本,它有两个CPAN中存在的依赖项.我想要做的是让脚本本身提示用户安装必要的依赖项,以便脚本能够正常运行.如果用户需要输入某种身份验证来安装那些没关系的依赖项:我要避免的是以下工作流程:

运行脚本 - >观察它失败 - >漫无目的地搜索CPAN - > Lynch脚本编写者

相反,我希望有类似的东西:

运行脚本 - >自动下载脚本依赖项(根据需要进行身份验证) - >脚本成功 - >购买脚本编写器啤酒

可以这样做吗?

mob*_*mob 19

每个标准构建范例都有自己的指定依赖关系的方式.在所有这些情况下,构建过程将尝试在某些上下文中自动安装依赖项.

ExtUtils::MakeMaker,您将PREREQ_PM字段中的哈希引用传递给WriteMakefile:

# Makefile.PL for My::Module
use ExtUtils::MakeMaker;

WriteMakefile (
    NAME => 'My::Module',
    AUTHOR => ...,
    ...,
    PREREQ_PM => {
        'Some::Dependency' => 0,             # any version
        'Some::Other::Dependency' => 0.42,   # at least version 0.42
        ...
    },
    ...
 );
Run Code Online (Sandbox Code Playgroud)

Module::Build,您将hashref传递给该build_requires字段:

# Build.PL
use Module::Build;
...
my $builderclass = Module::Build->subclass( ... customizations ... );
my $builder = $builderclass->new(
    module_name => 'My::Module',
    ...,
    build_requires => {
        'Some::Dependency' => 0,
        'Some::Other::Dependency' => 0.42,
    },
    ...
);
$builderclass->create_build_script();
Run Code Online (Sandbox Code Playgroud)

Module::Install,您requires在调用编写Makefile的命令之前执行一个或多个命令:

# Makefile.PL
use inc::Module::Install;
...
requires 'Some::Dependency' => 0;
requires 'Some::Other::Dependency' => 0.42;
test_requires 'Test::More' => 0.89;
...
WriteAll;
Run Code Online (Sandbox Code Playgroud)