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