hi!
Nach einem Geistesblitz meinerseits jetzt doch noch eine Antwort, da hast du aber Glück gehabt... ;)
for (@template) {
s/[name]/$name/i;
s/[href]/$href/i;
print;
}
[...]
im array @template steht aus testzwecken einfach:
[NAME] [HREF]
[...]
die variable im regulären ausdruck wird also allem anschein nach nicht neu kompiliert...
It's not a bug, it's a feature :)
In obigem Code-Block wird @template Zeile für Zeile durchgegangen. Durch s/// veränderst du die Variable
$_, was aber direkte Auswirkungen auf das Array @template hat. Wir hatten hier irgendwann vor kurzem
auch mal einen Thread dazu (IMHO). Im Endeffekt steht also in @template nach dem ersten Durchlauf nur
noch "name1 href1", da die Template-Makros ersetzt wurden.
Siehe dazu auch perlfaq4: http://www.perl.com/pub/doc/manual/html/pod/perlfaq4.html#How_do_I_process_modify_each_ele
Ich würde ungefähr folgendes vorschlagen:
for (@template)
{
my $tmp = $_;
$tmp =~ s/[name]/$name/i;
$tmp =~ s/[href]/$href/i;
print $tmp;
}
Bei "for my $tmp (@template) {..}" tritt übrigens der gleiche Effekt auf, wenn du $tmp veränderst, das hängt
also nicht direkt mit der Spezialvariablen $_ zusammen.
bye, Frank!