#! perl use strict; use warnings; use Benchmark qw(cmpthese); cmpthese(1_000_000, { 'bare_loop' => \&bare_loop, 'eval_loop' => \&eval_loop, }); sub bare_loop { my ($count, $evens, $flag) = (100, 0, 0); while ($count--) { next if $count % 2; # odd if ($count == 50) { $flag = 1; last; } ++$evens; } print "Normal loop exit\n" unless $flag; } sub eval_loop { my ($count, $evens) = (100, 0); eval { while ($count--) { next if $count % 2; # odd die if $count == 50; ++$evens; } }; print "Normal loop exit\n" unless $@; } #### Rate eval_loop bare_loop eval_loop 71541/s -- -23% bare_loop 92362/s 29% --