CPAN Dependency
    Heaven
  Jon	
  Allen	
  (JJ)	
  –	
  jj@opusvl.com	
  
www.opusvl.com!
CPAN
    www.opusvl.com!
perl myscript.pl	
Can't locate SomeModule.pm in
 @INC (@INC contains: /Users/jj/
 perl/perl-5.14.1/lib/site_perl/
 5.14.1/darwin-2level /Users/jj/
 perl/perl-5.14.1/lib/site_perl/
 5.14.1 /Users/jj/perl/
 perl-5.14.1/lib/5.14.1/
 darwin-2level /Users/jj/perl/
 perl-5.14.1/lib/5.14.1 .) ...	

                         www.opusvl.com!
perl myscript.pl	
Can't locate OtherModule.pm in
 @INC (@INC contains: /Users/jj/
 perl/perl-5.14.1/lib/site_perl/
 5.14.1/darwin-2level /Users/jj/
 perl/perl-5.14.1/lib/site_perl/
 5.14.1 /Users/jj/perl/
 perl-5.14.1/lib/5.14.1/
 darwin-2level /Users/jj/perl/
 perl-5.14.1/lib/5.14.1 .) ...	

                         www.opusvl.com!
CPAN
Dependency
  Hell
          www.opusvl.com!
www.opusvl.com!
solved
problem?
        www.opusvl.com!
cpanm"
local::lib
          www.opusvl.com!
bootstraps

         www.opusvl.com!
curl -L"
http://cpanmin.us |"
perl - --self-upgrade

                www.opusvl.com!
www.opusvl.com!
DarkPAN

       www.opusvl.com!
DarkPAN

       www.opusvl.com!
DarkPAN

       www.opusvl.com!
DarkPAN

       www.opusvl.com!
DarkPAN

       www.opusvl.com!
all your code
not on CPAN
          www.opusvl.com!
rpm?"
deb?
        www.opusvl.com!
token Mac user

           www.opusvl.com!
token Windows
     user
          www.opusvl.com!
not cross-
 platform
         www.opusvl.com!
use CPAN
packaging
        www.opusvl.com!
build your own
     CPAN
           www.opusvl.com!
CPAN::Mini

         www.opusvl.com!
CPAN::Mini::Inject

              www.opusvl.com!
can be tricky "
   to use
            www.opusvl.com!
build your own
    PAUSE
           www.opusvl.com!
CPAN::Mini::"
Inject::REST
          www.opusvl.com!
REST API for
CPAN::Mini::Inject

              www.opusvl.com!
inject modules
    remotely
           www.opusvl.com!
supports
authentication
           www.opusvl.com!
enforces
 version
changes
       www.opusvl.com!
client?

           www.opusvl.com!
CPAN::Mini::"
Inject::REST::"
    Client
            www.opusvl.com!
command-line
   app
         www.opusvl.com!
workflow

       www.opusvl.com!
build CPAN
 package
        www.opusvl.com!
perl Makefile.PL"
     make"
   make dist
            www.opusvl.com!
upload to your
    CPAN
           www.opusvl.com!
mcpani-client"
        add "
 --host cpan.local"
MyModule-0.1.tar.gz
               www.opusvl.com!
install

           www.opusvl.com!
cpanm --mirror "
http://cpan.local "
  --mirror-only
   My::Module
               www.opusvl.com!
easily mix local
  and CPAN
dependencies
            www.opusvl.com!
distribution

           www.opusvl.com!
Elaine’s Law

          www.opusvl.com!
“Just make it
fucking easy to
    install!”
           www.opusvl.com!
App::cpackage

          www.opusvl.com!
creates install
packages for
Perl modules
            www.opusvl.com!
self-contained
(dependencies
   included)
           www.opusvl.com!
very simple

          www.opusvl.com!
someone else
 did the hard
    work!
          www.opusvl.com!
www.opusvl.com!
thin wrapper
   around
 cpanminus
          www.opusvl.com!
analyses
dependencies
          www.opusvl.com!
downloads
dependencies
          www.opusvl.com!
writes install.pl
     script
             www.opusvl.com!
cpanm
App::cpackage
          www.opusvl.com!
cpackage
Module::Name
         www.opusvl.com!
cpackage "
     --mirror "
http://cpan.local "
  --mirror-only
   My::Module
               www.opusvl.com!
./packages/…"
  ./bin/cpanm"
    ./install.pl
             www.opusvl.com!
perl install.pl

             www.opusvl.com!
perl install.pl"
  --sudo
             www.opusvl.com!
no internet
 required
          www.opusvl.com!
no CPAN client
   required
           www.opusvl.com!
self-contained
    installer
           www.opusvl.com!
CPAN
Dependency
Heaven
        www.opusvl.com!
done.

         www.opusvl.com!
done. :-)

         www.opusvl.com!
www.opusvl.com!

CPAN Dependency Heaven