Perl私的メモ。
ブレイクスキャン・プロのウェブサーバ側コードの見直しを行っている。コードは2年以上前のブレイクスキャンからほとんど変わっていない。
当時は use strict なんて知らないものだから、とにかく動いてリリースできるものに仕立てることで精一杯だった。
見直している最中に、セットアップ条件の順番にソートするコードは目に余るほどひどいような気がしてきた。こういうときの教科書であるEffective PerlとData Munging with Perl(Perlデータマンジング)を読み直してみたところ、シュウォーツ変換を使えばすっきりしたコートが書けそうなことが分かった。
@$bstbl = map { $hrec{$_} } map{ $_->[0] } sort{ $b->[1] <=> $a->[1] or $a->[0] cmp $b->[0] } map { [$_, $hsetup{$_}] } keys %hsetup;
%hsetupはSymbolをキーにしてセットアップ条件順位(数字)が入っていて、%hrecにはSymbolをキーにして表示用データのリファレンスを格納。
@$bstblには、セットアップ条件順位で降順にソート、順位が同じならSymbolで昇順にソートしたときのデータ配列を返す。これはブレイクスキャンのロングセットアップのときの順序だ。
いままで怪しい変数とソートルーチンを使っていて、use strict にしたら解決が難しそうな状況に見えたのだが、目から鱗で、あっさり1行で変換できてしまった。
Perlの能力は侮れない。(なんだか分からない人にはスマソ)
コメント