timethese(-70, { and => 'my $m=0; for(@nums){if ($_ and $_>2) {$m++}}', or => 'my $f=0; for(@nums){if (($_||0)>2) {$f++}}', def => 'my $n=0; for(@nums){if (defined $_ and $_>2) {$n++}}', base => 'my $q=0; for(@nums){if ($_>2) {$q++}}' }); This produced: Benchmark: running and, base, def, or, each for at least 45 CPU seconds... and: 49 wallclock secs (47.71 usr + 0.05 sys = 47.76 CPU) @ 6077.60/s (n=290266) base: 44 wallclock secs (44.82 usr + 0.18 sys = 45.00 CPU) @ 6205.20/s (n=279234) def: 47 wallclock secs (44.96 usr + 0.04 sys = 45.00 CPU) @ 6034.82/s (n=271567) or: 45 wallclock secs (45.00 usr + 0.02 sys = 45.02 CPU) @ 6034.41/s (n=271669)