Perl モジュール利用の最適化



Perl のモジュールは安定した豊富な機能を提供してくれる反面、有用なモジュールであればあるほど利用時のオーバーヘッドが大きい。これをなるべく減らす方法の紹介。

通常の書き方

例えばCGIモジュールを使うときは普通は以下のように書く。

use CGI;

使うメソッドがごくわずかな場合

「use CGI」に続けて利用するメソッド名を格納した配列を指定すると、そのメソッドだけロードしてくれる。
もし、header メソッドしか使わないのが分かっているのであれば、以下のように書く。

use CGI qw(header);

メソッドのグループを指定

メソッドをグループ化してある名前で、まとめて複数のメソッドを指定できる。
例えば、送信されたフォーム内容の解釈のみにCGIモジュールを使うのであれば、以下の指定でOK。

use CGI qw(:cgi);

どのようなグループが利用可能かは、モジュールのドキュメントに記載されている。

モジュールのドキュメントを参照(コマンドラインから)

% perdoc CGI

動的にモジュールをロードする

例えば入力チェックの結果必要がある時だけにデータベースに接続したい場合、データベースに接続するケースが比較的少ないのであれば、データベースモジュールのロード(use)を入力チェックの後行うようにした方が全体として効率的だ。

この場合は、スクリプトの途中に以下のように書くとその場所に来た時にモジュールがロードされる。

eval 'use DBI;';

ただし、eval でくくった内部のエラーチェックは文法チェックからは外れるので、動作検証時には通常通り use して問題なく処理ができる事を確認する事が必要。

また、ほとんどの場合結局 use する、という事であれば通常の(evalでくくらない)use の方がよい。