在perl中使用格式x.x.x.x对数字进行排序

比如说数字是格式的:
1.1.10
1.1.10.1
1.1.10.2
1.1.11
1.1.12
1.1.13
1.1.13.1
1.1.3
1.1.4

而我正在寻找的输出是:

1.1.3
1.1.4
1.1.10
1.1.10.1
1.1.10.2
1.1.11
1.1.12
1.1.13
1.1.13.1

解决方法

use Sort::Key::Natural qw( natsort );
my @sorted = natsort @data;

或(没有模块)

my @sorted =
   map $_->[0],sort { $a->[1] cmp $b->[1] }
   map [ $_,pack('C*',split /\./) ],@data;

或(没有模块,速度更快,但需要数组而不是输入列表)

my @sorted =
   map $data[unpack('N',$_)],sort
   map pack('NC*',$_,split /\./,$data[$_]),0..$#data;

在包模板中,您可以将C更改为n或N. C允许最多255个数字.n允许数字最多为65,535. N允许数量高达40亿.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...