Как и во всех пакетах perl, обычно имеет смысл определить в них $VERSION
. Это позволяет другим вещам должным образом зависеть от их версии со всеми необходимыми функциями, либо объявляя зависимость в их Makefile.PL
, либо аналогично, или непосредственно при загрузке модуля с использованием use SomeModule 1.23;
.
Конструкция eval
, которую вы показываете, является kludge. Существует различие между регулярными выпусками модуля и релизами разработки. Традиционно это обозначалось $VERSION
с подчеркиванием в нем. Это означает, что что-то вроде 0.001
будет нормальным, стабильным выпуском, а что-то вроде 0.001_01
- это релиз разработки.
eval
используется, чтобы избавиться от этого подчеркивания во время выполнения, сохраняя при этом в строке версии различные инструменты, в том числе PAUSE, Perl Authors Upload SErver, extract. Это делается для предотвращения предупреждений, таких как 0.001_01 is not numeric in ...
.
Вы найдете эту идиому в большом количестве кода. К счастью, есть хорошая альтернатива этому. Вместо того, чтобы указывать статус развития или отсутствия развития в номере версии отдельных модулей, вы также можете сделать это в tar-файле выпуска, который вы можете загрузить в CPAN, используя флаг -TRIAL
.
Вместо того чтобы загружать ваше распределение как My-Distribution-0.001.tar.gz
, вы можете переименовать его в My-Distribution-0.001-TRIAL.tar.gz
. Инструменты CPAN подберут это и соответственно обработают его как выпуск для разработки. Обратите внимание, что -TRIAL
не является частью $VERSION
, но только для названия tarball. Поэтому ненужный клад eval
.
Также обратите внимание, что существуют альтернативные способы объявления $VERSION
пакета. По состоянию на Perl 5.12.0, вы можете объявить его право с в объявлении пакета:
package My::Package 0.001;
Однако ни одно из этого не является специфичным для Moose
каким-либо образом.
http://www.stackoverflow.com/questions/3639403/perl-version-string-why-use-eval-expr и http://stackoverflow.com/questions/3632135/what-is-setting-version -хорош для. Но в целом нет никакого другого/специального способа обработки версий пакетов в Moose; применяются обычные условные обозначения. – Ether