古い記事
ランダムジャンプ
新しい記事
日本の Perl Geek 達からだいたい5年遅れで新しいもの
(つか、すでに枯れたもの)にチャレンジしている私です。

さて、Perl のテンプレートエンジンとして
今までは HTML::Template を使っていました。
シンプルなのが良いのですが、
自由度がちょっと低いので最近は閉塞感を感じていました。
ということで Template Toolkit を使ってみようかと。

perldoc を見ながらちょこっといじってみたら、
HTML::Template でできることはカバーでき、
かつ、
「やりたいと思っているんだけど HTML::Template だと
面倒そうな処理」が簡単に実装できそうなので、
非常に良い感じ。

以下、HTML::Template っぽいことをやるサンプルコード:
#!/usr/bin/perl
use strict;
use warnings;
use Template;

my $tt = Template->new({
#    INCLUDE_PATH => 'tpl',
#    OUTPUT_PATH => 'out', 
#    EVAL_PERL => 1, 
}) || die $Template::ERROR, "\n";

my $str = "TKSK";
my $list_ref = [{id => 1, name => "you"},
                {id => 20, name => "us"},
                {id => 3, name => "me"},];
my $hash_ref = {yes => "Yes!!!",
                no => "Noooooo!"};

my $vars = {
    str => $str,
    lr => $list_ref,
    hr => $hash_ref,
};

#$tt->process("a.txt", $vars, "a.html") || die $tt->error(), "\n";
#$tt->process(\*DATA, $vars, "a.html") || die $tt->error(), "\n";
$tt->process(\*DATA, $vars) || die $tt->error(), "\n";

__END__
[% IF str %][% hr.yes %] [% str %][% ELSE %][% hr.no %][% END %]
[% FOR lr %][% id %]/[% name %][% IF !loop.last() %],[% END %][% END %]
[% FOR v IN lr.sort('name') %]([% v.id %]/[% v.name %])[% END %]
[% FOR v IN lr.nsort('id').reverse %]([% v.id %]/[% v.name %])[% END %]

実行結果:
Yes!!! TKSK
1/you,20/us,3/me
(3/me)(20/us)(1/you)
(20/us)(3/me)(1/you)

なお、業界では常識ですが、TKSK は高須クリニックの略です。
ゆえに「Yes!」、ということで。

ref. 竹迫さんはtkskなのか?? - snow-bellの日記
  http://d.hatena.ne.jp/snow-bell/20080218/1203274360
この記事に言及しているこのブログ内の記事