# phpman > info > TAP::Parser::Iterator

[TAP::Parser](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser/markdown)::[Iterator(3Perl)](https://www.chedong.com/phpMan.php/man/Iterator/3Perl/markdown)Programmers Reference [TAP::Parser](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser/markdown)::[Iterator(3perl)](https://www.chedong.com/phpMan.php/man/Iterator/3perl/markdown)

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),

perl v5.34.0                      2025-07-25      [TAP::Parser](https://www.chedong.com/phpMan.php/perldoc/TAP%3A%3AParser/markdown)::[Iterator(3perl)](https://www.chedong.com/phpMan.php/man/Iterator/3perl/markdown)
