ハッシュの値でソートする - Perl

ハッシュのキーでソートするのはさほど難しくないが、値で並べ替えるにはどうすればよいだろう?同様にsort関数を用いれば良い。

サンプル

;#
;#ハッシュを値でソートして表示
;#

#------------------------------#
#初期化する
#------------------------------#
%hash = (
      'A' => '1_オレンジ'
    , 'B' => '4_りんご'
    , 'C' => '2_マスカット'
    , 'D' => '3_バナナ'

);

#------------------------------#
#値で並べ替えて表示
#------------------------------#
foreach my $name (sort { $hash{$a} <=> $hash{$b} } keys %hash){
    print "$name,$hash{$name}\n";
}

実行結果

A,1_オレンジ
C,2_マスカット
D,3_バナナ
B,4_りんご

逆順に(反転して)表示したければ、sort { $hash{$b} <=> $hash{$a} }とすればよい。数値として比較を行いたいのなら<=>の部分をcmpにする。