sub next_item {
  my @main_source = @_;
  my $secondary_source;

  return sub {
    while (1) {
      if (defined $secondary_source) {
        if (defined my $val = NEXTVAL($secondary_source)) {
          return $val;
        } else {
          undef $secondary_source;
        }
      } elsif (@main_source) {
        $secondary_source = force(shift @main_source)
      } else {
        return;
      }
    }
  }
}

