[僕] CGI::Application::Dispatch を mod_perl 下で動かした時に warning が出た

僕ト云フ事

たろマークはてなブックマーク

2005年09月07日

[apache][cgi-app][mod_perl] CGI::Application::Dispatch を mod_perl 下で動かした時に warning が出た

タイトル長え('A`)
apache/mod_perl 2系には関係なさげ。

  • apache 1.3.33
  • mod_perl 1.29
  • perl 5.8.0
  • CGI::Application::Dispatch 1.04

で、PerlHandler に Apache::Registry 使った環境で動かしたら、error log に以下のような warning が出た。

Dispatch.pm: Use of uninitialized value in numeric eq (==) at /usr/lib/perl5/site_perl/5.8.0/CGI/Application/Dispatch.pm line 12.

httpd.conf に下記の行を設定して回避。

PerlSetEnv MOD_PERL_API_VERSION 1

設定する値は2以外だったらなんでもいいんだと思うけど。
そもそも、PerlHandler に CGI::Application::Dispatch 使えって話かもしれませんが、ちょっと自分の書いたスクリプトに問題があったので。

やっぱり、相対指定は上手く外していこう(←ダメだった部分

ちなみに、CGI::Application::Dispatch の patch 作ってみた。

*** Dispatch.pm.org	2005-09-07 20:11:13.000000000 +0900
--- Dispatch.pm	2005-09-07 20:13:32.000000000 +0900
***************
*** 9,15 ****
  
  BEGIN {
      if( $ENV{MOD_PERL} ) {
!         $MP2 = $ENV{MOD_PERL_API_VERSION} == 2;
          if( $MP2 ) {
              require Apache2::Const;
              require Apache2::RequestUtil;
--- 9,15 ----
  
  BEGIN {
      if( $ENV{MOD_PERL} ) {
!         if ( exists $ENV{MOD_PERL_API_VERSION} ) { $MP2 = ( $ENV{MOD_PERL_API_VERSION} == 2 ) }
          if( $MP2 ) {
              require Apache2::Const;
              require Apache2::RequestUtil;

まだ、mod_perl に慣れてないというか知識不足があるんだけども、mod_perl 1 系では、$ENV{MOD_PERL_API_VERSION} がセットされないっぽい。

blog comments powered by Disqus

コメント

# 海賊たろ [TypeKey Profile Page] (2005年09月07日 20:36)

何で、exists 使ってるんだろ。無くてもいけるな orz