Модуль Perl - dist.ini и предварительные требования для конкретной платформы

Как добавить условные условия в dist.ini для каждой платформы (Windows/Non Windows) я хочу, чтобы модуль поддерживал?

Например, в коде Perl я мог бы сделать:

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

Как мне обслуживать каждую систему / платформу, как это в dist.ini чтобы нужные пререксы были установлены через cpan/cpanm?

2 ответа

Решение

Вы не можете сделать это в 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.

Используйте https://metacpan.org/pod/Dist::Zilla::Plugin::OSPrereqs. Для вашего примера это будет выглядеть так:

[OSPrereqs / MSWin32]
Win32::Foo = 0.12

[OSPrereqs / !MSWin32]
Bar::Baz = 1.43
Другие вопросы по тегам