Perl: the Markov chain saw PerlMonks

### Re: Custom, Reusable Sort Subroutine for Hashes?

by choroba (Archbishop)
 on Aug 30, 2017 at 11:09 UTC ( #1198324=note: print w/replies, xml ) Need Help??

in reply to Custom, Reusable Sort Subroutine for Hashes?

```#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

sub sort_hash (&\%) {
my (\$sub, \$hash) = @_;
sort {
local(\$a, \$b) = @\$hash{\$a, \$b};
\$sub->()
} keys %\$hash
}

my %hash = ( second => 2, fourth => 4, third => 3, first => 1 );
say for sort_hash { \$a <=> \$b } %hash;

I used a prototype to make the syntax of sort_hash similar to that of sort. The trick is replacing the magical variables \$a and \$b with the respective values from the hash.

```(\$q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+\$1,++print+eval\$q,q,a,

Replies are listed 'Best First'.
Re^2: Custom, Reusable Sort Subroutine for Hashes?
by QM (Parson) on Aug 30, 2017 at 12:45 UTC
This is very good, thanks.

Just as an extension, can I use this with a named sort sub? I expect so, but I'll have to go off and experiment.

-QM
--
Quantum Mechanics: The dreams stuff is made of

> can I use this with a named sort sub?

Sure, but you can't use the nice syntax anymore:

```sub numerically { \$a <=> \$b }
say for sort_hash(\&numerically, %hash);
```(\$q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+\$1,++print+eval\$q,q,a,
> but you can't use the nice syntax anymore:

> say for sort_hash(\&numerically, %hash);

well you don't need the braces

say for sort_hash \&numerically, %hash ;

and this works too

say for sort_hash {numerically} %hash ;

Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1198324]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2021-12-05 14:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
R or B?

Results (31 votes). Check out past polls.

Notices?