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>
Wobei allein $self->eav('title','Hello World')
die Sache auch schon erledigen würde. Interessant wirds erst mit Schleifendurchläufen:
$self->{STASH}{numbers} = [{n=>1},{n=>2},{n=>3}];
__DATA__
%loop_numbers%
<li> %n% </li>
%endloop%
Und selbstversändlich dürfen die Templates aus beliebigen Quellen kommen, z.B. aus Datenbanken oder Dateien..
Schöne Grüße