Folgendes Problem: Ich lese die gesamte HTML aus einem File (in @data_file), welches ich dann zeilenweise verarbeite. Kommt in einer Zeile der Begriff "~link~" vor so soll er durch bereits eingelesene Variablen ersetzt werden. Diese befinden sich in @db_content.
Wie schon gesagt HTML::Template macht das alles und viel mehr. Warum willst du unbedingt das Rad neu erfinden?
So hab ich das codiert (wobei hier noch Leerzeichen durch _ ersetzt werden):
foreach $i (@data_file) {
if ($_ =~ m/~link~/) {
$temp = $db_content[$i];
$db_content[$i] =~ s/ /_/;
$_ =~ s/~link~/<a href="/$db_content[$i].pl" target="_self">$temp</a>/;
$i++;
Das scheint mir ein unsinniges Konstrukt, foreach $i ( @array) $i ist dann jeweils ein Element des Arrays, aber kein Index.
$_ =~ ist auch überflüssig, da der reguläre Ausdruck wenn du keine Variabel angibst auf $_ wirkt.
}
print $_;
Mit $_ muss du vorsichtig sein, es wird durch verschiedene Operationen verändert, ich würde mir an deiner Stelle eine Schleifenvariabel anlegen (ne, ich würde HTML::Template verwenden, weil bis sowas sauber fertig programmiert ist dauert es ewig)
So sieht die Apache-Fehlermeldung aus:
[Fri Mar 09 13:44:13 2007] [error] [client 127.0.0.1] Premature end of script headers: home.pl
Da Skript gibt immer noch keinen Header aus.
[Fri Mar 09 13:44:13 2007] [error] [client 127.0.0.1] Scalar found where operator expected at D:/web/Fust_AG/cgi-bin/home.pl line 60, near "s/\~link\~/<a href="/$db_content"\r
Du scheinst falsch zu maskieren, das entspricht auch nciht ganz dem was du uns gezeigt hast.
....
[Fri Mar 09 13:44:13 2007] [error] [client 127.0.0.1] Can't find string terminator '"' anywhere before EOF at D:/web/Fust_AG/cgi-bin/home.pl line 60.\r
Die ganzen Fehler entstehen wohl durch den Inhalt deiner Ersetzungstrings, diese kennen wir nicht.
Kann mir jemand helfen??
Ja benutze HTML::Template (oder ein ähnliches Modul, da gibt es noch mehr) und fertig.
Struppi.
Javascript ist toll (Perl auch!)