Perlぷろぐらみんぐメモ

ここにあげる項目は、私が Perl を扱う上で日々心がけているものです。別に Perl に限った話ではないのですけれど、最近この言語の面白さにすっかり嵌ってしまったので。

関数を細かく分ける
とりあえず基本から。ひとつの関数につき 20〜25 行以内がベスト。80 行を超える関数なんかがあったら、一体どんな処理をしているのか全く把握できない。デバッグも大変。
グローバル変数を減らす
これも基本。Perl はそのままでは全てグローバル変数化してしまうので注意すべき。よほどのことが無い限り、my で局所化しておくこと。一時的に使った大域変数も、使い終わったら積極的に undef しておくと良い。
変数・関数名をわかりやすく
$tmp とか $flg とか $aaa のような、わけのわからない変数は作らない。一目で用途のわかる、意味のある名前を付けること。引数を格納する特殊変数 @_ も、そのまま使うと後から見たときに判別しにくいので、きちんと名前の付いた変数に代入(or リファレンス)しておくとなお良い。
コメントをこまめに
ソースが長くなるにつれて内容の把握が次第に困難になってくる。そんな時にコメントが記述されていないと、かなり作業効率が低下する。面倒でもきちんとコメントは加えること。せめて関数の大まかな用途くらいは記述したい。
ヒアドキュメントは使わない
一見便利そうなヒアドキュメント(<<)だけれども、ソースコードをぐちゃぐちゃにする最悪の代物である。無駄に関数が伸びるし、うかつにインデントできないから構造を把握しにくい。一箇所にまとめて使うか、外部にテンプレートを用意しておけばそれだけでかなり綺麗になる。
出力はテンプレートを用いて行う
CGI として使用する際、HTML の定型部分は全てテンプレートを介して行う。可変部分だけをリストとして取り出してやり、纏めて変換してやるとそれほど処理量も増えない。二重、三重にテンプレート変換を加えることで、可変長のデータ表などにも対応できる。
コード内に日本語を書かない
コメントを除くソースコード内全てには、日本語を使わないほうが良い。文字コード関連の問題もあるが、それ以上に出力する文字列がごちゃごちゃと散りばめられているとコードが見難くて仕方ない。全て外部ファイルにまとめておくと良いだろう。メンテナンス性も向上する。別に日本語に限らないのだが、これを書かないようにしておけば自然と他のベタテキストも記述しなくなっている。プログラムの国際化が簡単になるという意外なおまけも付いてくる。
必然性の無いリテラルは全て定数化
ディレクトリ名やループ最大数など、後で変更の余地がある部分は全て定数(costant)プラグマを用いるとメンテナンス性がいくらか向上する。後に他の人がプログラムを再利用する際にも、変更が簡単なので便利である。
プロトタイプ宣言をする
Perl はプロトタイプ宣言しなくても普通に関数を使用できるが、メソッド呼び出し等を除き、ほとんどのサブルーチンにはプロトタイプ宣言をしておく。引数の指定によりデバッグがしやすくなるし、ライブラリの上部にインデックスとして置いておく事で検索性も向上する。
シェルコマンド実行部分に充分注意する
open 関数の第二引数など引数の値をシェルコマンドとして実行する部分には、ユーザの入力をそのままぶち込む等危険な真似は絶対にしない。重大な XSS 脆弱性を持ったスクリプトになりかねないからだ。こまめにサニタイズするか、sysopen など危険性の低い関数を使う。eval 関数も結構怖い。