CPAN
can be configured differently for each user, and can install modules to custom
areas on a system. The sample configuration below installs modules under ~/lib/perl5
, man pages under ~/share/man
and (hopefully) everything else under the home
directory. This approach also works for individual software trees required for
special applications that run as non-privileged accounts: simply adjust the
installation paths to suit the software depot in question.
Consult Life
with CPAN for more information about the Comprehensive
Perl Archive Network (CPAN). Consider also local::lib
to bootsrap custom Perl module
installation directories.
Download the sample
MyConfig.pm
, and move it to ~/.cpan/CPAN/MyConfig.pm
.
$
mkdir -p ~/.cpan/CPAN
$ mv MyConfig.pm
~/.cpan/CPAN
Customize the
MyConfig.pm
file.
HOMEDIRFIX
to
your home directory, for example /home/username
.makepl_arg
arguments. For more information on the arguments,
see ExtUtils::MakeMaker
.Check the
paths to various commands (e.g. wget
), proxy settings for
your environment, the urllist
, and the shell.
Be sure to remove the UNINST=1
option on
make_install_arg
for any non-system-wide configuration
as otherwise CPAN
will attempt to remove “shadowing” versions
of the module installed for the site perl
, leading to
error messages involving forceunlink
.
Test MyConfig.pm
for problems.
$
perl -c MyConfig.pm
MyConfig.pm syntax OK
PERL5LIB
settings to customize @INC
, if installing modules that depend on previously
installed modules. Be sure to load the changes into your shell environment
before running cpan
, or to close and reopen your
shell.Test the new configuration.
To
ensure Makefile
are being generated with the proper
paths, make
a module from the CPAN
shell, then review at the paths set in the
resulting Makefile
.
cpan>
make Text::Autoformat
…
cpan> look
Text::Autoformat
…
$ less Makefile
$ grep
/home/username Makefile
SITELIBEXP =
/home/username/lib/perl5
PREFIX = /home/username/
INSTALLPRIVLIB =
/home/username/lib/perl5
INSTALLSITELIB =
/home/username/lib/perl5
INSTALLVENDORLIB =
/home/username/lib/perl5
INSTALLARCHLIB =
/home/username/lib/perl5/darwin-thread-multi-2level
INSTALLSITEARCH =
/home/username/lib/perl5/darwin-thread-multi-2level
INSTALLVENDORARCH =
/home/username/lib/perl5/darwin-thread-multi-2level
INSTALLMAN1DIR =
/home/username/share/man/man1
INSTALLSITEMAN1DIR =
/home/username/share/man/man1
INSTALLMAN3DIR =
/home/username/share/man/man3
INSTALLSITEMAN3DIR =
/home/username/share/man/man3
$ exit
If the
Makefile
has the wrong path set for any variables,
update the makepl_arg
arguments in MyConfig.pm
to set these variables to install to the proper
custom location.
@INC
Perl must be made aware of the
custom /home/username/lib/perl5
library directory. Perl
uses the @INC
variable to hold library directories,
though this varible must not be edited directly. For more information on @INC
, consult perlvar
(overview of variable), perlrun
(command line arguments and environment
variables), or lib
(use lib
pragma). Under
a Bourne shell (such as zsh
), use the following to set
PERL5LIB
and MANPATH
environment
variables.
if [ -d $HOME/lib/perl5 ]; then
PERL5LIB=${PERL5LIB:+$PERL5LIB:}$HOME/lib/perl5
fi
MANPATH=${MANPATH:+$MANPATH:}$HOME/share/man
export
MANPATH PERL5LIB
Code running under Taint mode may require
the use lib
statement: see perlsec
for details. Other applications may include
different methods of setting custom environment setting, such as SetEnv
under Apache:
SetEnv PERL5LIB /home/username/lib/perl5:/sw/lib/perl5