Templateの文字コード

ロジックで扱う文字コードと出力する文字コードが違うなんてことはよくある話。
じゃ何とかならないのかということで、とある人に相談してみたところ、こんなモジュールがあるよってことで教えてくれた。

  • Template::Stash::Encode

で、これはテンプレートに渡すパラメータの文字エンコードを変換してくれるらしい。
具体的には以下のように使う。

use strict;
use warnings;
use Template;
use Template::Stash::Encode;

my $template_file = "hoge.tt";
my $params = {
	hoge => "ほげ",
};
my $template = Template->new(
	STASH => Template::Stash::Encode->new(icode => 'utf8', ocode => 'eucjp')
);
$template->process(
	$template_file,
	$params,
) or die $!;

上のサンプルではロジックではUTF-8だが、埋め込む時にはEUCに変換する例。
注意すべきはテンプレートファイルの文字コードは一切変更してくれないってこと。
いやぁ、便利便利♪