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