Template::Toolkitとutf8

use utf8しているコードでTemplate::Tookitを使うときのメモ。
テンプレートにutf8フラグの立った文字列を挿入し、encodeして出力しているような場合、テンプレートにマルチバイト文字が含まれていると出力時に化けてしまいます。マルチバイト文字を外から読み込むときはutf8フラグを立てないといけないのですが、テンプレート読み込み時にutf8フラグを立てる方法がないのです。

そこでテンプレート側にuse utf8を埋め込んでしまいましょう。テンプレートファイルの先頭あたりに以下のコードを埋め込みます。RAWPERLを使うためにconfigでEVAL_PERL=>1オプションを指定する必要があります。

[% RAWPERL %]
    use utf8;
[% END %]

この辺参考にしました。
http://template-toolkit.org/pipermail/templates/2003-November/005342.html
http://template-toolkit.org/pipermail/templates/2003-November/005344.html
Template::Providerの_loadメソッドをオーバーライドするのがよいということが書かれてますがテンプレートの数が少ないうちはとりあえずこれでいいかな。

Template-Toolkitマニュアル和訳
本家