2009-08-01 8 views
5

Я немного смущен противоречивым советом между документами до 5.10.0 и более последним модулем version. Perl Best Practices делает это довольно ясно, что версия строки («v1.0.3») плохо, и один должен указать версию следующим образом:Как вы определяете версию пакета в Perl?

use version; our $VERSION = qv('1.0.3'); 

но модуль версии говорит, что мы вернулись к использованию версии строк:

use version 0.77; our $VERSION = qv("v1.2.3"); 

Мы регрессировали или есть причина этого?

+0

См. Также http://stackoverflow.com/questions/1878108/whats-the-modern-way-of-declaring-which-version-of-perl-to-use – Ether

ответ

8

Ваша цитата из Perl Best Practices не совсем прав. В частности, голые vstrings вида

our $VERSION = v1.0.3; 

обескуражены. В последней версии version.pm, рекомендация использовать истинные строки:

use version 0.77; our $VERSION = qv("v1.2.3");    # shorthand 

Эта функция была добавлена, чтобы помочь читаемость, а конкретно избегать ловушек босых строк описано here.

Как страницы дока вы связаны говорит, вы можете использовать версии без предварительного ожидании «V», используя встроенную логику в Perl 5.10:

Если у вас есть модуль, который использует десятичный $ ВЕРСИЯ (с плавающей запятой), и вы не собираетесь ее менять, этот модуль не для вас. Существует ничего, что version.pm получает вас за простое назначение $ VERSION.

Итак, ответ на ваш вопрос: используйте новый синтаксис «v1.0.3», если вы пишете новый код, который использует версию.pm. Придерживайтесь простого числа, если это так, как писал ваш старый код, или если вы не хотите явно зависеть от module.pm.

+2

Новейшим Евангелием является то, что vstrings формы v1.0.3, как вы указываете выше, все в порядке, но ДЕЙСТВИТЕЛЬНО ПЛОХИЕ vstrings формы 1.0.3 (два десятичных знака, нет v) являются злыми, злыми, злыми. Это прямо из perl5-носильщиков. – tsee