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

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 2011Plataformatec
 
Introducción rápida a SQL
Introducción rápida a SQLIntroducción rápida a SQL
Introducción rápida a SQLCarlos Hernando
 
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.4Jeff Carouth
 
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 WorkshopJeroen Keppens
 
Alessandro sf 2010
Alessandro sf 2010Alessandro sf 2010
Alessandro sf 2010Puppet
 
Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsagniklal
 
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...Vi Grey
 
第二讲 Python基礎
第二讲 Python基礎第二讲 Python基礎
第二讲 Python基礎juzihua1102
 
第二讲 预备-Python基礎
第二讲 预备-Python基礎第二讲 预备-Python基礎
第二讲 预备-Python基礎anzhong70
 
Functional Pattern Matching on Python
Functional Pattern Matching on PythonFunctional Pattern Matching on Python
Functional Pattern Matching on PythonDaker Fernandes
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6garux
 
Migrating to Puppet 4.0
Migrating to Puppet 4.0Migrating to Puppet 4.0
Migrating to Puppet 4.0Puppet
 
Hidden treasures of Ruby
Hidden treasures of RubyHidden treasures of Ruby
Hidden treasures of RubyTom Crinson
 
Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本Shell实现的windows回收站功能的脚本
Shell实现的windows回收站功能的脚本Lingfei Kong
 
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 missTobias Pfeiffer
 

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

Hank Torbert Avondale Ventures
Hank Torbert Avondale VenturesHank Torbert Avondale Ventures
Hank Torbert Avondale Ventureshanktorbert
 
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 Questhubneilbowers
 
CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5neilbowers
 
Dist::Zilla - A very brief introduction
Dist::Zilla - A very brief introductionDist::Zilla - A very brief introduction
Dist::Zilla - A very brief introductionDean Hamstead
 

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 Pod::Weaver Module Template Engine

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 2010Qiangning Hong
 
Chef for beginners module 2
Chef for beginners   module 2Chef for beginners   module 2
Chef for beginners module 2Chef
 
Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands Ahmed El-Arabawy
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basicsManav Prasad
 
Devel::hdb debugger talk
Devel::hdb debugger talkDevel::hdb debugger talk
Devel::hdb debugger talkabrummett
 
Configuration surgery with Augeas (OggCamp 12)
Configuration surgery with Augeas (OggCamp 12)Configuration surgery with Augeas (OggCamp 12)
Configuration surgery with Augeas (OggCamp 12)Dominic Cleal
 
Introduction to Functional Programming
Introduction to Functional ProgrammingIntroduction to Functional Programming
Introduction to Functional ProgrammingHoàng Lâm Huỳnh
 
Ansible for Beginners
Ansible for BeginnersAnsible for Beginners
Ansible for BeginnersArie Bregman
 
(Practical) linux 104
(Practical) linux 104(Practical) linux 104
(Practical) linux 104Arie Bregman
 
Unix Shell Scripting Basics
Unix Shell Scripting BasicsUnix Shell Scripting Basics
Unix Shell Scripting BasicsSudharsan S
 
Tame your Infrastructure with Puppet
Tame your Infrastructure with PuppetTame your Infrastructure with Puppet
Tame your Infrastructure with Puppetdelimiter
 
Introducing Command Line Applications with Ruby
Introducing Command Line Applications with RubyIntroducing Command Line Applications with Ruby
Introducing Command Line Applications with RubyNikhil Mungel
 
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) :)Sian Lerk Lau
 
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 LabsPuppet
 
Linux Basic Commands
Linux Basic CommandsLinux Basic Commands
Linux Basic CommandsHanan Nmr
 
OpenWRT guide and memo
OpenWRT guide and memoOpenWRT guide and memo
OpenWRT guide and memo家榮 吳
 

Similar to Pod::Weaver Module Template Engine (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

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 

Recently uploaded (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 

Pod::Weaver Module Template Engine

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