Hi gravid,
Yep, there's a better solution than messing with Perl's internals :-)
my %hash = ( a=>0, b=>1, c=>0, d=>3 ); foreach my $k ( sort { $hash{$a} <=> $hash{$b} or $a cmp $b } keys %ha +sh ) { print "$k = $hash{$k}\n"; }
Always outputs:
a = 0 c = 0 b = 1 d = 3
Background: If the comparison of the values (<=>) shows they are equal it returns zero, so then the second part of the or expression is evaluated, comparing the keys.
Update: See the multi-field sort in How do I sort an array by (anything)? That FAQ answer also references this article: Far More Than Everything You've Ever Wanted to Know About Sorting
Hope this helps,
-- Hauke D
In reply to Re^6: setting PERL_PERTURB_KEYS & PERL_HASH_SEED in a perl file
by haukex
in thread setting PERL_PERTURB_KEYS & PERL_HASH_SEED in a perl file
by gravid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |