基本的詞彙排序
@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
模組。