#!/usr/bin/perl use strict; use warnings; my @values = qw(test test1 test2 test3); use Benchmark qw( cmpthese ); cmpthese -2, { for_loop => sub { my @matches; for (@values) { push @matches, $_ if $_ =~ qr{test} }; }, grep_loop => sub { my @matches = grep { $_ =~ qr{test} } @values; }, }; __END__ Rate grep_loop for_loop grep_loop 66674/s -- -10% for_loop 74136/s 11% -- This is perl, v5.8.8 built for i486-linux-gnu-thread-multi