如何在Perl中指定包版本?

Dre*_*ens 5 perl perl-module version

我对5.10.0之前的文档与最新的版本模块之间存在冲突的建议感到有些困惑. Perl最佳实践清楚地表明版本字符串('v1.0.3')是坏的,并且应该指定一个版本,如下所示:

use version; our $VERSION = qv('1.0.3');
Run Code Online (Sandbox Code Playgroud)

但版本模块说我们回到使用版本字符串:

use version 0.77; our $VERSION = qv("v1.2.3");
Run Code Online (Sandbox Code Playgroud)

我们退步了,或者这背后有原因吗?

ire*_*ses 8

您对Perl最佳实践的引用并不完全正确.具体来说,裸露的 vstrings形式

our $VERSION = v1.0.3;
Run Code Online (Sandbox Code Playgroud)

气馁.在最新版本的version.pm中,建议使用真正的字符串:

use version 0.77; our $VERSION = qv("v1.2.3");               # shorthand
Run Code Online (Sandbox Code Playgroud)

添加此功能是为了提高可读性,同时特别避免此处描述的裸字符串陷阱.

正如您链接的文档页面所说,您可以在Perl 5.10中使用没有预先挂起的'v'的版本使用内置逻辑:

如果你有一个使用十进制$ VERSION(浮点)的模块,并且你不想改变它,那么这个模块不适合你.没有任何版本.pm通过简单的$ VERSION赋值获得你.

因此,您的问题的答案是:如果您正在编写使用version.pm的新代码,请使用新的"v1.0.3"语法.如果您的旧代码是如何编写的,或者如果您不想明确依赖module.pm,请坚持使用普通数字.

  • 最新的福音是你在上面给出的形式v1.0.3的vstrings是好的但是形式1.0.3的真正的BARE vstrings(两位小数,没有v)是邪恶的,邪恶的,邪恶的.这直接来自perl5搬运工. (2认同)