Using my quick-intuition, are these methods sorting on the earliest number withing the string, ignoring the non-digits?
$ raku -e '.say for <bk10 bk34 bk2 bk1>.sort: {m/ \d+ /.Int}' $ raku -e '.say for <bk10 bk34 bk2 bk1>.sort: +*.match: / \d+ /' let's see $ raku -e '.say for <say31 what20 the30letters40 does2 not3 it1 matter10>.sort: {m/ \d+ /.Int}' it1 does2 not3 matter10 what20 the30letters40 say31 What's been interesting about this thread is not only the variety of solutions, also that the solutions are for two different questions- how to sort by alpha & numeric segments (b3b, a1a, c20c) => (a1a, b3b, c2c) how to sort by a numeric segment only (b3b, a1a, c20c) => (a1a, b3b, c20c) -y On Thu, Mar 7, 2024 at 4:40 PM Ralph Mellor <ralphdjmel...@gmail.com> wrote: > On Tue, Mar 5, 2024 at 7:01 AM ToddAndMargo via perl6-users > <perl6-us...@perl.org> wrote: > > > >> $ raku -e '.say for <bk10 bk34 bk2 bk1>.sort(*.split(/\d+/, > :kv).map({ (try .Numeric) // $_}).List)' > > >> > > >> Yippee! > > > > raku -e '.say for <bk10 bk34 bk2 bk1>.sort: { .comb(/ \d+ | \D+ > /).map({ .Int // .self }).cache };' > > > > Awesome! Now I have two different methods! > > And now 4: > > $ raku -e '.say for <bk10 bk34 bk2 bk1>.sort: {m/ \d+ /.Int}' > bk1 > bk2 > bk10 > bk34 > > or, same logic, but spelled differently: > > $ raku -e '.say for <bk10 bk34 bk2 bk1>.sort: +*.match: / \d+ /' > bk1 > bk2 > bk10 > bk34 > > -- > love, raiph >