Ich sehe in Deinem "Hello World" Beispiel keine Anwendung einer Template Engine. Bei mir würde das eher so aussehen:
sub init{ my $self = shift; $self->{STASH}{headline} = "Hello World"; } __DATA__ <!-- template --> <h1> %headline% </h1>
Das "Hello World"-Beispiel ist mit Absicht so simpel wie möglich gestrickt, deswegen kommt auch noch kein Platzhalter darin vor. Dein Beispiel in Teein/Html würde so aussehen:
$headline = "Hello World";
$html = h1()(text($headline));
Teein/Html sorgt automatisch dafür, dass $headline
entsprechend maskiert wird, XSS-Angriffe werden also automatisch erkannt und unschädlich gemacht. Außerdem gibt Teein/Html dir eine minifizierte HTML-Version aus, um das Datenübertraungsvolumen möglichst gering zu halten.