如何在Perl中比较字母及其对应的(按字母顺序)数字?

时间:2012-08-10 15:24:37

标签: perl comparison operator-overloading versioning

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

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

我看到version module,但它似乎只处理数字和下划线 也许我应该使用overload? 什么是最好和最优雅的解决方案?

3 个答案:

答案 0 :(得分: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。如果那是错的,请告诉我。

答案 1 :(得分:3)

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

  

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

答案 2 :(得分:1)

你见过David Wheeler的SemVer吗?