in reply to Re: Capturing brackets within a repeat group
in thread Capturing brackets within a repeat group

That's interesting. I've read that passage many times but never interpreted it that way. The bracketed comment you ommitted from the end of the paragraph:

The numbered variables ($1, $2, $3, etc.) and the related punctuation set ($+, $&, $`, and $') are all dynamically scoped until the end of the enclosing block or until the next successful match, whichever comes first. (See Compound Statements in the perlsyn manpage.)

led me to think that this was only relevent to the scope of the capture buffers external to the statement itself. I read the phrase you highlighted ... or until the next successful match ... to mean a successful match as part of a distinctly seperate m// or s/// (hence the reference to "Compound Statements"), rather than as the next successful match within the same statement.

Oh well. It was a nice idea. Thanks for setting me straight.


Examine what is said, not who speaks.

The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.

  • Comment on Re: Re: Capturing brackets within a repeat group

Replies are listed 'Best First'.
Re: Re: Re: Capturing brackets within a repeat group
by John M. Dlugosz (Monsignor) on Jan 11, 2003 at 06:15 UTC
    That's how I read that passage, too.

    But I have no problem with the way repeating a capture works. The ()'s generate code to refer to a particular slot, since the numbering is static from left-to-right. The repeat redoes the same parens. It's no different from backtracking in that respect.

    I'm sure you've figured this out:

    /( (?: blah blah) {5} ) /x
    Put the repeat inside the parens.

    —John

      The thing with doing that is that it captures the whole of the repeat group as a single entity, whereas I was hoping to capture each of the individual parts seperately.


      Examine what is said, not who speaks.

      The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.

        I beleive in Perl 6 the repeat applied to a capture group will cause that number to be an array. Or you can explicitly name it with an array name. Something like that.

        I don't see why you shouldn't be able to capture separatly in principle, if there is a fixed upper number. But Perl 5 regex syntax doesn't support that. You could squish the redundancy by making the repeat stuff in a variable and interpolating it n times or with a x operator. That would give you the "in one place" nice thing for maintainability.