2. Your first CPAN module
PAUSE
Perl Authors Upload Server
http://pause.perl.org
Account requests are manually
verified, can take weeks.
Sign up early!
3. Getting ready to write some code
% module-starter --module='My::New::Module'
--author='me' --email='me@lokku.com' --mb
Learn the CPAN module code layout:
lib/ - Perl modules
t/ - tests
Changes - change log file
META.yml - distribution metadata
LICENSE - legal stuff
README - installation details
MANIFEST - list of files included
MakeFile.PL - installation script (autoconf)
Build.PL - installation script (pure Perl)
4. If you're unsure...
Copy somebody else's code!
There are many different types of CPAN module...
● App::*
● WebService::*
● *::XS
● *::Tiny
● *::Manual
All have different layouts and conventions. When in doubt look
at a few popular examples, or examples by popular authors.
5. Of course you use source control
Go sign up to Github - http://github.com
If you're unfamiliar with Git read Pro Git - http://progit.org/book/
Getting started using Git and Github for your CPAN module is
easy
Create "My-New-Module" repository on Github
% cd My-New-Module
% git init
% git remote add origin git@github.com:you/My-New-Module.git
% git push origin master
% vim README.pod
% git commit -a "Added README.pod"
% git push origin master
6. Writing your module
This is the bit you are already familiar with.
Write your module in lib/My/New/Module.pm
Write your tests in t/*.t
Test your code using prove -l and perl -cw
Write good quality code and tests, somebody might read it!
7. Getting your module on CPAN
The manual, non-Dist::Zilla way...
% perl Build.PL # creates Build
% ./Build distmeta # creates Makefile.PL and META.yml
% ./Build manifest # creates MANIFEST
% git diff / git add / git commit as necessary
% ./Build disttest # test the distribution
% ./Build dist # spit out a tarball
Upload your distribution tarball to PAUSE...
https://pause.perl.org/pause/authenquery?ACTION=add_uri
8. Dist::Zilla
Dist::Zilla is a package to help CPAN authors.
% dzil help
Available commands:
commands: list the application's commands
help: display a command's help screen
authordeps: list your distribution's author dependencies
build: build your dist
clean: clean up after build, test, or install
install: install your dist
listdeps: print your distribution's prerequisites
new: mint a new dist
nop: do nothing: initialize dzil, then exit
release: release your dist
run: run stuff in a dir where your dist is built
setup: set up a basic global config file
smoke: smoke your dist
test: test your dist
9. Creating a new Dist::Zilla-based dist
% dzil new My::New::Module
Creates only dist.ini and lib/My/New/Module.pm
The default dist.ini contains...
name = My-New-Module
author = Alex Balhatchet <kaoru@slackwise.net>
license = Perl_5
copyright_holder = Alex Balhatchet
copyright_year = 2010
version = 0.001
[@Basic]
You can find out about @Basic here:
http://search.cpan.org/dist/Dist-Zilla/lib/Dist/Zilla/PluginBundle/Basic.pm
10. Converting a dist to Dist::Zilla
% rm -f Build.PL Makefile.PL MANIFEST META.yml t/pod-*.t
Didn't that feel good? :-)
% vim ~/dzil/config.ini
Global defaults
% vim dist.ini
Distribution-specific config
13. Build, test & release with Dist::Zilla
% dzil test
% dzil release
Yep, that's it :-)
My Dist::Zilla config adds the $VERSION variable, adds a
POD syntax checking test, creates the META.yml and META.
json files, and creates the LICENSE, README, MANIFEST
and Makefile.PL files.
Dist::Zilla can also interact with SVN or Git, determine your
dependencies automatically, or Tweet when you release a new
version of your module!
http://search.cpan.org/search?query=Dist::Zilla::Plugin
14. The waiting game
After running the dzil release command or uploading your
distribution via the PAUSE web interface, you should get an
two emails letting you know everything is OK.
After that it takes a few hours for your distribution to be fully
indexed in all the CPAN mirrors. Once it's there it will show up
on http://search.cpan.org/~you/ as you would expect.
Once it's on the web, let people know about it.
15. CPAN Testers
Once you've uploaded your distribution, the CPAN Testers
testing service will start testing it for you.
You will get emails about the results, and you can also check
them online.
For example, http://www.cpantesters.org/distro/N/Number-
Format-SouthAsian.html
In the case of Number::Format::SouthAsian the CPAN testers
quickly flagged two important bugs - it was broken on 32bit
systems, and it was broken on Windows.
Version 0.07 has both those bugs fixed. Woohoo!