use CGI::Carp qw( fatalsToBrowser set_message ); BEGIN { my %TRACE_COLORS = ( subroutine => 'blue', args => 'red', file => 'blue', line => 'green', ); my $VERBOSE = 1; sub print_stack_trace { my $msg = shift; use Devel::StackTrace; print "

Error

\n"; print "
$msg
\n"; print "
\n"; print "

Stacktrace

\n"; print qq(
\n);

                my $trace = Devel::StackTrace->new();
                while( my $frame = $trace->next_frame() ) {
                        print qq();
                        print $frame->subroutine;
                        print qq#(#;

                        if($VERBOSE) {
                                print qq();
                                use Data::Dumper 'Dumper';
                                print Dumper(+($frame->args));
                                print qq();
                        }
                        else {
                                print join ', ',
                                map {
                                        qq(').
                                        $_ .
                                        qq(')
                                } $frame->args;
                        }
                        print qq#)\n\t called at #;
                        print qq();
                        print $frame->filename;
                        print qq( );
                        print qq(line );
                        print qq();
                        print $frame->line;
                        print qq();
                        print qq(\n);
                }

                print "
\n"; } set_message(\&print_stack_trace); }