Perl on Pegasus =============== Users are free to compile and install Perl modules in their own home directories. Most Perl modules can be installed into a local library with **CPAN** and **cpanminus**. If you need a specific version, we suggest specifying the version or downloading, extracting, and installing using Makefile.PL. Configuring a Local Library --------------------------- Local libraries can be configured during initial CPAN configuration and by editing shell configuration files after installing the ``local::lib`` module. By default, ``local::lib`` installs here: ``~/perl5``. Configure with CPAN: ~~~~~~~~~~~~~~~~~~~~ During initial CPAN configuration, answer ``yes`` to automatic configuration, ``local::lib`` to approach, and ``yes`` to append locations to your shell profile (Bash). Quit CPAN and source your shell configuration before running ``cpan`` again. :: [username@pegasus ~]$ cpan ... Would you like to configure as much as possible automatically? [yes] yes ... Warning: You do not have write permission for Perl library directories. ... What approach do you want? (Choose 'local::lib', 'sudo' or 'manual') [local::lib] local::lib ... local::lib is installed. You must now add the following environment variables to your shell configuration files (or registry, if you are on Windows) and then restart your command line shell and CPAN before installing modules: PATH="/nethome/username/perl5/bin${PATH+:}${PATH}"; export PATH; PERL5LIB="/nethome/username/perl5/lib/perl5${PERL5LIB+:}${PERL5LIB}"; export PERL5LIB; PERL_LOCAL_LIB_ROOT="/nethome/username/perl5${PERL_LOCAL_LIB_ROOT+:}${PERL_LOCAL_LIB_ROOT}"; export PERL_LOCAL_LIB_ROOT; PERL_MB_OPT="--install_base \"/nethome/username/perl5\""; export PERL_MB_OPT; PERL_MM_OPT="INSTALL_BASE=/nethome/username/perl5"; export PERL_MM_OPT; Would you like me to append that to /nethome/username/.bashrc now? [yes] yes ... cpan[1]> quit ... *** Remember to restart your shell before running cpan again *** [username@pegasus ~]$ source ~/.bashrc Configure after ``local::lib`` module installation: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If CPAN has already been configured, ensure ``local::lib`` is installed and the necessary environment variables have been added to your shell configuration files. Source your shell configuration before running ``cpan`` again. :: [username@pegasus ~]$ cpan local::lib Loading internal null logger. Install Log::Log4perl for logging messages ... local::lib is up to date (2.000018). [username@pegasus ~]$ echo 'eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"' >> perl -~/.bashrc [username@pegasus ~]$ source ~/.bashrc ... Update CPAN: ~~~~~~~~~~~~ Update CPAN, if necessary. This can be done from the Pegasus prompt or the CPAN prompt. :: [username@pegasus ~]$ cpan CPAN or cpan[1]> install CPAN ... Appending installation info to /nethome/username/perl5/lib/perl5/x86_64-linux-thread-multi/perllocal.pod ANDK/CPAN-2.10.tar.gz /usr/bin/make install -- OK cpan[2]> reload cpan Confirm local library location: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Look for ``~/perl5/...`` directories in ``$PATH`` and ``@INC``. :: [username@pegasus ~]$ echo $PATH /share/opt/perl/5.18.1/bin:/nethome/username/perl5/bin:/share/lsf/9.1/linux2.6-glibc2.3-x86_64/etc:... [username@pegasus ~]$ perl -e 'print "@INC"' /nethome/username/perl5/lib/perl5/5.18.1/x86_64-linux-thread-multi /nethome/username/perl5/lib/perl5/5.18.1 ... Installing Perl Modules ^^^^^^^^^^^^^^^^^^^^^^^ Once a local library has been installed and configured, CPAN modules will install to the local directory (default ``~/perl5``). The format for installing Perl modules with CPAN or cpanminus is ``Module``::``Name``. Install with CPAN: ~~~~~~~~~~~~~~~~~~ Install from the Pegasus prompt or the CPAN prompt. Run ``cpan -h`` or ``perldoc cpan`` for more options. :: [username@pegasus ~]$ cpan App::cpanminus Loading internal null logger. Install Log::Log4perl for logging messages Reading '/nethome/username/.cpan/Metadata' ... or [username@pegasus ~]$ cpan cpan[1]> install App::cpanminus Reading '/nethome/username/.cpan/Metadata' ... To install a specific module version with ``cpan``, provide the full distribution path. :: [username@pegasus ~]$ cpan MIYAGAWA/App-cpanminus-1.7040.tar.gz Install with cpanminus: ~~~~~~~~~~~~~~~~~~~~~~~ cpanminus is a CPAN module installation tool that will use your local library, if configured. Install from the Pegasus prompt with ``cpanm Module``::``Name``. Run ``cpanm -h`` or ``perldoc cpanm`` for more options. :: [username@pegasus ~]$ cpanm IO::All --> Working on IO::All Fetching http://www.cpan.org/authors/id/I/IN/INGY/IO-All-0.86.tar.gz ... OK Configuring IO-All-0.86 ... OK Building and testing IO-All-0.86 ... OK Successfully installed IO-All-0.86 1 distribution installed To install a specific module version with ``cpanm``, provide either the full distribution path, the URL, or the path to a local tarball. :: [username@pegasus ~]$ cpanm MIYAGAWA/App-cpanminus-1.7040.tar.gz or [username@pegasus ~]$ cpanm http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7040.tar.gz or [username@pegasus ~]$ cpanm ~/App-cpanminus-1.7040.tar.gz Deactivating Local Library Environment Variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To remove all directories added to search paths by ``local::lib`` in the current shell’s environment, use the ``--deactivate-all`` flag. Note that environment variables will be re-enabled in any sub-shells when using ``.bashrc`` to initialize local::lib. :: [username@pegasus ~]$ eval $(perl -Mlocal::lib=--deactivate-all) [username@pegasus ~]$ echo $PATH /share/opt/perl/5.18.1/bin:... [username@pegasus ~]$ perl -e 'print "@INC"' /share/opt/perl/5.18.1/lib/site_perl/5.18.1/x86_64-linux-thread-multi ... Source your shell configuration to re-enable the local library: :: [username@pegasus ~]$ source ~/.bashrc ... [username@pegasus ~]$ echo $PATH /nethome/username/perl5/bin:/share/lsf/9.1/linux2.6-glibc2.3-x86_64/etc:... [username@pegasus ~]$ perl -e 'print "@INC"' /nethome/username/perl5/lib/perl5/5.18.1/x86_64-linux-thread-multi /nethome/username/perl5/lib/perl5/5.18.1 /nethome/username/perl5/lib/perl5/x86_64-linux-thread-multi /nethome/username/perl5/lib/perl5 ...