我有以下代码来对版本号进行排序:
如果我将以下文件进行管道传输:
输出是:
为什么?本应该是这样的:
chomp(my @versions = <>);
my @sorted_versions = sort {
version->parse( $a ) cmp version->parse( $b )
} @versions;
print "$_\n" for @sorted_versions;
如果我将以下文件进行管道传输:
cat version_file
15.8
15.8.1
输出是:
15.8.1
15.8
为什么?本应该是这样的:
15.8
15.8.1
我已经检查过脚本运行时cmp
返回1的情况。
cmp
在左参大于右参时返回 1。问题是否在version->parse
函数内部? - bipll15.8
被解释为15.800000
,而15.8.1
被解释为15.008001
。你应该将15.8
转换为更现代的格式:15.8.0
。 - Håkon Hæglandsort
之前循环遍历@versions
并修复它呢? - Håkon Hæglandsub fixup { $_[0] =~ s/^[^.]*\.[^.]*\K$/.0/r }
,然后在sort
子例程中执行version->parse( fixup($a) ) cmp version->parse( fixup($b) )
。 - Håkon Hægland