Struppi: Substitution in href-tag

Beitrag lesen

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!)