#... grep_line => sub { grep { $_ eq TEST and return 1 } @Array; return; }, for_line => sub { TEST eq $_ and return 1 foreach @Array; return; } #... #### #!/usr/bin/perl -w use strict; use Benchmark; use constant TEST => 'match'; use constant SIZE => 100000; my @pos = (0.05, 0.1, 0.2, 0.4, 0.6, 0.8, 0.9); my @Array; my %subs = ( grep_block => sub { GREP: { grep { $_ eq TEST and next GREP } @Array; return; } continue { return 1; } }, grep_line => sub { grep { $_ eq TEST and return 1 } @Array; return; }, grep_simple => sub { return grep { $_ eq TEST } @Array; }, for_block => sub { foreach (@Array) { return 1 if TEST eq $_; } return; }, for_line => sub { TEST eq $_ and return 1 foreach @Array; return; } ); foreach (@pos) { my $pos = SIZE * $_; printf "Matching position %d from %d i.e. (%0.2f)\n" , $pos, SIZE , $pos/SIZE; @Array = ( ('x') x ($pos - 1), TEST, ('x') x (SIZE - $pos) ); Benchmark::cmpthese( 1000, \%subs ); }