Yes, sorry. Seems as if you guys were right. But why exactly does the eval have to fail? Where could you detect the difference? I mean, after all the return value of the outer eval is the same as the one of the inner eval and $@ is empty, as specified.
You are responsible for propagating $@ to the outer most eval.
eval {
die "borg";
};
warn "whoops $@" if $@;
eval {
eval {
die "borg";
};
die $@ if $@; # essentially "rethrow" an "exception" if it occured
};
warn "whoops $@" if $@;
__END__
whoops borg at - line 2.
whoops borg at - line 8.