use warnings; use strict; use Benchmark qw(:all); open my $fh, '<', $ARGV[0] or die $!; cmpthese(1000, { while_no_parens => '_while_no_parens', while => '_while', }); sub _while_no_parens { seek $fh, 0, 0; my $count=0; while(<$fh>){ while($_=~/M+/g){ $count++; } } # print "while w/o: $count\n"; } sub _while { seek $fh, 0, 0; my $count=0; while(<$fh>){ while($_=~/(M+)/g){ $count++; } } # print "while: $count\n"; } __END__ Rate while while_no_parens while 15.0/s -- -11% while_no_parens 16.9/s 13% --