sub try_again { my $msg = shift; log($msg); # ..do more stuff.. return 1 if $ok; return; # would be double return } sub go { do_it() or try_again("It didn't work") or return; ... } go();