Struppi: STDERR umleiten, aber wie flock einsetzen?

Beitrag lesen

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.