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

XMLRPC::Liteの警告

PingBadge ver.3を作っているのだが、-wオプションのせいか、どうもApacheのエラーログにwarningが出る。

XMLRPC::Transport::HTTP::CGI->dispatch_to('weblogUpdates')->handle;
Use of uninitialized value in pattern match (m//)
at /Library/Perl/5.8.6/SOAP/Lite.pm line 2229.

まぁ、warningだけなので問題なく動くのだが、気持ちが悪いので探ってみた。

SOAP/Lite.pmの2229行目は次のようになっている。

2229:  if (defined($class = $self->dispatch_with->{$method_uri}
2230:    || $self->dispatch_with->{$action || ''}
2231:    || ($action =~ /^"(.+)"$/ ? $self->dispatch_with->{$1} : undef))) {

パターンマッチがおかしいらしいので、つまり$actionが設定されていないのだろうと思われる。$actionをセットする部分をさかのぼってみてみると、

2221:  $self->on_action->(my $action = $self->action, $method_uri, $method_name);

これらしい。つまり、$self->actionでundefが返されたときに問題が起きるのかな。次のように変えてみる。

2221:  $self->on_action->(my $action = $self->action || '', $method_uri, $method_name);

これで$self->actionがundefを返しても空の文字列がセットされている事になる。

この変更でApacheのエラーログを読むと、warningは出なくなった。まだちょっと腑に落ちない部分があるのだが、本体側を何とかしないといけないので、とりあえずはOKとしよう。