NAME
App::Module::Lister - List the Perl modules in @INC
SYNOPSIS
# run the .pm file
prompt> perl Lister.pm
	---OR---
# rename this file to something your webserver will treat as a
# CGI script and upload it. Run it to see the module list
prompt> cp Lister.pm lister.cgi
	... modify the shebang line if you must
prompt> ftp www.example.com
	... upload file
prompt> wget http://www.example.com/cgi-bin/lister.cgi
DESCRIPTION
This is a program to list all of the Perl modules it finds in @INC for a no-shell web hosting account. It has these explicit design goals:
Is a single file FTP upload such that it's ready to run (no archives)
Runs as a CGI script
Runs on a standard Perl 5.004 system with no non-core modules
Does not use CPAN.pm (which can't easly be configured without the shell)
If you have a shell account, you should just use CPAN.pm's autobundle feature.
You do not need to install this module. You just need the .pm file. The rest of the distribution is there to help me give it to other people and test it.
You might have to modify the shebang line (the first line in the file) to point to Perl. Your web hoster probably has instructions on what that should be. As shipped, this program uses the env trick described in perlrun. If that doesn't work for you, you'll probably see an error like:
/usr/bin/env: bad interpreter: No such file or directory
That's similar to the error you'll see if you have the wrong path to perl.
The program searches each entry in @INC individually and outputs modules as it finds them.
Subroutines
- run( FILEHANDLE )
 - 
Do the magic, sending the output to
FILEHANDLE. By default, it sends the output toSTDOUT. - generator
 - 
Returns three closures to find, report, and clear a list of modules. See their use in
run. - parse_version_safely( FILENAME )
 - 
Find the
$VERSIONinFILENAMEand return its value. The entire statement in the file must be on a single line with nothing else (just like for the PAUSE indexer). If the version is undefined, it returns the string'undef'. - eval_version( STATEMENT, SIGIL, VAR )
 - 
Used by
parse_version_safelyto evaluate the$VERSIONline and return a number.The
STATEMENTis the single statement containing the assignment to$VERSION.The
SIGILmay be either a$(for a scalar) or a*for a typeglob.The
VARis the variable identifier. - path_to_module( INC_DIR, PATH )
 - 
Turn a
PATHinto a Perl module name, ignoring the@INCdirectory specified inINC_DIR. 
TO DO
Guessing the module name from the full path name isn't perfect. If I run into directories that aren't part of the module name in one of the
@INCdirectories, this program shows the wrong thing.For example, I have in
@INCthe directory/usr/local/lib/perl5/5.8.8. Inside that directory, I expect to find something like/usr/local/lib/perl5/5.8.8/Foo/Bar.pm, which translates in the moduleFoo::Bar. If I find a directory like/usr/local/lib/perl5/5.8.8/lib/Foo/Bar.pm, where I created the extralibby hand, this program guesses the module name islib::Foo::Bar. That's not a great tragedy, but I don't have a simple way around that right now.This program finds all modules, even those installed in multiple locations. It makes no attempt to figure out which ones Perl will choose first.
SEE ALSO
The CPAN.pm module
SOURCE AVAILABILITY
This source is in GitHub:
https://github.com/briandfoy/app-module-lister
AUTHOR
brian d foy, <briandfoy@pobox.com>
The idea and some of the testing came from Adam Wohld.
Some bits stolen from mldistwatch in the PAUSE code, by Andreas König.
COPYRIGHT AND LICENSE
Copyright © 2007-2025, brian d foy <briandfoy@pobox.com>. All rights reserved.
You may redistribute this under the terms of the Artistic 2 license.