Hi, Larry Wall wrote: > On Sun, Nov 20, 2005 at 08:51:03PM +0100, Ingo Blechschmidt wrote: > : according to the new S03, till is the new name for the flipflop > : operator. > > Presuming we can make it work out as an infix macro.
Ah, it's a macro. This clarifies things. > : Do the flipflop operators of subroutines maintain own > : per-invocation-of-the-sub states? I.e.: > : > : sub foo (&x) { x() till 0 } > : > : foo { 0 }; # evaluates to a false value, of course > : > : foo { 1 }; # evaluates to a true value, of course > : foo { 0 }; > : # still true? > : # (Argumentation: The flipflop is in the "true" state, > : # so the LHS is not evaluated.) > : # Or is it false? > : # (Argumentation: The flipflop operator of the previous > : # invocation is not the flipflop operator of the current > : # invocation, so the return value is false.) > > It's still true. Ignoring the "E0" issue, the desugar of "A till B" > is something like: [...] Thanks very much, this code is very clear. :) > : Also, all operators can be called using the subroutine form (which > : is a very good thing), e.g.: > : > : say infix:<->(42, 19); # 23 > : > : Is this true for till as well? > : > : say infix:<till>(LHS, RHS); > > Probably not. Calling macros as functions is a bit of a problem. Yep. (I assumed &infix:<till> would be an ordinary subroutine.) > : But how would &infix:<till> maintain the state then, as no explicit > : ID is passed to it? Does &infix:<till> access an internal %states > : hash, using $CALLER::POSITION as keys? > > That feels like a hack to me. I'd rather find a way of poking a real > state variable into the caller's scope if we have to support that. Agreed. The desugar you provides feels far more sane. > : Perl 5's flipflop operator appends "E0" to the final sequence number > : in a range, allowing searches for /E/. My guess is that this is > : superseded by "$sequence_number but > : this_is_the_endpoint_of_the_range" (you get the idea). Correct? > > I was just thinking that you'd use till^ if you wanted to exclude the > endpoint. And ^till to exclude the beginning, and ^till^ to exclude > both, just as with ..^, ^.., and ^..^. Ok. > In fact, that's really my main motivation for wanting it to be infix. > Otherwise it might as well be an ordinary flipflip() macro, or > fromto(). Makes sense. --Ingo