txt: ## ff.md
  ff
  
  Combined from primary sources listed below.
  
  # [In Operators](#___top "go to top of document")[§](#(Operators)_infix_ff "direct link")
  
  See primary documentation
  [in context](/language/operators#infix_ff)
  for **infix ff**.
  
  ```raku
  sub infix:<ff>(Mu $a, Mu $b)
  ```
  
  Also called the *flipflop operator*, compares both arguments to `$_` (that is, `$_ ~~ $a` and `$_ ~~ $b`). Evaluates to `False` until the left-hand smartmatch is `True`, at which point it evaluates to `True` until the right-hand smartmatch is `True`.
  
  In effect, the left-hand argument is the "start" condition and the right-hand is the "stop" condition. This construct is typically used to pick up only a certain section of lines. For example:
  
  ```raku
  my $excerpt = q:to/END/;
  Here's some unimportant text.
  =begin code
      This code block is what we're after.
      We'll use 'ff' to get it.
  =end code
  More unimportant text.
  END
  
  my @codelines = gather for $excerpt.lines {
      take $_ if "=begin code" ff "=end code"
  }
  # this will print four lines, starting with "=begin code" and ending with
  # "=end code"
  say @codelines.join("\n");
  
  ```
  
  After matching the start condition, the operator will then match the same `$_` to the stop condition and act accordingly if successful. In this example, only the first element is printed:
  
  ```raku
  for <AB C D B E F> {
      say $_ if /A/ ff /B/;  # OUTPUT: «AB␤»
  }
  ```
  
  If you only want to test against a start condition and have no stop condition, `*` can be used as such.
  
  ```raku
  for <A B C D E> {
      say $_ if /C/ ff *;    # OUTPUT: «C␤D␤E␤»
  }
  ```
  
  For the `sed`-like version, which does *not* try `$_` on the stop condition after succeeding on the start condition, see [fff](/routine/fff).
  
  This operator cannot be overloaded, as it's handled specially by the compiler.
  