« 加速するこま | メイン | 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