Ampita-0.04 ベータ

Amrita インスパイアです。Amrita は、id:essa さんが作った Ruby のクールな HTML テンプレート・エンジンで、バリデータを通せる HTML をそのままテンプレートにしてしまえるすごいやつです。id 属性をもったエレメントを動的なテンプレート要素として扱えるようになっていて、こんなこと良く思いつくものだなと最初使ったとき感動しました。
これの Perl 版を以前から欲しかったのですが、Amrita のデータの記述方法が Perl 向きでなく、試行錯誤していてやっと CGI.pm 風にすることを思いつき、作ってみる気になりました。データの記述方法を変えてしまっているので、r を p にして名称を Ampita にしてみました。この単語を Google で引くと人名のようですが、まあ、いいか。
Ampita-0.06 ベータ 機能強化版
https://tociyuki.sakura.ne.jp/archive/Ampita-0.04.pm
https://tociyuki.sakura.ne.jp/archive/Ampita-0.04.tar.gz
ドキュメントはまだ書いてません。

簡単な使用例

use Ampita;

my $template = <<'HTML';
<h1 id="title">untitled</h1>
<p><a id="amrita"></a> is a html template library for Ruby.</p>
<p><span id="ampita"></span> is a html template library for Perl.</p>
<ul>
<li id="lists"></li>
</ul>
HTML

my $ampita = Ampita->new;
$ampita->parse($template);
$ampita->process({
    title => 'Hello, World!',
    # CGI.pm のタグ生成関数のような書き方をしたいとき
    amrita => $ampita->e({
        -href => 'http://amrita.sourceforge.jp/index.ja.html',
    }, 'Amrita'),
    # または
    # amrita => {-href => '..', -innerTEXT => 'Amrita'},
    ampita => 'Ampita',
    lists => ['foo', 'bar', 'baz'],
});
# 上と同じことをオブジェクトでおこないとき
{
    package PO;
    sub title { 'Hello, World!' }
    sub amrita { bless {}, 'AmritaLink' }
    # または
    # sub amrita { +{-href => '..', -innerTEXT => 'Amrita'} }
    sub ampita { 'Ampita' }
    sub lists { ['foo', 'bar', 'baz'] }
    
    package AmritaLink;
    sub _attributes { +{-href => 'http://amrita.sourceforge.jp/index.ja.html'} }
    sub _innerTEXT { 'Amrita' }
}
$ampita->process(bless {}, 'PO');
print $ampita->output;
=head1 出力
<h1>Hello, World!</h1>
<p><a href="http://amrita.sourceforge.jp/index.ja.html">Amrita</a> is a html
template library for Ruby.</p>
<p>Ampita is a html template library for Perl.</p>
<ul>
<li>foo</li><li>bar</li><li>baz</li>
</ul>
=cut