如何在Perl中指定软件包版本?

5

我有些困惑于早期版本(5.10.0之前)的文档和较新的version模块之间的矛盾建议。Perl最佳实践清楚地表明版本字符串('v1.0.3')是不好的,应该按以下方式指定版本:

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

但是版本模块表示我们又回到使用版本字符串了。
use version 0.77; our $VERSION = qv("v1.2.3");

我们是倒退了,还是有原因呢?

请参见https://dev59.com/HnI-5IYBdhLWcg3wZ3YR。 - Ether
1个回答

8
你从《Perl最佳实践》中引用的内容有些不正确。具体来说,形式为v字符串的格式是这样的:
our $VERSION = v1.0.3;

不鼓励使用版本.pm的最新版本中建议使用真正的字符串:

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

为了提高可读性,同时避免裸字符串的陷阱,此功能已被添加,具体请参见此处

正如您链接的文档页面所述,您可以使用Perl 5.10中内置的逻辑来使用没有前缀“v”的版本:

如果您有一个使用十进制$VERSION(浮点数)的模块,并且您不打算更改它,那么此模块对您无用。与简单的$VERSION分配相比,version.pm并没有什么优势。

因此,回答您的问题是:如果您正在编写使用version.pm的新代码,请使用新的“v1.0.3”语法。如果您的旧代码是以纯数字编写的,或者您不想明确依赖于module.pm,请继续使用纯数字。


2
最新的教义是,像您上面提供的v1.0.3形式的vstrings是可以的,但是只有两个小数点而没有v的REALLY BARE vstrings形式的1.0.3是邪恶的,非常邪恶。这是直接来自perl5-porters。 - tsee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接