Xslate supports binding

Xslateが束縛(binding)をサポートし、値に名前をつけることができるようになった。ただしそれらは定数扱いであり、代入はできない。

<:
    # constantはベアワードを要求
    constant LANG = "Xslate";
    # myは変数名を要求
    my $lang      = "Perl";
-:>
Hello, <: LANG :> world!
Hello, <: $lang :> world!

myで宣言した定数も、定数なので代入を禁止している。その代わり、コンパイル時に決定できて、かつ十分に単純な値であれば定数畳み込みの対象になる。
たとえば下記のケースでは、比較式もelse節も生成されない。

: my $foo = 42;
: if $foo == 42 {
TRUE
: }
: else {
FALSE
: }

それにしても、この定数畳み込みは面白い課題だった。コードを最適化するのは面白いが、コードジェネレータを最適化するのもまた面白いものだ。