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

Perl脚本可以安装自己的CPAN依赖项吗?,perl,automation,installation,dependencies,cpan,Perl,Automation,Installation,Dependencies,Cpan,我有一个Perl脚本,它在CPAN中有两个依赖项。我想做的是让脚本本身提示用户安装必要的依赖项,以便脚本能够正常运行。如果用户需要输入某种身份验证来安装依赖项,这很好:我试图避免的是以下工作流: 运行脚本->监视它失败->无目的地搜索CPAN->对脚本编写器执行Lynch操作 相反,我希望的是: 运行脚本->自动下载脚本依赖项(根据需要进行身份验证)->脚本成功->为脚本编写器购买啤酒 可以这样做吗?您可以从脚本内部执行此操作 perl-MCPAN-e'install MyModule::myd

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

运行脚本->监视它失败->无目的地搜索CPAN->对脚本编写器执行Lynch操作

相反,我希望的是:

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


可以这样做吗?

您可以从脚本内部执行此操作


perl-MCPAN-e'install MyModule::mydependens'

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

在中,将
PREREQ\u 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
        ...
    },
    ...
 );
在中,将hashref传递给
构建所需的
字段:

# 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();
在中,在调用命令写入生成文件之前,执行一个或多个
requires
命令:

# Makefile.PL
use inc::Module::Install;
...
requires 'Some::Dependency' => 0;
requires 'Some::Other::Dependency' => 0.42;
test_requires 'Test::More' => 0.89;
...
WriteAll;

对不幸的是,我忘了怎么做。即使这可以做到,这也是个坏主意。“安装”和“运行”是两个不同的任务,通常由具有不同权限的不同用户执行。最多脚本应该检查依赖项并告诉我如何安装它们。。。如果我运行的脚本尝试“自动”执行此操作,我希望对作者进行私刑。我同意,请为脚本创建安装依赖项的安装文件,很可能使用以下选项之一。-1因以下原因无效。