Xslate 0.1058の新機能
HTMLのソースを返す関数で正しくHTMLソースを出力させるには、戻り値をmark_raw()する必要があります。さもないと、自動エスケープ機構が働いてしまうからです。
このために、0.1057以前のXslateはわざわざラッパー関数を書く必要がありました。しかし、繰り返し同じことをするのは面倒なので、これを簡単にできるようにするためのユーティリティを追加しました。
以前以下のように書いていたところが(Cookbookより引用):
use Text::Xslate qw(mark_raw unmark_raw); use HTML::FillInForm; sub fillinform { my($q) = @_; my $fif = HTML::FillInForm->new(); return sub { my($html) = @_; $html = unmark_raw($html); return mark_raw($fif->fill(\$html, $q)); }; }
以下のように書けるようになります。
use Text::Xslate qw(html_builder); use HTML::FillInForm; sub fillinform { my($q) = @_; my $fif = HTML::FillInForm->new(); return html_builder { my($html) = @_; return $fif->fill(\$html, $q); }; }
この例だとあまり変わりませんが、このほかfunction => { foo => html_builder(\&foo) }
とも書けるため、ラッパーを直接書かなければならないケースは少なくなるかと思います。