Как проверить наличие Perl, его версии и присутствия необходимого модуля?

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

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

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

Любое предложение было бы значительно ценивший :-)

6
задан jww 30 October 2017 в 15:02
поделиться

3 ответа

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 на машине - по крайней мере, не в последнее десятилетие или более!)

.
2
ответ дан 8 December 2019 в 04:51
поделиться

Нет, не пишите сценарий оболочки. В 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)

14
ответ дан 8 December 2019 в 04:51
поделиться

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

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

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

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

Ссылки:

8
ответ дан 8 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: