sub hsort (&\%) { my( $code, $href ) = @_; sort( $code map[ each %$href ], 1 .. keys %$href ); } my %orig = ( cat => 22, dog => 23, category => 66, catalyst => 77, cataclysm => 88, dogma => 89, dogstar => 92, ); ## Oh look! A chain :) print 'sorted by key: ', map "$_->[0]=>$_->[1] ", hsort{ $a->[0] cmp $b->[0] } %orig; print 'sorted by val: ', map "$_->[0]=>$_->[1] ", hsort{ $a->[1] <=> $b->[1] } %orig; C:\test>hFP.pl sorted by key: cat=>22 cataclysm=>88 catalyst=>77 category=>66 dog=>23 dogma=>89 dogstar=>92 sorted by val: cat=>22 dog=>23 category=>66 catalyst=>77 cataclysm=>88 dogma=>89 dogstar=>92