Модуль 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