Upd. I slightly changed a node name and rewrote a section about reverse (older text is under strikethrough and moved to the end of the post).

Rarely we want to do something the same with both: with original and reversed list, or with original and sorted (and sorted backwards) list. Here you will find few examples how to use a simple switch to turn ON/OFF sorting or reversing list.

sort: Say we want to apply some function on original, sorted, and sorted backwards list. Example program:
#!/usr/bin/perl use warnings; use strict; $\ = $/; sub sort_sub{ return $a cmp $b; } sub some_sub{ my $ref = shift; print "@{ $ref }"; for my $i ( 0 .. @{ $ref } - 2 ){ $ref->[ $i ] cmp $ref->[ $i + 1 ] and do { ;;; }; } }
my @original = ( 5, 'A' .. 'C', 0, 4 ); my @sorted = sort sort_sub @original; my @r_sorted = reverse @sorted; some_sub( $_ ) for \@original, \@sorted, \@r_sorted; print '-';
Now we use multiplicative "switch" to gain the same output:
some_sub( [ sort { $_ * sort_sub } @original ] ) for 0, 1, -1; print '-';
Note we avoided intermediate variables.
OUTPUT:
5 A B C 0 4 0 4 5 A B C C B A 5 4 0 - 5 A B C 0 4 0 4 5 A B C C B A 5 4 0 -
Explanation. Sort subroutine returns -1, 0 or 1 on each comparison of $a and $b. In case we multiply by -1, we invert the result; in case with 1 we don't change anything; in case with 0 we convert all comparison to "equals", so sorting algorithm are not to change ordering of list elements.

reverse: Say we want to apply some function on original and reversed list. We can simply pass 0 or 1 into sort block:
my @reversed = reverse @original; some_sub( $_ ) for \@original, \@reversed; print '-'; some_sub( [ sort { $_ } @original ] ) for 0, 1;
OUTPUT:
5 A B C 0 4 4 0 C B A 5 - 5 A B C 0 4 4 0 C B A 5
Explanation. No matter how each of two elements are compared, we assign a 1 or 0 to a comparison result. If 0, then algorithm is to do nothing. If 1, then algorithm reverse a pair of elements. It seems to works fine with Perl's mergesort (which is by default since v5.8.0)*. If -1, then our list becomes kinda shuffled with some pattern.**

*Upd. Although documentation of sort pragma (e.g. 5.26.3/sort) was not clear about which sort algorithm is default saying "...but in Perl 5.8 a mergesort algorithm was also made available..." while talking mostly about quicksort, but meanwhile perlsec (e.g. 5.26.3/perlsec) says strictly: "Starting from Perl 5.8.0 a different sorting algorithm, mergesort, is used by default."

Upd. Have in mind that reversing a huge list with 'sort {1} list' may take a bit more time*** instead of simply reversing with O(N) time.

Upd.** It seems that 'sort {-1} list' shuffles list elements to some pattern IF the length of the list is between 3 and 17! Otherwise it doesn't shuffle, i.e. outputs the same as 'sort {0} list' does.

Upd.*** 'sort { $_ } list' where $_ is 1, 0 or -1 behaves linearly in O(N).

Here is the code which I used for finding how many iterations sort uses and does 'sort {-1} list' shuffle elements or not:
srand 1; my $show_distance = 10; for my $length ( 1 .. 3 ** 3 - 1, map { 3 ** $_, 3 ** $_ + 1 } 3 .. 10, ){ print join " length: $length ", ( '=' x 5 ) x 2; my $test = [ map int rand 10, 1 .. $length ]; my %sub = ( '$a <=> $b' => { 'sub' => sub { $a <=> $b } }, '0' => { 'sub' => sub { 0 } }, '1' => { 'sub' => sub { 1 } }, '-1' => { 'sub' => sub { -1 } }, ); for my $key ( sort keys %sub ){ my $count = 0; $sub{ $key }{ 'array' } = [ sort { $count ++; $sub{ $key }{ 'sub' }->() } @{ $test } + ]; $sub{ $key }{ 'count' } = $count; } for my $key ( sort keys %sub ){ print "\$key:[$key]"; print " count:[$sub{ $key }{ 'count' }]"; my $len = @{ $sub{ $key }{ 'array' } }; printf " array:[%s ... %s]\n", ( join ' ', @{ $sub{ $key }{ 'array' } }[ grep { 0 || $show_distance > abs( $_ - 0 ) } 0 .. $len - 1 ] ), ( join ' ', @{ $sub{ $key }{ 'array' } }[ grep { 0 || $show_distance > abs( $_ - $len + 1 ) && not $show_distance > abs( $_ - 0 ) } 0 .. $len - 1 ] ), ; } print "key='1' NOT EQUAL to reverse!" if "@{ $sub{ 1 }{ 'array' } +}" ne join ' ', reverse @{ $test }; print "key='-1' NOT EQUAL to key='0'!" if "@{ $sub{ -1 }{ 'array' +} }" ne "@{ $sub{ 0 }{ 'array' } }"; print ''; }
OUTPUT:
===== length: 1 ===== $key:[$a <=> $b] count:[0] array:[0 ... ] $key:[-1] count:[0] array:[0 ... ] $key:[0] count:[0] array:[0 ... ] $key:[1] count:[0] array:[0 ... ] ===== length: 2 ===== $key:[$a <=> $b] count:[1] array:[4 8 ... ] $key:[-1] count:[1] array:[4 8 ... ] $key:[0] count:[1] array:[4 8 ... ] $key:[1] count:[1] array:[8 4 ... ] ===== length: 3 ===== $key:[$a <=> $b] count:[2] array:[0 3 5 ... ] $key:[-1] count:[3] array:[3 0 5 ... ] $key:[0] count:[3] array:[3 5 0 ... ] $key:[1] count:[2] array:[0 5 3 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 4 ===== $key:[$a <=> $b] count:[5] array:[1 3 7 9 ... ] $key:[-1] count:[5] array:[1 7 9 3 ... ] $key:[0] count:[4] array:[1 9 7 3 ... ] $key:[1] count:[4] array:[3 7 9 1 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 5 ===== $key:[$a <=> $b] count:[8] array:[0 1 3 5 9 ... ] $key:[-1] count:[7] array:[3 9 1 5 0 ... ] $key:[0] count:[8] array:[3 5 1 0 9 ... ] $key:[1] count:[5] array:[9 0 1 5 3 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 6 ===== $key:[$a <=> $b] count:[11] array:[1 1 2 5 6 8 ... ] $key:[-1] count:[10] array:[1 1 2 6 5 8 ... ] $key:[0] count:[9] array:[1 5 2 8 1 6 ... ] $key:[1] count:[7] array:[6 1 8 2 5 1 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 7 ===== $key:[$a <=> $b] count:[13] array:[0 2 3 5 5 8 9 ... ] $key:[-1] count:[14] array:[2 3 5 5 0 8 9 ... ] $key:[0] count:[11] array:[2 0 5 9 3 8 5 ... ] $key:[1] count:[9] array:[5 8 3 9 5 0 2 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 8 ===== $key:[$a <=> $b] count:[16] array:[0 1 2 3 6 8 8 9 ... ] $key:[-1] count:[17] array:[3 9 6 1 8 0 2 8 ... ] $key:[0] count:[12] array:[3 8 6 2 9 0 1 8 ... ] $key:[1] count:[12] array:[8 1 0 9 2 6 8 3 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 9 ===== $key:[$a <=> $b] count:[21] array:[1 2 3 4 4 5 6 6 7 ... ] $key:[-1] count:[19] array:[1 3 4 6 2 4 5 7 6 ... ] $key:[0] count:[18] array:[1 7 2 6 4 5 3 4 6 ... ] $key:[1] count:[12] array:[6 4 3 5 4 6 2 7 1 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 10 ===== $key:[$a <=> $b] count:[25] array:[1 3 3 6 6 7 7 8 8 9 ... ] $key:[-1] count:[23] array:[7 1 9 6 8 8 6 3 7 3 ... ] $key:[0] count:[19] array:[7 7 8 3 9 6 1 8 6 3 ... ] $key:[1] count:[15] array:[3 6 8 1 6 9 3 8 7 7 ... ] key='-1' NOT EQUAL to key='0'! ===== length: 11 ===== $key:[$a <=> $b] count:[27] array:[0 2 2 2 4 5 5 5 5 6 ... 9] $key:[-1] count:[27] array:[5 6 2 0 2 5 5 5 4 2 ... 9] $key:[0] count:[23] array:[5 4 2 9 2 5 6 5 5 2 ... 0] $key:[1] count:[17] array:[0 2 5 5 6 5 2 9 2 4 ... 5] key='-1' NOT EQUAL to key='0'! ===== length: 12 ===== $key:[$a <=> $b] count:[30] array:[1 2 3 5 5 5 6 6 6 7 ... 7 9] $key:[-1] count:[31] array:[2 5 6 1 7 6 3 5 7 5 ... 6 9] $key:[0] count:[24] array:[2 7 7 6 6 3 5 5 6 9 ... 1 5] $key:[1] count:[20] array:[5 1 9 6 5 5 3 6 6 7 ... 7 2] key='-1' NOT EQUAL to key='0'! ===== length: 13 ===== $key:[$a <=> $b] count:[34] array:[0 2 2 2 3 3 5 5 6 8 ... 9 9 9] $key:[-1] count:[34] array:[0 9 2 2 2 9 3 6 5 3 ... 8 9 5] $key:[0] count:[28] array:[0 5 2 9 2 8 3 5 9 6 ... 9 3 2] $key:[1] count:[22] array:[2 3 9 6 9 5 3 8 2 9 ... 2 5 0] key='-1' NOT EQUAL to key='0'! ===== length: 14 ===== $key:[$a <=> $b] count:[39] array:[1 3 3 3 4 5 5 5 6 8 ... 9 9 9 9] $key:[-1] count:[39] array:[4 3 3 6 3 5 5 5 9 1 ... 9 9 8 9] $key:[0] count:[29] array:[4 9 3 8 3 9 5 9 3 1 ... 5 9 6 5] $key:[1] count:[25] array:[5 6 9 5 1 3 9 5 9 3 ... 8 3 9 4] key='-1' NOT EQUAL to key='0'! ===== length: 15 ===== $key:[$a <=> $b] count:[42] array:[0 0 1 1 2 3 6 6 6 8 ... 8 8 9 9 9] $key:[-1] count:[45] array:[9 2 8 6 9 9 0 8 3 1 ... 6 0 6 8 1] $key:[0] count:[31] array:[9 3 9 6 8 6 0 1 2 1 ... 9 8 6 0 8] $key:[1] count:[28] array:[8 0 6 8 9 1 2 1 0 6 ... 8 6 9 3 9] key='-1' NOT EQUAL to key='0'! ===== length: 16 ===== $key:[$a <=> $b] count:[47] array:[1 2 2 2 3 4 4 5 5 7 ... 7 7 8 9 9 9] $key:[-1] count:[49] array:[2 8 1 5 3 2 9 9 7 4 ... 2 5 9 4 7 7] $key:[0] count:[32] array:[2 7 3 9 1 2 9 7 8 4 ... 2 4 5 5 9 7] $key:[1] count:[32] array:[7 9 5 5 4 2 4 8 7 9 ... 2 1 9 3 7 2] key='-1' NOT EQUAL to key='0'! ===== length: 17 ===== $key:[$a <=> $b] count:[54] array:[0 1 2 2 2 2 4 4 4 4 ... 4 5 6 6 7 7 8] $key:[-1] count:[51] array:[7 2 5 7 4 4 4 6 2 4 ... 8 2 1 2 6 0 4] $key:[0] count:[39] array:[7 0 2 4 4 1 5 8 4 6 ... 2 4 4 2 7 2 6] $key:[1] count:[31] array:[6 2 7 2 4 4 2 6 4 8 ... 5 1 4 4 2 0 7] key='-1' NOT EQUAL to key='0'! ===== length: 18 ===== $key:[$a <=> $b] count:[57] array:[0 1 1 2 2 2 3 3 3 3 ... 5 5 6 6 6 6 7 9] $key:[-1] count:[17] array:[6 3 0 2 3 9 5 2 6 1 ... 1 6 5 6 2 3 7 3] $key:[0] count:[17] array:[6 3 0 2 3 9 5 2 6 1 ... 1 6 5 6 2 3 7 3] $key:[1] count:[17] array:[3 7 3 2 6 5 6 1 1 6 ... 2 5 9 3 2 0 3 6] ===== length: 19 ===== $key:[$a <=> $b] count:[60] array:[0 0 2 2 3 3 3 4 4 5 ... 5 7 7 7 7 8 8 9 9] $key:[-1] count:[18] array:[8 4 7 2 7 3 7 3 0 5 ... 9 0 2 9 8 4 7 3 5] $key:[0] count:[18] array:[8 4 7 2 7 3 7 3 0 5 ... 9 0 2 9 8 4 7 3 5] $key:[1] count:[18] array:[5 3 7 4 8 9 2 0 9 5 ... 0 3 7 3 7 2 7 4 8] ===== length: 20 ===== $key:[$a <=> $b] count:[66] array:[0 1 1 2 2 2 3 3 3 4 ... 4 5 5 5 6 7 7 7 7 9] $key:[-1] count:[19] array:[5 2 5 4 9 2 7 3 2 3 ... 7 6 5 7 1 4 0 3 1 7] $key:[0] count:[19] array:[5 2 5 4 9 2 7 3 2 3 ... 7 6 5 7 1 4 0 3 1 7] $key:[1] count:[19] array:[7 1 3 0 4 1 7 5 6 7 ... 3 2 3 7 2 9 4 5 2 5] ===== length: 21 ===== $key:[$a <=> $b] count:[68] array:[0 0 0 2 3 4 4 5 5 5 ... 5 6 6 7 8 8 9 9 9 9] $key:[-1] count:[20] array:[9 5 9 4 8 5 5 9 4 7 ... 3 9 8 2 6 0 5 0 5 0] $key:[0] count:[20] array:[9 5 9 4 8 5 5 9 4 7 ... 3 9 8 2 6 0 5 0 5 0] $key:[1] count:[20] array:[0 5 0 5 0 6 2 8 9 3 ... 7 4 9 5 5 8 4 9 5 9] ===== length: 22 ===== $key:[$a <=> $b] count:[71] array:[0 0 0 0 1 2 2 3 3 3 ... 4 4 5 6 6 8 8 8 8 9] $key:[-1] count:[21] array:[8 0 8 4 4 5 0 6 6 3 ... 0 8 0 9 1 8 2 3 3 4] $key:[0] count:[21] array:[8 0 8 4 4 5 0 6 6 3 ... 0 8 0 9 1 8 2 3 3 4] $key:[1] count:[21] array:[4 3 3 2 8 1 9 0 8 0 ... 3 6 6 0 5 4 4 8 0 8] ===== length: 23 ===== $key:[$a <=> $b] count:[79] array:[0 0 1 1 3 3 4 5 5 5 ... 7 8 8 8 8 9 9 9 9 9] $key:[-1] count:[22] array:[5 5 1 9 9 3 5 8 9 8 ... 9 6 7 9 3 4 5 1 8 0] $key:[0] count:[22] array:[5 5 1 9 9 3 5 8 9 8 ... 9 6 7 9 3 4 5 1 8 0] $key:[1] count:[22] array:[0 8 1 5 4 3 9 7 6 9 ... 8 9 8 5 3 9 9 1 5 5] ===== length: 24 ===== $key:[$a <=> $b] count:[81] array:[0 0 0 0 0 1 2 2 3 3 ... 5 6 6 6 7 7 7 7 8 9] $key:[-1] count:[23] array:[0 6 5 3 6 7 4 0 4 7 ... 0 6 2 9 0 4 4 8 7 7] $key:[0] count:[23] array:[0 6 5 3 6 7 4 0 4 7 ... 0 6 2 9 0 4 4 8 7 7] $key:[1] count:[23] array:[7 7 8 4 4 0 9 2 6 0 ... 7 4 0 4 7 6 3 5 6 0] ===== length: 25 ===== $key:[$a <=> $b] count:[95] array:[0 1 1 1 2 2 2 2 2 2 ... 5 5 5 5 6 6 6 8 8 8] $key:[-1] count:[24] array:[8 2 4 1 4 2 3 2 5 1 ... 5 2 1 2 6 4 3 2 6 8] $key:[0] count:[24] array:[8 2 4 1 4 2 3 2 5 1 ... 5 2 1 2 6 4 3 2 6 8] $key:[1] count:[24] array:[8 6 2 3 4 6 2 1 2 5 ... 1 5 2 3 2 4 1 4 2 8] ===== length: 26 ===== $key:[$a <=> $b] count:[90] array:[0 1 1 1 2 2 2 3 3 4 ... 6 6 6 7 7 7 8 8 8 9] $key:[-1] count:[25] array:[0 2 8 7 6 6 6 2 1 7 ... 4 5 4 3 7 9 1 2 6 8] $key:[0] count:[25] array:[0 2 8 7 6 6 6 2 1 7 ... 4 5 4 3 7 9 1 2 6 8] $key:[1] count:[25] array:[8 6 2 1 9 7 3 4 5 4 ... 7 1 2 6 6 6 7 8 2 0] ===== length: 27 ===== $key:[$a <=> $b] count:[99] array:[0 0 0 0 0 1 1 2 3 3 ... 7 7 7 7 8 8 8 9 9 9] $key:[-1] count:[26] array:[0 3 0 7 4 7 1 9 7 3 ... 6 8 7 0 0 0 3 6 1 6] $key:[0] count:[26] array:[0 3 0 7 4 7 1 9 7 3 ... 6 8 7 0 0 0 3 6 1 6] $key:[1] count:[26] array:[6 1 6 3 0 0 0 7 8 6 ... 3 7 9 1 7 4 7 0 3 0] ===== length: 28 ===== $key:[$a <=> $b] count:[101] array:[0 0 0 1 1 1 1 1 2 2 ... 6 6 6 7 7 8 8 9 9 9] $key:[-1] count:[27] array:[1 1 3 1 6 0 8 4 8 2 ... 9 6 3 3 5 9 7 7 5 6] $key:[0] count:[27] array:[1 1 3 1 6 0 8 4 8 2 ... 9 6 3 3 5 9 7 7 5 6] $key:[1] count:[27] array:[6 5 7 7 9 5 3 3 6 9 ... 2 8 4 8 0 6 1 3 1 1] ===== length: 81 ===== $key:[$a <=> $b] count:[415] array:[0 0 0 0 0 0 0 0 0 1 ... 8 8 9 9 9 9 9 9 9 9] $key:[-1] count:[80] array:[8 3 5 8 0 6 1 0 0 4 ... 0 9 1 9 6 3 1 4 9 4] $key:[0] count:[80] array:[8 3 5 8 0 6 1 0 0 4 ... 0 9 1 9 6 3 1 4 9 4] $key:[1] count:[80] array:[4 9 4 1 3 6 9 1 9 0 ... 4 0 0 1 6 0 8 5 3 8] ===== length: 82 ===== $key:[$a <=> $b] count:[421] array:[0 0 0 0 0 0 0 0 0 1 ... 8 8 8 8 9 9 9 9 9 9] $key:[-1] count:[81] array:[1 5 8 6 0 2 8 7 6 1 ... 1 9 1 5 9 7 0 4 9 2] $key:[0] count:[81] array:[1 5 8 6 0 2 8 7 6 1 ... 1 9 1 5 9 7 0 4 9 2] $key:[1] count:[81] array:[2 9 4 0 7 9 5 1 9 1 ... 1 6 7 8 2 0 6 8 5 1] ===== length: 243 ===== $key:[$a <=> $b] count:[1572] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[242] array:[2 4 4 6 3 0 5 3 2 2 ... 1 2 5 5 8 9 4 6 7 7] $key:[0] count:[242] array:[2 4 4 6 3 0 5 3 2 2 ... 1 2 5 5 8 9 4 6 7 7] $key:[1] count:[242] array:[7 7 6 4 9 8 5 5 2 1 ... 2 2 3 5 0 3 6 4 4 2] ===== length: 244 ===== $key:[$a <=> $b] count:[1590] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[243] array:[8 5 7 8 8 6 7 9 1 4 ... 6 7 4 8 2 4 5 0 5 3] $key:[0] count:[243] array:[8 5 7 8 8 6 7 9 1 4 ... 6 7 4 8 2 4 5 0 5 3] $key:[1] count:[243] array:[3 5 0 5 4 2 8 4 7 6 ... 4 1 9 7 6 8 8 7 5 8] ===== length: 729 ===== $key:[$a <=> $b] count:[5321] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[728] array:[4 2 9 5 7 4 2 1 3 6 ... 2 9 6 0 4 9 4 3 0 3] $key:[0] count:[728] array:[4 2 9 5 7 4 2 1 3 6 ... 2 9 6 0 4 9 4 3 0 3] $key:[1] count:[728] array:[3 0 3 4 9 4 0 6 9 2 ... 6 3 1 2 4 7 5 9 2 4] ===== length: 730 ===== $key:[$a <=> $b] count:[5384] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[729] array:[1 2 5 2 9 6 6 0 4 9 ... 4 7 1 8 2 6 5 9 5 9] $key:[0] count:[729] array:[1 2 5 2 9 6 6 0 4 9 ... 4 7 1 8 2 6 5 9 5 9] $key:[1] count:[729] array:[9 5 9 5 6 2 8 1 7 4 ... 9 4 0 6 6 9 2 5 2 1] ===== length: 2187 ===== $key:[$a <=> $b] count:[16600] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[2186] array:[0 0 9 3 2 1 0 7 9 7 ... 0 2 4 8 7 2 2 5 3 6] $key:[0] count:[2186] array:[0 0 9 3 2 1 0 7 9 7 ... 0 2 4 8 7 2 2 5 3 6] $key:[1] count:[2186] array:[6 3 5 2 2 7 8 4 2 0 ... 7 9 7 0 1 2 3 9 0 0] ===== length: 2188 ===== $key:[$a <=> $b] count:[16606] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[2187] array:[7 0 8 6 8 3 0 9 0 4 ... 7 5 7 7 0 6 7 9 9 3] $key:[0] count:[2187] array:[7 0 8 6 8 3 0 9 0 4 ... 7 5 7 7 0 6 7 9 9 3] $key:[1] count:[2187] array:[3 9 9 7 6 0 7 7 5 7 ... 4 0 9 0 3 8 6 8 0 7] ===== length: 6561 ===== $key:[$a <=> $b] count:[50834] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[6560] array:[5 6 1 7 9 9 7 6 7 6 ... 0 2 8 1 0 2 7 6 8 4] $key:[0] count:[6560] array:[5 6 1 7 9 9 7 6 7 6 ... 0 2 8 1 0 2 7 6 8 4] $key:[1] count:[6560] array:[4 8 6 7 2 0 1 8 2 0 ... 6 7 6 7 9 9 7 1 6 5] ===== length: 6562 ===== $key:[$a <=> $b] count:[50755] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[6561] array:[6 6 3 8 5 3 5 1 6 1 ... 8 5 0 4 1 3 2 0 9 9] $key:[0] count:[6561] array:[6 6 3 8 5 3 5 1 6 1 ... 8 5 0 4 1 3 2 0 9 9] $key:[1] count:[6561] array:[9 9 0 2 3 1 4 0 5 8 ... 1 6 1 5 3 5 8 3 6 6] ===== length: 19683 ===== $key:[$a <=> $b] count:[152997] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[19682] array:[0 2 6 1 7 8 3 3 7 6 ... 6 4 2 3 4 0 7 8 6 7] $key:[0] count:[19682] array:[0 2 6 1 7 8 3 3 7 6 ... 6 4 2 3 4 0 7 8 6 7] $key:[1] count:[19682] array:[7 6 8 7 0 4 3 2 4 6 ... 6 7 3 3 8 7 1 6 2 0] ===== length: 19684 ===== $key:[$a <=> $b] count:[152923] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[19683] array:[0 4 2 3 6 9 6 7 3 2 ... 3 4 0 5 2 7 7 2 6 9] $key:[0] count:[19683] array:[0 4 2 3 6 9 6 7 3 2 ... 3 4 0 5 2 7 7 2 6 9] $key:[1] count:[19683] array:[9 6 2 7 7 2 5 0 4 3 ... 2 3 7 6 9 6 3 2 4 0] ===== length: 59049 ===== $key:[$a <=> $b] count:[459848] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[59048] array:[2 7 6 7 1 7 0 9 0 7 ... 5 1 5 0 1 5 7 5 9 9] $key:[0] count:[59048] array:[2 7 6 7 1 7 0 9 0 7 ... 5 1 5 0 1 5 7 5 9 9] $key:[1] count:[59048] array:[9 9 5 7 5 1 0 5 1 5 ... 7 0 9 0 7 1 7 6 7 2] ===== length: 59050 ===== $key:[$a <=> $b] count:[460469] array:[0 0 0 0 0 0 0 0 0 0 ... 9 9 9 9 9 9 9 9 9 9] $key:[-1] count:[59049] array:[9 6 3 2 4 5 6 9 2 4 ... 0 1 5 0 5 5 4 4 0 9] $key:[0] count:[59049] array:[9 6 3 2 4 5 6 9 2 4 ... 0 1 5 0 5 5 4 4 0 9] $key:[1] count:[59049] array:[9 0 4 4 5 5 0 5 1 0 ... 4 2 9 6 5 4 2 3 6 9]
##############
RFC: Simple switches for 'sort' and numeric list 'reverse'

reverse: This trick seems to work only on lists of unique numeric values. Say we want to apply some function on original and reversed list. I'm not sure how, but sorting by $a + $b reverses a list. So we can pass 0 or 1 to multiply its result:
tr/A-C/1-3/ for @original; my @reversed = reverse @original; some_sub( $_ ) for \@original, \@reversed; print '-'; some_sub( [ sort { $_ * ( $a + $b ) } @original ] ) for 0, 1;
OUTPUT:
5 1 2 3 0 4 4 0 3 2 1 5 - 5 1 2 3 0 4 4 0 3 2 1 5
In case if list elements aren't unique, 'sort' sometimes returns incorrect but similar to expected results, e.g.:
original: 7 1 0 9 8 0 7 7 8 0 reversed: 0 8 7 7 0 8 9 0 1 7 $a + $b : 0 8 9 0 1 7 0 8 7 7
So it can be useful using only on permutations, lists of unique keys, e.g. sorted-then-squeezed lists.

++ 'sort { 1 * ( $a + $b ) }' didn't worked as a reverse with negative numbers, because they influence a final result of sort's sub.

In reply to RFC: Simple switches for 'sort' and list 'reverse' by rsFalse

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.