# cmp. Generic, "smart" three-way comparator. multi sub infix:(Any, Any) multi sub infix:(Real:D, Real:D) multi sub infix:(Str:D, Str:D) multi sub infix:(Version:D, Version:D) # Compares strings with string semantics, numbers with number semantics, Pair objects first by key and then by value etc. # if $a eqv $b, then $a cmp $b always returns Order::Same. Otherwise Order::Less or Order::More. #### dd 'a ä b'.comb.sort; (" ", " ", "a", "b", "ä").Seq; #### subset CzechString of String; multi sub infix:(CzechString $a, CzechString $b) { # sort logic here } #### sub czech-sort(String $a, String $b) { # sort logic here } @czech-words.sort( &czech-sort ); #### dd ([1,'z'], [2,'a'], ['1', 'a']).sort( *.[0,1] ); (["1", "a"], [1, "z"], [2, "a"]).Seq dd ([1,'z'], [2,'a'], ['1', 'a']).sort( { $^a[0] <=> $^b[0] || $^a[1] cmp $^b[1] });