Ja, $! enthält die Fehlermeldung. "die" schreibt aber auf STDERR (also ins error.log), nicht auf STDOUT (was beim Browser landen würde). Nach Ausgabe der Meldung wird das Script dann beendet.
Andreas
Ich habe gerade nochmal nachgelesen: Die Fehlerausgabe ist mittels "use CGI::Carp qw(fatalsToBrowser);" an den Browser umgelenkt (hatte ich vom Beispielskript mitkopiert), das kann also nicht das Problem sein