読者です 読者をやめる 読者になる 読者になる

NeverBlog::Likk::Unexistable;

見なかったことにして下さい

Speedy::CGI 弄り中

レンサバの環境からして、Mod_perlFastCGIは断念。
で、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っぽい。試してないが。