use strict; use Benchmark qw(cmpthese); use List::Util; ## a 'reasonable' worst-case scenario? first of list of twenty .. my @display_files = qw( one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty ); sub param { 'one' } cmpthese( -2, { grep_param => sub { unless( grep { $_ eq param('select') } @display_files ) { 1; } }, param_grep => sub { my $select = param('select'); unless( grep { $_ eq $select } @display_files ) { 1; } }, found => sub { my $select = param('select'); my $found; foreach (@display_files) { if ($_ eq $select) { $found = 1; last; } } unless ($found) { 1; } }, first => sub { my $select = param('select'); my $found = List::Util::first { $_ eq $select } @display_files; unless ($found) { 1; } } });