in reply to Re^4: Multi-stage flip-flop?
in thread Multi-stage flip-flop?

It doesn't need to know the condition just the result by position.

I'll post some proof of concept later...

Asking for built-ins is an illusion...

Cheers Rolf

(addicted to the Perl Programming Language and ☆☆☆☆ :)

Replies are listed 'Best First'.
Re^6: Multi-stage flip-flop?
by RonW (Parson) on Dec 11, 2014 at 20:00 UTC

    With .. the first condition is only evaluated when .. is in the "inactive" state. The second condition is only evaluated when .. is in the "active" state. And that is the behavior I am (implicitly) proposing - that only the condition corresponding to the current state be evaluated.

    So, an initial draft of till might be:

    sub till { my $state = lookupState(caller); croak('Fatal: till: Too few conditions for current state.') if ((2 * $state) >= @_); if ref($_[2 * $state]) eq 'SCALAR' { $state++ if ($_[2 * $state]); } elsif ref($_[2 * $state]) eq 'Regexp' { $state++ if (/$_[2 * $state]/); } elsif ref($_[2 * $state]) eq 'CODE' { $state++ if ($_[2 * $state]->($_)); } saveState($state, caller); if ((2 * $state) >= @_) { # final condition was true saveState(0, caller); return 0; } return 0 if ($state < 1); # init condition still false return $_[2 * ($state - 1)]->($_); }

    Note: The above actually behaves like ... in that only 1 condition is evaluated per invocation.

    Disclaimer: Not yet tested.