Perl模块 - dist.ini和特定于平台的先决条件

时间:2014-06-21 08:17:31

标签: windows perl perl-module dist-zilla

如何为每个平台(Windows /非Windows)添加条件先决条件dist.ini我希望模块支持?

例如在Perl代码中,我可以这样做:

if ( $^0 eq 'MSWin32' ){
    require Win32::Foo;
}else{
    require Bar::Baz;
}

如何在dist.ini中满足这样的每个系统/平台,以便通过cpan / cpanm安装正确的先决条件?

2 个答案:

答案 0 :(得分:4)

您无法在dist.ini中执行此操作,因为ini文件实际上没有任何方法可以执行条件逻辑。但有一种方法可能是编写自己的Dist :: Zilla插件,如下所示:

package Dist::Zilla::Plugin::MyPrereqs;    # pick a better name

use Moose;
with 'Dist::Zilla::Role::PrereqSource';

sub register_prereqs { 
    my $self = shift;

    my %prereqs;
    if ( $^0 eq 'MSWin32' ) { 
        $prereqs{'Win32::Foo'} = '0.12';     # min. version
    } else { 
        $prereqs{'Bar::Baz'} = '1.43';
    }

    $self->zilla->register_prereqs( %prereqs );
}

如果你将其概括为在dist.ini中采用一些与平台相关的先决条件列表,那么它将是一个很好的CPAN版本。

答案 1 :(得分:4)

使用Dist::Zilla::Plugin::OSPrereqs。对于您的示例,它看起来像:

[OSPrereqs / MSWin32]
Win32::Foo = 0.12

[OSPrereqs / !MSWin32]
Bar::Baz = 1.43