3

我应该使用 Perl 比较一些应用程序的版本。问题是,每个版本的最后一部分都可以由数字以及按字母顺序对应的字母设置,即:

12.3a == 12.31
12.3b == 12.32
12.3c <> 12.34

我看到了版本模块,但它似乎只处理数字和下划线。
也许我应该使用重载?什么是最好和最优雅的解决方案?

4

3 回答 3

3

这是一个奇怪的规格。规范化可能是要走的路。

use version qw( qv );

sub normalise_version {
    my ($v) = @_;
    $v =~ s/([a-i])/ ord($1)-ord('a')+1 /eg;
    return qv("v$v");
}

normalise_version($v1) <=> normalise_version($v2)

与上面的 12.3 相比,被认为小于 12.31。让我知道这是否是错误的。

于 2012-08-10T15:38:47.230 回答
3

您可以尝试Sort::Versions。从模块描述:

Sort::Versions 允许对混合的非数字和数字字符串进行轻松排序,例如许多共享库系统和修订控制包使用的“版本号”。如果您尝试处理共享库,这将非常有用。它还可以应用于在文本中散布可变宽度数字字段的应用程序。毫无疑问,可以找到其他应用程序。

于 2012-08-10T15:51:31.517 回答
1

你看过 David Wheeler 的SemVer吗?

于 2012-08-10T15:31:38.813 回答