2010-10-03 3 views
3

Я Moose новичок, и мне интересно, если общаяКак я могу управлять версиями своих объектов Perl Moose?

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

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

+0

http://www.stackoverflow.com/questions/3639403/perl-version-string-why-use-eval-expr и http://stackoverflow.com/questions/3632135/what-is-setting-version -хорош для. Но в целом нет никакого другого/специального способа обработки версий пакетов в Moose; применяются обычные условные обозначения. – Ether

ответ

10

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

+0

+1 Спасибо за подробный ответ и обновление. perl 5.12.0. –

+0

Должен ли я использовать '5.012' перед именем пакета? это уродливо ... –

+0

Нет, нет. 'package NAME VERSION;' была синтаксической ошибкой в ​​предыдущих perls, поэтому эту функцию не нужно явно указывать. Вы все еще можете сделать это, и получите все другие вещи, которые 'use 5.012' делает для вас бесплатно, например, например, разрешая« строгую »прагму. – rafl