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