Sort::Key::Maker(3)

πŸ’– Sort::Key::Maker(3) πŸ’–

okay so this is Sort::Key::Maker(3) from the User Contributed Perl Documentation, and it’s literally the manual page for a multi-key sorter creator. Bestie, it’s giving β€œtiny module, big sorting energy.” ✨

πŸŽ€ NAME πŸŽ€

Sort::Key::Maker β€” multi-key sorter creator. No cap, that’s the whole name. πŸ’…

✨ SYNOPSIS ✨

Here’s the vibe, bestie β€” code is copied exactly, so don’t come for me:

  # create a function that sorts strings by length:
  use Sort::Key::Maker sort_by_length => sub { length $_},  qw(integer);

  # create a multi-key sort function;
  # first key is integer sorted in descending order,
  # second key is a string in default (ascending) order:
  use Sort::Key::Maker ri_s_keysort => qw(-integer string);

  # some sample data...
  my @foo = qw(foo bar t too tood mama);

  # and now, use the sorter functions previously made:

  # get the values on @foo sorted by length:
  my @sorted = sort_by_length @foo;

  # sort @foo inplace by its length and then by its value:
  ri_s_keysort_inplace { length $_, $_ } @foo;

🌸 DESCRIPTION 🌸

Sort::Key::Maker is a pragmatic module that gives you an actually easy-to-use interface to Sort::Key multi-key sorting functionality. It creates multi-key sorting functions on the fly for any key type combination and exports them to the caller package. Like, it’s lowkey magic but it’s also just Perl doing Perl things. πŸ¦‹

The key types natively accepted are:

  string, str, locale, loc, integer, int,
  unsigned_integer, uint, number, num

and support for other types can be added via Sort::Key::Register (or also via Sort::Key::register_type()). Slay. 🌈

πŸ› οΈ USAGE πŸ› οΈ

First form: use Sort::Key::Maker foo_sort => @keys;

This exports two subroutines to the caller package: "foo_sort (&@)" and "foo_sort_inplace (&\@)". πŸ‘‘

Those two subroutines require a sub reference as their first argument and then respectively, the list to be sorted or an array. Fr fr, that’s the whole contract.

For instance:

  use Sort::Key::Maker bar_sort => qw(int int str);

  @bar=qw(doo tomo 45s tio);
  @sorted = bar_sort { unpack "CCs", $_ } @bar;
  # or sorting @bar inplace
  bar_sort_inplace { unpack "CCs", $_ } @bar;

Second form: use Sort::Key::Maker foo_sort => \&genmultikey, @keys;

When the first argument after the sorter name is a reference to a subroutine, it is used as the multi-key extraction function. The generated sorter functions doesn’t require neither accept one, i.e.: 😭

  use Sort::Key::Maker sort_by_length => sub { length $_ }, 'int';
  my @sorted = sort_by_length qw(foo goo h mama picasso);

πŸ¦‹ SEE ALSO πŸ¦‹

  • Sort::Key
  • Sort::Key::Register

Sort::Maker is also available from CPAN and provides similar functionality. iykyk. 🫢

πŸ‘‘ AUTHOR πŸ‘‘

Salvador FandiΓ±o, <sfandino@yahoo.com> β€” the icon behind this whole sorter situation. πŸ’œ

Copyright (C) 2005, 2014 by Salvador FandiΓ±o.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available. Periodt. πŸ“


xoxo bestie πŸ’– β€” this page says perl v5.42.0, dated 2015-04-14, and the manual is Sort::Key::Maker(3). πŸŽ€

πŸ“¦ where this page comes from