# man > App::Prove

---
type: CommandReference
command: prove
mode: perldoc
section: "3"
source: perldoc
---

## Quick Reference
- `prove` — run tests in `t/` directory
- `prove -l` — add current `lib/` to `@INC`
- `prove -v` — enable verbose output
- `prove -b` — use `blib` (build library)
- `prove -r` — recurse into directories
- `prove -j4` — 4 parallel test jobs
- `prove -PPlugin` — load a plugin named Plugin

## Name
`App::Prove` – Implements the `prove` command.

## Synopsis
perl
use App::Prove;

my $app = App::Prove->new;
$app->process_args(@ARGV);
$app->run;
## Options
After argument parsing, the following attributes are set. Most correspond directly to `prove` command‑line switches.

**Directory / include paths**
- `blib` — use `blib` (`-b`)
- `lib` — add `lib/` to `@INC` (`-l`)
- `includes` — additional include directories (`-I <dir>`)
- `recurse` — recurse into directories (`-r`)

**Execution control**
- `jobs` — number of parallel test jobs (`-j N`)
- `exec` — command to execute each test (`--exec`)
- `rules` — rules to select tests (`--rules`)
- `tapversion` — set TAP version (`--tapversion`)
- `trap` — enable signal trapping (`--trap`)

**Output control**
- `quiet` — suppress some output (`-q`)
- `really_quiet` — suppress nearly all output (`-Q`)
- `verbose` — increase verbosity (`-v`)
- `color` — colorize output (`-c`)
- `show_count` — show test file count (`--show-count`)
- `timer` — show elapsed time (`--timer`)
- `directives` — show TODO / SKIP directives
- `comments` — show test comments
- `dry` — dry run (do not execute tests)

**Plugins & harness**
- `plugins` — load a plugin module (`-P Plugin`)
- `harness` — specify test harness class (`--harness`)
- `formatter` — specify TAP formatter class (`--formatter`)
- `state` — load/restore test state (`--state`)
- `merge` — merge state after run (`--merge`)
- `failures` — run only previously failed tests (`--failures`)

**Miscellaneous**
- `shuffle` — randomise test order (`--shuffle`)
- `backwards` — run tests in reverse order (`--backwards`)
- `extensions` — comma‑separated list of test file extensions (`--ext`)
- `test_args` — arguments to pass to individual tests (`--test-args`)
- `ignore_exit` — ignore overall exit status (`--ignore-exit`)
- `modules` — specify required modules (`-M`)
- `parse` — parse test output for directives (`--parse`)
- `archive` — path to store a test archive (`--archive`)
- `taint_warn` / `taint_fail` — behaviour on taint checks (`--taint-warn` / `--taint-fail`)
- `warnings_warn` / `warnings_fail` — behaviour on warnings (`--warnings-warn` / `--warnings-fail`)
- `state_class` — class used for maintaining state
- `show_help`, `show_version`, `show_man` — display help / version / man page

## Examples
**Using `App::Prove` in a script**
perl
use App::Prove;

my $app = App::Prove->new;
$app->process_args(@ARGV);
exit( $app->run ? 0 : 1 );
**Writing a plugin**
perl
package App::Prove::Plugin::Foo;

use strict;
use warnings;

sub load {
    my ($class, $p) = @_;
    my @args = @{ $p->{args} };
    my $app  = $p->{app_prove};

    $app->verbose( 1 );
    $app->formatter( $args[1] ) if @args > 1;
    return 1;
}

1;
Load the plugin with `prove -PFoo=bar -r -j3`.

## See Also
- [`prove`](http://localhost/phpMan.php/man/prove/1/markdown)
- [`TAP::Harness`](http://localhost/phpMan.php/perldoc/TAP%3A%3AHarness/markdown)

## Exit Codes
- **0** – all tests passed
- **1** – one or more tests failed or an error occurred

The `run()` method returns true on success. The common idiom is `exit( $app->run ? 0 : 1 )`.