tokuhirom's Blog

Data::Recursive::Encode を書いた話

Data::Visitor::Encode というモジュールがあって、複雑なデータ構造の中にはいっているデータを操作するには大変便利です。

私は mobirc という IRC2HTTP gateway を開発しているのですが、こちらはユーザの環境にインストールしてつかっていただくソフトウェアであるという関係上、XS に依存したくありません。

しかし、やたらと依存モジュールが多く、得に XS が必須であり、かつまたメモリを大く消費してしまうのが難点です。また、ソースコードが複雑で、なにかあったときに読む気がしないというのも難点です。これらの欠点は、本質的には Data::Visitor の問題点であって、Data::Visitor::Encode の問題ではないのですが、依存している以上、どうしようもないことです。また、Data::Visitor は内部実装がコロコロかわることでも有名であり、Class::Accessor => Squirrel => Any::Moose => Moose とかわってきており、かつその変更のたびに Data::Visitor::Encode がうごかなくなったりしています。そういったことから、もうこのモジュールをつかうのはしんどいなあ、とおもっていました。

かねがね、そういった問題点を認識してはいたので、重い腰をあげて再実装したという次第。XS に依存せず、コードがシンプルでよみやすく、余計なことをせず、実装が安定したモジュールがほしかったのです。

↓というわけで、github においておきました。
http://github.com/tokuhirom/p5-data-recursive-encode

なにかご意見があれば pull req/blog comment などでおねがいします。

なお、Data::Visitor をつかいたくない、という一般的な要件においては Data::Rmap がオススメだと chiba さんがいってました。