2008年9月 9日
Template::Declareが便利すぎて、もう二度とタグ打ちしないかもしれない件
こういうモジュールを待っていた。もっと早く出会えていれば良かった。やっぱxmlって手で打つのめんどいから、別のデータ構造をhtmlに反映させる事が出来るツールが最強だとは思ってはいたんだけど、こんな便利なものがあったとは。
こんな感じで書けばhtmlが生成できます。
my @fruit = qw{apple orange banana};
template sample => sub html{
attr{ lang => ja }
head{
title{'test'}
}
body{
p{ 'hoge' }
ul{
for(@fruit){
li{ $_ }
}
}
}
};
テンプレートとして使うことが目的なんだろうけど、単一のhtmlを出力する目的としてもかなり優れています。もう私は、手打ちするときでもこれでしかhtml書かないよ。今後じかに書くことはまず無い気がする。
何せプログラムがコードを出力してくれるわけだから、タグの開閉、ネスティング含め完璧。閉じタグのスラッシュ打ち忘れてレイアウト崩れるとかがなくなるし、他人に渡しても恥ずかしくありません。
ただ、行数がかさむので視認性が劣るときがある。特に属性値を羅列するときに何行にもなってしまうのが問題
それと、テキストノードと他のタグを混在させるのが面倒なのが痛いなあ。
p{#OK
'this is hoge.'
}
p{#これもOK
attr{id => "hoge"}
'this is hoge.'
}
p{#これはNG。エラーになる。
'this is hoge.'
br{}
'this is fuga.'
}
p{#テキストノードに別のタグを続けたい場合は、outs関数を使う。
outs 'this is hoge.';
br{}
outs 'this is fuga.';
}
p{#文字列の中にタグを入れてもバカ丁寧に全部文字実体参照に変換されてしまう
'this is <strong>hoge</strong>.<br />'
."this is <em>fuga</em>."
}
ダブルコーテーションだと文字実体参照に変換で、シングルコーテーションの中だとPerlの文字列らしくそのまま出力されるのでタグを直打ちできる、とかいう仕様だったら嬉しかった。