Nachdem ich nochmal in CGI::Carp reingeschaut habe, kam mir die Idee, wenn es Dir nur darauf ankommt die Fehlermeldungen an den Browser zu schicken, statt auf STDERR zu schreiben, könntes Du ja selbst __WARN__ und __DIE__ abfangen:
$SIG{__WARN__} = sub { print "warn: ", $_[0]; };
Besser ist es, einen Header mit ausgeben:
$SIG{__WARN__} = sub { print header, [...], "warn: ", $_[0]; };
Peter