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