(Up-to-date source of this post.)
Creating a Module::Build Distribution
We show here how to create a Perl distribution using Module::Build build system with Module::Starter. The other Perl build system (we don't show here) is ExtUtils::MakeMaker. For sophisticated distribution creation see Dist::Zilla.
Create config file ~/.module-starter/config:
author: Foo Bar
email: foo@bar.org
builder: Module::Build
verbose: 1
# Allow adding new modules to existing distro.
plugins: Module::Starter::AddModule
... or use module-starter (see below) with command line arguments like:
--author="Foo Bar" \
--email=foo@bar.org \
--mb \
--verbose \
--plugin=Module::Starter::AddModule
Run basic commands
- install needed modules:
cpanm Module::Build Module::Starter Module::Starter::AddModule - create (a working skeleton of) module distribution:
module-starter --module=Animal - change to the created distro directory:
cd Animal - create the
Buildscript:perl Build.PL - build the distro (modules from
libcopied toblibstaging area and embedded documenation translated into Unix manpage inblib/libdoc):./Build - make sure the tests pass:
./Build test(or run individual tests - see below) - test the distro:
./Build disttest - create the distro:
./Build dist
Add modules
- add new modules:
module-starter --module=Sheep,Cow,Horse --dist=Animal - add new modules (we are inside our distribution directory):
module-starter --module=Sheep,Cow,Horse --dist=.
Run individual tests
- rebuild distro and run test including modules from
blib/lib:./Build && perl -Iblib/lib -T t/Cow.t - rebuild distro and run test including modules from
blib/lib:./Build && perl -Mblib -T t/Cow.t
Measure out test coverage
- run
testcovertarget:./Build testcover - turn the collected statistics into human-readable reports:
cover
The following is a typical release cycle for github users:
- Work on changes until all tests pass
- Make sure the Changes file documents all major changes
- Make your changes atomic, all changes related to a particular fix or feature should go in a single commit, including the Changes entry.
- Bump the version
- Upload to PAUSE
- Tag with the version. By convention for version 1.01 the tag would be 'v1.01'
- Push to github
For more see:
- Alpaca Book, Ch. 12
- The Perl Toolchain: developing your module