M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2010年8月20日 12:30

HTML::Templateでテンプレートを読み込むときUTF8フラグ付ける

このエントリーをはてなブックマークに追加 mixiチェック

昔作った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] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3319

コメントする