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

SYNOPSIS
      # 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;

DESCRIPTION
    "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.

METHODS
  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.

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

  minimum_version
    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.

  minimum_explicit_version
    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.

  minimum_external_version
    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.

BUGS
    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
    rt.cpan.org, along with the version needed.

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

TO DO
    - Write lots more version checkers

    - Write the explicit version checker

    - Write the recursive module descend stuff

SUPPORT
    All bugs should be filed via the CPAN bug tracker at

    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Perl-MinimumVersion>

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

AUTHORS
    Adam Kennedy (Maintainer), <http://ali.as/>, cpan@ali.as

SEE ALSO
    PPI, version

COPYRIGHT
    Copyright (c) 2005 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.

