TT の Virtual Method で dump

id:secondlifeRails 勉強会で、Rails では

<%= debug @item =>

とすると、@item の中を YAML で dump できるとのことでした。テンプレートに描写するデータのデータ構造が知りたいってことは良くあるので、これは便利だなあと思い TT でも同じことをしようとプラグインを書き書き。

package Template::Plugin::Dump;
use strict;
use warnings;
use base qw (Template::Plugin::VMethods);
use Data::Dumper;

our @SCALAR_OPS = our @LIST_OPS = our @HASH_OPS = (
    dump  => ?&dump,
);

sub dump {
    Data::Dumper::Dumper(shift);
}

1;

これで

[% USE Dump %]
...
<pre>
[% data.dump %]
</pre>

と任意のデータ(スカラーでもリストでもハッシュでもOK)に対して dump できるようになります。Virtual Method 便利。

と、思ったら CPANTemplate::Plugin::Dumpvar なんてものが既にあった。ガーン。

[% USE Dumpvar %]
  
[% Dumpvar.dump(this) %]

こんな感じのインタフェース。出力は Devel::Dumpvar とやらを使っているみたいです。

Devel::Dumpvar の出力は見やすいんだかみにくいんだかよく分からないし、VMethod の方が OO 厨には好みだろうと思って、苦し紛れに

package Template::Plugin::DumpVMethod;
use strict;
use warnings;
use base qw (Template::Plugin::VMethods);

our @SCALAR_OPS = our @LIST_OPS = our @HASH_OPS = (
    dumpvar => ?&dumpvar,
    dumper  => ?&dumper,
);

sub dumper {
    require Data::Dumper;
    Data::Dumper::Dumper(shift);
}

sub dumpvar {
    require Devel::Dumpvar;
    Devel::Dumpvar->new( to => 'return' )->dump(shift);
}

1;

こんな風にしてしまった。でも OO はいいけど、dumper とか dumpvar とかそのデータ構造がメソッドなりハッシュなりを持ってたらアウトです。ということで TT::Plugin::Dumpvar のインタフェースの方が無難?

CPAN にうpするのはやめておきます。

追記

2006年02月23日 charsbar 『[perl][tt]つか、Data::Dumperでよければ素のTTにTemplate::Plugin::Dumperが標準装備されてるわけですが……?』

おっつ! 本当に、すいませんでした。