Template Toolkit sucks
Template Toolkitはどういうわけか*1Perlにおける標準のテンプレートエンジンの座にいるが、その仕様は美しいとは言い難い。特にまずいのは、 あるトークンの意味がコンテキストや実行状態によって異なることだ。
記号の意味がコンテキストによって異なる例:
[% SET foo = bar # "="は代入 %] [% FOR foo = bar # "="は"IN"のエイリアス %]
リテラルの意味がコンテキストによって異なる例:
[% GET foo # foo という変数を参照 %] [% INCLUDE foo # "foo"というファイルを参照 %]
フィールドの参照が実行状態によって異なる例*2:
#!perl -w use strict; use Template; my $tt = Template->new(); # "keys"があるときはフィールドの参照 $tt->process(\<<'T', {data=>{keys=>42}}); [% data.keys # 42 %] [% data.keys() # 42 %] T # "keys"がないときはメソッドの呼び出し $tt->process(\<<'T', {data=>{foo=>42}}); [% data.keys.join("") # foo %] [% data.keys().join("") # foo %] T
また、リテラルに対してメソッドを呼び出せないというよくわからない制限もある。
[% "foo".length() # => parse error %]