# perldoc > Pod::Simple::PullParser

---
type: CommandReference
command: Pod::Simple::PullParser
mode: perldoc
section: 
source: perldoc
---

## Quick Reference
- `$parser->get_token` — Pull next token object (or undef at end)
- `$parser->unget_token($token, ...)` — Push token(s) back to stream front
- `$parser->set_source($filename | $fh | \$scalar | \@lines)` — Set input source
- `$parser->parse_file(...)` — Parse from file (requires `run` method)
- `$parser->get_title` — Extract title from NAME section
- `$parser->get_short_title` — Extract module name if title has "Module -- description"
- `$parser->get_author` — Extract author from AUTHOR section
- `$parser->get_version` — Extract version block from VERSION section

## Name
Pod::Simple::PullParser -- a pull-parser interface to parsing Pod

## Synopsis
perl
my $parser = SomePodProcessor->new;
$parser->set_source( "whatever.pod" );
$parser->run;

# or with filehandle, scalar ref, or array ref:
$parser->set_source( $some_filehandle_object );
$parser->set_source( \$document_source );
$parser->set_source( \@document_lines );

# Subclass must define run() that pulls tokens:
package SomePodProcessor;
use base qw(Pod::Simple::PullParser);
sub run {
  my $self = shift;
  while(my $token = $self->get_token) {
    ...process each token...
  }
}
## Options (Methods)
- `$token = $parser->get_token` — Returns next token object (subclass of Pod::Simple::PullParserToken) or undef at end of document.
- `$parser->unget_token($token)` or `$parser->unget_token($token1, $token2, ...)` — Restore token(s) to front of parser stream.
- `$parser->set_source($filename)` — Set source from a file.
- `$parser->set_source($filehandle_object)` — Set source from a filehandle.
- `$parser->set_source(\$document_source)` — Set source from a scalar reference.
- `$parser->set_source(\@document_lines)` — Set source from an array of lines.
- `$parser->parse_file(...)` — Parse from file (inherited from Pod::Simple, requires `run` method).
- `$parser->parse_string_document(...)` — Parse from string.
- `$parser->filter(...)` — Filter method.
- `$parser->parse_from_file(...)` — Parse from file.
- `$title = $parser->get_title(%options)` — Extracts title from `=head1 NAME` paragraph. Returns empty string if not found. Option: `nocase => 1` to match "Name" case-insensitively.
- `$short_title = $parser->get_short_title(%options)` — Like `get_title`, but returns only the module name if title is "ModuleName -- description". Returns full title if no dash-dash pattern.
- `$author = $parser->get_author(%options)` — Extracts content from `=head1 AUTHOR` (or AUTHORS) section. Option: `nocase => 1`.
- `$description = $parser->get_description(%options)` — Extracts content from `=head1 DESCRIPTION` section. Option: `nocase => 1`.
- `$version_block = $parser->get_version(%options)` — Extracts content from `=head1 VERSION` block. Does NOT return module $VERSION. Option: `nocase => 1`.

## Examples
perl
# Example: a simple processor that prints all text tokens
package My::Processor;
use base qw(Pod::Simple::PullParser);
sub run {
  my $self = shift;
  while (my $token = $self->get_token) {
    if ($token->type eq 'text') {
      print $token->text;
    }
  }
}
my $p = My::Processor->new;
$p->parse_file('some.pod');
## See Also
- [Pod::Simple](https://metacpan.org/pod/Pod::Simple) — base class
- [Pod::Simple::PullParserToken](https://metacpan.org/pod/Pod::Simple::PullParserToken) — token base class, and subclasses [Pod::Simple::PullParserStartToken](https://metacpan.org/pod/Pod::Simple::PullParserStartToken), [Pod::Simple::PullParserTextToken](https://metacpan.org/pod/Pod::Simple::PullParserTextToken), [Pod::Simple::PullParserEndToken](https://metacpan.org/pod/Pod::Simple::PullParserEndToken)
- [HTML::TokeParser](https://metacpan.org/pod/HTML::TokeParser) — which inspired this