print "@_\n"; 4109 4121 6823 12967 12971 14003 20186
如何在Perl中进行排序?
使用@sorted = sort(@_);给我一个字母顺序
13041 13045 14003 20186 4109 4121 6823
如何获得数字订购? Perl是否具有内置的合并排序,插入排序等功能?
解决方法
您可以将自定义比较函数传递给Perl的排序例程.只需使用:
@sorted = sort { $a <=> $b } @unsorted;
排序函数以代码块的形式接受自定义比较函数作为其第一个参数. {…}部分只是这个代码块(见http://perldoc.perl.org/functions/sort.html).
只要需要比较要排序的数组中的两个元素,sort将会调用此自定义比较函数. sort总是通过两个值来比较为$a,$b,比较函数必须返回比较结果.在这种情况下,它只是使用运算符进行数值比较(参见http://perldoc.perl.org/perlop.html#Equality-Operators),这可能是为了这个目的而创建的:-).
“Perl Cookbook”,第04章第15章(购买这本书 – 这是值得的)无耻的解决方案!