Speedy::CGI 弄り中
レンサバの環境からして、Mod_perlやFastCGIは断念。
で、Speedy::CGIに白羽の矢を立てました。
だが、どうにも変数のスコープというかグローバル変数の扱いをちこちこっと変えないといけない様子。
まぁ、その辺の仕様はMod_perlでも変わらんと思うけど。
以下覚書。
ファイル構成が
- ./index.pl
- ./use_test.pm
- ./req_test.pl
で、実行するファイルがindex.plで、
#!/usr/bin/speedy use strict; use warnings; use lib qw(./); use use_test; require './req_test.pl';
な感じで残りの2ファイルを呼ぶ場合の実行毎の変数の取扱い。
./index.pl
my変数 | 実行毎に評価 |
pkg修飾変数 | 実行毎に評価 |
vars宣言変数 | 実行毎に評価 |
サブルーチン内my変数 | 実行毎に評価 |
./test.pm
サブルーチン内my変数 | 実行毎に評価 |
pkg修飾変数 | 最初に評価した値を使い続ける |
./test.pl
mainパッケージ内my変数 | 初回のみ評価、二回目以降はNULL |
pkg修飾変数 | 最初に評価した値を使い続ける |
まぁ、気をつけなければ行け無いのは、実効ファイルから呼び出すファイル内のパッケージ修飾変数です。
ここにユーザ系情報を入れると、他の人が実行しても最初に実行した人のユーザ系情報が格納されたままなわけで…。
逆に、設定やら定数やらはパッケージ指定すれば一度目の評価を使いまわしてくれるというわけですな。
DBコネクションプーリングもしてくれるようです。
ただし、タイムアウトで接続が切れるので、明示的にCommitするかオートコミットしておかないと、rollbackっぽい。試してないが。