Как мне объявить номер версии для модуля Perl? - PullRequest
10 голосов
/ 24 августа 2010

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

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

Ответы [ 3 ]

11 голосов
/ 24 августа 2010

use Module VERSION

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

Это делает простой шаблон:

package MyModule;

our $VERSION = 1.23;

# ...

1;
10 голосов
/ 24 августа 2010

Моя позиция , будь проще . Объявите вашу версию как строку, содержащую число с плавающей запятой. Оставьте несколько десятичных знаков для номеров версий 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 к номеру версии дистрибутива *1030*(например, загрузить Foo-Bar-1.90-TRIAL.tar.gz, содержащий Foo :: Bar 1.90).Это говорит CPAN перечислить его как разрабатываемый выпуск, как если бы он содержал подчеркивание. Dist :: Zilla облегчает создание пробных выпусков.

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

7 голосов
/ 24 августа 2010

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

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

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

$VERSION = "1.12_01";
$XS_VERSION = $VERSION; # only needed if you have XS code
$VERSION = eval $VERSION;

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

...