Perl版本字符串:为什么使用EVAL EXPR?
我刚刚注意到了由Perl版本字符串:为什么使用EVAL EXPR?,perl,version,catalyst,Perl,Version,Catalyst,我刚刚注意到了由Catalyst.pl生成的这一点。这显然是一种未加注释的黑客行为。设置这样的版本字符串有什么好处?我甚至不知道他们想干什么 our $VERSION = '0.01'; $VERSION = eval $VERSION; 我可能记错了这一点,但我认为一些自动代码解析器喜欢看到代码行: our $VERSION = '0.01'; 但您确实希望$VERSION保存一个浮点值而不是字符串 你可能想读书,我知道我会的 哦,天哪,现在我想起来我为什么要用 our $VERSION
Catalyst.pl
生成的这一点。这显然是一种未加注释的黑客行为。设置这样的版本字符串有什么好处?我甚至不知道他们想干什么
our $VERSION = '0.01';
$VERSION = eval $VERSION;
我可能记错了这一点,但我认为一些自动代码解析器喜欢看到代码行:
our $VERSION = '0.01';
但您确实希望$VERSION保存一个浮点值而不是字符串
你可能想读书,我知道我会的
哦,天哪,现在我想起来我为什么要用
our $VERSION = 20100903;
样式版本号。那简直是疯了。我喜欢Perl,但那是纯粹的、精炼的、集中的疯狂。我不会试图总结大卫·戈尔登的文章。你只需要读一读就知道了。Perl中的版本号很复杂。对于那些寻找血淋淋细节的人。你可能会惊讶于有多少微妙的方式让事情出错 不过,对你的问题的直接回答是,不同的事物需要不同的格式。对于CPAN,您关心开发版本,例如,作为字符串。对于运行时,您将它们视为一个数字
考虑
$VERSION=“0.01_001”
的情况eval
正确地将其转换为数字0.01001
。eval将字符串“0.001_001”
转换为数字,并遵循Perl数字文本规则(允许使用下划线进行易读性)。结果是数字0.001001
如果没有eval,字符串将按照转换字符串的规则转换为数字,该规则将在第一个非数字字符处停止
例如:perl-E'print“0.001\u 001”+0'
来自
如果您想发布“beta版”或
模块的“alpha”版本,但不包括
希望CPAN.pm将其列为最新
在常规版本后使用“\u1”
数字后跟至少2位数字,
例1.20_01。如果你这样做,那么
建议使用以下习语:
当我回答“你最喜欢的编程语言中最讨厌的5件事是什么?”时,版本号占据了前3位。@szbalint:那似乎是一个考虑不周的前5位。天哪,我不知道perl版本这么可怕+感谢你的链接,这是我读过的最好的Perl博客文章之一。这确实很好地解释了这个问题(但它确实要求更新
version.pm
变体)。