Struppi hat dich bereits darauf aufmerksam gemacht, wie wichtig es ist, zuerst Errormessages zu kontrollieren und die Ausgabe an den richtigen Ort umzuleiten.
Normalerweise gibt man da schnell die Fehler an den Browser aus.
Ich habe für mich jedoch eine andere Lösung wie folgt:
Ich habe in meinen cgi Scripten die Anweisung
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">>error.txt") or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
Das heisst, es werden alle Errormessages in ein File im gleichen Directory wie das ausführende Script umgeleitet.
Scripte durchlaufen verschiedene Phasen.
Der BEGIN Block stellt sicher, dass das File bereits vor der eigentlichen Run-Time geöffnet wird um möglichst alle Fehler fangen zu können.
Der Übersicht halber sollte man BEGIN Blocks auch ziemlich oben im Skript notieren.
open(LOG, ">>error.txt") or die .....
mit ">>" wird der Text angehängt.
Warum ist das besser?
Grund 1: Errormessages an den Browser werden je nachdem in einem kaputten HTML Kontext ausgegeben, was der Leserlichkeit nicht sehr hilfreich ist.
Grund 2: Man darf derart warnings auch bei Online-Skripten laufen lassen.
Normale User sollten keine Errormessages (ausser die durch den Server direkt erzeugten) sehen.
Grund 3: use warnings ist keine Performance Strafe.
Fehler im Code sind es.
mfg Beat
Selber klauen ist schöner!