【问题标题】:How should I control versions of my Perl Moose objects?我应该如何控制我的 Perl Moose 对象的版本?
【发布时间】:2010-10-03 19:33:22
【问题描述】:

我是Moose 新手,我想知道是否常见

our $VERSION = "0.001";
$VERSION = eval $VERSION;

也应该在 Moose 包中使用,或者Moose 有一些替代的版本控制方式。在 Moose 文档中找不到参考。

【问题讨论】:

标签: perl versioning moose


【解决方案1】:

与所有 perl 软件包一样,在其中定义 $VERSION 通常是个好主意。这允许其他事物正确地依赖它们的版本以及它们需要的所有功能,方法是在它们的 Makefile.PL 或等效项中声明依赖项,或者直接在使用 use SomeModule 1.23; 加载模块时。

您展示的eval 构造是一个杂项。模块的常规版本和开发版本之间是有区别的。传统上,这由带有下划线的$VERSION 表示。这意味着像 0.001 这样的东西将是一个正常的稳定版本,而像 0.001_01 这样的东西将是一个开发版本。

eval 用于在运行时删除该下划线,同时仍将其保留在各种工具(包括 PAUSE、Perl Authors Upload SErver)提取的版本字符串中。这是为了避免0.001_01 is not numeric in ...等警告。

您会在大量代码中找到该惯用语。幸运的是,有一个很好的替代方案。除了在单个模块的版本号中指示开发与非开发状态之外,您还可以在发布 tarball 中使用-TRIAL 标志来执行此操作,您可能会上传到 CPAN。

您可以将其重命名为My-Distribution-0.001-TRIAL.tar.gz,而不是将您的分发上传为My-Distribution-0.001.tar.gz。 CPAN 工具将选择它并将其视为相应的开发版本。请注意,-TRIAL 不是 $VERSION 的一部分,只是 tarball 名称的一部分。因此eval kludge 变得不必要了。

另请注意,还有其他方法可以声明包的$VERSION。从 perl 5.12.0 开始,您可以在包声明中正确声明它:

package My::Package 0.001;

但是,这些都不是Moose 所特有的。

【讨论】:

  • +1 感谢您的详细回答和更新。 perl 5.12.0.
  • 不,你没有。 package NAME VERSION; 是早期 perls 中的语法错误,因此不需要显式启用此功能。你仍然可以这样做,并免费获得use 5.012 为你做的所有其他事情,例如,启用strict pragma。
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
相关资源
最近更新 更多