tokuhirom's Blog

Plack::Middleware::StackTrace and rethrow

Plack::Middleware::StackTrace displays last exception information since the code is:

    my $trace;
    local $SIG{__DIE__} = sub {
        $trace = $StackTraceClass->new;
        die @_;
    };

If you are using 'rethrow', you will get the stack-trace from the point.

use Try::Tiny;

sub f {
    die "YAY";
}

sub {
    try {
        f()
    } catch {
        die $_; # <-- you get stack trace from here!
    }
}

My answer for this issue is:

use Try::Tiny;

sub f {
    die "YAY"; # <-- you get stack trace from here!
}

sub {
    try {
        f()
    } catch {
        local $SIG{__DIE__} = 'DEFAULT';
        die $_;
    }
}