Версия Perl: зачем использовать EVAL EXPR?

perl version catalyst

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правильно.

Автор: szbalint Размещён: 03.09.2010 08:43

12 плюса

Из perlmodstyle: нумерация версий

Если вы хотите выпустить «бета» или «альфа» версию модуля, но не хотите, чтобы CPAN.pm включал ее в список, поскольку самые последние используют «_» после обычного номера версии, за которым следуют как минимум 2 цифры, например. 1.20_01. Если вы сделаете это, рекомендуется следующая идиома:

  1. $ VERSION = "1.12_01";
  2. $ XS_VERSION = $ VERSION; # требуется только если у вас есть код XS
  3. $ VERSION = eval $ VERSION;

С помощью этого трюка MakeMaker будет читать только первую строку и, следовательно, читать подчеркивание, в то время как интерпретатор perl оценит $ VERSION и преобразует строку в число. Более поздние операции, которые обрабатывают $ VERSION как число, смогут сделать это без предупреждения о том, что $ VERSION не является числом.

Автор: toolic Размещён: 03.09.2010 08:53

6 плюса

Eval преобразует строку "0.001_001"в число, следуя правилам для числовых литералов Perl (которые допускают подчеркивание для удобочитаемости). Результатом является число 0.001001.

Без eval строка преобразуется в число, соответствующее правилу преобразования строк, которое останавливается на первом нечисловом символе.

Например: perl -e 'print "0.001_001" + 0'

Автор: Eugene Yarmash Размещён: 03.09.2010 08:44

5 плюса

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

 our $VERSION = '0.01';

Но вы действительно хотите, чтобы $ VERSION содержал float вместо строки.

Вы можете прочитать эту статью , я знаю, что собираюсь.

О боже, теперь я помню, почему я использую

our $VERSION = 20100903;

номера версий стиля. Это просто безумие. Я люблю Perl, но это чистое, утонченное, концентрированное безумие. Я не буду пытаться резюмировать статью Дэвида Голдена. Вы просто должны прочитать это и плакать.

Автор: Chas. Owens Размещён: 03.09.2010 08:39
Вопросы из категории :
32x32