Perl::MinimumVersion - Find a minimum required version of perl for Perl code


  # Create the checker object
  $object = Perl::MinimumVersion->new( $filename );
  $object = Perl::MinimumVersion->new( \$source  );
  $object = Perl::MinimumVersion->new( $Document );
  # Find the minimum version
  $version = $object->minimum_version;


Perl::MinimumVersion takes Perl source code and calculates the minimum version of perl required to be able to run it. Because it is based on PPI, it can do this without having to actually load the code.

This first release only tests based on the syntax of your code.

As this module develops, it will also be able to check explicitly specified versions via require 5.005;, and trace module dependencies as needed.

Amoungst other things, we hope to be able to build a test that is able to tell when the version needed based on the code syntax is higher than the version you explicitly specified (and thus, is a package bug).

Using Perl::MinimumVersion is dead simple, the synopsis pretty much covers it.


new $filename | \$source | $PPI_Document

The new constructor creates a new version checking object for a PPI::Document. You can also provide the document to be read as a file name, or as a SCALAR reference containing the code.

Returns a new Perl::MinimumVersion object, or undef on error.


The Document accessor can be used to get the PPI::Document object back out of the version checker.


The minimum_version method is the primary method for finding the minimum perl version required based on all factors in the document.

At the present time, this is just syntax and explicit version checks, as Perl::Depends is not yet completed.

Returns a version object, or undef on error.


The minimum_explicit_version method checks through Perl code for the use of explicit version dependencies such as.

  use 5.006;
  require 5.005_03;

Although there is almost always only one of these in a file, if more than one are found, the highest version dependency will be returned.

Returns a version object, false if no dependencies could be found, or undef on error.

minimum_syntax_version $limit

The minimum_syntax_version method will explicitly test only the Document's syntax to determine it's minimum version, to the extent that this is possible.

It takes an optional parameter of a version object defining the the lowest known current value. For example, if it is already known that it must be 5.006 or higher, then you can provide a param of qv(5.006) and the method will not run any of the tests below this version. This should provide dramatic speed improvements for large and/or complex documents.

The limitations of parsing Perl mean that this method may provide artifically low results, but not artificially high results.

For example, if minimum_syntax_version returned 5.006, you can be confident it will not run on anything lower, although there is a chance it during actual execution it may use some untestable feature that creates a dependency on a higher version.

Returns a version object, false if no dependencies could be found, or undef on error.


WARNING: This method has not been implemented. Any attempted use will throw an exception

The minimum_external_version examines code for dependencies on other external files, and recursively traverses the dependency tree applying the same tests to those files as it does to the original.

Returns a version object, false if no dependencies could be found, or undef on error.


It's very early days, so this probably doesn't catch anywhere near enough syntax cases, and I personally don't know enough of them.

However it is exceedingly easy to add a new syntax check, so if you find something this is missing, copy and paste one of the existing 5 line checking functions, modify it to find what you want, and report it to, along with the version needed.

I don't even need an entire diff... just the function and version.


- Write lots more version checkers

- Write the explicit version checker

- Write the recursive module descend stuff


All bugs should be filed via the CPAN bug tracker at

For other issues, or commercial enhancement or support, contact the author.


Adam Kennedy <>

SEE ALSO, PPI, version


Copyright (c) 2005, 2006 Adam Kennedy. All rights reserved.

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

The full text of the license can be found in the LICENSE file included with this module.