Last Updated: January 21, 2000
Installing Perl5 modules locally
Normally, the perl5 module installation procedure includes commands something
like these:
The first command,% perl5 Makefile.PL % make % make test % make install
perl5 Makefile.PL, directs perl5 to create a makefile
for the new module you are installing. When installing a perl5 module
locally you must designate on the command line the home directory of
your perl5 installation. That information is used by perl5 to create the
makefile. Substitute the following command for
perl5
Makefile.PL:
The value usernamea above should be replaced with the username of your Virtual Server. So the complete installation process is:% perl5 Makefile.PL PREFIX=/usr/home/usernamea/usr/local
For older modules it may be necessary to designate several other variables on the command line during the module installation:% perl5 Makefile.PL PREFIX=/usr/home/usernamea/usr/local % make % make test % make install
% perl5 Makefile.PL PREFIX=/usr/home/usernamea/usr/local \ INSTALLPRIVLIB=/usr/home/usernamea/usr/local/lib/perl5 \ INSTALLSCRIPT=/usr/home/usernamea/usr/local/bin \ INSTALLSITELIB=/usr/home/usernamea/usr/local/lib/perl5/site_perl \ INSTALLBIN=/usr/home/usernamea/usr/local/bin \ INSTALLMAN1DIR=/usr/home/usernamea/usr/local/lib/perl5/man \ INSTALLMAN3DIR=/usr/home/usernamea/usr/local/lib/perl5/man/man3To save yourself some typing you can create a file and put these variable assignments above in the file (filenamea) something like this:
PREFIX=/usr/home/usernamea/usr/local \ INSTALLPRIVLIB=/usr/home/usernamea/usr/local/lib/perl5 \ INSTALLSCRIPT=/usr/home/usernamea/usr/local/bin \ INSTALLSITELIB=/usr/home/usernamea/usr/local/lib/perl5/site_perl \ INSTALLBIN=/usr/home/usernamea/usr/local/bin \ INSTALLMAN1DIR=/usr/home/usernamea/usr/local/lib/perl5/man \ INSTALLMAN3DIR=/usr/home/usernamea/usr/local/lib/perl5/man/man3Then, each time you install a perl5 module you can use the following syntax:
You also can have a few different local modules installation procedures, for example one for production perl and another for development:% perl5 Makefile.PL `cat filenamea` % make % make test % make install
or% perl5 Makefile.PL `cat filenamea.production`
% perl5 Makefile.PL `cat filenamea.development`
Making scripts find the modules you have
installed
When you install perl5 on your Virtual Server, all pre-installed modules are
installed into these 4 directories (depending on which version of perl5 you are
installing):
These 4 directories are already preset in the perl5's @INC array. That array contains the paths that perl5 searches in order to find modules. If you install perl5 modules locally as described above, you will need to append these two directories, which are local to your Virtual Server, to the @INC array:/usr/local/lib/perl5 /usr/local/lib/perl5/i386-bsdos/5.00X /usr/local/lib/perl5/site_perl/i386-bsdos /usr/local/lib/perl5/site_perl
The architecture specific directories are being searched by perl automatically Each time you want to use modules in that path you should add the following line to your scripts:/usr/home/username/usr/local/lib/perl5 /usr/home/username/usr/local/lib/perl5/site_perl
use lib qw(/usr/home/usernamea/usr/local/lib/perl5
/usr/home/usernamea/usr/local/lib/perl5/site_perl);
You don't have to put it into a BEGIN block; the lib.pm module takes care of
that for you. It also adds the architecture specific directories. You also can use a BEGIN block to include your installed modules:
BEGIN { unshift @INC, qw(/usr/home/usernamea/usr/local/lib/perl5 /usr/home/usernamea/usr/local/lib/perl5/site_perl); }However, the
use
lib construct
seems to be cleaner and the unshift @INC construct doesn't automatically add the
architecture specific directories to the @INC array. Installing new modules that require locally installed
modules
Okay, imagine that you have installed module A in
/usr/home/username/usr/local/lib/perl5. Now you
want to install a module B that demands module A to be already installed. You
know that you have installed the A module, but amazingly B can't locate it.
Why? Because when you try to install the module B it doesn't know that you have
module A installed locally. Perl5 searches the basic 4 directories as defined
by default in the @INC array. But your local directories aren't listed
there.
The solution is simple. The PERL5LIB environment variable does the
same job in the shell as use lib does in your script. So if you use csh/tcsh
type the following at the command line:
% setenv PERL5LIB \ /usr/home/username/usr/local/lib/perl5:/usr/home/username/usr/local/lib/perl5/site_perlCheck the man page of your favorite shell how to set the environment variables if you use a shell different from csh/tcsh. Put this
setenv statement
into .login or another file that is being sourced each time you login
into your account and you will not have to worry to remember setting it each
time you login. Module installation using
CPAN.pm
An alternative to manually installing perl5 modules is the CPAN.pm module (see
www.perl.com/CPAN/) which automates
module download and installation. If you have perl5.004 or higher installed you
have it bundled with the distribution. If not, you can download it from CPAN.
When you initially run the
% perl5 -MCPAN -e shell
command, it will ask you a few questions. You can use all the defaults, except for this one
Parameters for the 'perl Makefile.PL' command? [] PREFIX=/usr/home/username/usr/local
and this one:
Parameters for the 'make install' command? [] INSTALLMAN3DIR=/usr/home/username/usr/local/lib/perl5/man/man3
When it asks for your favorite CPAN site, try this:
Please enter it here: ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
After configuration of the module is complete, you will see a
a prompt. Then
you can try installing modules. To install the CGI module, do this:
It will fetch the latest CGI module, unpack it, make it, test it and install it into your local area or the directory you specified as the PREFIX directory. The command:install CGI
will return the list of modules that match that pattern.i /CGI/
The CPAN.pm module
has more functionality, like checking for the latest modules, for example. Just
run perldoc
CPAN to read the
man page.
The content on this page was adapted from Answers to some Bothering Questions (Perl + Perl/CGI Mini FAQ) Perl/CGI Mini FAQ) and was orignally authored by Bekman Stas.
Copyright © 1996-2000 Last Modified: 21 January 2000. A Little Technology Shoppe, LLC. All rights reserved. All brand names and product names used on these web pages are trademarks, or trade names of their respective holders.