SlideShare a Scribd company logo
1 of 49
Download to read offline
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
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
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
http://www.cpan.org/
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
  • 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)
http://search.cpan.org/
http://kobesearch.cpan.org/
http://cpandeps.cantrell.org.uk/
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/Config.pm
• 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
  MyConfig.pm
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
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 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
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/Config.pm 
    ~/.cpan/CPAN/MyConfig.pm

• Debian uses /etc/perl. There’s a special
  place in hell for them.
Maintaining your own
   $PERL5LIB
• Edit MyConfig.pm
  ‘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
  • http://www.cpantesters.org/
• CPANTS
  • http://cpants.perl.org/
• Kwalitee
  • http://cpants.perl.org/kwalitee.html
• Reviews on CPAN
• Ask around. Really.
CPAN testers
Kwalitee
Other stuff

• Bugs
  http://rt.cpan.org/
• Contributing to CPAN
  PAUSE
http://rt.cpan.org/
http://pause.cpan.org/
Resources
•   http://search.cpan.org/

•   http://cpan.org/misc/cpan-faq.html

•   http://qa.perl.org/

•   http://cpandeps.cantrell.org.uk/

•   http://use.perl.org/

•   http://perlmonks.org/

•   perldoc
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
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)

More Related Content

What's hot

Design & Implementation of a Cube Satellite
Design & Implementation of a Cube SatelliteDesign & Implementation of a Cube Satellite
Design & Implementation of a Cube SatelliteMd. Saifur Rahman
 
High Performance Computing
High Performance ComputingHigh Performance Computing
High Performance ComputingDell World
 
Protein-Ligand Docking
Protein-Ligand DockingProtein-Ligand Docking
Protein-Ligand Dockingbaoilleach
 
NTN channel model relative work.pptx
NTN channel model relative work.pptxNTN channel model relative work.pptx
NTN channel model relative work.pptxssuser60a6ab1
 
Basics Of Molecular Docking
Basics Of Molecular DockingBasics Of Molecular Docking
Basics Of Molecular DockingSatarupa Deb
 
Advance operator and technique in genetic algorithm
Advance operator and technique in genetic algorithmAdvance operator and technique in genetic algorithm
Advance operator and technique in genetic algorithmHarshana Madusanka Jayamaha
 
Prediction of ligand binding sites
Prediction of ligand binding sitesPrediction of ligand binding sites
Prediction of ligand binding sitesAmit Singh
 
Demand side management
Demand side managementDemand side management
Demand side managementRohit Garg
 
What are Hadoop Components? Hadoop Ecosystem and Architecture | Edureka
What are Hadoop Components? Hadoop Ecosystem and Architecture | EdurekaWhat are Hadoop Components? Hadoop Ecosystem and Architecture | Edureka
What are Hadoop Components? Hadoop Ecosystem and Architecture | EdurekaEdureka!
 
Qsar and drug design ppt
Qsar and drug design pptQsar and drug design ppt
Qsar and drug design pptAbhik Seal
 

What's hot (17)

Design & Implementation of a Cube Satellite
Design & Implementation of a Cube SatelliteDesign & Implementation of a Cube Satellite
Design & Implementation of a Cube Satellite
 
Smart grid technology
Smart grid technologySmart grid technology
Smart grid technology
 
High Performance Computing
High Performance ComputingHigh Performance Computing
High Performance Computing
 
Computer Aided Drug Design
Computer Aided Drug DesignComputer Aided Drug Design
Computer Aided Drug Design
 
Protein-Ligand Docking
Protein-Ligand DockingProtein-Ligand Docking
Protein-Ligand Docking
 
NTN channel model relative work.pptx
NTN channel model relative work.pptxNTN channel model relative work.pptx
NTN channel model relative work.pptx
 
Basics Of Molecular Docking
Basics Of Molecular DockingBasics Of Molecular Docking
Basics Of Molecular Docking
 
Descriptors
DescriptorsDescriptors
Descriptors
 
Advance operator and technique in genetic algorithm
Advance operator and technique in genetic algorithmAdvance operator and technique in genetic algorithm
Advance operator and technique in genetic algorithm
 
Prediction of ligand binding sites
Prediction of ligand binding sitesPrediction of ligand binding sites
Prediction of ligand binding sites
 
3D QSAR.pptx
3D QSAR.pptx3D QSAR.pptx
3D QSAR.pptx
 
Demand side management
Demand side managementDemand side management
Demand side management
 
Smart Bus Service
Smart Bus Service Smart Bus Service
Smart Bus Service
 
MD Simulation
MD SimulationMD Simulation
MD Simulation
 
What are Hadoop Components? Hadoop Ecosystem and Architecture | Edureka
What are Hadoop Components? Hadoop Ecosystem and Architecture | EdurekaWhat are Hadoop Components? Hadoop Ecosystem and Architecture | Edureka
What are Hadoop Components? Hadoop Ecosystem and Architecture | Edureka
 
Qsar and drug design ppt
Qsar and drug design pptQsar and drug design ppt
Qsar and drug design ppt
 
03 optimization
03 optimization03 optimization
03 optimization
 

Viewers also liked

Perl on Amazon Elastic MapReduce
Perl on Amazon Elastic MapReducePerl on Amazon Elastic MapReduce
Perl on Amazon Elastic MapReducePedro Figueiredo
 
30 Minutes To CPAN
30 Minutes To CPAN30 Minutes To CPAN
30 Minutes To CPANdaoswald
 
PERL Unit 6 regular expression
PERL Unit 6 regular expressionPERL Unit 6 regular expression
PERL Unit 6 regular expressionBinsent Ribera
 
Logic Progamming in Perl
Logic Progamming in PerlLogic Progamming in Perl
Logic Progamming in PerlCurtis Poe
 

Viewers also liked (7)

Perl in Teh Cloud
Perl in Teh CloudPerl in Teh Cloud
Perl in Teh Cloud
 
My life as a beekeeper
My life as a beekeeperMy life as a beekeeper
My life as a beekeeper
 
The problem with Perl
The problem with PerlThe problem with Perl
The problem with Perl
 
Perl on Amazon Elastic MapReduce
Perl on Amazon Elastic MapReducePerl on Amazon Elastic MapReduce
Perl on Amazon Elastic MapReduce
 
30 Minutes To CPAN
30 Minutes To CPAN30 Minutes To CPAN
30 Minutes To CPAN
 
PERL Unit 6 regular expression
PERL Unit 6 regular expressionPERL Unit 6 regular expression
PERL Unit 6 regular expression
 
Logic Progamming in Perl
Logic Progamming in PerlLogic Progamming in Perl
Logic Progamming in Perl
 

Similar to CPAN Training

perlbrew yapcasia 2010
perlbrew yapcasia 2010perlbrew yapcasia 2010
perlbrew yapcasia 2010Kang-min Liu
 
MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )brian d foy
 
MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)brian d foy
 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packagertechmemo
 
Perl in RPM-Land
Perl in RPM-LandPerl in RPM-Land
Perl in RPM-LandDave Cross
 
Perlmania_Study - CPAN
Perlmania_Study - CPANPerlmania_Study - CPAN
Perlmania_Study - CPANJeen Lee
 
Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)Jose Luis Martínez
 
Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009PHPBelgium
 
cPanel conf 2017 - How to Speak cPanel
cPanel conf 2017 - How to Speak cPanelcPanel conf 2017 - How to Speak cPanel
cPanel conf 2017 - How to Speak cPanelcPanel
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 
Modern Commandline Tool
Modern Commandline ToolModern Commandline Tool
Modern Commandline ToolYuji Shimada
 
Revisiting ppm
Revisiting ppmRevisiting ppm
Revisiting ppmcharsbar
 
21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANciMike Friedman
 
Approaching package manager
Approaching package managerApproaching package manager
Approaching package managerTimur Safin
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modulesKris Buytaert
 

Similar to CPAN Training (20)

Smoking docker
Smoking dockerSmoking docker
Smoking docker
 
perlbrew yapcasia 2010
perlbrew yapcasia 2010perlbrew yapcasia 2010
perlbrew yapcasia 2010
 
MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )
 
MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)
 
Perlbrew
PerlbrewPerlbrew
Perlbrew
 
perlall
perlallperlall
perlall
 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packager
 
Perl in RPM-Land
Perl in RPM-LandPerl in RPM-Land
Perl in RPM-Land
 
Perlmania_Study - CPAN
Perlmania_Study - CPANPerlmania_Study - CPAN
Perlmania_Study - CPAN
 
Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)
 
Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009Prepare for PHP Test Fest 2009
Prepare for PHP Test Fest 2009
 
cPanel conf 2017 - How to Speak cPanel
cPanel conf 2017 - How to Speak cPanelcPanel conf 2017 - How to Speak cPanel
cPanel conf 2017 - How to Speak cPanel
 
Programming
ProgrammingProgramming
Programming
 
Os Treat
Os TreatOs Treat
Os Treat
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Modern Commandline Tool
Modern Commandline ToolModern Commandline Tool
Modern Commandline Tool
 
Revisiting ppm
Revisiting ppmRevisiting ppm
Revisiting ppm
 
21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci
 
Approaching package manager
Approaching package managerApproaching package manager
Approaching package manager
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modules
 

Recently uploaded

Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesDavid Newbury
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxUdaiappa Ramachandran
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 

Recently uploaded (20)

Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond Ontologies
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Building AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptxBuilding AI-Driven Apps Using Semantic Kernel.pptx
Building AI-Driven Apps Using Semantic Kernel.pptx
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 

CPAN Training

  • 1. Introduction to CPAN Living off other people’s code
  • 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”
  • 3. Running Perl • Compiler • Tools • Standard library • CPAN • and its configuration
  • 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
  • 5. Running Perl Tools • documentation • header extraction • module jump-starters • debugger • profiler
  • 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”
  • 10. Running Perl Local build •Module lookup paths: lib/perl5 /5.8.8 /darwin-thread-multi /site_perl
  • 11. Running Perl CPAN • Comprehensive Perl Archive Network • Source code repository for everything Perl • Modules, but also... • Perl itself • Several tools/programs written in Perl
  • 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)
  • 20. CPAN manual usage (continued) • Organization: authors modules by-author by-category by-module ports src scripts doc
  • 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
  • 26. CPAN Configuration (continued) • CPAN parameters auto_commit, build_dir, cpan_home, histfile, prerequisites, scan_cache • build parameters makepl_arg • other
  • 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
  • 29. The cpan script • $PERL5BIN/cpan cpan Some::Module cpan .
  • 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.
  • 37. Maintaining your own $PERL5LIB • Edit MyConfig.pm ‘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]
  • 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.
  • 44. Other stuff • Bugs http://rt.cpan.org/ • Contributing to CPAN PAUSE
  • 47. Resources • http://search.cpan.org/ • http://cpan.org/misc/cpan-faq.html • http://qa.perl.org/ • http://cpandeps.cantrell.org.uk/ • http://use.perl.org/ • http://perlmonks.org/ • perldoc
  • 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)