%unsorted_hash = (k1=> 'v2', k2=> 'v1'); sortvalues(\@sorted, \%unsorted_hash); foreach (@sorted,) { print "$unsorted_hash{$_}\n"; } #---------------------------------- # sorting hashes based on values # in : array of sorted keys (output), hashes to use # out : none #---------------------------------- sub sortvalues($$) { my ($sorted, $hashes) = @_; sub swap($$) { my ($a, $b) = @_; my $temp = $$a; $$a = $$b; $$b = $temp; } for my $loop (0..(scalar @$sorted - 1)) { my $ub = scalar @$sorted - $loop - 2; for my $i (0..$ub) { if (($$hashes{$$sorted[$i]} <=> $$hashes{$$sorted[$i+1]}) > 0 ) { swap (\$$sorted[$i], \$$sorted[$i+1]); } } } }