Magst du dein Modul mal zuschicken? Oder unterliegt es einem strengen
Copyright? :-)
Nö, es ist eigentlich auch ganze simpel
package debug;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(DEBUG);
$VERSION = 1;
use strict;
use Data::Dumper;
use CGI;
#################################################
# Globals #
#################################################
my $DEBUG = 0;
my @debug_msg = ();
my @warn = ();
my $died = 0;
sub start_debug
{
$DEBUG = shift;
$SIG{__WARN__} = \&warn_handler;
$SIG{__DIE__} = \&die_handler;
}
#======================================================================
# DEBUG
#
# Aufruf im Programm:
#
# DEBUG DEBUG_LEVEL, "text:", Variabel;
#
# Loggen von Werten
#======================================================================
sub DEBUG
{
my($level, $msg, $var) = @_;
return '' unless $DEBUG;
return '' if defined $level && $level > $DEBUG;
# Ausgabe
return CGI::Dump() . "<hr>Warnungen:<br><pre>@warn</pre><hr>DEBUG $DEBUG:<br><pre>@debug_msg</pre>"
if !defined $level;
# Speichern
$Data::Dumper::Indent = 2;
my @c = caller;
push @debug_msg, "<b>$msg</b>-<br>$c[1]:$c[2]". (defined $var ? "\n".Dumper($var) : '') ."\n";
}
sub warn_handler
{
push @warn, @_;
}
sub die_handler
{
return if $died++;
print "Content-Type: text/html\n\n<html><body>",
"<h1>GESTORBEN</H1>",
"<pre>Grund: @_</pre><br>",
"Fehler: *$!* <br>",
"<br>Caller:<br>"
;
foreach(caller)
{
print "$_<br>";
}
print "$@",
DEBUG(),
"ENDE.<hr></body></html>"
;
}
1;
Im Orginal ist noch eine einfache Mail Routine im die Handler.
angewendet wird es einfach durch
BEGIN
{
use debug;
debug::start_debug( ... Level .. );
}
und dann überall wo du Variabeln überwachen willst:
DEBUG 1, "text", $var;
die Ausgabe
print DEBUG();
DEBUG
Struppi.