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ベストプラクティスを参考にうまくやっていけたらいいですね。