M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2010年12月21日 22:44

久々にmod_perl(ModPerl::Registry)使ってはまったこと

このエントリーをはてなブックマークに追加 mixiチェック

地図表示用のデータをjsonで返すCGIを適当にmod_perl化しておいたんだけれども、やってみたら結構はまってしまいました。

1.FindBin::Realbinが効かない

 僕、mod_perl環境下でこそ $FindBin::RealBin が効くもんだと勘違いしていました。
 
iandeth. - FindBin module を使って use lib 記述をシンプルにする [iandeth.dyndns.org]
 
 実際には、$FindBin::RealBinだと、Perlが存在するパスが得られる。FindBinというのは、スクリプトがあるパスを取得したいから使うのであって、これは問題。ていうか実際に問題にあった。
 
横のマーク - mod_perl上で$FindBin::Binが思うような値にならない件 [www.1stdegree.co.jp]

にあるように、mod_perl下だと、FindBin::Realモジュールを使って、FindBin::Real::Bin() で取得するのが正解。実際これで解決しました。標準モジュールでない点、使うときには$がつかない点に注意。

2.ファイルテスト演算子の時刻比較がおかしくなる

通常のCGIと、mod_perl下とで、ファイルテスト演算子の時刻比較がおかしくなる。

ファイルテスト演算子 -M -A -C には基準の時間がある - Practice of Programming [d.hatena.ne.jp]

にある通り、local $^T = time; をしてあげて、毎回スクリプトが起動しているCGI環境をまねてやる必要がある。

確かにファイルテスト演算子は直感的じゃないから使わない方がいいかもとか思い始めました。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3443

コメントする