SlideShare a Scribd company logo
1 of 43
Pod::Weaver
Module author: Ricardo Signes
Talk author: Joshua Keroes
Date: 13 Sep 2012
Who likes to write
documentation?




           http://www.flickr.com/photos/bensonkua/2687804310/

                                                           2
What sucks about
documentation?




                   3
What sucks about
documentation?
It violates the DRY rule.




                            3
What sucks about
documentation?
It violates the DRY rule.




                            3
What else sucks?




                   4
What else sucks?

POD is too verbose.

=head1 FUNCTIONS

=over

=item frowny()

Returns a frowny face.

=back
                         4
What else sucks?
Let it all out.
=head1 COPYRIGHT AND LICENSE


Copyright (c) 1901 Fergie T. Sumtin.
All rights reserved.




                                       5
Templates to the rescue




                          6
Templates to the rescue

POD::Weaver uses a template.
It’s called weaver.ini.




                               6
weaver.ini [@Default]
 [@Default]




                        7
weaver.ini [@Default]
 [@CorePrep]            [Collect /
                        ATTRIBUTES]
                        command = attr
 [Name]
                        [Collect / METHODS]
 [Version]
                        command = method
 [Region  / prelude]
 [Generic / SYNOPSIS]
 [Generic /
 DESCRIPTION]           [Leftovers]
 [Generic / OVERVIEW]   [Region  / postlude]
                        [Authors]              8
weaver.ini [@Default]
 [EnsurePod5]           [Collect /
                        ATTRIBUTES]
 [H1Nester]
                        command = attr
 [Name]
                        [Collect / METHODS]
 [Version]
                        command = method
 [Region  / prelude]
 [Generic / SYNOPSIS]
 [Generic /
 DESCRIPTION]           [Leftovers]
 [Generic / OVERVIEW]   [Region  / postlude]
                        [Authors]              9
weaver.ini [@Default]
 [EnsurePod5]           [Collect /
                        ATTRIBUTES]
 [H1Nester]
                        command = attr
 [Name]
                        [Collect / METHODS]
 [Version]
                        command = method
 [Region  / prelude]
                        [Collect / FUNCTIONS]
 [Generic / SYNOPSIS]
                        command = func
 [Generic /
 DESCRIPTION]           [Leftovers]
 [Generic / OVERVIEW]   [Region  / postlude]
                        [Authors]               10
weaver.ini [@Default]
 [EnsurePod5]           [Collect /
                        ATTRIBUTES]
 [H1Nester]
                        command = attr
 [Name]
                        [Collect / METHODS]
 [Version]
                        command = method
 [Region  / prelude]
                        [Collect / FUNCTIONS]
 [Generic / SYNOPSIS]
                        command = func
 [Generic /
 DESCRIPTION]           [Leftovers]
 [Generic / OVERVIEW]   [Region  / postlude]
                        [Authors]               11
[NAME]

=head1 NAME
Some::Package::Name - just a package




                                       12
[NAME]

=head1 NAME
Some::Package::Name - just a package


# PODNAME: Some::Package::Name
# ABSTRACT: just a package




                                       13
[NAME]

=head1 NAME
Some::Package::Name - just a package


package Some::Package::Name
# ABSTRACT: just a package




                                       14
[VERSION]

=head1 VERSION
version 1.234




                 15
[Generic / SYNOPSIS]
[Generic / DESCRIPTION]
[Generic / OVERVIEW]

=head1 SYNOPSIS
  my $p = Some::Package::Name->new;
  say $p;

=head1 DESCRIPTION
A module that knows it’s own package name.

                                             16
[Collect / FUNCTIONS]
command = func
=head1 FUNCTIONS
=over
=item binge()
eats arguments
=item purge()
returns eaten args
=back


                        17
[Collect / FUNCTIONS]
command = func
=head1 FUNCTIONS
=over
=item binge()        =func binge()
eats arguments       eats arguments
=item purge()        =func purge()
returns eaten args   returns eaten args
=back


                                          18
[Collect / METHODS]
command = method
=head1 METHODS
=over
=item new()
creates an object
=item spawn()
spawns an object
=back


                      19
[Collect / METHODS]
command = method
=head1 METHODS
=over
=item new()         =method new()
creates an object   creates an object
=item spawn()       =method spawn()
spawns an object    spawns an object
=back


                                        20
[Collect / ATTRIBUTES]
command = attr
=head1 ATTRIBUTES
=over
=item torches()
number of torches
=item matches()
number of matches
=back


                         21
[Collect / ATTRIBUTES]
command = attr
=head1 ATTRIBUTES
=over
=item torches()     =attr torches()
number of torches   number of torches
=item matches()     =attr matches()
number of matches   number of matches
=back


                                        22
[Region / prelude]


 =begin :prelude   weaver.ini

 …                 [Name]

 =end :prelude     [Version]

                   [Region     / prelude]

 =for :prelude …   [Generic / SYNOPSIS]

                   [Generic / DESCRIPTION]

                   …

                                             23
[Leftovers]


 =head1 SUPPORT           weaver.ini

 For support, please      …
 send a self-addressed,
 stamped envelope to:     [Leftovers]

   Joshua Keroes          [Region / postlude]

   Somewhere in           [Authors]

   Portland, OR           [Legal]



                                                24
[Region / postlude]


 =begin :postlude   weaver.ini

 …                  …

 =end :postlude     [Leftovers]

                    [Region / postlude]

 =for :postlude …   [Authors]

                    [Legal]



                                          25
[Authors]

 =head1 AUTHORS          weaver.ini
 Colette O’Day           …
 <colette@example.com>
                         [Leftovers]
                         [Region / postlude]
                         [Authors]
                         [Legal]




                                               26
[Legal]

 =head1 COPYRIGHT AND LICENSE

 This software is copyright (c) 2012 by Joshua
 Keroes.

 This is free software; you can redistribute it
 and/or modify it under the same terms as the
 Perl 5 programming language system itself.




                                                  27
Let’s sum up.



                28
Leaner POD

No more NAME
No more VERSION
No more AUTHORS
No more COPYRIGHT AND LICENSE




                                29
Leaner POD

Cleaner subroutine definitions
  =func
  =method
  =attr




                                30
Beyond @Default
Lists, the lazy way

 weaver.ini
 [@Default]
 [-Transformer]
 transformer = List




                      32
Lists

 =head1 SEE ALSO
 =over 4
 =item *
 L<Your::Module>
 =item *
 L<Your::Package>
 =back


                    33
Pod::Weaver bullet lists

 =head1 SEE ALSO    =head1 SEE ALSO
 =over 4
 =item *            =for :list
 L<Your::Module>    * L<Your::Module>
 =item *            * L<Your::Package>
 L<Your::Package>
 =back


                                         34
Pod::Weaver numeric lists

=head1 SEE ALSO    =head1 SEE ALSO
=over 4
=item *            =for :list
L<Your::Module>    1. L<Your::Module>
=item *            1. L<Your::Package>
L<Your::Package>
=back


                                         35
Pod::Weaver frontends



                        36
Dist::Zilla

 dist.ini
 [PodWeaver]
 …




               37
App::podweaver

Great for troubleshooting; bypassing Dist::Zilla
podweaver lib/path/to/file.pm




                                                   38
References

This talk at SlideShare: http://xrl.us/jkeroespw
Dist::Zilla + Pod::Weaver http://xrl.us/dzilpw
What is Pod::Weaver 1? http://xrl.us/rjbspw1
What is POD::Weaver 2? http://xrl.us/rjbspw2
Falling in love with Pod::Weaver http://xrl.us/lovepw




                                                        39

More Related Content

What's hot

DPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark WorkshopDPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark Workshop
Jeroen Keppens
 
Alessandro sf 2010
Alessandro sf 2010Alessandro sf 2010
Alessandro sf 2010
Puppet
 
Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsag
niklal
 
第二讲 预备-Python基礎
第二讲 预备-Python基礎第二讲 预备-Python基礎
第二讲 预备-Python基礎
anzhong70
 
Functional Pattern Matching on Python
Functional Pattern Matching on PythonFunctional Pattern Matching on Python
Functional Pattern Matching on Python
Daker Fernandes
 

What's hot (17)

Writing your own programming language to understand Ruby better - Euruko 2011
Writing your own programming language to understand Ruby better - Euruko 2011Writing your own programming language to understand Ruby better - Euruko 2011
Writing your own programming language to understand Ruby better - Euruko 2011
 
Introducción rápida a SQL
Introducción rápida a SQLIntroducción rápida a SQL
Introducción rápida a SQL
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4
 
DPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark WorkshopDPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark Workshop
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Alessandro sf 2010
Alessandro sf 2010Alessandro sf 2010
Alessandro sf 2010
 
Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsag
 
Phishing for Root (How I Got Access to Root on Your Computer With 8 Seconds o...
Phishing for Root (How I Got Access to Root on Your Computer With 8 Seconds o...Phishing for Root (How I Got Access to Root on Your Computer With 8 Seconds o...
Phishing for Root (How I Got Access to Root on Your Computer With 8 Seconds o...
 
第二讲 Python基礎
第二讲 Python基礎第二讲 Python基礎
第二讲 Python基礎
 
第二讲 预备-Python基礎
第二讲 预备-Python基礎第二讲 预备-Python基礎
第二讲 预备-Python基礎
 
Functional Pattern Matching on Python
Functional Pattern Matching on PythonFunctional Pattern Matching on Python
Functional Pattern Matching on Python
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
 
Migrating to Puppet 4.0
Migrating to Puppet 4.0Migrating to Puppet 4.0
Migrating to Puppet 4.0
 
Hidden treasures of Ruby
Hidden treasures of RubyHidden treasures of Ruby
Hidden treasures of Ruby
 
Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本
 
Ruby to Elixir - what's great and what you might miss
Ruby to Elixir - what's great and what you might missRuby to Elixir - what's great and what you might miss
Ruby to Elixir - what's great and what you might miss
 
extending-php
extending-phpextending-php
extending-php
 

Viewers also liked (8)

Hank Torbert Avondale Ventures
Hank Torbert Avondale VenturesHank Torbert Avondale Ventures
Hank Torbert Avondale Ventures
 
Have more fun with Perl via Questhub
Have more fun with Perl via QuesthubHave more fun with Perl via Questhub
Have more fun with Perl via Questhub
 
CPAN Curation
CPAN CurationCPAN Curation
CPAN Curation
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5
 
Dist::Zilla - A very brief introduction
Dist::Zilla - A very brief introductionDist::Zilla - A very brief introduction
Dist::Zilla - A very brief introduction
 
Co-teaching can be wonderful !
Co-teaching can be wonderful !Co-teaching can be wonderful !
Co-teaching can be wonderful !
 
Hank torbert
Hank torbertHank torbert
Hank torbert
 

Similar to Getting started with Pod::Weaver

Unix Shell Scripting Basics
Unix Shell Scripting BasicsUnix Shell Scripting Basics
Unix Shell Scripting Basics
Sudharsan S
 
Introducing Command Line Applications with Ruby
Introducing Command Line Applications with RubyIntroducing Command Line Applications with Ruby
Introducing Command Line Applications with Ruby
Nikhil Mungel
 

Similar to Getting started with Pod::Weaver (20)

Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010
 
Chef for beginners module 2
Chef for beginners   module 2Chef for beginners   module 2
Chef for beginners module 2
 
Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basics
 
Linux class 8 tar
Linux class 8   tar  Linux class 8   tar
Linux class 8 tar
 
Devel::hdb debugger talk
Devel::hdb debugger talkDevel::hdb debugger talk
Devel::hdb debugger talk
 
groovy & grails - lecture 2
groovy & grails - lecture 2groovy & grails - lecture 2
groovy & grails - lecture 2
 
Configuration surgery with Augeas (OggCamp 12)
Configuration surgery with Augeas (OggCamp 12)Configuration surgery with Augeas (OggCamp 12)
Configuration surgery with Augeas (OggCamp 12)
 
Introduction to Functional Programming
Introduction to Functional ProgrammingIntroduction to Functional Programming
Introduction to Functional Programming
 
Ansible for Beginners
Ansible for BeginnersAnsible for Beginners
Ansible for Beginners
 
(Practical) linux 104
(Practical) linux 104(Practical) linux 104
(Practical) linux 104
 
Unix Shell Scripting Basics
Unix Shell Scripting BasicsUnix Shell Scripting Basics
Unix Shell Scripting Basics
 
Tame your Infrastructure with Puppet
Tame your Infrastructure with PuppetTame your Infrastructure with Puppet
Tame your Infrastructure with Puppet
 
Introducing Command Line Applications with Ruby
Introducing Command Line Applications with RubyIntroducing Command Line Applications with Ruby
Introducing Command Line Applications with Ruby
 
Install Archlinux in 10 Steps (Sort of) :)
Install Archlinux in 10 Steps (Sort of) :)Install Archlinux in 10 Steps (Sort of) :)
Install Archlinux in 10 Steps (Sort of) :)
 
The Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet Labs
The Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet LabsThe Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet Labs
The Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet Labs
 
Linux Basic Commands
Linux Basic CommandsLinux Basic Commands
Linux Basic Commands
 
Python Part 1
Python Part 1Python Part 1
Python Part 1
 
OpenWRT guide and memo
OpenWRT guide and memoOpenWRT guide and memo
OpenWRT guide and memo
 
File::CleanupTask
File::CleanupTaskFile::CleanupTask
File::CleanupTask
 

Recently uploaded

Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
panagenda
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
UK Journal
 

Recently uploaded (20)

Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxBT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 

Getting started with Pod::Weaver

Editor's Notes

  1. \n
  2. Show of hands and wild cheering please.\n(If &gt;1: hire this champ)\n(If 0: typical. Fortunately, Pod::Weaver can help)\n\n
  3. Why don&amp;#x2019;t we like to write docs?\nDRY. Heck, we already wrote the code, right?\nBeyond that, every module file in every module must have a NAME section. And an ABSTRACT. And they should have a COPYRIGHT, LICENSE, and AUTHOR(s), too. There&amp;#x2019;s a lot of repeated effort.\n
  4. Why don&amp;#x2019;t we like to write docs?\nDRY. Heck, we already wrote the code, right?\nBeyond that, every module file in every module must have a NAME section. And an ABSTRACT. And they should have a COPYRIGHT, LICENSE, and AUTHOR(s), too. There&amp;#x2019;s a lot of repeated effort.\n
  5. Should we really have to start a FUNCTIONS section? Is it a head1 or a head2? Why do we have to indent? Or remember to stop indenting, for that matter? And what if we want to intermingle POD with code?\n
  6. Should we really have to start a FUNCTIONS section? Is it a head1 or a head2? Why do we have to indent? Or remember to stop indenting, for that matter? And what if we want to intermingle POD with code?\n
  7. Why should you have to keep the copyright current? Honestly, we have a computer here.\n\n
  8. Know what Perl&apos;s good at? Templating. Just count the number of template-related modules on CPAN. viz. http://mapofcpan.org/\n
  9. weaver.ini is the template. Let&amp;#x2019;s take unwrap things a few levels. Default is a Pod::Weaver::PluginBundle::Default. The @-sign means PluginBundle instead of Plugin.\n
  10. Let&amp;#x2019;s unwrap the CorePrep PluginBundle\n
  11. Validate POD and make sure all sub-elements are nested under =head1&amp;#x2019;s. Good housekeeping, basically.\n
  12. Undocumented treasure!\n
  13. voila, the whole default template. Barring the two housekeeping plugins, the rest are in order. Let&amp;#x2019;s figure out what they do.\n
  14. \n
  15. Admittedly, this takes more typing. Fortunately, we can do better.\n
  16. You need either a PODNAME or a package. The rule of thumb is to use PODNAME for programs and to package for modules.\n
  17. Automatic and painless. podweaver gets it from a META.json or META.yml file. Under dzil, it depends which plugins are loaded in dist.ini, but that&amp;#x2019;s getting ahead of things.\n
  18. Think of the GENERIC plugin as a pass-through. These three sections, named above, and their contents will pass through P::W relatively unharmed.\n
  19. The collect plugin fetches and assembles sets of things. \n
  20. PW will add the section header and add the indenting; we just list the functions and what they do.\n
  21. The method collection uses the new =method keyword....\n
  22. \n
  23. Like Moose, Mouse, Moo, or Mo? =attr behaves just like the other collects. As with the other examples... Speaking of which, there are two plugins on CPAN you may find useful, one that adds an EXTENDS section; the other a CONSUMES section for Moose roles.\n
  24. the shorthand on the right will generate the POD on the left.\n
  25. Do you want to add generic/text before the synopsis? Text found here between a preludes =begin and =end or after a =for will be moved to the prelude location. This has to be generic text. I wasn&amp;#x2019;t able to add commands like =head1 successfully. We&amp;#x2019;ll look at another section that can handle this shortly.\n
  26. Leftovers come before the postlude region. \n
  27. Just like the prelude, the postlude will move generic/text after the leftovers.\n
  28. Automatic. podweaver gets it from META.json or META.yml. Under dzil, it depends which plugins are loaded in dist.ini.\n
  29. Automatic. podweaver gets it from META.json or META.yml. Under dzil, it depends which plugins are loaded in dist.ini.\n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. The numbers start at one and are auto-incremented.\n
  38. \n
  39. Add one line to run Pod::weaver during `dzil build`.\n
  40. \n
  41. \n