http://www.perlmonks.org?node_id=260557


in reply to custom CGI die

tjios is a suggestion to circumvent all those errorprone hassles ... *grin*

if using apache or a server that has a similar mechanism modify .htaccess in your WEBSERVER_ROOTDIR or in the subdir where those settings shall apply as follows

ErrorDocument 400 /cgi-bin/error500.cgi
ErrorDocument 401 /cgi-bin/error500.cgi
ErrorDocument 402 /cgi-bin/error500.cgi
ErrorDocument 403 /cgi-bin/error500.cgi
ErrorDocument 404 /cgi-bin/error500.cgi
ErrorDocument 500 /cgi-bin/error500.cgi

put the script in its place and modify it as needed

#!/usr/bin/perl -wT use strict; $|++; BEGIN { unshift @INC, '/home/little/lib'; unshift @INC, '/home/little/extlib'; } use CGI qw(-compile :all); $CGI::DISABLE_UPLOADS = 1; $CGI::POST_MAX = 0; my $url = 'http://little.perlmonk.org/'; #print redirect(-uri => "$url", -expires=>"now") if ($ENV{'REDIRECT_RE +DIRECT_STATUS'} eq "200"); use CGI::SSI(autotie => 'STDOUT'); #use CGI::Pretty; use XML::Simple; my $messages = ""; $messages = XMLin('/home/little/my/prefs/sysmesg.xml'); autoEscape(undef); print header(-status=>$ENV{'REDIRECT_STATUS'},-charset=>'iso-8859-1', -expir +es=>"now"), #'<!--#include virtual="/includes/logic/docinfo.shtml" -->', start_html( -title=>$messages->{error}->{$ENV{'REDIRECT_STATUS'}}->{title}, -head=>meta({ -http_equiv=>'Content-Type', -content => 'text/html; + charset=iso-8859-1'}), -base=>'true', -xbase=>$url, -lang=>'de-DE', -style=>{-src=>'/styles/rb_app.css'}, # -script=>[ # {-language=>'JavaScript', # -src=>'/scripts/rb_menu.js'} # ] ), #'<!--#include virtual="/includes/header/header.shtml" -->', div({-id=>"main"}, h1($ENV{'REDIRECT_STATUS'}." - ".$messages->{error}->{$ENV{'REDIRE +CT_STATUS'}}->{title}), p($messages->{error}->{$ENV{'REDIRECT_STATUS'}}->{description}), ), #'<pre><!--#printenv --></pre>', '<!--#include virtual="/includes/footer.shtml" -->', #end_html() ; 1;

It's possibly not the best one of its kind but suffices at least my needs. *smile*

and here is the according xml file

<?xml version="1.0" ?> <messages> <error name="400"> <title><![CDATA[Ung&uuml;ltige Anfrage]]></title> <description><![CDATA[ Das angeforderte Dokument existiert nicht oder nicht m +ehr auf diesem Server oder wurde an eine andere Stelle verschoben. ]]></description> </error> <error name="401"> <title><![CDATA[Autorsierung erforderlich]]></title> <description><![CDATA[ Das angeforderte Dokument ist gegen unerlaubten Zugrif +f gesch&uuml;tzt. F&uuml;r den Zugriff ist ein g&uuml;ltiger Benutzer +name (Login) und ein Passwort erforderlich. ]]></description> </error> <error name="402"> <title><![CDATA[Zugriff kostenpflichtig]]></title> <description><![CDATA[ Wenn Sie diese Seite sehen, d&uuml;rfen Sie uns eine f +reiwillige Spende &uuml;bersenden. :-) ]]></description> </error> <error name="403"> <title><![CDATA[Zugriff verweigert]]></title> <description><![CDATA[ Das angeforderte Dokument ist nicht &ouml;ffentlich zu +g&auml;nglich. ]]></description> </error> <error name="404"> <title><![CDATA[Dokument nicht gefunden]]></title> <description><![CDATA[ Das angeforderte Dokument existiert nicht oder nicht m +ehr auf diesem Server oder wurde an eine andere Stelle verschoben. ]]></description> </error> <error name="420"> <title><![CDATA[Zeitweise nicht verf&uuml;gbar]]></tit +le> <description><![CDATA[ Das angeforderte Dokument existiert auf diesem Server +ist jedoch in Bearbeitung und steht daher zur Zeit leider nicht zur V +erf&uuml;gung. Bitte versuchen Sie es sp&auml;ter erneut. Vielen Dank + f&uuml;r Ihr Verst&auml;ndnis. ]]></description> </error> <error name="500"> <title><![CDATA[Interner Server-Fehler]]></title> <description><![CDATA[ Bei der Bearbeitung der Anfrage hat eine Anwendung ein +en Fehler verursacht. ]]></description> </error> <error name="other"> <title><![CDATA[Fehler]]></title> <description><![CDATA[ Bei der Bearbeitung der Anfrage ist ein Fehler aufgetr +eten. ]]></description> </error> </messages>

Have a nice day
All decision is left to your taste

Update
Or see CGI::Test::Page::Error for a module.