Acme-JavaTrace
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Acme/JavaTrace.pm view on Meta::CPAN
package Acme::JavaTrace;
use strict;
{
no strict;
$VERSION = '0.08';
}
# Install warn() and die() substitutes
$SIG{'__WARN__'} = \&_do_warn;
$SIG{'__DIE__' } = \&_do_die;
my $stderr = '';
my $in_eval = 0;
my %options = (
showrefs => 0,
);
#
# import()
# ------
sub import {
my $class = shift;
for my $opt (@_) {
exists $options{$opt} ? $options{$opt} = not $options{$opt}
: CORE::warn "warning: Unknown option: $opt\n"
}
}
#
# _use_data_dumper()
# ----------------
sub _use_data_dumper {
require Data::Dumper;
import Data::Dumper;
$Data::Dumper::Indent = 1; # no fancy indent
$Data::Dumper::Terse = 1; # don't use $VAR unless needed
$Data::Dumper::Sortkeys = 1; # sort keys
#$Data::Dumper::Deparse = 1; # deparse code refs
{
local $^W = 0;
*Devel::SimpleTrace::_use_data_dumper = sub {};
}
}
#
# _do_warn()
# --------
sub _do_warn {
local $SIG{'__WARN__'} = 'DEFAULT';
my $msg = join '', @_;
$msg =~ s/ at (.+?) line (\d+)\.$//;
$stderr .= $msg;
$stderr .= "\n" if substr($msg, -1, 1) ne "\n";
_stack_trace($1, $2);
print STDERR $stderr;
$stderr = '';
$in_eval = 0;
}
#
# _do_die()
# -------
sub _do_die {
local $SIG{'__WARN__'} = 'DEFAULT';
local $SIG{'__DIE__' } = 'DEFAULT';
CORE::die @_ if ref $_[0] and not $options{showrefs};
CORE::die @_ if index($_[0], "\n\tat ") >= 0;
my @args = @_;
_use_data_dumper() if ref $args[0];
my $msg = join '', map { ref $_ ? "Caught exception object: $_\: ".Dumper($_) : $_ } @args;
$msg =~ s/ at (.+?) line (\d+)\.$//;
$stderr .= $msg;
$stderr .= "\n" if substr($msg, -1, 1) ne "\n";
_stack_trace($1, $2);
if($in_eval) {
$@ = $stderr;
$stderr = '';
$in_eval = 0;
CORE::die $@
} else {
print STDERR $stderr;
$stderr = '';
exit -1
}
}
#
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.261 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )