xref: /openbsd-src/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pod (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
1b39c5158Smillert
2b39c5158Smillert=head1 NAME
3b39c5158Smillert
4b39c5158SmillertPod::Simple - framework for parsing Pod
5b39c5158Smillert
6b39c5158Smillert=head1 SYNOPSIS
7b39c5158Smillert
8b39c5158Smillert TODO
9b39c5158Smillert
10b39c5158Smillert=head1 DESCRIPTION
11b39c5158Smillert
12b39c5158SmillertPod::Simple is a Perl library for parsing text in the Pod ("plain old
13b39c5158Smillertdocumentation") markup language that is typically used for writing
14b39c5158Smillertdocumentation for Perl and for Perl modules. The Pod format is explained
15b8851fccSafresh1in L<perlpod>; the most common formatter is called C<perldoc>.
16b39c5158Smillert
1791f110e0Safresh1Be sure to read L</ENCODING> if your Pod contains non-ASCII characters.
1891f110e0Safresh1
19b39c5158SmillertPod formatters can use Pod::Simple to parse Pod documents and render them into
20b39c5158Smillertplain text, HTML, or any number of other formats. Typically, such formatters
21b39c5158Smillertwill be subclasses of Pod::Simple, and so they will inherit its methods, like
2256d68f1eSafresh1C<parse_file>.  But note that Pod::Simple doesn't understand and
2356d68f1eSafresh1properly parse Perl itself, so if you have a file which contains a Perl
2456d68f1eSafresh1program that has a multi-line quoted string which has lines that look
2556d68f1eSafresh1like pod, Pod::Simple will treat them as pod.  This can be avoided if
2656d68f1eSafresh1the file makes these into indented here documents instead.
27b39c5158Smillert
28b39c5158SmillertIf you're reading this document just because you have a Pod-processing
29b39c5158Smillertsubclass that you want to use, this document (plus the documentation for the
30b39c5158Smillertsubclass) is probably all you need to read.
31b39c5158Smillert
32b39c5158SmillertIf you're reading this document because you want to write a formatter
33b39c5158Smillertsubclass, continue reading it and then read L<Pod::Simple::Subclassing>, and
34b39c5158Smillertthen possibly even read L<perlpodspec> (some of which is for parser-writers,
35b39c5158Smillertbut much of which is notes to formatter-writers).
36b39c5158Smillert
37b39c5158Smillert=head1 MAIN METHODS
38b39c5158Smillert
39b39c5158Smillert=over
40b39c5158Smillert
41b39c5158Smillert=item C<< $parser = I<SomeClass>->new(); >>
42b39c5158Smillert
43b39c5158SmillertThis returns a new parser object, where I<C<SomeClass>> is a subclass
44b39c5158Smillertof Pod::Simple.
45b39c5158Smillert
46b39c5158Smillert=item C<< $parser->output_fh( *OUT ); >>
47b39c5158Smillert
48b39c5158SmillertThis sets the filehandle that C<$parser>'s output will be written to.
49b8851fccSafresh1You can pass C<*STDOUT> or C<*STDERR>, otherwise you should probably do
50b8851fccSafresh1something like this:
51b39c5158Smillert
52b39c5158Smillert    my $outfile = "output.txt";
53b39c5158Smillert    open TXTOUT, ">$outfile" or die "Can't write to $outfile: $!";
54b39c5158Smillert    $parser->output_fh(*TXTOUT);
55b39c5158Smillert
56b39c5158Smillert...before you call one of the C<< $parser->parse_I<whatever> >> methods.
57b39c5158Smillert
58b39c5158Smillert=item C<< $parser->output_string( \$somestring ); >>
59b39c5158Smillert
60b39c5158SmillertThis sets the string that C<$parser>'s output will be sent to,
61b39c5158Smillertinstead of any filehandle.
62b39c5158Smillert
63b39c5158Smillert
64b39c5158Smillert=item C<< $parser->parse_file( I<$some_filename> ); >>
65b39c5158Smillert
66b39c5158Smillert=item C<< $parser->parse_file( *INPUT_FH ); >>
67b39c5158Smillert
68b39c5158SmillertThis reads the Pod content of the file (or filehandle) that you specify,
69b39c5158Smillertand processes it with that C<$parser> object, according to however
70b39c5158SmillertC<$parser>'s class works, and according to whatever parser options you
71b39c5158Smillerthave set up for this C<$parser> object.
72b39c5158Smillert
73b39c5158Smillert=item C<< $parser->parse_string_document( I<$all_content> ); >>
74b39c5158Smillert
75b39c5158SmillertThis works just like C<parse_file> except that it reads the Pod
76b39c5158Smillertcontent not from a file, but from a string that you have already
77b39c5158Smillertin memory.
78b39c5158Smillert
79b39c5158Smillert=item C<< $parser->parse_lines( I<...@lines...>, undef ); >>
80b39c5158Smillert
81b39c5158SmillertThis processes the lines in C<@lines> (where each list item must be a
82b39c5158Smillertdefined value, and must contain exactly one line of content -- so no
83b39c5158Smillertitems like C<"foo\nbar"> are allowed).  The final C<undef> is used to
84b39c5158Smillertindicate the end of document being parsed.
85b39c5158Smillert
86b39c5158SmillertThe other C<parser_I<whatever>> methods are meant to be called only once
87b39c5158Smillertper C<$parser> object; but C<parse_lines> can be called as many times per
88b39c5158SmillertC<$parser> object as you want, as long as the last call (and only
89b39c5158Smillertthe last call) ends with an C<undef> value.
90b39c5158Smillert
91b39c5158Smillert
92b39c5158Smillert=item C<< $parser->content_seen >>
93b39c5158Smillert
94898184e3SsthenThis returns true only if there has been any real content seen for this
95898184e3Ssthendocument. Returns false in cases where the document contains content,
96898184e3Ssthenbut does not make use of any Pod markup.
97b39c5158Smillert
98b39c5158Smillert=item C<< I<SomeClass>->filter( I<$filename> ); >>
99b39c5158Smillert
100b39c5158Smillert=item C<< I<SomeClass>->filter( I<*INPUT_FH> ); >>
101b39c5158Smillert
102b39c5158Smillert=item C<< I<SomeClass>->filter( I<\$document_content> ); >>
103b39c5158Smillert
104b39c5158SmillertThis is a shortcut method for creating a new parser object, setting the
105b39c5158Smillertoutput handle to STDOUT, and then processing the specified file (or
106b39c5158Smillertfilehandle, or in-memory document). This is handy for one-liners like
107b39c5158Smillertthis:
108b39c5158Smillert
109b39c5158Smillert  perl -MPod::Simple::Text -e "Pod::Simple::Text->filter('thingy.pod')"
110b39c5158Smillert
111b39c5158Smillert=back
112b39c5158Smillert
113b39c5158Smillert
114b39c5158Smillert
115b39c5158Smillert=head1 SECONDARY METHODS
116b39c5158Smillert
117b39c5158SmillertSome of these methods might be of interest to general users, as
118b39c5158Smillertwell as of interest to formatter-writers.
119b39c5158Smillert
120b39c5158SmillertNote that the general pattern here is that the accessor-methods
121b39c5158Smillertread the attribute's value with C<< $value = $parser->I<attribute> >>
122b39c5158Smillertand set the attribute's value with
123b39c5158SmillertC<< $parser->I<attribute>(I<newvalue>) >>.  For each accessor, I typically
124b39c5158Smillertonly mention one syntax or another, based on which I think you are actually
125b39c5158Smillertmost likely to use.
126b39c5158Smillert
127b39c5158Smillert
128b39c5158Smillert=over
129b39c5158Smillert
13091f110e0Safresh1=item C<< $parser->parse_characters( I<SOMEVALUE> ) >>
13191f110e0Safresh1
13291f110e0Safresh1The Pod parser normally expects to read octets and to convert those octets
13391f110e0Safresh1to characters based on the C<=encoding> declaration in the Pod source.  Set
13491f110e0Safresh1this option to a true value to indicate that the Pod source is already a Perl
13591f110e0Safresh1character stream.  This tells the parser to ignore any C<=encoding> command
13691f110e0Safresh1and to skip all the code paths involving decoding octets.
13791f110e0Safresh1
138b39c5158Smillert=item C<< $parser->no_whining( I<SOMEVALUE> ) >>
139b39c5158Smillert
140b39c5158SmillertIf you set this attribute to a true value, you will suppress the
141b39c5158Smillertparser's complaints about irregularities in the Pod coding. By default,
142b39c5158Smillertthis attribute's value is false, meaning that irregularities will
143b39c5158Smillertbe reported.
144b39c5158Smillert
145b39c5158SmillertNote that turning this attribute to true won't suppress one or two kinds
146b39c5158Smillertof complaints about rarely occurring unrecoverable errors.
147b39c5158Smillert
148b39c5158Smillert
149b39c5158Smillert=item C<< $parser->no_errata_section( I<SOMEVALUE> ) >>
150b39c5158Smillert
151b39c5158SmillertIf you set this attribute to a true value, you will stop the parser from
152b39c5158Smillertgenerating a "POD ERRORS" section at the end of the document. By
153b39c5158Smillertdefault, this attribute's value is false, meaning that an errata section
154b39c5158Smillertwill be generated, as necessary.
155b39c5158Smillert
156b39c5158Smillert
157b39c5158Smillert=item C<< $parser->complain_stderr( I<SOMEVALUE> ) >>
158b39c5158Smillert
159b39c5158SmillertIf you set this attribute to a true value, it will send reports of
160b39c5158Smillertparsing errors to STDERR. By default, this attribute's value is false,
161b39c5158Smillertmeaning that no output is sent to STDERR.
162b39c5158Smillert
163b39c5158SmillertSetting C<complain_stderr> also sets C<no_errata_section>.
164b39c5158Smillert
165b39c5158Smillert
166b39c5158Smillert=item C<< $parser->source_filename >>
167b39c5158Smillert
168b39c5158SmillertThis returns the filename that this parser object was set to read from.
169b39c5158Smillert
170b39c5158Smillert
171b39c5158Smillert=item C<< $parser->doc_has_started >>
172b39c5158Smillert
173b39c5158SmillertThis returns true if C<$parser> has read from a source, and has seen
174b39c5158SmillertPod content in it.
175b39c5158Smillert
176b39c5158Smillert
177b39c5158Smillert=item C<< $parser->source_dead >>
178b39c5158Smillert
179b39c5158SmillertThis returns true if C<$parser> has read from a source, and come to the
180b39c5158Smillertend of that source.
181b39c5158Smillert
182b39c5158Smillert=item C<< $parser->strip_verbatim_indent( I<SOMEVALUE> ) >>
183b39c5158Smillert
184b39c5158SmillertThe perlpod spec for a Verbatim paragraph is "It should be reproduced
185b39c5158Smillertexactly...", which means that the whitespace you've used to indent your
186b39c5158Smillertverbatim blocks will be preserved in the output. This can be annoying for
187b39c5158Smillertoutputs such as HTML, where that whitespace will remain in front of every
188b39c5158Smillertline. It's an unfortunate case where syntax is turned into semantics.
189b39c5158Smillert
190b8851fccSafresh1If the POD you're parsing adheres to a consistent indentation policy, you can
191b39c5158Smillerthave such indentation stripped from the beginning of every line of your
192b39c5158Smillertverbatim blocks. This method tells Pod::Simple what to strip. For two-space
193b39c5158Smillertindents, you'd use:
194b39c5158Smillert
195b39c5158Smillert  $parser->strip_verbatim_indent('  ');
196b39c5158Smillert
197b39c5158SmillertFor tab indents, you'd use a tab character:
198b39c5158Smillert
199b39c5158Smillert  $parser->strip_verbatim_indent("\t");
200b39c5158Smillert
201b39c5158SmillertIf the POD is inconsistent about the indentation of verbatim blocks, but you
202b39c5158Smillerthave figured out a heuristic to determine how much a particular verbatim block
203b39c5158Smillertis indented, you can pass a code reference instead. The code reference will be
204b39c5158Smillertexecuted with one argument, an array reference of all the lines in the
205b39c5158Smillertverbatim block, and should return the value to be stripped from each line. For
206b39c5158Smillertexample, if you decide that you're fine to use the first line of the verbatim
207b39c5158Smillertblock to set the standard for indentation of the rest of the block, you can
208b39c5158Smillertlook at the first line and return the appropriate value, like so:
209b39c5158Smillert
210b39c5158Smillert  $new->strip_verbatim_indent(sub {
211b39c5158Smillert      my $lines = shift;
212b39c5158Smillert      (my $indent = $lines->[0]) =~ s/\S.*//;
213b39c5158Smillert      return $indent;
214b39c5158Smillert  });
215b39c5158Smillert
216b39c5158SmillertIf you'd rather treat each line individually, you can do that, too, by just
217b39c5158Smillerttransforming them in-place in the code reference and returning C<undef>. Say
218b39c5158Smillertthat you don't want I<any> lines indented. You can do something like this:
219b39c5158Smillert
220b39c5158Smillert  $new->strip_verbatim_indent(sub {
221b39c5158Smillert      my $lines = shift;
222b39c5158Smillert      sub { s/^\s+// for @{ $lines },
223b39c5158Smillert      return undef;
224b39c5158Smillert  });
225b39c5158Smillert
22656d68f1eSafresh1=item C<< $parser->expand_verbatim_tabs( I<n> ) >>
22756d68f1eSafresh1
22856d68f1eSafresh1Default: 8
22956d68f1eSafresh1
23056d68f1eSafresh1If after any stripping of indentation in verbatim blocks, there remain
23156d68f1eSafresh1tabs, this method call indicates what to do with them.  C<0>
23256d68f1eSafresh1means leave them as tabs, any other number indicates that each tab is to
23356d68f1eSafresh1be translated so as to have tab stops every C<n> columns.
23456d68f1eSafresh1
23556d68f1eSafresh1This is independent of other methods (except that it operates after any
23656d68f1eSafresh1verbatim input stripping is done).
23756d68f1eSafresh1
23856d68f1eSafresh1Like the other methods, the input parameter is not checked for validity.
23956d68f1eSafresh1C<undef> or containing non-digits has the same effect as 8.
24056d68f1eSafresh1
241b39c5158Smillert=back
242b39c5158Smillert
243898184e3Ssthen=head1 TERTIARY METHODS
244898184e3Ssthen
245898184e3Ssthen=over
246898184e3Ssthen
247898184e3Ssthen=item C<< $parser->abandon_output_fh() >>X<abandon_output_fh>
248898184e3Ssthen
249898184e3SsthenCancel output to the file handle. Any POD read by the C<$parser> is not
250898184e3Sstheneffected.
251898184e3Ssthen
252898184e3Ssthen=item C<< $parser->abandon_output_string() >>X<abandon_output_string>
253898184e3Ssthen
254898184e3SsthenCancel output to the output string. Any POD read by the C<$parser> is not
255898184e3Sstheneffected.
256898184e3Ssthen
257898184e3Ssthen=item C<< $parser->accept_code( @codes ) >>X<accept_code>
258898184e3Ssthen
259898184e3SsthenAlias for L<< accept_codes >>.
260898184e3Ssthen
261898184e3Ssthen=item C<< $parser->accept_codes( @codes ) >>X<accept_codes>
262898184e3Ssthen
263898184e3SsthenAllows C<$parser> to accept a list of L<perlpod/Formatting Codes>. This can be
264898184e3Ssthenused to implement user-defined codes.
265898184e3Ssthen
266898184e3Ssthen=item C<< $parser->accept_directive_as_data( @directives ) >>X<accept_directive_as_data>
267898184e3Ssthen
268898184e3SsthenAllows C<$parser> to accept a list of directives for data paragraphs. A
269898184e3Ssthendirective is the label of a L<perlpod/Command Paragraph>. A data paragraph is
270898184e3Ssthenone delimited by C<< =begin/=for/=end >> directives. This can be used to
271898184e3Ssthenimplement user-defined directives.
272898184e3Ssthen
273898184e3Ssthen=item C<< $parser->accept_directive_as_processed( @directives ) >>X<accept_directive_as_processed>
274898184e3Ssthen
275898184e3SsthenAllows C<$parser> to accept a list of directives for processed paragraphs. A
276898184e3Ssthendirective is the label of a L<perlpod/Command Paragraph>. A processed
277898184e3Ssthenparagraph is also known as L<perlpod/Ordinary Paragraph>. This can be used to
278898184e3Ssthenimplement user-defined directives.
279898184e3Ssthen
280898184e3Ssthen=item C<< $parser->accept_directive_as_verbatim( @directives ) >>X<accept_directive_as_verbatim>
281898184e3Ssthen
282898184e3SsthenAllows C<$parser> to accept a list of directives for L<perlpod/Verbatim
283898184e3SsthenParagraph>. A directive is the label of a L<perlpod/Command Paragraph>. This
284898184e3Ssthencan be used to implement user-defined directives.
285898184e3Ssthen
286898184e3Ssthen=item C<< $parser->accept_target( @targets ) >>X<accept_target>
287898184e3Ssthen
288898184e3SsthenAlias for L<< accept_targets >>.
289898184e3Ssthen
290898184e3Ssthen=item C<< $parser->accept_target_as_text( @targets ) >>X<accept_target_as_text>
291898184e3Ssthen
292898184e3SsthenAlias for L<< accept_targets_as_text >>.
293898184e3Ssthen
294898184e3Ssthen=item C<< $parser->accept_targets( @targets ) >>X<accept_targets>
295898184e3Ssthen
296898184e3SsthenAccepts targets for C<< =begin/=for/=end >> sections of the POD.
297898184e3Ssthen
298898184e3Ssthen=item C<< $parser->accept_targets_as_text( @targets ) >>X<accept_targets_as_text>
299898184e3Ssthen
300898184e3SsthenAccepts targets for C<< =begin/=for/=end >> sections that should be parsed as
301898184e3SsthenPOD. For details, see L<< perlpodspec/About Data Paragraphs >>.
302898184e3Ssthen
303898184e3Ssthen=item C<< $parser->any_errata_seen() >>X<any_errata_seen>
304898184e3Ssthen
305898184e3SsthenUsed to check if any errata was seen.
306898184e3Ssthen
307898184e3SsthenI<Example:>
308898184e3Ssthen
309898184e3Ssthen  die "too many errors\n" if $parser->any_errata_seen();
310898184e3Ssthen
311b8851fccSafresh1=item C<< $parser->errata_seen() >>X<errata_seen>
312b8851fccSafresh1
313b8851fccSafresh1Returns a hash reference of all errata seen, both whines and screams. The hash reference's keys are the line number and the value is an array reference of the errors for that line.
314b8851fccSafresh1
315b8851fccSafresh1I<Example:>
316b8851fccSafresh1
317b8851fccSafresh1  if ( $parser->any_errata_seen() ) {
318b8851fccSafresh1     $logger->log( $parser->errata_seen() );
319b8851fccSafresh1  }
320b8851fccSafresh1
32191f110e0Safresh1=item C<< $parser->detected_encoding() >>X<detected_encoding>
32291f110e0Safresh1
32391f110e0Safresh1Return the encoding corresponding to C<< =encoding >>, but only if the
32491f110e0Safresh1encoding was recognized and handled.
32591f110e0Safresh1
32691f110e0Safresh1=item C<< $parser->encoding() >>X<encoding>
32791f110e0Safresh1
32891f110e0Safresh1Return encoding of the document, even if the encoding is not correctly
32991f110e0Safresh1handled.
33091f110e0Safresh1
331898184e3Ssthen=item C<< $parser->parse_from_file( $source, $to ) >>X<parse_from_file>
332898184e3Ssthen
333898184e3SsthenParses from C<$source> file to C<$to> file. Similar to L<<
334898184e3SsthenPod::Parser/parse_from_file >>.
335898184e3Ssthen
336898184e3Ssthen=item C<< $parser->scream( @error_messages ) >>X<scream>
337898184e3Ssthen
338898184e3SsthenLog an error that can't be ignored.
339898184e3Ssthen
340898184e3Ssthen=item C<< $parser->unaccept_code( @codes ) >>X<unaccept_code>
341898184e3Ssthen
342898184e3SsthenAlias for L<< unaccept_codes >>.
343898184e3Ssthen
344898184e3Ssthen=item C<< $parser->unaccept_codes( @codes ) >>X<unaccept_codes>
345898184e3Ssthen
346898184e3SsthenRemoves C<< @codes >> as valid codes for the parse.
347898184e3Ssthen
348898184e3Ssthen=item C<< $parser->unaccept_directive( @directives ) >>X<unaccept_directive>
349898184e3Ssthen
350898184e3SsthenAlias for L<< unaccept_directives >>.
351898184e3Ssthen
352898184e3Ssthen=item C<< $parser->unaccept_directives( @directives ) >>X<unaccept_directives>
353898184e3Ssthen
354898184e3SsthenRemoves C<< @directives >> as valid directives for the parse.
355898184e3Ssthen
356898184e3Ssthen=item C<< $parser->unaccept_target( @targets ) >>X<unaccept_target>
357898184e3Ssthen
358898184e3SsthenAlias for L<< unaccept_targets >>.
359898184e3Ssthen
360898184e3Ssthen=item C<< $parser->unaccept_targets( @targets ) >>X<unaccept_targets>
361898184e3Ssthen
362898184e3SsthenRemoves C<< @targets >> as valid targets for the parse.
363898184e3Ssthen
364898184e3Ssthen=item C<< $parser->version_report() >>X<version_report>
365898184e3Ssthen
366898184e3SsthenReturns a string describing the version.
367898184e3Ssthen
368898184e3Ssthen=item C<< $parser->whine( @error_messages ) >>X<whine>
369898184e3Ssthen
370898184e3SsthenLog an error unless C<< $parser->no_whining( TRUE ); >>.
371898184e3Ssthen
372898184e3Ssthen=back
373898184e3Ssthen
37491f110e0Safresh1=head1 ENCODING
37591f110e0Safresh1
37691f110e0Safresh1The Pod::Simple parser expects to read B<octets>.  The parser will decode the
37791f110e0Safresh1octets into Perl's internal character string representation using the value of
37891f110e0Safresh1the C<=encoding> declaration in the POD source.
37991f110e0Safresh1
38091f110e0Safresh1If the POD source does not include an C<=encoding> declaration, the parser will
381b8851fccSafresh1attempt to guess the encoding (selecting one of UTF-8 or CP 1252) by examining
38291f110e0Safresh1the first non-ASCII bytes and applying the heuristic described in
383b8851fccSafresh1L<perlpodspec>.  (If the POD source contains only ASCII bytes, the
384b8851fccSafresh1encoding is assumed to be ASCII.)
38591f110e0Safresh1
38691f110e0Safresh1If you set the C<parse_characters> option to a true value the parser will
38791f110e0Safresh1expect characters rather than octets; will ignore any C<=encoding>; and will
38891f110e0Safresh1make no attempt to decode the input.
38991f110e0Safresh1
390b39c5158Smillert=head1 SEE ALSO
391b39c5158Smillert
392b39c5158SmillertL<Pod::Simple::Subclassing>
393b39c5158Smillert
394b39c5158SmillertL<perlpod|perlpod>
395b39c5158Smillert
396b39c5158SmillertL<perlpodspec|perlpodspec>
397b39c5158Smillert
398b39c5158SmillertL<Pod::Escapes|Pod::Escapes>
399b39c5158Smillert
400b39c5158SmillertL<perldoc>
401b39c5158Smillert
402b39c5158Smillert=head1 SUPPORT
403b39c5158Smillert
404b39c5158SmillertQuestions or discussion about POD and Pod::Simple should be sent to the
405b39c5158Smillertpod-people@perl.org mail list. Send an empty email to
406b39c5158Smillertpod-people-subscribe@perl.org to subscribe.
407b39c5158Smillert
408b39c5158SmillertThis module is managed in an open GitHub repository,
409b8851fccSafresh1L<https://github.com/perl-pod/pod-simple/>. Feel free to fork and contribute, or
410*3d61058aSafresh1to clone L<https://github.com/perl-pod/pod-simple.git> and send patches!
411b39c5158Smillert
41256d68f1eSafresh1Please use L<https://github.com/perl-pod/pod-simple/issues/new> to file a bug
41356d68f1eSafresh1report.
414b39c5158Smillert
415b39c5158Smillert=head1 COPYRIGHT AND DISCLAIMERS
416b39c5158Smillert
417b39c5158SmillertCopyright (c) 2002 Sean M. Burke.
418b39c5158Smillert
419b39c5158SmillertThis library is free software; you can redistribute it and/or modify it
420b39c5158Smillertunder the same terms as Perl itself.
421b39c5158Smillert
422b39c5158SmillertThis program is distributed in the hope that it will be useful, but
423b39c5158Smillertwithout any warranty; without even the implied warranty of
424b39c5158Smillertmerchantability or fitness for a particular purpose.
425b39c5158Smillert
426b39c5158Smillert=head1 AUTHOR
427b39c5158Smillert
428b39c5158SmillertPod::Simple was created by Sean M. Burke <sburke@cpan.org>.
429b39c5158SmillertBut don't bother him, he's retired.
430b39c5158Smillert
431b39c5158SmillertPod::Simple is maintained by:
432b39c5158Smillert
433b39c5158Smillert=over
434b39c5158Smillert
435b39c5158Smillert=item * Allison Randal C<allison@perl.org>
436b39c5158Smillert
437b39c5158Smillert=item * Hans Dieter Pearcey C<hdp@cpan.org>
438b39c5158Smillert
439b39c5158Smillert=item * David E. Wheeler C<dwheeler@cpan.org>
440b39c5158Smillert
44156d68f1eSafresh1=item * Karl Williamson C<khw@cpan.org>
44256d68f1eSafresh1
443b39c5158Smillert=back
444b39c5158Smillert
445898184e3SsthenDocumentation has been contributed by:
446898184e3Ssthen
447898184e3Ssthen=over
448898184e3Ssthen
449898184e3Ssthen=item * Gabor Szabo C<szabgab@gmail.com>
450898184e3Ssthen
451898184e3Ssthen=item * Shawn H Corey  C<SHCOREY at cpan.org>
452898184e3Ssthen
453898184e3Ssthen=back
454898184e3Ssthen
455b39c5158Smillert=cut
456