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 を使うのだと思う。