Как объявить номер версии для модуля Perl?

Я думал, что знаю, как объявить номера версий для модулей. Но после прочтения статьи "$ VERSION Confusion" в Modern Perl Books, Modern Perl Blog ; я теперь больше в замешательстве, чем я начал. (Невежество было действительно блаженством.) Не то, чтобы у меня были сомнения по поводу "идеального" кода, но я ' Мне просто очень любопытно, почему такой тривиальный вопрос, по-видимому, не имеет однозначного ответа для такого зрелого языка.

Надеюсь, что Сообщество сможет найти однозначный ответ на этот вопрос, поскольку для Perl-хакеров есть более полезные вещи, чем спорить о разных путях. объявить номера версий.

10
задан GeneQ 24 August 2010 в 01:36
поделиться

3 ответа

use Module VERSION

Если аргумент VERSION присутствует между Module и LIST, то use вызовет метод VERSION в классе Module с заданной версией в качестве аргумента. Метод по умолчанию VERSION, унаследованный от класса UNIVERSAL, выдает ошибку, если заданная версия больше значения переменной $Module::VERSION.

Получается простой паттерн:

package MyModule;

our $VERSION = 1.23;

# ...

1;
11
ответ дан 3 December 2019 в 15:34
поделиться

Моя позиция - сохранять простоту. Объявляйте свою версию как строку, содержащую число с плавающей точкой. Оставьте множественные десятичные числа для номеров версий Perl и Perl 6.

Если ваш модуль требует Perl 5.6.0 или более поздней версии:

our $VERSION = '1.02';

Или, если вам нужно сохранить совместимость с Perl 5.005 или более ранней версией:

use vars '$VERSION';
$VERSION = '1.02';

Некоторые дополнительные моменты:

  1. Всегда используйте одинаковое количество цифр после десятичной точки. Некоторые (не Perl) инструменты упаковки считают, что версия 1.11 идет после 1.9, но до 1.90. Если вам нужно изменить количество используемых цифр, одновременно увеличьте основной номер версии.

  2. Всегда объявляйте версию как строку. Это позволяет избежать исчезновения нулей в конце строки. (См. пункт 1.)

  3. Если вы хотите сделать нестабильный (например, альфа или бета) релиз, добавьте строку -TRIAL к номеру версии дистрибутива (например, загрузите Foo-Bar-1.90-TRIAL.tar.gz, содержащий Foo::Bar 1.90). Это указывает CPAN на то, чтобы перечислить его как релиз разработки, как если бы он содержал символ подчеркивания. Dist::Zilla упрощает создание пробных релизов.

Строка, содержащая число с плавающей точкой, будет работать со всеми версиями Perl, всеми версиями MakeMaker и Module::Build, и всеми известными мне дистрибутивами Linux.

10
ответ дан 3 December 2019 в 15:34
поделиться

Я подозреваю, что большая часть вашей путаницы связана с ссылкой на страницу, на которую вы ссылаетесь, пропагандирующей «номера» в стиле 1.2.3.Они не полностью поддерживаются всей цепочкой инструментов (независимо от того, что могут сказать другие) и не должны использоваться. Они не дают никаких преимуществ по сравнению с простой числовой версией, поскольку для совместимости они во многих местах должны рассматриваться как просто числа (например, 1.2.3 обрабатывается как 1.002003).

Правильный способ объявить номер версии прост, если у вас нет компонента XS или индикатора альфа / бета (_ в номере версии), так как тогда некоторые вещи должны видеть строку версии, а некоторые - номер версии. . Потом все усложняется. perlmodstyle предоставляет правильную формулировку:

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

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

(Предполагается, что $ VERSION и $ XS_VERSION уже были объявлены; в противном случае просто добавьте наш в первые две строки.)

7
ответ дан 3 December 2019 в 15:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: