Dist::Zilla::Plugin::LatestPrereqs - adjust prereqs to use latest version available


version 0.4


At the BOTTOM of your dist.ini file:

    ## Optionally skip core modules
    skip_core_modules = 1


This plugin will filter over all your declared or discovered prerequisites, contact CPAN, and adjust the version to the latest one available.

This will make sure that your module will be installed with the latest version available on CPAN at the time you built your package.

The most common use for this techinique is for Task modules. You can rebuild your Task module on a regular basis to make sure it has the latest versions of your dependencies.

Please note that this plugin only makes sure that the version of the prereq is the latest at the time you build your package, not the latest at the time the package is installed.

To do that it would require updates to the CPAN toolchain. Although I would welcome that, this plugin implements the next best thing.

Core modules options

NOTE WELL: this feature should be considered alpha. The interface might change in future versions.

The option skip_core_modules can be used to control the behaviour of this plugin with core modules (as defined by the Module::CoreList API).

If set to 1, we will skip forcing the latest version on modules that are part of the perl core, version equal or below to the one used to release the module.

An example: you have two modules on your [Prereqs] list, Digest::SHA part of the core since 5.009003, and HTTP::Tiny part of the core since 5.013009. With skip_core_modules=1, the following will happen:

  • If you release your module using perl 5.008009, both Digest::SHA and HTTP::Tiny will be forced to the lastest version.

  • If you release your module using perl 5.012003, the Digest::SHA will not be forced to the lastest version, but HTTP::Tiny will.

  • If you release your module using perl 5.014000, both ExtUtils::MakeMaker and HTTP::Tiny will not be forced to the lastest version.

By default (0) all modules will get the latest version.

Idealy we would make this decision based on the perl version of the person that will install your distribution, but for now that is not easy to do.


This plugin uses the CPAN module, but hides the output, so make sure you have your cpan shell properly configured before trying to use this.


This modules abuses the internals of the CPAN::Meta::Prereqs module. This is a bug, but right now that module does not provide an API to traverse its internals.

As soon as it does, I'll rewrite this module to use it.

Until then, this module might break with new releases of CPAN::Meta::Prereqs.


Marcel Gruenauer (hanekomu) described something like this in his article "Repeatedly installing Task::* distributions":

But the method he suggested does not work because it does not force the latest version of the module to be installed.

A Dist::Zilla plugin that implements what Marcel describes is also available, see Dist::Zilla::Plugin::MakeMaker::SkipInstall.

Mike Doherty added the first version of the skip core modules feature.


Dist::Zilla, Dist::Zilla::Plugin::MakeMaker::SkipInstall.


Pedro Melo, <melo at>


Copyright 2009-2010 Pedro Melo.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.