The main step in both sets of instructions involves local::lib module
AFAIK, CPAN logic is contained in Perl module (CPAN.pm) which means you can also easily install the newer one in your local directory as you would with any other Perl module.
Also, once you install your modules in non-standard location, check out these two questions on loading libraries from non-standard locations (some of the info is already available in the link above):
This assumes your profile is named .profile, you may need to change that to be .bash_profile, .bashrc, etc. After that you can install modules by saying
cpanm Module::Name
and simply use them the same way you would if the were installed in the root directories.
What follows is a brief explanation of what the commands above do.
wget -O- http://cpanmin.us fetches the latest version of cpanm and prints it to STDOUT which is then piped to perl - -l ~/perl5 App::cpanminus local::lib. The first - tells perl to expect the program to come in on STDIN, this makes perl run the version of cpanm we just downloaded. perl passes the rest of the arguments to cpanm. The cpanm1 argument tells cpanm where to install Perl modules, and the other two arguments are two modules to install. cpanm3]cpanm6 is the package that installs cpanm. cpanm7 is a helper module that manages the environment variables needed to run modules in local directory.
After those modules are installed we run
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
to set the environment variables needed to use the local modules and then
If you want to be able to read man pages for the cpanminus-installed modules as well, you should also make sure the correct subdirectory of the chosen library path is in MANPATH. So the above solution showing the installation process of cpanm needs the following additional command:
we have been using the following func during the last 6 months on over 20 deployments successful automated deployments to aws ... called from the main provisioning as follows, which is basically just a copy paste of the answers above, but in a single re-usable bash script: