System setup for modern perl projects

Some helpful tips in making your perl projects more portable.

Installing perl

Don't use the system perl installed with your operating system, instead the latest stable perl via plenv:

Once installed, create a .perl-version in the root of your project containing just the version number of the perl you require, for example:

echo '5.22.0' > .perl-version

Then install that version, as follows:

plenv install 5.22.0

Installing modules


The standard cpan command is fine, but does use a fair amount of memory, this can be a problem if running from small virtual machines. I recommend that cpanm is used instead for its simplicity.

This can be installed in one command from plenv as follows (after a perl version has been installed):

plenv install-cpanm

This should only be used to install the Carton module mentioned below as any modules installed with cpanm will be installed globally to the running perl version.


Use Carton for application dependencies, it also ensures that the same version of modules are installed consistently with its snapshot feature. Modules installed using this tool will be installed in a directory called local inside the correct project, so will not be available globally. To remove all the installed modules the local directory can simply be deleted.

To install:

cpanm Carton

Create an example dependency list:

echo "requires 'Acme::Time::Baby';" >> cpanfile

Install modules listed in cpanfile:

carton install


Link to meta::cpan rather than CPAN as module pages on meta::cpan do not use the module version, so less chance of broken links in the future.


To find the dependencies that carton has installed please use the following at the top of your scripts:

use FindBin qw/$Bin/;
use local::lib "$Bin/local";

You may also wish to use the following line to find your project libraries:

use lib 'lib';

Last updated: 18/10/2020