Как я должен контролировать версии моих объектов Perl Moose? - PullRequest
3 голосов
/ 03 октября 2010

Я - Moose новичок, и мне интересно, должен ли общий

our $VERSION = "0.001";
$VERSION = eval $VERSION;

также использоваться в пакетах Moose, или Moose имеет какой-то альтернативный способ контроля версий.Не удалось найти ссылку в Moose документах.

1 Ответ

10 голосов
/ 03 октября 2010

Как и во всех пакетах 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.

...