北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

WEBアプリはシングルトンで

CGI::ApplicationのようにWEBアプリをクラスとして扱う場合、1つのリクエストに対してアクティブになるクラスは一つだけなので、シングルトンクラスである方が幸せになれる。例えば、TTのプラグインを作るときなんかは、シングルトンであれば現在アクティブなアプリケーションのインスタンスを取得するのが容易であり、入力クエリやセッションに触ったりを簡単にできるようになる。

1リクエスト単位でのシングルトンを実装するのに、CGI環境ではリクエストの処理が終わるとperlのプロセスも終了するので、何も考えずにグローバル変数で実装してよい。

でも、mod_perl環境ではグローバルな変数は次のリクエストでも残っているので、これを使うのはおいしくない。そこで、Apache->request()->pnotes()を使うといいらしい。これは、Apache::Requestのアイディア。