Maybe it's my age but I don't like dropping out of routines like this preferring a one way in, one way out approach.
begin();
do_stuff();
end();
sub do_stuff {
my status = stuff();
if (status is ok) { more_stuff(); }
return status;
}
then taking this a little further, make sure that stuff() and more_stuff() return status values
begin();
do_stuff();
end();
sub do_stuff {
return stuff() and more_stuff();
}
Real code tends to be more complex than this and sometimes it is cleaner to take the short cut.