Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl版本字符串:为什么使用EVAL EXPR?_Perl_Version_Catalyst - Fatal编程技术网

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。如果你这样做,那么 建议使用以下习语:

  • $VERSION=“1.12_01”
  • $XS_VERSION=$VERSION;#仅当您有XS代码时才需要
  • $VERSION=eval$VERSION 有了这个把戏,MakeMaker只会 读第一行,然后读第二行 下划线,而perl解释器 将计算$VERSION并转换 将字符串转换为数字。后来 将$VERSION视为 然后,数字将能够这样做 在没有引起警告的情况下 $VERSION不是一个数字


    当我回答“你最喜欢的编程语言中最讨厌的5件事是什么?”时,版本号占据了前3位。@szbalint:那似乎是一个考虑不周的前5位。天哪,我不知道perl版本这么可怕+感谢你的链接,这是我读过的最好的Perl博客文章之一。这确实很好地解释了这个问题(但它确实要求更新
    version.pm
    变体)。