Как мне использовать определенную версию (или выше) модуля perl в моем скрипте perl? - PullRequest
7 голосов
/ 23 января 2011

Я использую Term::ANSIColor в своем скрипте Perl для раскрашивания вывода терминала, и я использую функцию colorstrip, которая была добавлена ​​только в Term::ANSIColor версии 2.01, согласно журналу изменений.Итак, есть ли способ сделать мой скрипт автоматически die с соответствующим сообщением об ошибке, если он не найдет хотя бы ту версию Term::ANSIcolor?

Ответы [ 3 ]

21 голосов
/ 23 января 2011

Just:

use Term::ANSIColor 2.01;

См. perldoc -f use:

использовать Модуль VERSION LIST

Если присутствует аргумент VERSIONмежду модулем и списком, использование вызовет метод VERSION в классе Module с заданной версией в качестве аргумента.Метод VERSION по умолчанию, унаследованный от класса UNIVERSAL, квакает, если заданная версия больше, чем значение переменной $ Module :: VERSION.

7 голосов
/ 23 января 2011

Большинство модулей определяют переменную пакета $VERSION.

use Term::ANSIColor;
die "Sorry, this program needs Term::ANSIColor >= v2.01!\n"
    unless $Term::ANSIColor::VERSION >= 2.01;

Это также хороший способ указать максимум версию модуля.

use Module::Foo;
die "You need an *older* version of Module::Foo that ",
    "still has the &barbaz method defined"
    if $Module::Foo::VERSION >= 0.47;
2 голосов
/ 23 января 2011

Просто укажите версию, которую вы хотите использовать:

use Some::Module 2.13;

Если версия не ниже 2.13, операция не будет выполнена.

Вы можете поэкспериментировать с доступной версиейв командной строке:

perl -MSome::Module=9999 -e 'exit 0'

Обычно он умирает с неверным номером версии, указанным в сообщении об ошибке (если только модуль, который вы пытаетесь использовать, не имеет 5-значного или более длинного номера версии, илиесли модуль не похож на strict и не любит загружаться через командную строку с номером версии или как URI (подробности см. в комментариях)).

$ perl -MFile::Find=999 -e 'exit 0'
File::Find version 999 required--this is only version 1.07 at
/usr/perl5/5.8.4/lib/Exporter/Heavy.pm line 121.
BEGIN failed--compilation aborted.
$ perl -e 'use File::Find 999; exit 0'
File::Find version 999 required--this is only version 1.07 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
$

Запуск на машинеОбычно я не пользуюсь, отсюда и устаревшая версия Perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...