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; }