in reply to Re^4: When doesn't the flip-flop operator work in all scalar contexts?
in thread Why doesn't the flip-flop operator work in all scalar contexts?

First of all that doesn't fit the man page:

It can test the right operand and become false on the same evaluation it became true (as in awk), but it still returns true once.

Secondly if you look at my third example above, even if the second operand is always false, nothing is printed. So it can't be a case of flip and flop on the same round, there never seems to be a flip

  • Comment on Re^5: When doesn't the flip-flop operator work in all scalar contexts?

Replies are listed 'Best First'.
Re^6: When doesn't the flip-flop operator work in all scalar contexts?
by ikegami (Patriarch) on Oct 02, 2008 at 20:56 UTC

    First of all that doesn't fit the man page

    How does it not fit that quoted statement?
    flip at 1? yes flop at 1? yes -> Would return false, but must return true once. flip at 2? yes flop at 2? yes -> Would return false, but must return true once. flip at 2? yes flop at 2? yes -> Would return false, but must return true once. flip at 2? yes flop at 2? yes -> Would return false, but must return true once. flip at 2? yes flop at 2? yes -> Would return false, but must return true once.

    Secondly if you look at my third example above, [...] So it can't be a case of flip and flop on the same round, there never seems to be a flip

    It flips, but it never flops because $y is always false.

    my $x=1; my $y=0; for(1,2,3,4,5) { next if (printf("flip at %s? %s\n",$_,$x?'yes':'no'),$x) .. (printf("flop at %s? %s\n",$_,$y?'yes':'no'),$y); print "$_\n"; }
    flip at 1? yes flop at 1? no -> Returns true. flop at 2? no -> Returns true. flop at 3? no -> Returns true. flop at 4? no -> Returns true. flop at 5? no -> Returns true.

    Update: Truth tables for flip/flop:

    ..
    StateFlipFlopNew StateReturns
    outyesyesouttrue
    outyesnointrue
    outno[not executed]outfalse
    in[not executed]yesoutfalse
    in[not executed]nointrue

    ...
    StateFlipFlopNew StateReturns
    outyes[not executed]intrue
    outno[not executed]outfalse
    in[not executed]yesoutfalse
    in[not executed]nointrue

      Yes. you are right. I seem to have ignored the inverted sense done by the next.