【问题标题】:Perl version string: why use EVAL EXPR?Perl 版本字符串:为什么使用 EVAL EXPR?
【发布时间】:2011-04-08 01:16:03
【问题描述】:

我刚刚注意到Catalyst.pl 生成的这个。这显然是某种未注释的 hack。像这样设置版本字符串有什么好处?我什至无法弄清楚他们想要做什么。

our $VERSION = '0.01';
$VERSION = eval $VERSION;

【问题讨论】:

    标签: perl version catalyst


    【解决方案1】:

    eval 将字符串 "0.001_001" 转换为数字,遵循 Perl 数字文字的规则(允许使用下划线以提高可读性)。结果是数字0.001001

    如果没有 eval,则按照字符串转换规则将字符串转换为数字,该规则在第一个非数字字符处停止。

    例如:perl -e 'print "0.001_001" + 0'

    【讨论】:

      【解决方案2】:

      来自perlmodstyle: Version numbering

      如果您想发布“测试版”或 模块的“alpha”版本,但不 希望 CPAN.pm 将其列为最新 在常规版本之后使用“_” 数字后跟至少 2 位数字, 例如。 1.20_01。如果你这样做, 推荐以下成语:

      1. $VERSION = "1.12_01";
      2. $XS_VERSION = $VERSION; # 仅当您有 XS 代码时才需要
      3. $VERSION = 评估 $VERSION;

      有了这个技巧,MakeMaker 只会 阅读第一行,从而阅读 下划线,而 perl 解释器 将评估 $VERSION 并转换 将字符串转换为数字。之后 将 $VERSION 视为 然后号码将能够这样做 没有引起警告 $VERSION 不是数字。

      【讨论】:

        【解决方案3】:

        我可能记错了,但我认为一些自动代码解析器喜欢查看代码行:

         our $VERSION = '0.01';
        

        但您确实希望 $VERSION 保存浮点数而不是字符串。

        您可能想阅读this article,我知道我会阅读。

        哦,天哪,现在我记得我为什么要使用

        our $VERSION = 20100903;
        

        样式版本号。那简直是疯了。我喜欢 Perl,但那是纯粹的、精致的、集中的精神错乱。我不会试图总结 David Golden 的文章。您只需阅读它并哭泣。

        【讨论】:

        • 在回答“你最喜欢的编程语言有哪些 5 件事是你讨厌的?”时,版本号占据了我的前 3 位。
        • @szbalint:那么这似乎是一个没有经过深思熟虑的前 5 名。
        【解决方案4】:

        版本号在 Perl 中很复杂。 Here's an excellent overview 对于那些寻找血腥细节的人。您可能会惊讶地发现有多少微妙的方法可以让事情出错......

        不过,您的问题的直接答案是,不同的事物需要不同的格式。对于 CPAN,您关心开发版本,例如,作为字符串。对于运行时,您将它们视为一个数字。

        考虑$VERSION = "0.01_001" 的情况。 eval 将其正确转换为数字0.01001

        【讨论】:

        • 天哪,我不知道 perl 版本如此可怕。为精彩文章 +1。
        • 感谢该链接,这是我读过的更好的 Perl 博客文章之一。这确实很好地解释了这个问题(但它确实要求更新 version.pm 变体)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多