HTML::Templateでutf-8テンプレートの文字化け

少しハマったので記録しておきます。


PerlのHTML::Templateを使って、
utf-8のファイルを読み込んで表示すると、
日本語が文字化けしました。


以下の記述だと文字化けを起こします。

my $tmpl = HTML::Template->new(filename => $filename);

解決策としては、以下のように記述します。

my $tmpl;
open (my $fh, "<:utf8", $filename ) or die "Couldn't open template file: $!\n";
$tmpl = HTML::Template->new( filehandle => *$fh );
close($fh);

なんか、ものすごく面倒ですね。
他のモジュールも触ってみた方が良さそう。


また使う時ようにサブルーチン化

sub get_template {
  my $filename = shift;
  my $tmpl;
  open (my $fh, "<:utf8", $filename ) or die "Couldn't open template file: $!\n";
  $tmpl = HTML::Template->new( filehandle => *$fh );
  close($fh);
  return $tmpl;
}
my $tmpl = &get_template($filename);


ref:

shunkoh hat so gedacht