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