HTML::Templateは便利ですが、独自のタグっぽいものを使うので文法チェックができません。<>の代わりにHTMLコメント形式にもできるけど、例えば
名前: <span class="name"><!-- TMPL_VAR NAME=FULLNAME --></span>
みたいにしたとき、spanの中身が空だとスタイルシートをいじったりするとき面倒。
・・・ということで、[TMPL_VAR ... ]みたいな記号も通すことに。
use HTML::Template; use strict; my $o = new HTML::Template(filename => 'sample1.html', filter => sub{ my $text_ref = shift; $$text_ref =~ s/\[(TMPL_.+?)\]/<$1>/go; }); $o->param({LOOP01 => [ {key => 'セイバー', value => 'エクスカリバー'}, {key => 'アーチャー', value => '無限の剣製'}, ]}); print $o->output();
sample1.html
<html> <body> <table border=1> <tr><th>key</th><th>value</th></tr> <!-- TMPL_LOOP NAME=LOOP01 --> <tr><td>[TMPL_VAR NAME=KEY]</td><td>[TMPL_VAR NAME=VALUE]</td></tr> <!-- /TMPL_LOOP --> </table> </body> </html>
出力結果
<html> <body> <table border=1> <tr><th>key</th><th>value</th></tr> <tr><td>セイバー</td><td>エクスカリバー</td></tr> <tr><td>アーチャー</td><td>無限の剣製</td></tr> </table> </body> </html>
と、こんな感じ。