Hi!
Nach langem Rumprobieren bin ich nun endlich drauf gekommen, was falsch ist.
Theoretisch muesste es tatsaechlich so funktionieren. Ich hatte das auch so getestet. Fuehrt aber zu der Fehlermeldung, dass die beiden Variablen $Alter und $Name nur einmal definiert werden und spaeter nicht mehr verwendet werden. Das muss daher kommen, dass Perl die beiden Variablen irgendwie anders behandelt, weil sie aus der Dateizeile kommen.
Das sind Warnungen, die von Perl (mit Option -w) nach der Kompilirung erzeugt werden. Perl kann zu diesem Zeitpunkt nicht wissen, dass ich die Variablen innerhalb eines eval() eben doch noch mal verwenden werde.
Jedenfalls fuehrt
print eval($Template);
dadurch zu einer Fehlermeldung und wird nicht interpretiert.
Ja, mir ist inzwischen auch klar, warum. Denn das ist ja gleichbedeutend mit
print eval('Ich heisse $Name und bin $Alter Jahre alt.');
bzw. dasselbe, wie wenn ich mitten im Perlcode einfach
Ich heisse $Name und bin $Alter Jahre alt.
schreiben wuerde. Sehe ich ein, dass es so nicht gehen kann. ;-)
Wuerde man
print eval('$Template');
schreiben, wuerde $Template erst vom eval selbst aufgeloest werden, die Ausgabe ist dann also
Ich heisse $Name und bin $Alter Jahre alt.
.
Schreibt man
print eval("$Template");
ist das dasselbe, wie mein erster Vorschlag, da die Variable innerhalb der "" aufgeloest wird.
Und wie erreichen wir nun unser Ziel, wenn wir beim eval bleiben wollen (eval hat gegenueber Deinem Vorschlag den Vorteil, dass man die Variablennamen im Template vorher nicht kennen muss)? eval muss einen String bekommen, der mit " anfaengt und aufhoert (d.h. das erste und letzte Zeichen des String selbst sind Anfuehrungszeichen), und zwischendrin befindet sich das bereits aufgeloeste $Template, sodass eval dan $Name und $Alter aufloesen kann.
print eval('"' . $Template . '"');
sollte klappen.
Calocybe