Версия Perl: зачем использовать EVAL EXPR?
1019 просмотра
4 ответа
Я просто обратил внимание на это Catalyst.pl
. Это явно некий аннотированный хак. В чем преимущество настройки строки версии, подобной этой? Я даже не могу понять, что они пытаются сделать.
our $VERSION = '0.01';
$VERSION = eval $VERSION;
Автор: Evan Carroll
Источник
Размещён: 12.11.2019 09:14
Ответы (4)
25 плюса
Номера версий сложны в Perl. Вот отличный обзор для тех, кто ищет кровные детали. Вас может удивить, как много хитрых способов ошибиться ...
Прямой ответ на ваш вопрос, однако, заключается в том, что разные вещи ожидают разных форматов. Для CPAN вы заботитесь о версиях разработки, например, в виде строки. Для времени выполнения вы заботитесь о них как о числе.
Рассмотрим случай $VERSION = "0.01_001"
. eval
преобразует его в число 0.01001
правильно.
12 плюса
Из perlmodstyle: нумерация версий
Автор: toolic Размещён: 03.09.2010 08:53Если вы хотите выпустить «бета» или «альфа» версию модуля, но не хотите, чтобы CPAN.pm включал ее в список, поскольку самые последние используют «_» после обычного номера версии, за которым следуют как минимум 2 цифры, например. 1.20_01. Если вы сделаете это, рекомендуется следующая идиома:
- $ VERSION = "1.12_01";
- $ XS_VERSION = $ VERSION; # требуется только если у вас есть код XS
- $ VERSION = eval $ VERSION;
С помощью этого трюка MakeMaker будет читать только первую строку и, следовательно, читать подчеркивание, в то время как интерпретатор perl оценит $ VERSION и преобразует строку в число. Более поздние операции, которые обрабатывают $ VERSION как число, смогут сделать это без предупреждения о том, что $ VERSION не является числом.
6 плюса
Eval преобразует строку "0.001_001"
в число, следуя правилам для числовых литералов Perl (которые допускают подчеркивание для удобочитаемости). Результатом является число 0.001001
.
Без eval строка преобразуется в число, соответствующее правилу преобразования строк, которое останавливается на первом нечисловом символе.
Например: perl -e 'print "0.001_001" + 0'
5 плюса
Возможно, я запоминаю это, но я думаю, что некоторые автоматические парсеры кода любят видеть строку кода:
our $VERSION = '0.01';
Но вы действительно хотите, чтобы $ VERSION содержал float вместо строки.
Вы можете прочитать эту статью , я знаю, что собираюсь.
О боже, теперь я помню, почему я использую
our $VERSION = 20100903;
номера версий стиля. Это просто безумие. Я люблю Perl, но это чистое, утонченное, концентрированное безумие. Я не буду пытаться резюмировать статью Дэвида Голдена. Вы просто должны прочитать это и плакать.
Автор: Chas. Owens Размещён: 03.09.2010 08:39Вопросы из категории :
- perl Как определить, имеет ли переменная число в Perl?
- perl Как я могу проверить STDIN без блокировки в Perl?
- perl Как выполнить подстановку Perl для строки, сохранив оригинал?
- perl Какой самый простой способ установить отсутствующий модуль Perl?
- perl Что происходит с Perl 6?
- perl Как запустить интерактивную консоль для Perl?
- version Определение манифеста обнаруженной сборки не соответствует ссылке на сборку
- version Проверка версии модуля Python во время выполнения
- version Какая версия .NET поставляется с какой версией Windows?
- version Как программно получить версию DLL или EXE-файла?
- version Как проверить, какая версия Python запускает мой скрипт?
- version Java API, чтобы узнать версию JDK, для которой скомпилирован файл класса?
- catalyst Версия Perl: зачем использовать EVAL EXPR?
- catalyst Perl / DBIx :: Class :: Schema :: Loader суффиксы _2 для дублирования имени отношения
- catalyst Catalyst, запустить "авто" действие из специального контроллера в другом
- catalyst How to connecting RapidApp to PostgreSQL, with utf-8 enabled
- catalyst Ящики для рисования в PDF :: Повторное использование
- catalyst Использование параметров Get и Pod Pod в Perl