NAME Carmel - CPAN Artifact Repository Manager SYNOPSIS # Run with a directory with cpanfile carmel install # Manually pull a module if you don't have it carmel inject DBI@1.633 Plack@1.0000 # list all the modules to be loaded carmel list # list all the modules in a tree carmel tree # show a location where a module is installed carmel show Plack # Runs your perl script with modules from artifacts carmel exec perl ... # Requires all your modules in cpanfile in one shot carmel exec perl -e 'use Carmel::Preload;' # Roll out the currently selected modules into ./local carmel rollout # package modules tarballs and index into ./vendor/cache carmel package # use Carmel packages inside a script (without carmel exec) perl -e 'use Carmel::Setup; ...' # prints export PATH=... etc for shell scripting carmel export # find a module in a repository carmel find DBI # find a module matching the version query carmel find Plack ">= 1.0000, < 1.1000" DESCRIPTION THIS IS EXPERIMENTAL! Carmel is yet another CPAN module manager. Unlike traditional CPAN module installer, Carmel keeps the build of your dependencies in a central repository, then select the library paths to include upon runtime. HOW IT WORKS Carmel will keep the build directory (artifacts) after a cpanm installation in a repository, which defaults to $HOME/.carmel/{version}-{archname}/builds, and your directory structure would look like: $HOME/.carmel/5.20.1-darwin-2level/builds Plack-1.0033/ blib/ arch/ lib/ URI-1.64/ blib/ arch/ lib/ URI-1.63/ blib/ arch/ lib/ Carmel scans this directory and creates the mapping of which version of any package belongs to which build directory. Given the list of modules and requirements using cpanfile, Carmel lists all the build directories and .pm files you need, and then prepend the mappings of these files in the @INC hook. For example, if you have: requires 'URI', '== 1.63'; Carmel finds URI package with $VERSION set to 1.63 in URI-1.63/blib/lib so it will let perl load URI.pm from that directory. Instead, if you have: requires 'URI'; it will find the latest that satisfies the (empty) requirement, which is in URI-1.64/blib/lib. The fact that it prefers the latest, rather than the oldest, might change in the future once a mechanism to make snapshot is introduced, since you will not like to upgrade one of the dependencies unexpectedly. You have a choice to execute a subprocess from Carmel, by using the exec sub command. If you prefer a fine grained control, you can also use env or export command to integrate with your own shell script wrapper. COMMUNITY https://github.com/miyagawa/Carmel Code repository, Wiki and Issue Tracker irc://irc.perl.org/#cpanm IRC chat room AUTHOR Tatsuhiko Miyagawa COPYRIGHT Copyright 2015- Tatsuhiko Miyagawa LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. SEE ALSO App::cpanminus Carton