質問: ($original, $destination, $count); print join(',', @rec). "\n"; } } ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: perlのsort関数では独自の「比較関数」が利用できます。 ``` @a = (1,3,2,4,10,5,20); # デフォルトの比較関数は{$a cmp $b} @a1 = sort @a; # 数値として比較して昇順にソート @a2 = sort {$a<=>$b} @a; # 数値として比較して降順にソート @a3 = sort {$b<=>$a} @a; ``` 比較関数の書き方は独特なのでマニュアルを確認してください。要点は、 1. 比較すべき要素二つをそれぞれ$a, $bで表す。 2. $a>$bなら1, $a<$bなら-1, $a==$bなら0を返すように式を立てる。 次に対象データですが、2段のハッシュになっているため、少しややこしいです。ソートをかけるにはまずこの階層を解きたいところです。map関数が使えるでしょう。 これらを組み合わせ、無名リスト化→ソート→出力という順番を考えてみました。試してませんが、最後のforeachループを次のような雰囲気で書き換えればいいでしょう。 ``` map {printf "%s %s %s\n", $_->[0], $_->[1], $_->[2]} sort {$b->[2] <=> $a->[2]} map {$k1=$_; map {$k2=$_; [$k1, $k2, $x->{$k1}{$k2}] } keys $x->{$k1}} keys %$info ```