---
name: "Test::Prereq"
section: "3pm"
platform: "linux"
package: "libtest-prereq-perl"
version: "2.005-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Test::Prereq"
---

# Test::Prereq(3pm)

check if Makefile.PL has the right pre-requisites

## NAME

Test::Prereq - check if Makefile.PL has the right pre-requisites

## SYNOPSIS

```
        # if you use Makefile.PL
        use Test::More;
        eval "use Test::Prereq";
        plan skip_all => "Test::Prereq required to test dependencies" if $@;
        prereq_ok();
        # if you use Module::Build
        use Test::More;
        eval "use Test::Prereq::Build";
        plan skip_all => "Test::Prereq::Build required to test dependencies" if $@;
        prereq_ok();
        # or from the command line for a one-off check
        perl -MTest::Prereq -eprereq_ok
    #The prerequisites test take quite some time so the following construct is
    #recommended for non-author testers
        use Test::More;
        eval "use Test::Prereq::Build";
        my $msg;
        if ($@) {
            $msg = 'Test::Prereq::Build required to test dependencies';
        } elsif (not $ENV{TEST_AUTHOR}) {
            $msg = 'Author test.  Set $ENV{TEST_AUTHOR} to a true value to run.';
        }
        plan skip_all => $msg if $msg;
        prereq_ok();
```

## DESCRIPTION

The `prereq_ok()` function examines the modules it finds in *blib/lib/*, *blib/script*, and the test files it finds in *t/* (and *test.pl*). It figures out which modules they use and compares that list of modules to those in the `"PREREQ_PM"` section of *Makefile.PL*.

If you use `"Module::Build"` instead, see Test::Prereq::Build instead.

### Warning about redefining ExtUtils::MakeMaker::WriteMakefile

`"Test::Prereq"` has its own version of `"ExtUtils::MakeMaker::WriteMakefile"` so it can run the *Makefile.PL* and get the argument list of that function.  You may see warnings about this.

## FUNCTIONS

- prereq\_ok( \[ NAME \[, SKIP\_ARRAY\] \] )

  Tests *Makefile.PL* to ensure all non-core module dependencies are in `"PREREQ_PM"`. If you haven't set a testing plan already, `prereq_ok()` creates a plan of one test.

  Valid versions come from `"Module::CoreList"` (which uses `$]`).

  ```
          #!/usr/bin/perl
          use Module::CoreList;
          print map "$_\n", sort keys %Module::CoreList::version;
  ```

  `"prereq_ok"` attempts to remove modules found in *lib/* and libraries found in *t/* from the reported prerequisites.

  The optional third argument is an array reference to a list of names that `"prereq_ok"` should ignore. You might want to use this if your tests do funny things with `"require"`.

  Versions prior to 1.038 would use CPAN.pm to virtually include prerequisites in distributions that you declared explicitly. This isn't really a good idea. Some modules have moved to different distributions, so you should just specify all the modules that you use instead of relying on a particular distribution to provide them. Not only that, expanding distributions with CPAN.pm takes forever.

  If you want the old behavior, set the `"TEST_PREREQ_EXPAND_WITH_CPAN"` environment variable to a true value.

## TO DO

- •

  set up a couple fake module distributions to test

- •

  warn about things that show up in `"PREREQ_PM"` unnecessarily

## SOURCE AVAILABILITY

This source is in Github:

```
        http://github.com/briandfoy/test-prereq
```

## CONTRIBUTORS

Many thanks to:

Andy Lester, Slavin Rezić, Randal Schwartz, Iain Truskett, Dylan Martin

## AUTHOR

brian d foy, `"<briandfoy@pobox.com>"`

## COPYRIGHT and LICENSE

Copyright © 2002-2025, brian d foy \<briandfoy@pobox.com\>. All rights reserved. This software is available under the Artistic License 2.
