Dist::Zilla::Plugin::OnlyCorePrereqs - Check that no prerequisites are declared that are not part of core


version 0.024


In your dist.ini:

    starting_version = 5.010
    skip = Test::Warnings
    also_disallow = Scalar::Util


[OnlyCorePrereqs] is a Dist::Zilla plugin that checks at build time if you have any declared prerequisites that are not shipped with Perl.

You can specify the first Perl version to check against, and which prerequisite phase(s) are significant.

If the check fails, the build is aborted.



Indicates a phase to check against. Can be provided more than once; defaults to configure, build, runtime, test. (See Dist::Zilla::Plugin::Prereqs for more information about phases.)

Remember that you can use different settings for different phases by employing this plugin twice, with different names.


Indicates the first Perl version that should be checked against; any versions earlier than this are not considered significant for the purposes of core checks. Defaults to the minimum version of perl declared in the distribution's prerequisites, or 5.005.

There are two special values supported (available since version 0.003):

  • current - indicates the version of Perl that you are currently running with =item * latest - indicates the most recent (stable or development) release of Perl

(Note: if you wish to check against all changes in core up to the very latest Perl release, you should upgrade your Module::CoreList installation. You can guarantee you are always running the latest version with Dist::Zilla::Plugin::PromptIfStale. Module::CoreList is also the mechanism used for determining the version of the latest Perl release.)


A boolean flag indicating whether it is considered acceptable to depend on a deprecated module. Defaults to 0.


Available since version 0.007.

A boolean flag indicating whether the specific module version available in the starting_version of perl be checked (even) if the module is dual-lifed. Defaults to 1.

This is useful to unset if you don't want to fail if you require a core module that the user can still upgrade via the CPAN, but do want to fail if the module is only available in core.

Note that at the moment, the "is this module dual-lifed?" heuristic is not 100% reliable, as we may need to interrogate the PAUSE index to see if the module is available outside of perl -- which can generate a false negative if the module is upstream-blead and there was a recent release of a stable perl. This is hopefully going to be rectified soon (when I add the necessary feature to Module::CoreList).

(For example, a prerequisite of Test::More 0.88 at starting_version 5.010 would fail with check_dual_life_versions = 1, as the version of Test::More that shipped with that version of perl was only 0.72, but not fail if check_dual_life_versions = 0.


Available since version 0.012.

The name of a module to exempt from checking. Can be used more than once.


Available since version 0.021.

The name of a module to disallow from being used as a prereq, even if it would pass all the other checks. This is primarily of use when building core modules themselves, where certain other core modules cannot be used, to avoid circular dependencies. Can be used more than once.


Bugs may be submitted through the RT bug tracker (or I am also usually active on irc, as 'ether' at


Karen Etheridge <>


This software is copyright (c) 2013 by Karen Etheridge.

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


David Golden <>