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

#windows #perl #perl-module #dist-zilla

#Windows #perl #perl-модуль #dist-zilla

Вопрос:

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

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

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

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

Ответ №1:

Вы не можете этого сделать 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. Я проверю это, я нашел Dist :: Zilla ::Plugin ::OSPrereqs , но мне пришлось бы добавлять в каждую ОС, а не только в windows / не windows. Я протестирую это и свяжусь с вами. Спасибо.

Ответ №2:

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

 [OSPrereqs / MSWin32]
Win32::Foo = 0.12

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