2. 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”
4. 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
6. Running Perl
Standard Library
• modules distributed with Perl
• Module::CoreList
• 602 modules as of 5.8.8
7. Running Perl
Local build
• Perl pre-installed everywhere
• vendor may overwrite your modifications
• you may break stuff
• always use a local package
8. 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
9. Running Perl
Local build
• Common options:
• -Dcc=gcc
• -Dprefix=/opt/builds/perl
• -Dlocincpth=”/foo/bar/include”
• -Dloclibpth=”/foo/bar/lib”
13. Why CPAN
• laziness
• re-inventing the wheel (not)
• code reuse
• tested and tried
• around 250 mirrors worldwide
• approximately 13000 modules
• lots of crap...
14. How to use CPAN
• Manually
• There’s a module for it
perl -MCPAN -e shell
• There’s a script for it
cpan
15. CPAN manual usage
• Search for a module
• http://search.cpan.org/
• Search for its dependencies
• http://cpandeps.cantrell.org.uk/
• Start with dependencies and install one by
one
• Tedious and time-consuming (e.g., Catalyst
depends on hundreds of modules)
21. 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
22. 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)
23. 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 (!!!)
24. CPAN Configuration
• in $PERL5LIB/CPAN/Config.pm
• can be hand-edited or...
• using o conf in the CPAN shell
• it’s just a Perl module
25. 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
27. 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
MyConfig.pm
28. 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/Config.pm
failed
test
30. Mirroring CPAN
• A full mirror is around 7gb
• CPAN::Mini and minicpan
• only the newest version of every module
• ~800mb
31. More usage
• Passing arguments to perl Makefile.PL
• Finding outdated modules
• Adding to $PERL5LIB
• Maintaining your own $PERL5LIB
• Smart urllist
32. Passing arguments to
perl Makefile.pl
• 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 Makefile.pl
CC=gcc cpan Some::Module
33. Finding outdated
modules
• r command on the CPAN shell
• upgrade command to perform the actual
upgrade
• take a string or a regexp as parameters
34. 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
35. Maintaining your own
$PERL5LIB
• Override the default system installation
• How can i still enjoy the CPAN goodness?
• Don’t piss off your sysadmin
36. Maintaining your own
$PERL5LIB
• Getting -p ~/perl/bin
mkdir
ready:
~/perl/man/man1 ~/perl/man/man3
mkdir -p ~/.cpan/CPAN
cp $PERL5LIB/CPAN/Config.pm
~/.cpan/CPAN/MyConfig.pm
• Debian uses /etc/perl. There’s a special
place in hell for them.
38. 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
39. 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.
40. 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
41. Which modules to use
• CPAN testers
• http://www.cpantesters.org/
• CPANTS
• http://cpants.perl.org/
• Kwalitee
• http://cpants.perl.org/kwalitee.html
• Reviews on CPAN
• Ask around. Really.
48. Thanks to...
• In no particular order:
• David Cantrell
http://www.cantrell.org.uk/david/tech/
• London.pm
• Pedro Melo
http://simplicidade.org/notes/
• Simon Wistow
http://thegestalt.org/simon/
• And Wizards Larry Wall and the other
Perl
of course
49. A local shop, for local
people
•http://london.pm.org/
• Free beer every month!
• London Perl Workshop (yearly, free)
• london.pm’s tech meetings (free, twice a
year or thereabouts)