use Date::Format qw/time2str/;
sub debug
{
my $data = join(\'\', @_);
my $fmt = \'\';
my $ra = $ENV{"REMOTE_ADDR"};
my $stack = tracestack();
my $date = time2str("%m/%d %H:%M", time());
$fmt = sprintf( "[%s PID%s] %s [@%s]\\n", $date, $$, $data, $stack );
print $fmt;
}
sub tracestack
{
# code and idea borrowed from CGI::Log 1.00
# by Jason Moore, 1998 <jmoore@sober.com>
my @call = caller(1);
my $line = $call[2];
my $fname = $call[1];
my $cnt = 2;
my @stack;
while( defined($call[0]) )
{
my $oldcaller = $call[0];
@call = caller($cnt);
$call[3] = $oldcaller unless defined( $call[3] );
$fname = $call[1] if defined $call[1];
my $newcaller = $call[3];
unless( $newcaller =~ s/^main/$fname($line)/ )
{
$newcaller .= "($line)";
}
unshift(@stack, $newcaller);
$line = $call[2]; $cnt++;
}
return (wantarray) ? @stack : $stack[-1];
}
Надеюсь, понятно будет.