Piers Cawley wrote:

> If I replace C<< ($key, $val) >> with 
>     
>     @ary = m/<$pattern>/
> 
> and the match succeeds, how many elements are there in @ary? 

Zero. No explicit captures in that pattern.


>     Suppose you want to use a hypothetical variable to bind a name to
>     a capture:
> 
>         / (\S+) { let $x := $1 } /
> 
>     A shorthand for that is:
>       
>         / $x:=(\S+) /
> 
>     The parens are number independently of any name, so $x is an alias
>     for $1.
> 
> And it's that last sentence that's important here. So, it looks like
> C<< +@ary >> is going to be 4. 

No. Only explicit paren captures add to the array attribute of the match object.
Implicit or explicit named captures add to the *hash* attribute of the match object.


>     m: w / $2:=(\S+) <lt>= $1:=(\S+) /
> 
> Note that, left to their own devices, those grouping parentheses would
> generate the $1 and $2 in the order given.
> Now, assignment to hypotheticals doesn't happen all at once, it
> happens when the matching engine reaches that point in the
> string. Unless I'm very much mistaken, the order of execution will
> look like:
> 
>       $2:=$1; $1:=$2;
> 
> And it seems to me that we'll end up with $1 and $2 both bound to the
> same string; which isn't working quite how I expect. Or do we special
> case the occasions when we bind the result of a capturing group to a
> numeric match variable?

That's my understanding. If you *explicitly* bind a captured group to a
numbered hypothetical, then the capture doesn't also implicitly bind to
a numbered hypothetical.

Damian


Reply via email to