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

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

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

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

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

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

Если вы обобщите это, чтобы взять некоторые зависящие от платформы списки prereqs в dist.ini , это сделает хороший выпуск CPAN.

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

 [OSPrereqs / MSWin32] Win32::Foo = 0.12 [OSPrereqs / !MSWin32] Bar::Baz = 1.43