一) sort函数用法
sort LIST
sort BLOCK LIST
sort SUBNAME LIST
sort的用法有如上3种形式。它对LIST进行排序,并返回排序后的列表。假如忽略了SUBNAME或BLOCK,sort按标准字串比较顺序来进行(例如ASCII顺序)。如果指定了SUBNAME,它实际上是个子函数的名字,该子函数对比2个列表元素,并返回一个小于,等于,或大于0的整数,这依赖于元素以何种顺序来sort(升序,恒等,或降序)。也可提供一个BLOCK作为匿名子函数来代替SUBNAME,效果是一样的。
被比较的2个元素,会被临时赋值给变量$a和$b。它们以引用传递,所以不要修改$a或$b。假如使用子函数,它不能是递归函数。
二) 用法实例
1. 以数字顺序sort
与之一样的是:
这个很容易理解哦,它只是按自然数的顺序进行sort,偶就不细讲了。
2.1 以ASCII顺序(非字典顺序)进行sort
打印结果:
这等同于:
按ASCII的顺序进行排序,也没什么说的哦。
注意,如果对数字按ASCII顺序进行sort的话,结果可能与你想的不同:
2.2 以字典顺序sort
打印结果是:
use locale是可选的--它让code兼容性更好,假如原始数据包含国际字符的话。use locale影响了cmp,lt,le,ge,gt和其他一些函数的操作属性--更多细节见perllocale的man page。
注意atlarge和at_large的顺序在输出时颠倒了,尽管它们的sort顺序是一样的(sort中间的子函数删掉了at_large中间的下划线)。这点会发生,是因为该示例运行在perl 5.005_02上。在perl版本5.6前,sort函数不会保护有一样values的keys的先后顺序。perl版本5.6和更高的版本,会保护这个顺序。
注意哦,不管是map,grep还是sort,都要保护这个临时变量$_(sort里是$a和$b)的值,不要去修改它
在该code里,在对$a或$b进行替换操作s/[/W_]+//g前,先将它们重新赋值给$da和$db,这样替换操作就不会修改原始元素哦。
3. 以降序sort
降序sort比较简单,把cmp或<=>前后的操作数调换下位置就可以了。
4. 使用多个keys进行sort
要以多个keys来sort,将所有以or连接起来的比较操作,放在一个子函数里即可。将主要的比较操作放在前面,次要的放在后面。
打印结果是:
上述code看起来很复杂,实际上很容易理解哦。@employees数组的元素是匿名hash。匿名hash实际上是个引用,可使用->操作符来访问其值,例如$employees[0]->{SALARY}可访问到第一个匿名hash里SALARY对应

