App::cpm::Tutorial − How to use cpm
$ cpm install Module
cpm is yet another CPAN client (like cpan, cpanp, and cpanm), which is fast!
From CPAN:
$ curl −fsSL https://raw.githubusercontent.com/skaji/cpm/main/cpm | perl − install −g App::cpm
Or, download a self−contained cpm:
$ curl
−fsSL
https://raw.githubusercontent.com/skaji/cpm/main/cpm >
cpm
$ chmod +x cpm
$ ./cpm −−version
$ cpm install Plack
This command installs Plack into "./local", and you can use it by
$ perl −I$PWD/local/lib/perl5 −MPlack −E 'say Plack−>VERSION'
If you want to install modules into current INC instead of "./local", then use "−−global/−g" option.
$ cpm install −−global Plack
By default, cpm outputs only "DONE install Module" things. If you want more verbose messages, use "−−verbose/−v" option.
$ cpm install −−verbose Plack
cpm can handle version range notation like cpanm. Let's see some examples.
$ cpm install
Plack˜'> 1.000, <= 2.000'
$ cpm install Plack˜'== 1.0030'
$ cpm install [email protected] # this is an alias of ˜'==
1.0030'
cpm can install dev releases (TRIAL releases).
$ cpm install
Moose@dev
# if you prefer dev releases for not only Moose,
# but also its dependencies, then use global
−−dev option
$ cpm install −−dev Moose
And cpm can install modules from git repositories directly.
$ cpm install https://github.com/skaji/Carl.git
If you omit
arguments, and there exists one of
cpm.yml <https://metacpan.org/pod/Module::cpmfile>
cpanfile
<https://metacpan.org/dist/Module-CPANfile/view/lib/cpanfile.pod>
META.json <https://metacpan.org/pod/CPAN::Meta::Spec>
(with
dynamic_config false)
"Build.PL"
"Makefile.PL"
in the current directory, then cpm loads modules from the file, and install them
$ cat cpanfile
requires 'Moose', '2.000';
requires 'Plack', '> 1.000, <= 2.000';
$ cpm install
If you have "cpanfile.snapshot", then cpm tries to resolve distribution names from it
$ cpm install
−v
30186 DONE resolve (0.001sec) Plack −>
Plack−1.0030 (from Snapshot)
...
cpm supports dist/url/mirror syntax in cpanfile just like cpanminus:
requires
'Path::Class', 0.26,
dist =>
"KWILLIAMS/Path−Class−0.26.tar.gz";
# use dist + mirror
requires 'Cookie::Baker',
dist =>
"KAZEBURO/Cookie−Baker−0.08.tar.gz",
mirror => "http://cpan.cpantesters.org/";
# use the full URL
requires 'Try::Tiny', 0.28,
url =>
"http://backpan.perl.org/authors/id/E/ET/ETHER/Try−Tiny−0.28.tar.gz";
cpm also supports git syntax in cpanfile:
requires 'Carl',
git => 'https://github.com/skaji/Carl.git';
requires 'App::cpm', git =>
'https://login:[email protected]/skaji/cpm.git';
requires 'Perl::PrereqDistributionGatherer',
git =>
'https://github.com/skaji/Perl−PrereqDistributionGatherer',
ref => '3850305'; # ref can be revision/branch/tag
Please note that to support git syntax in cpanfile wholly, there are several TODOs.
There are CPAN modules that create darkpans (minicpan, CPAN mirror) such as CPAN::Mini, OrePAN2, Pinto.
Such darkpans store distribution tarballs in
DARKPAN/authors/id/A/AU/AUTHOR/Module−0.01.tar.gz
and create the de facto standard index file "02packages.details.txt.gz" in
DARKPAN/modules/02packages.details.txt.gz
If you want to use cpm against such darkpans, change the cpm resolver by "−−resolver/−r" option:
$ cpm install
−−resolver 02packages,http://example.com/darkpan
Module
$ cpm install −−resolver
02packages,file::///path/to/darkpan Module
If you host your own metadb for your own darkpan, you can use it too:
$ cpm install \
−−resolver
metadb,http://example.com/darkmetadb,http://example.com/darkpan
\
Module