#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #ifndef SAVEDESTRUCTOR_X #define SAVEDESTRUCTOR_X SAVEDESTRUCTOR static void scope_exit(void* block) { dTHX; #else static void scope_exit(pTHX_ void* block) { #endif dSP; PUSHMARK(SP); call_sv(block, G_VOID | G_DISCARD | G_NOARGS | G_EVAL | G_KEEPERR); SvREFCNT_dec(block); } MODULE = Scope::OnExit PACKAGE = Scope::OnExit void on_scope_exit(block) CV* block; PROTOTYPE: & CODE: LEAVE; SvREFCNT_inc(block); SAVEDESTRUCTOR_X(scope_exit, block); ENTER;