.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Sort::Key::Maker 3" .TH Sort::Key::Maker 3 2023-07-25 "perl v5.38.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME Sort::Key::Maker \- multi\-key sorter creator .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 2 \& # 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; .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" Sort::Key::Maker is a pragmatic module that provides an easy to use interface to Sort::Key multi-key sorting functionality. .PP It creates multi-key sorting functions on the fly for any key type combination and exports them to the caller package. .PP The key types natively accepted are: .PP .Vb 2 \& string, str, locale, loc, integer, int, \& unsigned_integer, uint, number, num .Ve .PP and support for other types can be added via Sort::Key::Register (or also via \fBSort::Key::register_type()\fR). .SS USAGE .IX Subsection "USAGE" .ie n .IP "use Sort::Key::Maker foo_sort => @keys;" 4 .el .IP "use Sort::Key::Maker foo_sort => \f(CW@keys\fR;" 4 .IX Item "use Sort::Key::Maker foo_sort => @keys;" exports two subroutines to the caller package: \f(CW\*(C`foo_sort (&@)\*(C'\fR and \&\f(CW\*(C`foo_sort_inplace (&\e@)\*(C'\fR. .Sp Those two subroutines require a sub reference as their first argument and then respectively, the list to be sorted or an array. .Sp For instance: .Sp .Vb 1 \& 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; .Ve .ie n .IP "use Sort::Key::Maker foo_sort => \e&genmultikey, @keys;" 4 .el .IP "use Sort::Key::Maker foo_sort => \e&genmultikey, \f(CW@keys\fR;" 4 .IX Item "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.: .Sp .Vb 2 \& use Sort::Key::Maker sort_by_length => sub { length $_ }, \*(Aqint\*(Aq; \& my @sorted = sort_by_length qw(foo goo h mama picasso); .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Sort::Key, Sort::Key::Register. .PP Sort::Maker also available from CPAN provides similar functionality. .SH AUTHOR .IX Header "AUTHOR" Salvador Fandiño, .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (C) 2005, 2014 by Salvador Fandiño .PP 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.