Ich hatte es schon mitgelesen, aber aus seiner Fragestellung läßt sich genau das schließen.
Ja, die Formulierung war nicht ganz einfach. Auf der anderen Seite doch verständlich, weil mir Daniel ja schon geholfen hat.
Wenn Du wissen willst, wofür ich das brauche, ich mach einen Template-Parser, der für meine Ansprüche genügt und vorallem extrem schnell ist. Den HTML::TEMPLATE-Parser kannst ja nicht gebrauchen. der ist etwa Faktor 30 zu langsam!
sub fill_tmpl
{
my $tmpl_ref = shift;
my $hash_ref = shift;
my $tmpl;
my $vorher;
my $tmpl_art;
my $tmpl_name;
my $tmpl_inhalt;
my $nachher;
while ($$tmpl_ref =~ /(.*?)<tmpl_(\w+)[\s]+name="(\w+)">(.+?)</tmpl>((?:(?!<tmpl).)*)/gs)
{
$vorher = $1;
$tmpl_art = $2;
$tmpl_name = $3;
$tmpl_inhalt = $4;
$nachher = $5;
$tmpl .= $vorher;
if ($tmpl_art eq 'if')
{
$tmpl .= $tmpl_inhalt if $$hash_ref{$tmpl_name};
}
elsif ($tmpl_art eq 'unless')
{
$tmpl .= $tmpl_inhalt unless $$hash_ref{$tmpl_name};
}
elsif ($tmpl_art eq 'var')
{
$tmpl .= $$hash_ref{$tmpl_name};
}
elsif ($tmpl_art eq 'loop')
{
# kommt noch :)
}
$tmpl .= $nachher;
}
$$tmpl_ref = $tmpl;
}