CPAN and Dependency Management

24.1 Installing Modules

cpanm Moo                          # cpanminus: fast, zero-config (recommended)
cpanm --installdeps .              # install dependencies from cpanfile/Makefile.PL
cpanm -n Mojolicious               # skip tests (faster, riskier)
cpanm --local-lib=~/perl5 Module   # install to a user directory
cpan Module                        # the classic CPAN shell
sudo apt install libmoo-perl       # OS packages (system Perl)

24.2 local::lib and Carton

cpanm local::lib
eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"     # use ~/perl5 for user modules

# cpanfile: declare dependencies
cat > cpanfile <<'EOF'
requires 'perl', '5.036';
requires 'Mojolicious', '>= 9.0';
requires 'DBI';
requires 'DBD::Pg';
on 'test' => sub {
    requires 'Test2::V0';
};
EOF

carton install                     # install into ./local and write cpanfile.snapshot (lockfile)
carton exec perl app.pl            # run with locked dependencies
carton bundle                      # vendor the tarballs for offline deploys
# Alternatives: Carmel, cpm (fast parallel installer: cpm install -g)

24.3 Finding Good Modules

MetaCPAN (metacpan.org): search, docs, reviews, "river" position (how many depend on it), test results (CPAN Testers), and the source repository.

Task::Kensho: a curated list of recommended modern modules.

Prefer actively maintained modules with good test coverage and many reverse dependencies.