在Perl中声明包版本方法的优缺点是什么?

bur*_*rsk 15 versioning perl timtowtdi

模块很酷,特别是当它们带有版本控制时.您可以定义最小模块版本以防止要使用的方法泄漏.但是每个光线都有一个黑暗的一面,这意味着Perl的TIMTOWTDI.

在作为Perl开发人员近七年后,我看到并以多种方式编写了版本声明.有些很容易被指出为坏,有些则不然.由于没有人能完全了解某种语言,所以我想问问你们,Perl中以下软件版本的优缺点是什么.

如果您发现一个泄漏,请不要犹豫,评论更多的版本定义方式;)

请尊重:

  • 奇怪的需要/使用可能导致故障检测模块版本的模块(编译与运行时)
  • PAUSE/CPAN解析(和其他常见服务)
  • 最终用户的可读性
  • 开发人员的可维护性

在Perl中声明包版本方法的优缺点是什么?

方法1

package PackageName;
BEGIN {
  use version 0.77; our $VERSION = version->new('v0.0_1');
}
Run Code Online (Sandbox Code Playgroud)

方法2

package PackageName;
BEGIN {
  our $VERSION = 0.000_01;
}
Run Code Online (Sandbox Code Playgroud)

方法3

package PackageName;
BEGIN {
  our $VERSION = 0.0.1;
}
Run Code Online (Sandbox Code Playgroud)

方法4

package PackageName;
use version 0.77; our $VERSION = version->new('v0.0_1');
Run Code Online (Sandbox Code Playgroud)

方法5

package PackageName;
our $VERSION = 0.000_01;
Run Code Online (Sandbox Code Playgroud)

方法6

package PackageName;
our $VERSION = 0.0.1;
Run Code Online (Sandbox Code Playgroud)

Mit*_*ldu 8

正确的答案是,这样做:

package My::Thing;
our $VERSION = "0.001";
Run Code Online (Sandbox Code Playgroud)

版本应始终为十进制数,使用三位数拆分约定.上面的版本将缩短到v0.1.0,改变你将定义你的版本的缩写形式的第3步:0.001001这将是v0.1.1缩写.

不要将下划线放入您的版本号以标记开发版本.Perl工具链后来采用了-TRIAL机制,例如Dist :: Zilla 4.101800-TRIAL.这样做的好处是代码中的版本号不需要更改.通过添加-TRIAL,只能从标准中修改发布文件名和元文件.

编辑:

在阅读了daxim的回答并稍稍思考之后,我必须同意将版本号放在引号中.它不会以任何方式改变功能,但会降低0.00101被误认的可能性,v0.1.1实际上v0.1.10并且更清楚地被读作0.001010.


dax*_*xim 5

最佳实践根据我潜伏多年后#toolchain和各种模块相关的邮件列表.

例子

对于模块:

package Foo::Bar 2.001; # 2nd version of revision 2
package Fnord 2.420;    # 421st version of revision 2
Run Code Online (Sandbox Code Playgroud)

除此以外:

our $VERSION = '2.001'; # 2nd version of revision 2
our $VERSION = '2.420'; # 421st version of revision 2
Run Code Online (Sandbox Code Playgroud)

合理

每个模块都必须有一个版本,否则在分配分发时准确指定依赖关系是有问题的.当分发版本和每个模块的版本相同并且在锁定步骤中增加时,它最有效.为了简化这一点,请使用perl-reversion,它是Perl :: Version的一部分.每次需要依赖分发外部代码的新功能或更改的API时,请增加版本.

使用package声明时,版本是有理数.如果package声明不合适,则声明magic $VERSION变量,然后版本为字符串.

在任何情况下,版本都包含一个修订号,一个文字点作为分隔符和一个版本号,完全在表单中y.xxx.y是一个自然数,xxx正好是三个零填充数字.字符串引用可防止尾随零消失.填充到相同数量的数字可防止混淆1.10 < 1.9.只有一个分隔符可以避免混淆5.10.1 == 5.010001.

请勿使用版本模块声明版本.使用普通字符串可以防止v分发tarball名称中的丑陋前缀.但是,使用模块处理版本(例如用于比较它们)是个好主意.

不要使用v-strings.他们很难理解.

不要使用下划线.使用下划线需要评估版本以将其转换为数字.如果要将分发标记为PAUSE索引器的候选发布,请将该单词添加TRIAL到分发名称.

VERSION只能通过通用类方法访问版本.

perl -mLWP::Simple -E'say LWP::Simple->VERSION'
Run Code Online (Sandbox Code Playgroud)

合规

该计划完全符合中提出的建议

它与semver不兼容.