---
name: "pm_which"
section: "1p"
platform: "linux"
package: "libmodule-util-perl"
version: "1.09-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/pm_which"
---

# pm\_which(1p)

find installed modules

## NAME

pm\_which - find installed modules

## SYNOPSIS

```
    pm_which [ options ] module(s)
    Returns the path to the given module(s)
```

### OPTIONS

```
    -q, --quiet     Just print paths
    -p, --paths     Just convert the module name into a relative path
    -a, --all       Print all paths, not just the first one found
    -n, --namespace Print all modules in the given namespace
    -m              Only print module names, not paths
    -V              Show module version
    -I libpath      Add a path to search (like perl -I)
    -d, --dump      Dump paths that would be searched (@INC by default)
    -h, --help      Print this message
    -v, --version   Print version information
    -               Read modules from stdin, one per line
```

## DESCRIPTION

This tool reports the locations of installed perl modules.

By default it lists the location of each specified module that would be loaded by require.

## OPTION DETAILS

### quiet

Under quiet mode, module names are suppressed and missing modules are not reported.

Normal output:

```
    $ pm_which Module::One Module::Two Missing::Module
    Module::One     - /path/to/Module/One.pm
    Module::Two     - /path/to/Module/Two.pm
    Missing::Module - not found
```

Under --quiet:

```
    $ pm_which -q Module::One Module::Two Missing::Module
    /path/to/Module/One.pm
    /path/to/Module/Two.pm
```

### paths

In "paths" mode, each module is simply converted into a relative file path. This is possible even when the module is not installed.

```
    $ pm_which -p Missing::Module
    Missing/Module.pm
```

### all

When the "all" switch is specified, all installed modules will be reported, not just the first one. This is useful for determining when there is a module installed in multiple locations.

```
    $ pm_which -a MyModule
    /path/to/MyModule.pm
    /home/me/perl/MyModule.pm
```

### namespace

Arguments are taken as namespaces to search under.

```
    $ pm_which -n MyModule
    MyModule            - /path/to/MyModule.pm
    MyModule::Foo       - /path/to/MyModule/Foo.pm
    MyModule::Foo::Bar  - /path/to/MyModule/Foo/Bar.pm
```

### -m

Disables printing of module paths. This is only really useful in conjunction with --namespace.

```
    $ pm_which -nm MyModule
    MyModule
    MyModule::Foo
    MyModule::Foo::Bar
```

### -V

Prints the version of each module, according to ExtUtils::MakeMaker.

```
    $ pm_which -V MyModule
    MyModule - /path/to/MyModule.pm [ 1.00 ]
    $ pm_which -Vnm MyModule
    MyModule [ 1.00 ]
    MyModule::Foo [ 0.01 ]
    MyModule::Foo::Bar [ undef ]
```

### dump

Dumps the paths that would be searched and exits. This is `@INC` modified by any -I switches.

```
    $ pm_which --dump
    /usr/lib/perl5/site_perl/5.8.6
    /usr/lib/perl5/vendor_perl/5.8.6
    ...
    $ pm_which -I lib --dump -I blib/lib
    lib
    blib/lib
    /usr/lib/perl5/site_perl/5.8.6
    ...
```

### version

Prints the version number of the script, plus the version and path of Module::Util that was loaded.

## EXIT CODES

- •

  0 - Everything was OK

- •

  1 - Initialisation failed (bad switches?)

- •

  2 - Some modules were not installed

## SEE ALSO

This utility comes with Module::Util.

## AUTHOR

Matt Lawrence \<mattlaw@cpan.org\>
