strict プラグマ
今までこの勉強日記に書いていたスクリプトには、strict プラグマを使っていませんでした。(プラグマ=use すると Perl の動作自体を変える事ができるモジュール)
短いコードばかりだったので、その必要もないかな、と思っていたのです……が、
iandeth. - Perl/CGI辞典 - 土井 毅さん 著 - にて use strict が推奨されていない件について
strict is your friend!!!!!
strict プラグマこそが、我々のミスを見つけてくれる、プログラマーの強力な味方です。「見通しの悪い複雑なスクリプト」を書いてしまう事への懸念は、すべてこの strict プラグマが晴らしてくれます。どんなにコードを書くときにも、かならずコードの先頭で、use strict;と書いておきましょう。
やはりどんなに短いコードでも use strict するべきなのですね。というわけで今後のぱるも日記では use strict を奨励していきます。(^_^)
strict プラグマを使うと、以下のような効果があります。
- 宣言されていない変数が使えなくなる(use strict 'vars')
- シンボリックリファレンスが使えなくなる(use strict 'refs')
- 裸の文字列(bareword)が使えなくなる(use strict 'subs')
- 裸の文字列とは頭に何も([$%@&*]が)ついていない識別子
- その識別子がサブルーチンとして定義されていない場合は通常の文字列として扱われるが、それをエラーにする
- サブルーチン呼び出しの typo を防ぐ
つまり、strict プラグマは「typoや誤爆を防ぐ」効果があるモジュールです。気をつけていても typo はしてしまうものです。Perl の場合 typo してもコンパイル時にエラーにならないので、かなり厄介なバグになってしまいます。
ちょっとの制約を付ける事で typo のバグを防げるなら、そうするべきです。
ちなみに次期バージョンである Perl6 からは、最初から「use strict」されている状態になるそうです。