たまには実際に書いたプログラムについて

こないだ仕事で行ったやつですが、晒してみようと思います。もちろんPerlです。
内容はよくある性格診断物です。1ページに一つ質問があり、aからdまでの4択で答えます。そうすると次の質問が出てきて、全部で8問に答えます。8つの質問は全て固定。
結果表示についてはとても単純。選択した答えの中で、最も数の多いものを選びます。つまり、回答がaaaabbcdなら、aが4つ、bが2つ、cが1つ、dが1つでaが一番多いのでaの結果を出力します。同数の場合は、a > b > c > dの優先度になります。つまり、aaaabbbbなら、aの方が優先度が高いのでaになります。aacccdddならcになるし・・・ってこれでわかりますよね。
abcdの並びは別にソートされてないです。ひょっとしてabdbacacとかかもしれません。
とりあえずこの文字列が$strに入っているとして、選ぶアルゴリズムを考えろ、というのが問題。意外と難しいと思うんです。
とりあえず、僕の回答は以下の通り。

my $str = "acbbada";
my @array;
foreach("a", "b", "c", "d"){
    push @array, [$_, ($str =~ s/$_//g)];
}
sort {-($a->[1] <=> $b->[1])} @array;
print $array[0]->[0];

ちょっと解説を。ここで、foreachループを抜けた後では@array = (["a", 3], ["b", 2],["c", 1],["d", 1])となってます。それぞれの文字とその個数を配列のリファレンスに入れまくってるわけです。で、その個数でsortをかけてるんですが、Perlのソートは安定したソートなので、aとbが同数なら、最初にaが前にあるからaという判断をしてくれるんですよね。優先順位付けはこれで完了。
個人的にsortの使い方が気に入ってるんですが、あんまり良くないとの評価を受けちゃったんですよね。読みにくかったかな。これ以上のソースって中々思いつかないんですけど・・・・
もうちっとエレガントなソースが書ける人、教えてくださいまし。