App::cpm::Resolver - resolving everything
Prepare your resolver first:
# resolver.pl package Your::Custom::Resolver { sub new { bless {}, shift; } # resolver **must** implement resolve method sub resolve { my ($self, $job) = @_; # $job = { package => "Your::Module", version => "> 1.00, < 2.00" } retrun { source => "git", uri => "git://github.com/you/Your-Module.git", ref => "develop", version => "1.52", package => "Your::Module", }; } } use App::cpm::Resolver::Cascade; use App::cpm::Resolver::MetaDB; my $cascade = App::cpm::Resolver::Cascade->new; $cascade->add(Your::Custom::Resolver->new); # resolve dist with your resolver first $cascade->add(App::cpm::Resolver::MetaDB->new); # fallback to normal resolver return $cascade
Then you can install Your::Module with cpm.
> cpm install --custom-resolver resolver.pl Your::Module
It seems that "resolving distribution names/locations via 02packages.details.txt" and "fetching distributions via cpan" are de facto standards, and a lot of cpan clients and cpan local mirror (darkpan) follow that convention (or fake that convention).
But people sometimes want more flexible cpan clients / darkpans.
For example, people want to resolve distribution names/locations via:
02packages.details.txt in remote or local
cpanmetadb
metacpan v1 download url API
your custom API (http server)
your custom file format
arbitrary db (elasticsearch, mysql, sqlite, PostgreSQL, etc)
and want to fetch distributions via:
cpan (www.cpan.org, etc)
metacapn
backpan
arbitrary http server
remote git repository (such as github.com)
remote svn repository
local tar.gz
local directory
Now cpm has not only the following resolvers
App::cpm::Resolver::MetaDB
App::cpm::Resolver::MetaCPAN
App::cpm::Resolver::O2Packages
App::cpm::Resolver::Snapshot
App::cpm::Resolver::Cascade
but also --custom-resolver option so that you can use your own resolver.
--custom-resolver
Menlo
CPAN::Common::Index
Plack::App::Cascade
App::CPANIDX
App::opan
To install App::cpm, copy and paste the appropriate command in to your terminal.
cpanm
cpanm App::cpm
CPAN shell
perl -MCPAN -e shell install App::cpm
For more information on module installation, please visit the detailed CPAN module installation guide.