in reply to Re^2: tight loop regex optimization
in thread tight loop regex optimization

I don't really grok the look-around assertion

Think of it as a subroutine call. The engine tries to match the sub pattern at the current location, but it current location doesn't change.

+------------ Matched at pos 0. | +-------- Matched at pos 1. | |+------- Matched at pos 2. | || +----- Matched at pos 1. | || |+---- Matched at pos 2. | || ||+--- Matched at pos 3. | || ||| v vv vvv 'abcd' =~ /a(?!BC)..d/ # Matches

Since the position on the outer regex isn't affected, replacements don't take what the sub expression matched into consideration.

my $s = 'abcd'; $s =~ s/a(?=bc)/x/; # xbcd my $s = 'aefg'; $s =~ s/a(?=bc)/x/; # abcd

The substitution pattern in your version has one less \05. Is that intentional?

Yes. One less \05 is being replaced, so one less \05 should be added.

I'm not familiar enough with this code or its expected output to really tell when it's working or when I might introduce a subtle bug somewhere

Then I guess the next order of business is to figure out the code and write test cases.