Xslate, as of 0.1006

Xslateは実行エンジン・パーザ・コンパイラが独立になるように設計してあるため、コンパイル済みの仮想マシンコードを用意すればの実行の際にコンパイラをロードする必要がない。またこのため、パーザ部分だけを切り替えることも比較的簡単にできる。そこで、Template-Toolkitライクな構文を処理するパーザを実装してみた。

#!perl -w
use strict;
use Text::Xslate;
my $tx = Text::Xslate->new(
    syntax => 'TTerse',
    string => 'Hello, [% dialect %] world!',
);

print $tx->render({ dialect => 'TTerse' });
# => Hello, TTerse world!
__END__

このTTerseは今のところ変数展開とIF-ELSIF-ELSE-END, FOREACH-IN-END文しかサポートしていないが、ここから拡張することはそれほど難しくない。コアのほうが落ち着いてきたら使える構文を増やすかもしれない。
また、TTerseの実装に影響を受け、元の方の構文も簡略化することができた。従来は出力するタグ(<:= ... :>)と出力しないタグ(<: ... :>)が分かれていたが、出力するタグは必須ではなくなった。つまり、以下のように、変数展開は<: $var :>でもできる。

#!perl
use strict;
use Text::Xslate;
my $tx = Text::Xslate->new(
    syntax => 'Kolon', # デフォルトなので省略可
    string => 'Hello, <: $dialect :> world!',
);

print $tx->render({ dialect => 'Kolon' });
# => Hello, Kolon world!

このほかの構文としては、オリジナル(Kolon)からタグのみ変えたMetakolonを用意してある。これは、Xslateテンプレートそれ自体を構築するテンプレートを書くときに使用することを想定している。