为什么版本排序顺序颠倒了?

时间:2018-05-06 11:20:14

标签: perl sorting

我有以下代码来排序版本号:

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

2 个答案:

答案 0 :(得分:4)

documentation for version有此

  

虚线十进制:裸v字符串(v1.2.3)和带有多个小数点和前导'v'(“v1.2.3”)的字符串;注意你可以在技术上使用带有前导v和只有一个小数点的v-string或字符串(v1.2或“v1.2”),但你会混淆自己和其他人

问题是15.8解析为v5.800.015.8.1变为v15.8.1

您可以在version::Internals

了解更多相关信息

答案 1 :(得分:0)

您只需在版本前添加v即可。

chomp(my @versions = <>);
my @sorted_versions = sort {
    version->parse( "v$a" ) cmp version->parse( "v$b" )
} @versions;
print "$_\n" for @sorted_versions;