基本的词汇排序
@sorted = sort @list;
@sorted = sort { $a cmp $b } @list;
sub compare { $a cmp $b }
@sorted = sort compare @list;
上面的三个例子完全相同。如果你不提供任何比较器功能或阻止,sort
假设你希望列表在其右侧按词汇排序。如果你只需要一些可预测的数据并且不关心语言的正确性,那么这通常就是你想要的形式。
sort
将 @list
中的项目对传递给比较器函数,该函数告诉 sort
哪个项目更大。cmp
操作符为字符串执行此操作,而 <=>
对数字执行相同操作。比较器经常被调用,平均 n * log( n )次, n 是要排序的元素数,所以它很快就很重要。这就是 sort
使用预定义的包全局变量($a
和 $b
)来传递要与块或函数进行比较的元素而不是正确的函数参数的原因。
如果你是 use locale
,cmp
会考虑特定于语言环境的整理顺序,例如它会在丹麦语环境下将Å
分类为 A
,但是在英语或德语之后的 Z
之后。但是,它不考虑更复杂的 Unicode 排序规则,也不提供对订单的任何控制 - 例如,电话簿通常与字典排序不同。对于这些情况,建议使用 Unicode::Collate
,特别是 Unicode::Collate::Locale
模块。