我刚刚注意到这个由Catalyst.pl
. 这显然是某种未注释的 hack。像这样设置版本字符串有什么好处?我什至无法弄清楚他们想要做什么。
our $VERSION = '0.01';
$VERSION = eval $VERSION;
Perl 中的版本号很复杂。对于那些寻找血腥细节的人来说,这是一个很好的概述。您可能会惊讶于有多少微妙的方法可以让事情出错......
不过,对您的问题的直接回答是,不同的事物需要不同的格式。对于 CPAN,您关心开发版本,例如,作为字符串。对于运行时,您将它们视为一个数字。
考虑 的情况$VERSION = "0.01_001"
。eval
将其0.01001
正确转换为数字。
如果您想发布模块的“beta”或“alpha”版本,但不希望 CPAN.pm 将其列为最新版本,请在常规版本号后使用“_”,后跟至少 2 位数字,例如。1.20_01。如果这样做,建议使用以下成语:
- $VERSION = "1.12_01";
- $XS_VERSION = $版本;# 只有当你有 XS 代码时才需要
- $VERSION = 评估 $VERSION;
有了这个技巧,MakeMaker 将只读取第一行并因此读取下划线,而 perl 解释器将评估 $VERSION 并将字符串转换为数字。稍后将 $VERSION 视为数字的操作将能够这样做,而不会引发有关 $VERSION 不是数字的警告。
eval 将字符串转换"0.001_001"
为数字,遵循 Perl 数字文字的规则(允许下划线以提高可读性)。结果是数字0.001001
。
如果没有 eval,则字符串将按照转换字符串的规则转换为数字,该规则在第一个非数字字符处停止。
例如:perl -e 'print "0.001_001" + 0'
我可能记错了,但我认为一些自动代码解析器喜欢查看代码行:
our $VERSION = '0.01';
但是你真的希望 $VERSION 保存一个浮点数而不是一个字符串。
你可能想读这篇文章,我知道我会去的。
哦,天哪,现在我记得我为什么使用
our $VERSION = 20100903;
样式版本号。那简直是疯了。我喜欢 Perl,但那是纯粹的、精致的、集中的精神错乱。我不会试图总结 David Golden 的文章。你只需要阅读它并哭泣。