Как проверить наличие Perl, его версию и наличие необходимого модуля? - PullRequest
6 голосов
/ 09 апреля 2010

Я написал скрипт на Perl, я просто хочу дать его каждому, для этого я планировал написать bash-скрипт, который используется для тестирования среды пользователя и определения, способна ли эта среда запускать Perl-скрипт.

Я хочу проверить такие вещи, как:

  1. Установлен ли Perl в этой системе
  2. Perl должен иметь версию 5 или более
  3. Доступен ли модуль JSON :: Any

Любое предложение будет с благодарностью: -)

Ответы [ 3 ]

14 голосов
/ 09 апреля 2010

Нет, не пишите сценарий оболочки. У Perl уже есть прекрасный способ сделать это. Правильный способ сделать это - создать CPAN-готовый дистрибутив, используя обычный набор инструментов. Часть этого объясняется в perlnewmod , perlmodstyle и perlmodinstall .

Для минимального рабочего примера создайте макет каталога следующим образом:

.
├── Build.PL
├── README
└── script
    └── abuscript.pl

В файле Build.PL введите:

use 5.000;
use Module::Build qw();
Module::Build->new(
    module_name        => 'abuscript',
    dist_version       => '1.000',
    dist_author        => 'abubacker <abubacker@example.com>',
    dist_abstract      => 'describe what the script does in one sentence',
    configure_requires => {
        'perl' => '5.000',
    },
    requires           => {
        'JSON::Any' => 0,
    },
)->create_build_script;

Измените данные в соответствии с вашими целями.

В файле README введите несколько инструкций по установке, например:

To install this module, run the following commands:

perl Build.PL
./Build install

Как только вы закончите со всем этим, вы запустите:

perl Build.PL
./Build manifest
./Build dist

Это приведет к .tar.gz архиву, который вы будете распространять. Попросите пользователей установить его, как любой другой модуль CPAN, или, если они не знают, что это значит, они должны прочитать README.

Если у вас есть время, я рекомендую преобразовать ваш скрипт в модуль. Программа pl2pm (поставляется с Perl) и CPAN-модуль Module-Starter-PBP помогут вам.

Если лицензия позволяет, вы можете загрузить свой код в CPAN, чтобы сделать его еще более удобным для ваших пользователей. Сначала обратитесь за помощью в любое из следующих мест: список рассылки module-authors@perl.org, веб-форум PerlMonks , IRC-канал #toolchain в MagNET (irc: // irc. perl.org/toolchain)

8 голосов
/ 09 апреля 2010

Что касается проверки доступности Perl, самый простой способ сделать это - проверить код возврата (код выхода) команды perl -v, если это не 0, у вас нет Perl.

Теперь, что касается требований Perl, вы должны разобраться с ними внутри скрипта Perl:

#!/usr/bin/env perl
use 5.006_001;
use ModuleName 2.0;

Приведенный выше код Perl будет работать только с Perl 5.6.1 или новее и с модельным «ModuleName» версии 2.0 или новее. Нет необходимости вручную проверять версию Perl из bash, лучше и проще сделать это прямо из скрипта Perl.

Ссылки:

2 голосов
/ 09 апреля 2010
if perl -MJSON::Any -e 'print "$JSON::Any::VERSION\n"' >/dev/null 2>&1
then : OK
else echo "Cannot find a perl with JSON::Any installed" 1>&2
     exit 1
fi

Я часто использую '${PERL:-perl}' и подобные конструкции для определения команды (для awk против nawk или gawk; troff против groff; и т. Д.).

Если вы хотите проверить версию JSON :: Any, вместо этого запишите выходные данные команды. Если вы хотите протестировать версию Perl, добавьте 'use 5.008009;' или любой другой номер, который вы считаете разумным. (Это было не так давно, что они наконец удалили Perl 4 из одной из смонтированных NFS файловых систем на работе - но это был не единственный Perl на машине - по крайней мере, не в последнее десятилетие или больше!)

...