use Benchmark qw[ cmpthese ]; @good = map{ join'',map{ rand() < .5 ? 1 : 0 } 1..1000 } 1..100; @bad = map{ substr( $s=$_, rand( 1000 ), 1 ) = 2 } @good; cmpthese( -3, { '+ve' => q[ $n1 = grep /^[01]+$/, @good, @bad ], '-ve' => q[ $n2 = grep !/[^01]/, @good, @bad ] }); Rate -ve +ve -ve 467/s -- -80% +ve 2363/s 406% -- print $n1, $n2; 100 100