in reply to Re^5: setting PERL_PERTURB_KEYS & PERL_HASH_SEED in a perl file
in thread setting PERL_PERTURB_KEYS & PERL_HASH_SEED in a perl file

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

Replies are listed 'Best First'.
Re^7: setting PERL_PERTURB_KEYS & PERL_HASH_SEED in a perl file
by gravid (Novice) on Jul 18, 2016 at 13:31 UTC

    Thx Hauke!

    This is the solution.

    Works for me great :)

    Thx

    Guy