in reply to manipulating call stack

There must be a way around this using some of the stuff that stacktraces are done with in Carp, right?
local $Carp::CarpLevel = $Carp::CarpLevel + 1;

Hacky, but I think I've used this in the past and got it to work.

The other thing you could mess with is Sub::Uplevel and uplevel() your parent call -- but I'd be a little nervous about that (maybe because I know the guts of Sub::Uplevel). Unless you're doing any sort of protected class stuff that uses the call stack, this is another hack that might work.

-xdg

Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.