[[http://search.cpan.org/perldoc?Module::Setup][Module::Setup]] by [[http://blog.yappo.jp/][Yappo]] is a really nice module. I don't like [[http://search.cpan.org/perldoc?Module::Starter][Module::Starter]], it's not easy to create template to make it do what you need. With Module::Setup you can create flavors for any type of modules you want. Most of the modules I create for work use Moose, and I like to use Test::Class too. I've created a Moose flavor for creating this kind of modules. *** Creating a Moose flavor for Module::Setup First, you tell it to init a new flavor: #+BEGIN_EXAMPLE module-setup --init moose #+END_EXAMPLE Module::Setup ask what is your favorite SCM. For me, it's git. It will create files in /$HOME/.module-setup/flavors/moose//. Start by editing *$HOME/.module-setup/flavors/moose/template/lib/\_\_\_\_var-module\_path-var\_\_\_\_.pm* to make it look like this #+BEGIN_SRC perl - use strict; - use warnings; + use Moose; #+END_SRC Add *requires 'Moose'* in *Makefile.PL*. Create a **t/tests/Test/\_\_\_\_var-module\_path-var\_\_\_\_.pm** file with the following content: #+BEGIN_SRC perl package Test :: [%module %]; use strict; use warnings; use base 'Test::Class'; use Test::Exception; use Test::More; sub class {'[% module %]'} sub startup : Tests(startup => 1) { my $test = shift; use_ok $test->class, "use ok"; } sub shutdown : Tests(shutdown) { my $test = shift; } sub constructor : Tests(1) { my $test = shift; can_ok $test->class, 'new'; } 1; #+END_SRC You will have a Test::Class test ready with basic tests already implemented. If you want to share this template at $work, easy: #+BEGIN_EXAMPLE module-setup --pack DevMoose moose > DevMoose.pm #+END_EXAMPLE You just have to send DevMoose.pm to who need it, and he will be able to import it with #+BEGIN_EXAMPLE module-setup --init --flavor-class=+DevMoose moose #+END_EXAMPLE Now you can create a new module #+BEGIN_EXAMPLE module-setup MY::AWESOME::MODULE moose #+END_EXAMPLE