Perlベストプラクティス

Perlベストプラクティス

Perlベストプラクティス

ほんといい本で、英語版日本語版ともにそろえて読んでます。
ただ、2点ほど細かいところが気になったのでメモ*1

1.unlessわかりにくいから使うなというのはどうか
2.正規表現でoフラグが勧められていないのは何故?


1.「unless使うな」について
自分はunless使うときは以下の点に注意しています。

  • Test::Unitのassert*2のように「期待される条件」を中に入れるように
  • メソッドやループの頭で、return,next,lastするための条件文限定(フィルタ)
next LOOP unless(期待される条件);

制御を続けるために期待されている条件が何なのか、フィルタなのか通常の分岐なのか、こう書くと見やすいと思っています。
複雑な条件をis_fooなどのようにメソッドにくくり出したときも、

return unless( $foo->is_foo );

と書くのが英語の文章としても自然でしょう。

2.oフラグ
でかいループの中でつかう正規表現で、oフラグを立てるか立てないかで効率が凄く変わります。

$a =~ m{$pattern}o;

$patternが変化しないのであれば迷わずoフラグ立てるべきだと思うんですが、「xmsはいつもつけとけ」と指摘しているのに、これだけスルーしているのは何故なんでしょう。
確かに$patternが変化する場合には、わかりにくいバグの原因にはなるのですが。

本題からはものすごくずれますが、ベストプラクティスで必須といわれているxmsにo、iを加えると、並べ方によってxomis(くそみそ)と読めたり、imsox(I'm Sox:(ホワイト|レッド)ソックスメンバー?)と読めたりします。自分は後者つかってますが、他に覚えやすい並びってあったら教えてエロい人。

*1:こういう違和感が自分のスタイル見直すきっかけになるので、それも含めて良くぞ書いてくれましたという本

*2:Test::Moreならokか