# phpman > perldoc > TAP::Parser::Iterator

## NAME
    [TAP::Parser::Iterator](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3AIterator/markdown) - Base class for TAP source iterators

## VERSION
    Version 3.43

## SYNOPSIS
      # to subclass:
      use [TAP::Parser::Iterator](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3AIterator/markdown) ();
      use base '[TAP::Parser::Iterator](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3AIterator/markdown)';
      sub _initialize {
        # see [TAP::Object](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AObject/markdown)...
      }

      sub next_raw { ... }
      sub wait     { ... }
      sub exit     { ... }

## DESCRIPTION
    This is a simple iterator base class that defines [TAP::Parser](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser/markdown)'s iterator API. Iterators are
    typically created from [TAP::Parser::SourceHandlers](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3ASourceHandlers/markdown).

## METHODS
### Class Methods
   "new"
    Create an iterator. Provided by [TAP::Object](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AObject/markdown).

### Instance Methods
   "next"
     while ( my $item = $iter->next ) { ... }

    Iterate through it, of course.

   "next_raw"
    Note: this method is abstract and should be overridden.

     while ( my $item = $iter->next_raw ) { ... }

    Iterate raw input without applying any fixes for quirky input syntax.

   "handle_unicode"
    If necessary switch the input stream to handle unicode. This only has any effect for I/O handle
    based streams.

    The default implementation does nothing.

   "get_select_handles"
    Return a list of filehandles that may be used upstream in a select() call to signal that this
    Iterator is ready. Iterators that are not handle-based should return an empty list.

    The default implementation does nothing.

   "wait"
    Note: this method is abstract and should be overridden.

     my $wait_status = $iter->wait;

    Return the "wait" status for this iterator.

   "exit"
    Note: this method is abstract and should be overridden.

     my $wait_status = $iter->exit;

    Return the "exit" status for this iterator.

## SUBCLASSING
    Please see "SUBCLASSING" in [TAP::Parser](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser/markdown) for a subclassing overview.

    You must override the abstract methods as noted above.

### Example
    [TAP::Parser::Iterator::Array](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3AIterator%3A%3AArray/markdown) is probably the easiest example to follow. There's not much point
    repeating it here.

## SEE ALSO
    [TAP::Object](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AObject/markdown), [TAP::Parser](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser/markdown), [TAP::Parser::Iterator::Array](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3AIterator%3A%3AArray/markdown), [TAP::Parser::Iterator::Stream](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3AIterator%3A%3AStream/markdown),
    [TAP::Parser::Iterator::Process](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser%3A%3AIterator%3A%3AProcess/markdown),

