HTML::Templateでvalid HTML

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>

と、こんな感じ。