今日のCPANモジュール(跡地)

宣伝と注意書き

このサイトが元になったCPANモジュールガイドという本を書きました。

本書ではTemplateの代わりにText::Xslateを扱いました。

Text::Xslateの項目以外でも、Data::Pageなどテンプレートで使われそうなモジュールについてはText::Xslateテンプレートでの利用例を載せてあります。

2007-02-25

use Template;

これから数回は、仕事でよく使う大型モジュールを中心に紹介して行こうと思います。まずは、Templateです。ディストリビューション名は Template-Toolkit というので、TT と呼ばれます。

CPAN は、こういったトップレベル(モジュール名に :: がつかない)の名前空間はよほどのものでないと使わないようにということになっています。いちおう。その点、Template は「テンプレート」を名乗るにふさわしい、一級のモジュールです。

要するに Perl 版 JSP と言えば早いでしょうか。非常に強力なのでテンプレート側でいろいろできちゃったりしますので使い方はあなた次第、という感じです。が、いざという時(きれいなロジックを書いてるヒマがなかった時とか...)助かります。

コード側は簡単で、以下のように使います。

use Template;

# インスタンスを作成し、
my $tt = new Template;

my $vars = { 
    name => "とみた", 
    age => 28, 
};

# test.tt テンプレートファイルに $vars をバインドして出力
$tt->process('test.tt', $vars)
    or die $tt->error;

process() メソッドだけ覚えておけばよく、1番目がテンプレート2番目が変数のハッシュです。test.tt ファイルには、例えば以下のように書いておくと、

「[% name %]さん、あと[% 30 - age %]才で30ですよ」

「とみたさん、あと2才で30ですよ」と出力されます。テンプレートファイルの拡張子は何でもいいですが、TT なので .tt とする人が多いです。

1番目の引数にはファイル名以外に、ファイルハンドルやテキストそのものも渡せます。これらを渡すときはリファレンスで渡します。

$tt->process(*DATA, $vars); # DATAファイルハンドル

my $text = "My name is [% name %].";
$tt->process($text, $vars); # テキストのリファレンス

私はこれのようにコネタ系 CGI を書くときDATA ファイルハンドルを使ったりします。一つのファイルに __DATA__ 前後でまとめて入れられるので気に入っています。

process() はデフォルトは標準出力に結果を出しますが、結果を変数、例えば $out に入れたい場合は3番目に格納先変数をリファレンスで渡します。

$tt->process('template-test.tt', $vars, my $out)
    or die $tt->error;

シンタックス 基本編

では、そんな TT の強力っぷりについてできるだけ説明してみます。それぞれ簡単にしか説明できないので、詳しくはそれぞれの項目に置いた POD のリンクも参照してください。

シンタックス 発展編

SEE ALSO

Template, 良く使う部分の和訳

和訳されていませんが、専門に扱った書籍が出ています。