我应该使用Perl比较一些应用程序的版本。问题是,每个版本的最后一部分可以通过数字和字母顺序对应的字母来设置,即:
12.3a == 12.31
12.3b == 12.32
12.3c <> 12.34
我看到version module,但它似乎只处理数字和下划线 也许我应该使用overload? 什么是最好和最优雅的解决方案?
答案 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吗?