On 5/14/05, Larry Wall <[EMAIL PROTECTED]> wrote: > On Sat, May 14, 2005 at 01:15:36AM +0000, Luke Palmer wrote: > : I think the misunderstanding is rather simple. You keep talking like > : you prepend a .*? to the rule we're matching. I think that's wrong > : (and this is where I'm making a design call, so we can dispute on this > : once we're clear that it's this that is being disputed). I think > : there is a special rule: > : > : rule matchanywhere($rx) { .*? <$rx> } > : > : Which makes a *subrule call* to the rule we're matching. Therefore > : ::: just breaks out of that subrule, and backtracks into the .*? > : again. > > I want ::: to break out of *that* dynamic scope (or the equivalent > "matchrighthere" scope), but not ::.
I'm not sure that's such a good idea. When you say: rule foo() { a* ::: b } You know precisely where that ::: is going to take you: right out of the rule. That's the way it works in grammars, and there's no implicit anything else that you're breaking out of. But you're saying that when we use a bare // matching a string, that's no longer the case? In other words, this: $str ~~ / a* ::: b / Is different from: $str ~~ / <foo> / That seems like a pretty obvious indirection, and a mistake to break it. There's nothing there except <foo>, how could it act differently? Luke