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でのみ定義される変数です。