Perl: Finding A Perl Module’s Path
@INC and %INC provide data related to modules. @INC is an array of the paths for which Perl will locate a module’s source and load it into the program. %INC is a hash and contains the module name as a key, and the file it was loaded from as the value. It is worth noting that the module name is written in file-system style (This/That.pm) style as opposed to package-name style (This::That).
Finding the path that a given module is loaded from is as simple as loading the module and asking for the contains of %INC:
$ perl -MList::Util -e’print $_ . ” => ” . $INC{$_} . “n” for keys %INC’
-MList::Util translates into a use List::Util for the Perl one liner. If you wanted to know the path to LWP instead, you could use -MLWP just as easily.
Running the above command we get:
$ perl -MList::Util -e’print $_ . ” => ” . $INC{$_} . “n” for keys %INC’
XSLoader.pm => /usr/lib/perl/5.10/XSLoader.pm
warnings.pm => /usr/share/perl/5.10/warnings.pm
warnings/register.pm => /usr/share/perl/5.10/warnings/register.pm
Exporter.pm => /usr/share/perl/5.10/Exporter.pm
vars.pm => /usr/share/perl/5.10/vars.pm
strict.pm => /usr/share/perl/5.10/strict.pm
List/Util.pm => /usr/lib/perl/5.10/List/Util.pm
We now know that the file which is loaded for List::Util is /usr/lib/perl/5.10/List/Util.pm. If the amount of information in %INC is too much for you, you could instead ask for only the path to the Perl module which you want to know:
$ perl -MList::Util -e’print $INC{“List/Util.pm”} . “n”‘
/usr/lib/perl/5.10/List/Util.pm
We can of course write a tiny script to make this even more trivial.
#!/usr/bin/perl
use warnings;
use strict;
for my $module ( @ARGV ) {
my $package = $module;
# From This::That to This/That.pm
s/::///g, s/$/.pm/ for $module;
if ( require $module ) {
print $package . ” => ” . $INC{$module} . “n”;
}
}
And then pass the modules we want to know about to it:
$ ./fpm.pl List::Util DBI
List::Util => /usr/lib/perl/5.10/List/Util.pm
DBI => /usr/lib/perl5/DBI.pm
Using Perldoc To Find Perl Module’s Paths
Knowing how to find the path with Perl itself is immensely useful, though, a slightly simpler method is to use perldoc if it is installed.
$ perldoc -lm List::Util
/usr/lib/perl/5.10/List/Util.pm
The -l switch instructs perldoc to display the path for the file, instead of the POD itself. The -m switch instructs perldoc to display the entire file for a given module, even if it doesn’t have a POD.
The -m switch is important, as if the module does not have a POD associated with it, failing to use the -m switch is the difference between getting the path for the file and being told there is no documentation found.
While there are a number of methods to find this information, these are among the most simple and least error prone methods to identify the path to a Perl module you’re using. What’s your recommended method?
By: Symkat
IIS: IIS7 File Upload Size Limits
By default IIS 7 only allows the uploading of up to 30MB files.
To increase this do the following:
Open IIS 7 SnapIn
Select the website you want enable to accept large file uploads.
In the main window double click ‘Request filtering’
once the window is opened you may see on top a list of tabs eg: file name extensions, rules, hidden segments and so on…
regardless the tab you select, in the main window rightclick and select “Edit Feature Settings” and modify the “Maximum allowed content length (bytes)”
Now you can upload files larger than 30 MB
By AgoMago