TT の Virtual Method で dump
id:secondlife の Rails 勉強会で、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 便利。
と、思ったら CPAN に Template::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が標準装備されてるわけですが……?』
おっつ! 本当に、すいませんでした。