Thorsten Steffen: "die" unter perl funktioniert nicht

Beitrag lesen

Hi,
erstmal danke für die ausführliche Antwort. Wie richte ich es nun am besten ein, daß Fehlermeldungen auch auf der Website ausgegeben werden ?
Erst ein normaler print und dann ein "die" ?

Gruß
Thorsten

Hallo!

Woran liegt das ?

Man unterscheidet bei den Ausgaben eines kommandozeilenorientierten Programms/Scriptes "normale" Ausgaben und Fehlerausgaben. Das, was ein Perl-Script alles so normal mit print ausgibt, wird an die Standardausgabe (STDOUT) geschickt. In der Tat ist
    print "foo";
unter Perl nur eine Abkuerzung fuer
    print STDOUT "foo";

Fehlermeldungen werden jedoch an die Standardfehlerausgabe (STDERR) geschickt, damit man sie getrennt vom normalen Output abfangen und umleiten kann. Auf die Fehlerausgabe schreibt man mit
    print STDERR "foo";

Somit kann man unter einem richtigen Betriebssystem ein Script z.B. so aufrufen:
    perl myscript.pl  1> output.txt  2> errors.txt
um in output.txt die normalen Ausgaben zu sammeln und in errors.txt die Fehlermeldungen. Startet man ein Programm ohne Umleitungsangabe, kommen beide Kanaele auf der Konsole (Bildschirm, Terminal or whatever) raus, deswegen merkt man dort die Unterscheidung nicht.

Der Webserver nimmt nun alles, was ueber STDOUT kommt, und schickt es als CGI-Ergebnis zum Browser. Das, was ueber STDERR kommt, schreibt er jedoch ins Error-Logfile. Beim Apache auf Win heisst die defaultmaessig logs/error.log unterhalb vom ServerRoot.

Lange Rede, kurzer Sinn: die() schreibt auf STDERR, und somit wird die Fehlermeldung nicht im Browser zu lesen sein, sondern im Errorlog.

Calocybe