HTML::Templateでテンプレートを読み込むときUTF8フラグ付ける
スポンサードリンク
昔作ったPerlスクリプトをメンテナンスしてたらこんなコードがあったよ。
use utf8; use HTML::Template; open $fh, "<:utf8", 'hoge.tmpl' or die $!; my $t = HTML::Template->new ( filehandle => $fh, ); close $fh;
これは、HTML::Templateを使いたいのだけれども、テンプレートに差し込む文字列がUTF8フラグ付きなんで(XML周り扱うとUTF8フラグ付いていた方がいいときあるよね)、テンプレートもUTF8フラグ付で読み込んでおきたいっていう話なんだけれども。
こんなのにいちいちファイルハンドル渡して読み込むのってスマートじゃないってことでこんな風に。
use utf8; use HTML::Template; my $t = HTML::Template->new ( filename => 'hoge.tmpl', filter => sub { utf8::decode( ${ shift() } ); }, );
いかにもPerlが嫌いになりそうなコードなので、filterのところを書きなおすと、
filter => sub { my $r = shift; utf8::decode( $$r ); },
とか、
filter => sub { my $r = shift; $$r = Encode::decode_utf8( $$r ); },
とか書けるよ。
以下を参考にしたよ。
- Perl 5.8.x Unicode関連 [www.rwds.net]
- TTの前処理 - Charsbar::Note [d.hatena.ne.jp]
- Perlで+を使うと幸せになれるよ (*´Д`)ノ - (゚∀゚)o彡 sasata299's blog [blog.livedoor.jp]
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3319
コメントする