by_hashvalue works fine, but can someone please explain how it works? I would like to rewrite it with no global variables, but everything I try breaks it.
I have “my %names” in main, but by_hashvalue sees it, and I don’t have a clue why. I need by_hashvalue to sort any hash, not just %names.
# Sort hash by value then by key.
my %names = (
1 => 'evan',
2 => 'sam',
3 => 'evan',
4 => 'joyce',
5 => 'sam',
6 => 'monster');
my @hashkeys = sort by_hashvalue(keys(%names));
foreach $key (@hashkeys) {
print "$key - $names{$key}\n";
}
sub by_hashvalue {
return ( $names{$a} cmp $names{$b} ) || ($a cmp $b);
}
I have “my %names” in main, but by_hashvalue sees it, and I don’t have a clue why. I need by_hashvalue to sort any hash, not just %names.
# Sort hash by value then by key.
my %names = (
1 => 'evan',
2 => 'sam',
3 => 'evan',
4 => 'joyce',
5 => 'sam',
6 => 'monster');
my @hashkeys = sort by_hashvalue(keys(%names));
foreach $key (@hashkeys) {
print "$key - $names{$key}\n";
}
sub by_hashvalue {
return ( $names{$a} cmp $names{$b} ) || ($a cmp $b);
}