#>>> DummyDestructor.pm package DummyDestructor; use strict; use vars qw(@ISA @EXPORT); require Exporter; @ISA = qw(Exporter); @EXPORT = qw(make_finally); sub make_finally (\&) { return bless $_[0], __PACKAGE__; } sub DESTROY { $_[0]->(); } #>>> some perl script use DummyDestructor; ... { ... code ... my $final = make_finally { ... code ... } # beware! # no access to @_ in finally ... code ... } #### sub f { my @return; ... more code ... # vars needed in "finally" must be # defined here! eval{{ ... and more ... # instead of return $retval you'd need: @return = $retval and last; ... yet more code ... }} ... do clean up stuff here ... die $@ if $@; return @return; }