我刚注意到Catalyst.pl
生成的这个。这显然是某种未经注释的黑客攻击。设置这样的版本字符串有什么好处?我甚至无法弄清楚他们想要做什么。
our $VERSION = '0.01';
$VERSION = eval $VERSION;
答案 0 :(得分:25)
Perl中的版本号很复杂。对于那些寻找血腥细节的人来说Here's an excellent overview。你可能会惊讶地发现有多少微妙的方法可以解决问题......
但问题的直接答案是,不同的东西需要不同的格式。对于CPAN,您关心开发版本,例如,作为字符串。对于运行时,您将它们视为数字。
考虑$VERSION = "0.01_001"
的情况。 eval
正确地将其转换为数字0.01001
。
答案 1 :(得分:12)
来自perlmodstyle: Version numbering
如果你想发布'beta'或 模块的'alpha'版本,但不是 希望CPAN.pm将其列为最新版本 在常规版本之后使用'_' 数字后跟至少2位数, 例如。 1.20_01。如果你这样做,那么 建议使用以下习语:
- $ VERSION =“1.12_01”;
- $ XS_VERSION = $ VERSION; #只有在拥有XS代码时才需要
- $ VERSION = eval $ VERSION;
醇>只有MakeMaker这个技巧 阅读第一行,从而阅读 强调,而perl翻译 将评估$ VERSION并转换 将字符串转换为数字。后来 将$ VERSION视为一个操作 数字将能够这样做 没有引发警告 $ VERSION不是数字。
答案 2 :(得分:6)
eval将字符串"0.001_001"
转换为数字,遵循Perl数字文字的规则(允许下划线表示易读性)。结果是数字0.001001
。
如果没有eval,字符串将转换为遵循转换字符串规则的数字,该字符串将停在第一个非数字字符处。
例如:perl -e 'print "0.001_001" + 0'
答案 3 :(得分:5)
我可能会错误地记住这一点,但我认为一些自动代码解析器喜欢看到代码行:
our $VERSION = '0.01';
但是你真的想要$ VERSION来保持一个浮点而不是一个字符串。
您可能需要阅读this article,我知道我要去。
哦,亲爱的上帝,现在我记得为什么我用
our $VERSION = 20100903;
样式版本号。那只是疯了。我喜欢Perl,但那是纯粹的,精致的,浓缩的疯狂。我不会试图总结David Golden的文章。你只需要阅读并哭泣。