package TIE; sub TIESCALAR { my $class = shift; my $code = shift; return bless \$code => $class; } sub DESTROY { ${$_[0]}->(); undef ${$_[0]}; } package BlockExit; sub do { my $var; tie $var, 'TIE', shift; return \$var; } package main; if (1) { my $onExit = BlockExit::do(sub { say "RAUS!"; }); say "DRIN"; } say "DRAUSSEN";