Module::Path - get the full path to a locally installed module
use Module::Path 'module_path'; $path = module_path('Test::More'); if (defined($path)) { print "Test::More found at $path\n"; } else { print "Danger Will Robinson!\n"; }
Module::Path provides a single function, module_path(), which will find where a module is installed locally.
module_path()
It works by looking in all the directories in @INC for an appropriately named file:
@INC
Foo::Bar becomes Foo/Bar.pm, using the correct directory path separator for your operating system.
Foo/Bar.pm
Iterate over @INC, ignoring any references (see "require" in "perlfunc" if you're surprised to hear that you might find references in @INC).
For each directory in @INC, append the partial path (Foo/Bar.pm), again using the correct directory path separator. If the resulting file exists, return this path.
If no file was found, return undef.
undef
I wrote this module because I couldn't find an alternative which dealt with the points listed above, and didn't pull in what seemed like too many dependencies to me.
The distribution for Module::Path includes the mpath script, which lets you get the path for a module from the command-line:
Module::Path
mpath
% mpath Module::Path
Obviously this only works where the module you're after has its own .pm file. If a file defines multiple packages, this won't work.
.pm
This also won't find any modules that are being loaded in some special way, for example using a code reference in @INC, as described in "require" in "perlfunc".
There are a number of other modules on CPAN which provide the same or similar functionality. But many of them provide a lot of other things, and/or they have a number of non-core dependencies. Or they're not as robust. The following is a list of the ones I'm currently aware of.
Provides an OO interface, with a single method filename(), which provides the same mapping as Module::Path. Uses Path::Class to ensure portable handling of directory paths.
filename()
Class which provides various ways to find a module, and can then report the version and other things beyond the path.
Another class which can give you a lot of information about a module, without having to load it.
A collection of utility functions for getting information about a module's path, and source, amongst other things.
A class which can provide information about a module, similar to Module::Info, but not as much information.
A class for finding and querying modules. This is very slow, so if you're just after the path, don't use this module.
A collection of functions for handling module names and paths.
Apps for accessing module information, which include the path.
https://github.com/neilbowers/Module-Path
Neil Bowers <neilb@cpan.org>
This software is copyright (c) 2012 by Neil Bowers <neilb@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Module::Path, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Module::Path
CPAN shell
perl -MCPAN -e shell install Module::Path
For more information on module installation, please visit the detailed CPAN module installation guide.