use Benchmark qw(:all) ; my $count = 1000; my $foobar = 'foobar' x 1000; timethese($count, { 'Assigned' => sub { my @assigned = $foobar =~ /(foo)/g;}, 'Pushed' => sub { my @pushed; push @pushed, $1 while $foobar =~ /(foo)/g; }, }); #### Benchmark: timing 1000 iterations of Assigned, Pushed... Assigned: 1 wallclock secs ( 0.80 usr + 0.00 sys = 0.80 CPU) @ 1250.00/s (n=1000) Pushed: 1 wallclock secs ( 0.93 usr + 0.00 sys = 0.93 CPU) @ 1075.27/s (n=1000)