#!/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.
Update: explanation added.
($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,