CPAN Training
Upcoming SlideShare
Loading in...5

CPAN Training



A not so short introduction to using the CPAN

A not so short introduction to using the CPAN



Total Views
Views on SlideShare
Embed Views



2 Embeds 18 14 4



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

CPAN Training CPAN Training Presentation Transcript

  • Introduction to CPAN Living off other people’s code
  • Nitpicking • “Perl” is the language specification • and the noun (“the Perl community”, “a Perl program”) • and the distribution (“the Perl tar ball”) • “perl” is a compiler implementing the language specification (currently, Perl 5) • There is no “PERL”
  • Running Perl • Compiler • Tools • Standard library • CPAN • and its configuration View slide
  • Running Perl Compiler • the “perl” bit • jit compiler • configuration assembled at build time, most (all?) of it can be overridden at runtime • namely, the library path to use View slide
  • Running Perl Tools • documentation • header extraction • module jump-starters • debugger • profiler
  • Running Perl Standard Library • modules distributed with Perl • Module::CoreList • 602 modules as of 5.8.8
  • Running Perl Local build • Perl pre-installed everywhere • vendor may overwrite your modifications • you may break stuff • always use a local package
  • Running Perl Local build • Compile: sh Configure -de -Dusethreads make && make test && make install (cd /usr/include && /usr/local/ bin/h2ph *.h sys/*.h) • uses /usr/local by default • good enough most of the times
  • Running Perl Local build • Common options: • -Dcc=gcc • -Dprefix=/opt/builds/perl • -Dlocincpth=”/foo/bar/include” • -Dloclibpth=”/foo/bar/lib”
  • Running Perl Local build •Module lookup paths: lib/perl5 /5.8.8 /darwin-thread-multi /site_perl
  • Running Perl CPAN • Comprehensive Perl Archive Network • Source code repository for everything Perl • Modules, but also... • Perl itself • Several tools/programs written in Perl
  • Why CPAN • laziness • re-inventing the wheel (not) • code reuse • tested and tried • around 250 mirrors worldwide • approximately 13000 modules • lots of crap...
  • How to use CPAN • Manually • There’s a module for it perl -MCPAN -e shell • There’s a script for it cpan
  • CPAN manual usage • Search for a module • • Search for its dependencies • • Start with dependencies and install one by one • Tedious and time-consuming (e.g., Catalyst depends on hundreds of modules)
  • cpandeps: version
  • CPAN manual usage (continued) • Organization: authors modules by-author by-category by-module ports src scripts doc
  • CPAN manual usage (continued) •Procedure: tar zxf Sample-Module-1.0.tar.gz cd Sample-Module-1.0 perl Makefile.PL make make test make install
  • The CPAN module • Lots of built-in facilities • search • automatic installation of dependencies • look inside a distribution’s tar ball • highly configurable • You can use it in your programs (have a look at the source for cpandeps)
  • The CPAN module (continued) •Usage: perl -MCPAN -e shell i Sample::Module i /ample/i look Sample::Module install Sample::Module force install Sample::Module (!!!)
  • CPAN Configuration • in $PERL5LIB/CPAN/ • can be hand-edited or... • using o conf in the CPAN shell • it’s just a Perl module
  • CPAN Configuration (continued) • Location of several utilities CPAN uses ftp, gpg, gzip, lynx, make, ncftp, pager, tar, unzip • Parameters for some of these e.g., make_arg, ftp_passive
  • CPAN Configuration (continued) • CPAN parameters auto_commit, build_dir, cpan_home, histfile, prerequisites, scan_cache • build parameters makepl_arg • other
  • CPAN Configuration (continued) • the urllist lists the CPAN mirrors we’ll use • kept in a hash, %CPAN::Config • the configuration is itself Perl code • override system-wide parameters via
  • The CPAN module (continued) •More usage: perl -MCPAN -e ‘install A::Module’ o conf o conf http_proxy http://proxy:port/ o conf commit o conf init /REGEXP/ $PERL5LIB/CPAN/ failed test
  • The cpan script • $PERL5BIN/cpan cpan Some::Module cpan .
  • Mirroring CPAN • A full mirror is around 7gb • CPAN::Mini and minicpan • only the newest version of every module • ~800mb
  • More usage • Passing arguments to perl Makefile.PL • Finding outdated modules • Adding to $PERL5LIB • Maintaining your own $PERL5LIB • Smart urllist
  • Passing arguments to perl • no standard • remember Makefile.PL is a Perl program :) • and there’s usually a README file or similar :) • usually you’ll be able do define environment variables CC=gcc perl CC=gcc cpan Some::Module
  • Finding outdated modules • r command on the CPAN shell • upgrade command to perform the actual upgrade • take a string or a regexp as parameters
  • Adding to $PERL5LIB • in your code: use lib qw( /opt/permodules /home/pfig/perllib ); • set PERL5LIB in your profile or startup scripts: export PERL5LIB=/opt/perlmodules:/home/pfig/perllib
  • Maintaining your own $PERL5LIB • Override the default system installation • How can i still enjoy the CPAN goodness? • Don’t piss off your sysadmin
  • Maintaining your own $PERL5LIB • Getting -p ~/perl/bin mkdir ready: ~/perl/man/man1 ~/perl/man/man3 mkdir -p ~/.cpan/CPAN cp $PERL5LIB/CPAN/ ~/.cpan/CPAN/ • Debian uses /etc/perl. There’s a special place in hell for them.
  • Maintaining your own $PERL5LIB • Edit ‘build_dir’ => q[/home/pfig/.cpan/build] ‘cpan_home’ => q[/home/pfig/.cpan] ‘histfile’ => q[/home/pfig/.cpan/histfile] ‘keep_source_where’ => q[/home/pfig/.cpan/sources] ‘makepl_arg’ => q[PREFIX=~/perl LIB=~/perl/lib INSTALLMAN1DIR=~/perl/man/man1 INSTALLMAN3DIR=~/perl/man/man3 INSTALLSCRIPT=~/perl/bin INSTALLBIN=~/perl/bin] ‘mbuildpl_arg’ => q[--prefix ~/perl]
  • Maintaining your own $PERL5LIB • Set up your environment PERL5LIB=~/perl/lib PERL5MAN=~/perl/man PATH=$PATH:~/perl/bin export PERL5LIB PERL5MAN PATH • Done! • You now have all the CPAN shininess and you can get rid of use lib pragmas
  • Smart urllist • have a local mini mirror • have the last url of your urllist point to it via file:// • CPAN will always download its indexes from one of the sites but it will try to get the package from your local disk. • you get up-to-date indexes with no need to remember to refresh the mirror.
  • Danger, Will Robinson! • if you run cpan without checking your path, you may be running the vendor’s cpan (because chances are /usr/bin appears in your path before /usr/local/bin) • the same goes for perl -MCPAN • And, if installing manually, the perl you use to run Makefile.PL
  • Which modules to use • CPAN testers • • CPANTS • • Kwalitee • • Reviews on CPAN • Ask around. Really.
  • CPAN testers
  • Kwalitee
  • Other stuff • Bugs • Contributing to CPAN PAUSE
  • Resources • • • • • • • perldoc
  • Thanks to... • In no particular order: • David Cantrell • • Pedro Melo • Simon Wistow • And Wizards Larry Wall and the other Perl of course
  • A local shop, for local people • • Free beer every month! • London Perl Workshop (yearly, free) •’s tech meetings (free, twice a year or thereabouts)