Manual installation of a Perl Module
Solution 1:
Use this recipe for manually installing perl modules:
tar zxf Digest-SHA1-2.13.tar.gz
cd Digest-SHA1-2.13
perl Makefile.PL
make
make test
make install
Note that some distributions will have a Build.PL
file instead of Makefile.PL
. In that case use this recipe:
tar zxf ...
cd ...
perl Build.PL
./Build
./Build test
./Build install
(You may be able to get by with just running make install
and ./Build install
.)
If you need to alter the installation dir then use:
perl Makefile.PL INSTALL_BASE=...
or
perl Build.PL --install_base ...
depending on the kind of module.
For more info see the perldoc for ExtUtils::MakeMaker::FAQ and Module::Build
Solution 2:
There are two kinds of Perl module: pure-Perl and XS. Pure-Perl modules are written entirely in Perl, and can usually be installed just by copying the .pm
files to an appropriate directory. XS modules are written in both Perl and C (XS is processed into C code by the ExtUtils::ParseXS module) and require a C compiler to install them.
As dsolimano said, the easiest way to install Perl modules for the system Perl when you don't have root access is to use local::lib. (You could do the same things that local::lib
does yourself, but why bother?)
The reason why Digest::SHA1
works by itself but not when you're using Algorithm::CouponCode
is that the system Perl already has version 2.11 of Digest::SHA1
installed. When you use -I ../Digest-SHA1-2.13/Digest
, then use Digest::SHA1
picks up the Perl code from ../Digest-SHA1-2.13/Digest, but the shared library that would be built from the XS code is not in the corresponding location.
Solution 3:
Any reason why you can't use local::lib?
create and use a local lib/ for perl modules with PERL5LIB
It is basically a tool to help you use a private (non-systemwide) directory as your Perl library directory.
After setting it up, you could run a command like
perl -MCPAN -Mlocal::lib -e 'CPAN::install(Algorithm::CouponCode)'
and then your script would use your locally installed copy of Algorithm::CouponCode)
.