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