« 加速するこま | メイン | RNA 1.9.1 fix »

January 10, 2004

XML::Parser::Lite は何故perl5.6でないと動作しないのか

Pure Perl で軽いXML Parser モジュールとして有名な XML::Parser::Lite は、perl 5.6 じゃないと動かない、とドキュメントに書かれてある。理由は、「Due to using experimantal regexp features」。

しかし、調べてみると、perl 5.005 系列も(バージョンによっては)、名(仕様)実(事例)ともに対応されているんじゃないかという気がする。

1. 問題になっている 「experimantal regexp」
perlre(perl5.6.1)によると、perl5.6.1の「experimantal regexp」は、次のとおり。
 ・(?{ code })
 ・(??{ code })
 ・(?>pattern)
 ・(?(condition)yes-pattern|no-pattern)
  (?(condition)yes-pattern)
ちなみに、これらは perl5.8.2でもexperimental のまま。
この中で、現行のXML::Parser::Liteで使用されているのは、「(?{ code })」という正規表現。動作はいまひとつ理解できないけど、perl の実行codeをembed するためのものらしい。

2. 「experimantal regexp」と perl 5.005
perlre(perl 5.005_03) によると、上記の「(?{ code })」perl 5.005_03 でもサポートされている(experimental だけれども)。
もし、この正規表現だけが問題なら、XML::Parser::Lite は、perl5.005_03 での動作がサポートされていることになるのでは。

3. SOAP::Lite の Changelog
XML::Parser::Lite を含んでいる SOAP::Lite0.60 の Changelog には、次の記載がある。
 「0.51 Tue Jul 18 15:15:14 2001
  ・・・(略)・・・
  + modified XML::Parser::Lite to work on Perl 5.005
     (thanks to John Gotts
)」
SOAP-0.51のリリース時点で、perl5.005がサポートされてたってことは、今もサポートされていると解釈していいのだろうか。(今まで気づかなかったことが情けない。)

4. そもそも実際に動作している
semblog.org はperl5.005_03なのだが、RNAのXML::Parser::Lite使用部分はちゃんと動いている。
他にも、RNA説明書にも動作事例が報告されている。

5. まとめ
というわけで、ドキュメントに書き忘れているだけで、XML::Parser::Lite は perl5.005_03 をサポートしているとみなしていいんじゃないだろうか。RNA の貧弱なRSSパース部分も、XML::Parser::Lite を使用してちゃんと書き直したほうがよいかと思う(さすがに5.6以上じゃないと動かない、というのは制限がきつすぎると思われるが、5.005_03 以上なら現実的なんじゃないだろうか)。

[追記]
ちなみに、 「(?{ code })」 について、簡単な実験をしている人がいる。結果としては、perlのバージョン(5.00503と5.6.x と 5.7.x)によって挙動が異なる、となっている。

投稿者 msano : January 10, 2004 11:13 PM

トラックバック

このエントリーのトラックバックURL:
http://www.semblog.org/mt3/mt-tb.cgi/141

コメント

コメントしてください




保存しますか?