CPAN vnĂștornosti
Jozef Kutej
folder tree full of archives
mirror(s) && search && pause
tree
- /authors/01mailrc.txt.gz
- /authors/id/A/AB/ABCDE/abc.tgz
- /modules/02packages.details.txt.gz
- /modules/03modlist.data.gz
- /modules/06perms.txt.gz
from author to consumer
you
- pause.perl.org
- pause indexer
- mirrors
consumers
- search.cpan.org
- smoke testers
- distribution packages
- file-systems
cpan -i App::whichpm
- refresh $HOME/.cpan/sources/modules/02packages.details.txt.gz
- resolve dist_name and compare versions
- wget $MIRROR/authors/J/JK/JKUTEJ/App-whichpm-0.04.tar.gz
- tar xvzf App-whichpm-0.04.tar.gz
- perl Build.PL # (Makefile.PL)
- # install missing dependencies
- ./Build && ./Build test && ./Build install
- (perl Makefile.PL && make && make test && make install)
freedom
- create archive like you want
- upload it (anything)
- put modules anywhere
- skip any files
- do anything within the Makefile.PL and Build.PL steps
common archive structure
- lib/
- script/ (bin/)
- examples/
- t/
- META.yml
- MANIFEST (MANIFEST.SKIP)
- Makefile.PL || Build.PL
- Changes + README + LICENSE
What's so cool?
- works for 15y already
- hosting
- documentation browser
- tested on X architectures
- bug tracking
- handles the dependecies
- this allows to break down the problem
Interesting modules
- CPAN::Mini + CPAN::Mini::Inject
- CPAN::Mini::Webserver
- Dist::Zilla
- MakeMaker::ExtUtils + Module::Build + Module::Install
- CPAN + CPANPLUS + App::cpanminus
- local::lib
- App::perlbrew
CPAN::Mini::Inject
mcpani --authorid LOCAL --add --discover-packages --file SOME.tag.gz