sub do_foo { print "running foo"; die "err" if $_==2; $_!=4 } sub do_bar { print "running bar"; "..."; } for (1..5) { print "-----"; my $ok = 1; eval { $ok &&= do_foo(); $ok &&= do_bar(); }; if ($@) { warn $@; next; } next unless $ok; print; } __END__ ----- running foo running bar 1 ----- running foo err at ./test.pl line 5. ----- running foo running bar 3 ----- running foo ----- running foo running bar 5