15章(文字列処理とソート) 練習問題2
下に示したハッシュのデータを、姓のアルファベッド順(大文字と小文字は区別しません)でソートして表示するプログラムを書いてください。姓が同じ場合には、名(やはり大文字と小文字は区別しません)によってソートします。
自作コードはこちらです。
#!/usr/bin/perl use strict; use warnings; my %last_name = qw{ fred flintstone Wilma Flintstone Barney Rubble betty rubble Bamm-Bamm Rubble PEBBLES FLINTSTONE }; sub by_surname_or_name { "\L$last_name{$a}" cmp "\L$last_name{$b}" or "\L$a" cmp "\L$b" } for ( sort by_surname_or_name keys %last_name ) { print "$_\n"; }
出力結果はこちら。
fred PEBBLES Wilma Bamm-Bamm Barney betty
解答はどうなっているかな…
問題ないですね。
ただ、普通は複数行で行う処理を1行にまとめたPerlっぽいコーディングをすると保守作業に悪影響がでるだろうな、と感じた。
Perlに慣れ親しんだプログラマにはちゃちゃっと書き易くて良いと思うのですが、初めてこんなコーディングを目にした初学者/メンテナにはきついものがあるでしょうね。
そこらへんの兼ね合いはPerlベストプラクティスを参考にうまくやっていけたらいいですね。