On Thu, 2002-08-29 at 10:28, Ken Fox wrote:
> Aaron Sherman wrote:
> > rule { <term> { /@operators/.commit(1) or fail } <term> }
> >
> > The hypothetical commit() method being one that would take a number and
>
> That would only be useful if the outer rule can backtrack into the
> inner /@operators/ rule. Can it?
Of course not. In the same way that
rule foo { b }
rule bar { a <foo>+ b }
"abb" =~ /<bar>/
would not. You backtrack OVER it, and that's when your commit (of
whatever degree) would come into play.
> I agree with you that a commit method would be useful -- especially when
> used on $self. I'd probably write your example as:
>
> rule { <term> { m/@operators { $self.commit(1) }/ or fail } <term> }.
> which is of course just a complicated
>
> rule { <term> { m/@operators :/ or fail } <term> }
There's no way that can affect anything, as ":" doesn't affect calling
rules, e.g.:
rule foo { b : }
rule bar { a <foo>+ b }
"abb" =~ /<bar>/
will match, because the foo rule never needs to backtrack. If foo had
used C<< <commit> >>, then you'd fail, but that's a horse of a different
animal.
The goal was to dynamically cause backtracking over inline code to fail.