Perl: как получить номер «use VERSION» - PullRequest
5 голосов
/ 07 февраля 2012

Существует ли специальная переменная или функция, которая дает мне число use VERSION (в данном случае 5.12.0) при запуске скрипта?

#!/usr/bin/env perl 
use warnings;
use 5.12.0;

Ответы [ 3 ]

5 голосов
/ 07 февраля 2012

Я просто быстро проверил feature.pm код - сама версия нигде не сохраняется.Ответ Алекса уже показал, как тестировать определенные функции, являющиеся результатом вызова.

Также обратите внимание, что use VERSION можно вызывать в нескольких местах (например, в модулях).

Один гипотетический вариант будетпереопределить use и записать номер версии где-нибудь для проверки.

Редактировать: Некоторые рывки в направлении крючка:

use version; # for version parsing
use subs 'require';
BEGIN {
    sub require {
        warn "use ",version->parse($_[0]);
        # ... emulate original require
    };
}

use 5.12.0;

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

4 голосов
/ 07 февраля 2012

Во время компиляции вы можете покопаться в переменной hints (${^H}) (где скрываются драконы) и посмотреть хэш подсказок (% {^ H}) (где скрываются драконы, но в общедоступной документированной сортировкеконечно), это позволит вам узнать, какие конкретные функции включены.Я не знаю, как работать, если был запрошен конкретный набор функций или все данные функции:

perl -le "use feature qw(:5.12); BEGIN{print $^H;print foreach keys %^H}"
133376
feature_unicode
feature_say
feature_state
feature_switch

perl -le "use 5.12.0; BEGIN{print $^H;print foreach keys %^H}"
134914
feature_unicode
feature_say
feature_state
feature_switch
0 голосов
/ 07 февраля 2012

Любой из этих вариантов дает вам версию интерпретатора:

$]
Версия + patchlevel / 1000 интерпретатора Perl.Эта переменная может использоваться для определения того, находится ли интерпретатор Perl, выполняющий сценарий, в правильном диапазоне версий.(Мнемоника: эта версия perl находится в правой скобке?)

$ PERL_VERSION
$ ^ V
Редакция, версия и подрывная деятельностьинтерпретатора Perl, представленного как объект «версия».
Эта переменная впервые появилась в perl 5.6.0;более ранние версии Perl увидят неопределенное значение.До того, как perl 5.10.0 $ ^ V был представлен в виде v-строки.

Это будет> чем то, что у вас есть в строке «use»: если вам нужна именно эта строка, откусите пулюи вставьте его в переменную, как в:

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