TTの本体を差し替える
前回はウェブ業界で標準的に使われているTemplate Toolkitをより安全に使うためのカスタマイズ方法をいくつか紹介しました。しばしば批判の対象となってきたエスケープの問題については,
ただし,
もっとも,
また,
そのような前提を共有したうえで,
前回はあくまでもTTの枠組みのなかで工夫を重ねてみましたが,
- ※1
- 第41回でも紹介したPerl Template Roundupの結果を見ても,
項目によって得手不得手はあるものの, TTはおおむねMasonよりも高速という結果が出ています。
Template::Alloy
TTとテンプレートレベルでは
これはもともと氏が2003年末に開発を始めたCGI::ExというCGI用のフレームワークに付属していたテンプレートエンジン
この新しいCGI::Ex::Templateは,
Template::Alloyは,
use strict;
use warnings;
use Template::Alloy;
my $ta = Template::Alloy->new;
$ta->process(\(my $tmpl =<<'TMPL'), {foo => '<"bar">'}) or die $ta->error;
[% USE JavaScript %]
[% foo %]
[% foo | html | js %]
TMPL
毎回htmlフィルタを書くのが面倒であれば,
my $ta = Template::Alloy->new(AUTO_FILTER => 'html');
Template::Alloyでは,
use strict;
use warnings;
use Template::Alloy;
use Template;
my $tmpl =<<'TMPL';
[%# Alloyでは複数の範囲を指定できます -%]
[% FOR i IN [1..2, 4..5] -%]
[%- i -%]
[% END -%]
TMPL
my $ta = Template::Alloy->new;
my $tt = Template->new;
$ta->process(\$tmpl) or die $ta->error;
$tt->process(\$tmpl) or die $tt->error; # エラー
その他,
リポジトリやメーリングリストが公開されていないなど,
- ※2
- その成果はTemplate::Parser::CETというTTの拡張としてTT本家にも還元されています
(CETはCGI::Ex::Templateの略です)。なお, CGI::Ex::Template/ Template::Alloyにはさらに速度を稼ぐためにXS版も存在しているのですが, これはその後の開発で互換性が失われたようで, 現在は正しく動作しません。
Template::Tiny
この文脈では,
Text::Xslate
gfxこと藤吾郎氏のText::Xslateについては,
use strict;
use warnings;
use Text::Xslate;
my $tx = Text::Xslate->new(
syntax => 'TTerse',
module => ['Text::Xslate::Bridge::TT2Like'],
);
TTerseというのはText::Xslateに同梱されているText::Xslate::Syntax::TTerseというTT風の構文をサポートするためのモジュールで,
- ※3
- 類似のモジュールにText::Xslate::Bridge::TT2というものもありますが,
こちらは仮想メソッドの実行にTemplate Toolkitのモジュール群を使うため, 場合によっては実行速度が半減してしまうので要注意です。