夕方、探しに本屋にいったんだけど、悲しいかな、ここは田舎。さすがにまだ発売されてなかった。でもvol31が置いてあったのでパラパラめくって帰ってきた。はやくこっちでも発売されんかな。
404 Blog Not Found:perl - 勝手に添削 - WEB DB Press Vol.32 pp.94
Damianも言っていたように、「ソースコードは未来の自分へのラブレター」なのだ。
上の勝手に添削エントリは勉強になった。
まずは定数の扱いから。オリジナルではuse constantを使っていたが、これは駄目である。use constantの「定数」は、実は定数を返すsubなので、sigil ($@%&*)が定数から消えてしまう。
PerlBestPracticeでもReadonly使えって書いてあったけど、理由がようやくわかった。ついでに両方ソースを眺めといた。TIE(SCALAR|ARRAY|HASH)の
my $whence = (caller 2)[3]; # Check if naughty user is trying to tie directly.
ここのとこがイマイチわかってないのであとでちゃんと調べる。
いつuse CGI qw/:standard/を使うかというのは、実はnon-trivialな質問なのだけど、このようにCGIモジュールの中だけで文字列生成が完結する場合には、use CGI qw/:standard/などを使って余計な$q->を省き、テンプレートなどを使って処理が別になっている場合は、$qを使って処理を渡すというのがきれいかつわかりやすい切り分けだと思う。
恥ずかしながら、use CGI qw/:standard/の使い方を初めて知った。昔から使ってるけど、そのころはperldoc読めなかったしナァ。