http://qs321.pair.com?node_id=792173


in reply to The /p modifier in Perl5.10 regexps

The point is that $` with friends slow down every other pattern as well. If you use /p you will still have a comparatively slow match, but it won't effect the other matches.

use 5.010; use strict; use warnings; use Benchmark qw(cmpthese timethese); my $r1 = timethese( -1, { p_before => sub { 'hola juan' =~ /ju/p }, no_p_before => sub { 'hola juan' =~ /ju/ }, }, 'none'); eval '$`'; my $r2 = timethese( -1, { p_after => sub { 'hola juan' =~ /ju/p }, no_p_after => sub { 'hola juan' =~ /ju/ }, }, 'none'); cmpthese({ %$r1, %$r2 }); __END__ Rate p_before no_p_after p_after no_p_before p_before 1067899/s -- -2% -2% -80% no_p_after 1084733/s 2% -- -1% -80% p_after 1091288/s 2% 1% -- -79% no_p_before 5318863/s 398% 390% 387% --
As you see, the pattern with /p and the patterns executed after $` has been seen are equally fast, and that makes sense since they do the same work. The pattern without /p and before $` is however significantly faster, since it does not have to compute the extra match variables.

Hope this helps,
lodin