Template-Toolkit 2.15 リリース,そして
長らくメンテされてなかったように見えた TT ですが,2.15 がリリースされました。Changes を読んでもいまいちどこがかわったのかわかりませんでした(←かっこわるす)。
Perl 5.8 と UNICODE - daily dayflower で変なところで苦労していたんですが,どうも勘違いだったぽく,
#!/usr/bin/perl
use strict;
use utf8;
use Template;
use Template::Context;
use Template::Provider::Encoding;
use Template::Stash;
my $tt = Template::Context->new(
LOAD_TEMPLATES => [
Template::Provider::Encoding->new
],
STASH => Template::Stash->new(
{
'日本語変数' => '日本語値',
},
),
);
print Encode::encode('utf8', $tt->process('utf8.txt', {}));utf8.txt の内容は
テスト: [% 日本語変数 %]
これ,うまくいきました。以前は \*DATA で読んでいたのがごちゃごちゃしちゃってた原因ぽいです。まとめると,
- Template::Provider::Encoding を使うと,読み込んだテンプレートが内部 UNICODE として変換される。
- だから Parser は上記でいう「日本語変数」という部分もうまくパースしてくれる(Encoding じゃない Provider でもためしてみてください;パーサでエラーになります)。
- このような状況で,標準添付の Stash でも utf8 ビットがたった値やラベルをセットしてあれば,うまくいく。
- 他のモジュールの出力結果を利用したりした場合に,Stash の値が octet stream になってしまうことがある。そんな場合のために Template::Stash::ForceUTF8 を使うのだと思う。