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

Reply via email to