我该如何控制Perl Moose对象的版本?

时间:2010-10-03 19:33:23

标签: perl versioning moose

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

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

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

1 个答案:

答案 0 :(得分:10)

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

您展示的eval构造是一个kludge。模块的常规版本与开发版本之间存在区别。传统上由$VERSION表示,其中带有下划线。这意味着类似0.001的内容将是正常的稳定版本,而像0.001_01这样的内容将是开发版本。

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

你会在很多代码中找到这个成语。幸运的是,它有一个很好的替代品。您可以在可以使用-TRIAL标志上传到CPAN的发行版tarball中执行此操作,而不是在单个模块的版本号中指示开发状态与非开发状态。

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

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

package My::Package 0.001;

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