基本的词汇排序

@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 localecmp 会考虑特定于语言环境的整理顺序,例如它会在丹麦语环境下将Å分类为 A,但是在英语或德语之后的 Z 之后。但是,它不考虑更复杂的 Unicode 排序规则,也不提供对订单的任何控制 - 例如,电话簿通常与字典排序不同。对于这些情况,建议使用 Unicode::Collate,特别是 Unicode::Collate::Locale 模块。