Acme::Module::Build::Tiny - A tiny replacement for Module::Build (DEPRECATED)


  # First, install Acme::Module::Build::Tiny

  # From the command line, run this:
  $ btiny

  # Which generates this Build.PL:
  use lib 'inc'; use Acme::Module::Build::Tiny;

  # That's it!



NOTE: This module is deprecated. See Module::Build::Tiny instead, which builds upon this Acme proof of concept.

Original Description

Many Perl distributions use a Build.PL file instead of a Makefile.PL file to drive distribution configuration, build, test and installation. Traditionally, Build.PL uses Module::Build as the underlying build system. This module provides a simple, lightweight, drop-in replacement.

Whereas Module::Build has over 6,700 lines of code; this module has under 200, yet supports the features needed by most pure-Perl distributions along with some useful automation for lazy programmers. Plus, it bundles itself with the distribution, so end users don't even need to have it (or Module::Build) installed.


  * Pure Perl distributions
  * Recursive test files
  * Automatic 'requires' and 'build_requires' detection (see below)
  * Automatic MANIFEST generation
  * Automatic MANIFEST.SKIP generation (if not supplied)
  * Automatically bundles itself in inc/

Not Supported

  * Dynamic prerequisites
  * Generated code from PL files
  * Building XS or C
  * Manpage or HTML documentation generation
  * Subclassing Acme::Module::Build::Tiny
  * Licenses in META.yml other than 'perl'

Other limitations

  * May only work on a Unix-like or Windows OS
  * This is an Acme module -- use at your own risk

Directory structure

Your .pm and .pod files must be in lib/. Any executables must be in bin/. Test files must be in t/. Bundled test modules must be in t/lib/.

Automatic prequisite detection

Prerequisites of type 'requires' are automatically detected in *.pm files in lib/ from lines that contain a use() function with a version number. E.g.:

  use Carp 0 qw/carp croak/;
  use File::Spec 0.86 ();

Lines may have leading white space. You may not have more than one use() function per line. No other use() or require() functions are detected.

Prerequisites of type 'build_requires' are automatically detected in a similar fashion from any *.t files (recusively) in t/ and from any *.pm files in t/lib/.


These all work pretty much like their Module::Build equivalents. The only configuration options currently supported are:

  • install_base

  • uninst

perl Build.PL


Build test

Build install

Build clean

Build realclean

Build distdir

Build dist


Options can be provided in a .modulebuildrc file or in the PERL_MB_OPT environment variable the same way they can with Module::Build.




  David Golden <>


Copyright (C) 2009 by David A. Golden

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available.