Clevyに関する覚書

http://github.com/gfx/p5-Text-Clevy
XslateのHEADではApp::xslateからも使えるようになってます*1
コマンドラインから:

$ xslate -E Text::Clevy -e 'Hello, {$ARGV.0} world!' Clevy
Hello, Clevy world!
$ xslate -E Text::Clevy -e '{$smarty.now|date_format:"%Y/%m/%d"}'
2010/07/01
$ xslate -E Text::Clevy -e '
{foreach from=$ARGV item=it name=it -}
{$smarty.foreach.it.iteration} - {$it}
{/foreach}' foo bar baz

1 - foo
2 - bar
3 - baz

PSGIアプリとして:

#!psgi
#!perl -w
use strict;
use Text::Clevy;
use File::Basename qw(dirname);
use Plack::Request;

my $path = dirname(__FILE__);
my $tx = Text::Clevy->new(
    path      => [$path],
    cache_dir =>  $path,
);

sub app {
    my($env) = @_;
    my $req  = Plack::Request->new($env);
    my $res  = $req->new_response(200);
    my %vars = (
        title => "Testing <Clevy>",

        ids   => [100, 101, 102],
        names => [qw(Apple Banana Strowberry)],
    );
    $res->content_type('text/html');
    my $body = $tx->render('form.tpl', \%vars, request => $req);
    utf8::encode($body);
    $res->body($body);
    return $res->finalize();
}
return \&app;

form.tpl:

<!doctype html>
<html>
<head><title>{$title}</title></head>
<body>
<h1>{$title}</h1>
<form>
{html_options name="fruit"
    values=$ids output=$names selected=`$smarty.get.fruit` }
<input type="submit" />
</form>
</body>
</html>

Smartyを起動したことがないのであってるかどうかわかりませんが、なんとなくSmartyっぽい気がしますね!
ただ中身はXslateなので、{function foo=bar}とするとKolonでいうところの{function(foo => "bar")}という風に解釈されます。``は単にカッコと同じ扱いなので{`1 + 2` * 3} -> 9 となります。

*1:ちなみにこの$ARGVはApp::xslate -eでのみ定義される変数です。