asunderが短くできない

anarchy golf - asunderに挑戦中。
最初に考えたのが、入力を一気に繋げて文字列でとって、それぞれの文字の数を正規表現で求める、というもの。

$/=0,$a=<>;printf"$_:%3d
",''.(@a=$a=~/$_/g)for A..Z,a..z

57B。
正規表現のマッチの結果をリストコンテキストで取得してからスカラーコンテキストにして、…となんだかゴチャゴチャしてしまう。


で、やり方を変えてみたのが、各行毎でそれぞれの文字数をカウントアップしていって、そのデータを使って出力する、というもの。

s/./$a{$&}++/gefor<>;printf"$_:%3d
",$a{$_}for A..Z,a..z

56Bになった。
でも現在Perlのトップは、51B。まだまだ全然長過ぎる。。。orz


後者のやり方はあんまり短くできなそう。前者の方を頑張れば短く出来そうな気がする。
何とか自分で考えだしたいところ。そもそも全然知らない文法が必要なのかもしれないけども。