# phpman > man > CPAN::Meta::Prereqs

## NAME
    [CPAN::Meta::Prereqs](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3APrereqs/markdown) - a set of distribution prerequisites by phase and type

## VERSION
    version 2.150010

## DESCRIPTION
    A [CPAN::Meta::Prereqs](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3APrereqs/markdown) object represents the prerequisites for a CPAN distribution or one of its
    optional features. Each set of prereqs is organized by phase and type, as described in
    [CPAN::Meta::Prereqs](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3APrereqs/markdown).

## METHODS
  new
      my $prereq = [CPAN::Meta::Prereqs](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3APrereqs/markdown)->new( \%prereq_spec );

    This method returns a new set of Prereqs. The input should look like the contents of the
    "prereqs" field described in [CPAN::Meta::Spec](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3ASpec/markdown), meaning something more or less like this:

      my $prereq = [CPAN::Meta::Prereqs](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3APrereqs/markdown)->new({
        runtime => {
          requires => {
            '[Some::Module](https://www.chedong.com/phpMan.php/perldoc/Some%3A%3AModule/markdown)' => '1.234',
            ...,
          },
          ...,
        },
        ...,
      });

    You can also construct an empty set of prereqs with:

      my $prereqs = [CPAN::Meta::Prereqs](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3APrereqs/markdown)->new;

    This empty set of prereqs is useful for accumulating new prereqs before finally dumping the
    whole set into a structure or string.

  requirements_for
      my $requirements = $prereqs->requirements_for( $phase, $type );

    This method returns a [CPAN::Meta::Requirements](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3ARequirements/markdown) object for the given phase/type combination. If
    no prerequisites are registered for that combination, a new [CPAN::Meta::Requirements](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3ARequirements/markdown) object will
    be returned, and it may be added to as needed.

    If $phase or $type are undefined or otherwise invalid, an exception will be raised.

  phases
      my @phases = $prereqs->phases;

    This method returns the list of all phases currently populated in the prereqs object, suitable
    for iterating.

  types_in
      my @runtime_types = $prereqs->types_in('runtime');

    This method returns the list of all types currently populated in the prereqs object for the
    provided phase, suitable for iterating.

  with_merged_prereqs
      my $new_prereqs = $prereqs->with_merged_prereqs( $other_prereqs );

      my $new_prereqs = $prereqs->with_merged_prereqs( \@other_prereqs );

    This method returns a new [CPAN::Meta::Prereqs](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3APrereqs/markdown) objects in which all the other prerequisites given
    are merged into the current set. This is primarily provided for combining a distribution's core
    prereqs with the prereqs of one of its optional features.

    The new prereqs object has no ties to the originals, and altering it further will not alter
    them.

  merged_requirements
        my $new_reqs = $prereqs->merged_requirements( \@phases, \@types );
        my $new_reqs = $prereqs->merged_requirements( \@phases );
        my $new_reqs = $prereqs->merged_requirements();

    This method joins together all requirements across a number of phases and types into a new
    [CPAN::Meta::Requirements](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3ARequirements/markdown) object. If arguments are omitted, it defaults to "runtime", "build" and
    "test" for phases and "requires" and "recommends" for types.

  as_string_hash
    This method returns a hashref containing structures suitable for dumping into a distmeta data
    structure. It is made up of hashes and strings, only; there will be no Prereqs,
    [CPAN::Meta::Requirements](https://www.chedong.com/phpMan.php/perldoc/CPAN%3A%3AMeta%3A%3ARequirements/markdown), or "version" objects inside it.

  is_finalized
    This method returns true if the set of prereqs has been marked "finalized," and cannot be
    altered.

  finalize
    Calling "finalize" on a Prereqs object will close it for further modification. Attempting to
    make any changes that would actually alter the prereqs will result in an exception being thrown.

  clone
      my $cloned_prereqs = $prereqs->clone;

    This method returns a Prereqs object that is identical to the original object, but can be
    altered without affecting the original object. Finalization does not survive cloning, meaning
    that you may clone a finalized set of prereqs and then modify the clone.

## BUGS
    Please report any bugs or feature using the CPAN Request Tracker. Bugs can be submitted through
    the web interface at <<http://rt.cpan.org/Dist/Display.html?Queue=CPAN-Meta>>

    When submitting a bug or request, please include a test-file or a patch to an existing test-file
    that illustrates the bug or desired feature.

## AUTHORS
    *   David Golden <<dagolden@cpan.org>>

    *   Ricardo Signes <<rjbs@cpan.org>>

    *   Adam Kennedy <<adamk@cpan.org>>

## COPYRIGHT AND LICENSE
    This software is copyright (c) 2010 by David Golden, Ricardo Signes, Adam Kennedy and
    Contributors.

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

