好吧,最简单的方法就是完全删除所有数字:
sub remove_numbers {
my ($orig) = @_;
$orig =~ s/\d+//g;
return $orig;
}
但这有点幼稚:例如,some-package-1.4.1并且some-package-1.4不相等。最好也删除点,但前提是它们跟随数字(用作分隔符)。
$orig =~ s/\d+[.]?//g;
更重要的是,也许数字之前的第一个连字符也应该去(所以 'package-name' 和 'package-name-1' (甚至 'package-name-1.0-some-fancy-line' 和 'package-name -some-fancy-line') 将被视为相同:
$orig =~ s/-?\d+[.]?//g;
更新:然而,有不止一种方法可以做到:
$orig = substr $orig, 0, rindex $orig, '-';
如果所有字符串都具有相同的格式(版本号始终位于字符串的末尾,始终跟在最后一个连字符后面,它始终存在),则适用:
使用如下:
if (remove_numbers($var1) eq remove_numbers($var2))