# NAME
Module::Filename - Provides an object oriented, cross platform interface for getting a module's filename
# SYNOPSIS
use Module::Filename;
my $filename=Module::Filename->new->filename("Test::More"); #isa Path::Class::File
use Module::Filename qw{module_filename};
my $filename=module_filename("Test::More"); #isa Path::Class::File
# DESCRIPTION
This module returns the filename as a [Path::Class::File](https://metacpan.org/pod/Path%3A%3AClass%3A%3AFile) object. It does not load any packages as it scans. It simply scans @INC looking for a module of the same name as the package passed.
# USAGE
use Module::Filename;
my $filename=Module::Filename->new->filename("Test::More"); #isa Path::Class::File
print "Test::More can be found at $filename\n";
# CONSTRUCTOR
## new
my $mf=Module::Filename->new();
# METHODS
## initialize
You can inherit the filename method in your package.
use base qw{Module::Filename};
sub initialize{do_something_else()};
## filename
Returns a [Path::Class::File](https://metacpan.org/pod/Path%3A%3AClass%3A%3AFile) object for the first filename that matches the module in the @INC path array.
my $filename=Module::Filename->new->filename("Test::More"); #isa Path::Class::File
print "Filename: $filename\n";
# FUNCTIONS
## module\_filename
Returns a [Path::Class::File](https://metacpan.org/pod/Path%3A%3AClass%3A%3AFile) object for the first filename that matches the module in the @INC path array.
my $filname=module_filename("Test::More"); #isa Path::Class::File
print "Filename: $filename\n";
# LIMITATIONS
The algorithm does not scan inside module files for provided packages.
# BUGS
Submit to RT and email author.
# AUTHOR
Michael R. Davis
# COPYRIGHT
This program is free software licensed under the...
The BSD License
The full text of the license can be found in the LICENSE file included with this module.
# SEE ALSO
Module::Filename predates [Module::Path](https://metacpan.org/pod/Module%3A%3APath) by almost 4 years but it appears more people prefer [Module::Path](https://metacpan.org/pod/Module%3A%3APath) over Module::Filename as it does not have the dependency on [Path::Class](https://metacpan.org/pod/Path%3A%3AClass). After the reviews on [http://neilb.org/reviews/module-path.html](http://neilb.org/reviews/module-path.html). I added the functional API to Module::Filename. So, your decision is simply an object/non-object decision. The operations with the file system that both packages perform outweigh the performance of the object creation in Module::Filename. So, any performance penalty should not be measurable. Since Module::Filename does not need three extra file test operations that Module::Path 0.18 performs on each @INC directory, Module::Filename may actually be faster than [Module::Path](https://metacpan.org/pod/Module%3A%3APath) for most applications.
## Similar Capabilities
[Module::Path](https://metacpan.org/pod/Module%3A%3APath), [perlvar](https://metacpan.org/pod/perlvar) %INC, [pmpath](https://metacpan.org/pod/pmpath), [Module::Info](https://metacpan.org/pod/Module%3A%3AInfo) constructor=>new\_from\_module, method=>file, [Module::InstalledVersion](https://metacpan.org/pod/Module%3A%3AInstalledVersion) property=>"dir", [Module::Locate](https://metacpan.org/pod/Module%3A%3ALocate) method=>locate, [Module::Util](https://metacpan.org/pod/Module%3A%3AUtil) method=>find\_installed, ["module\_notional\_filename" in Module::Runtime](https://metacpan.org/pod/Module%3A%3ARuntime#module_notional_filename)
## Comparison
CPAN modules for getting a module's path [http://neilb.org/reviews/module-path.html](http://neilb.org/reviews/module-path.html)