The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Sort::SubList - Sort only certain elements in a list, while maintaining the order of the rest

VERSION

This document describes version 0.001 of Sort::SubList (from Perl distribution Sort-SubList), released on 2019-12-14.

SYNOPSIS

 use Sort::SubList qw(sort_sublist);

 my @sorted = sort_sublist
     sub { length($_[0]) <=> length($_[1]) },  # comparison routine
     sub { /\D/ },                             # element selection routine
     "quux", 12, 1, "us", 400, 3, "a", "foo";

 # => ("a", 12, 1, "us", 400, 3, "foo", "quux")

DESCRIPTION

This module provides "sort_sublist" routine to sort only certain elements in a list, while keeping the order of the rest of the elements intact (in the original position). So basically what this routine does is to grep the elements to be sorted, record their positions, sort these elements, and put them back to the recorded positions.

FUNCTIONS

sort_sublist

Usage:

 my @sorted = sort_sublist $comparison_sub, $filter_sub, @list;

FAQ

How about adding prototype to sort_sublist so it's more convenient to use like the builtin sort?

The builtin sort's behavior is hard to emulate with subroutine prototypes. For more discussion: https://www.perlmonks.org/index.pl/www.mrtg.org?node_id=1207981. For simplicity, I do away with prototypes altogether.

How to use $a and $b in comparison sub, just like when we use builtin sort?

Something like this will do:

    sub {
        no strict 'refs';

        my $caller = caller();
        my $a = @_ ? $_[0] : ${"$caller\::a"};
        my $b = @_ ? $_[1] : ${"$caller\::b"};

        # compare $a and $b ...
    }

Or, you can just use $_[0] (instead of $a) and $_[1] (instead of $b) like the example in Synopsis shows. Again, this is where the specialness of the sort subroutine is not easy or straightforward to emulate.

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Sort-SubList.

SOURCE

Source repository is at https://github.com/perlancar/perl-Sort-SubList.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Sort-SubList

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

SEE ALSO

AUTHOR

perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2019 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.