sub wrapper { eval { ## do some stuff that might die }; if ($@) { ## handle some error things, die if unrecoverable return 0; # returns false if recoverable } return 1; #returns true if we should retry } #### use constant RETRIES => 3; for (1..RETRIES) { last if wrapper() } #### use constant RETRIES => 3; our $give_up = 0; for (1..RETRIES) { $give_up = 0; last if wrapper(); $give_up = 1; } die ('Tried '.RETRIES.' times without success. Giving up.') if $give_up;