Josh Jore wrote:

>>>Would it be correct for this to print 0? Would it be correct for this
>>>to print 2?
>>>
>>>  my $n = 0;
>>>  "aargh" =~ /a* { $n++ } aargh/;
>>>  print $n;
>>
>>Yes. ;-)
> 
> Wouldn't that print 2 if $n is lexical 

Err. It *is* lexical in this example.

> and 0 if it's localized? 

No. Without the C<my> it would still print either 0 or 2, depending
on the implementation/optimization.


 > Or are lexicals localized now?

They can be. But this example C<$n> isn't.
(Just because it's used in a nested closure doesn't mean it's
localized within the pattern).


>>>What possible outputs are legal for this:
>>>
>>>  "aaa" =~ /( a { print 1 } | a { print 2 })* { print "\n" } x/
>>
> 
> I take it that what I've learned from _Mastering_Regular_Expressions_
> doesn't quite apply here?  From that interpretation I'd think it'd print
> "111\n" since the second part of the alternation wouldn't be tried.

No. It would fail to match the final C<x> in the pattern and start
backtracking.

Damian

Reply via email to