Le meilleur du CPAN

Sébastien Aperghis-Tramoni, sebastien@aperghis.net

CPAN

  • Comprehensive Perl Archive Network

  • collection centralisée et distribuée de modules

  • http://www.cpan.org/

  • 4.5 Go, plus de 13000 modules, plus de 6000 auteurs

  • 236 miroirs

CPAN

  • « CPAN is the language, Perl is just its syntax » -- Audrey Tang

  • véritable richesse de Perl

Problème

  • connaître les bons modules

Shell

  • Getopt::Long

  • Pod::Usage

  •     my %options = (
             debug => 0,
        );
    
        GetOptions(\%options, qw{
            help|h!  version|V!
            debug|d!  config|c=s
        }) or pod2usage(0);
    
        pod2usage({ -verbose => 2, -exitval => 0, -noperldoc => 1 })
            if $options{help};

Programmes

  • Proc::Daemon

  • IPC::Run

  •     my @cmd = qw(ps auwx);
        run \@cmd, \$input, \$output, \$errors or die "$cmd[0]: $?"

Listes

  • List::Util

  •     first max maxstr min minstr reduce shuffle sum
  • List::MoreUtils

  •     any all none notall each_array pairwise natatime mesh zip uniq minmax

Expressions régulières

  • Regexp::Common

        while (<>) {
            /$RE{num}{real}/ and print "got a number";
            /$RE{net}{IPv4}/ and print "got an IP address";
        }
  • Regexp::Assemble

  • Text::Match::FastAlternatives

Date et heure

  • Time::HiRes

  • Date::Parse

  • DateTime

  • DateTime::Set, DateTime::Span

  • DateTime::Calendar:: Chinese, Christian, Coptic, FrenchRevolutionary, Hebrew, Japanese, Mayan, Pataphysical

Nombres

  • bignum, bigint, bigrat

  • PDL (Perl Data Language == MatLab en Perl)

Fichiers

  • Archivage

    • Archive::Tar, Archive::Zip, Compress:Zlib, Compress:Bzip2

  • Chemins

    • File::Spec, Path::Class

    • File::Find::Rule, File::Next, File::Wildcard

    • File::HomeDir, File::ShareDir

Fichiers

  • Contenu

    • File::Slurp, File::Tail, File::Temp

Objets

  • Class::Accessor

  • Class::Std, Class::InsideOut, Object::InsideOut

  • Moose, Coat

        package CheckingAccount;
            use Moose;
            
            extends 'BankAccount';
            
            has 'overdraft_account' => (isa => 'BankAccount', is => 'rw');        
            
            before 'withdraw' => sub {
                ...
            };
    

Coopération d'objets

XML

  • XML::LibXML, XML::LibXSLT

        my $parser = XML::LibXML->new;
        my $doc = $parse->parse_file($file);
    
        my ($node) = $doc->findnodes("/root/path/node[1]");
  • XML::SAX

  • XML::Twig

  • XML::Tiny

Sérialisation

  • Data::Dumper, Storable

  • YAML, YAML::Syck, YAML::XS

        YAML::DumpFile($file, \%complex_structure);
        my $struct = YAML::LoadFile($file);
  • JSON, JSON::Syck, JSON::XS

        my $struct = from_json( $request->content );
    
        $response->add_content( to_json(\%data) );

Courriel

  • MIME::Lite, MIME::Parser, Mail::Box

  • Email::Simple, Email::MIME, Email::Folder et tous les modules du Perl Email Project

  • Net::SMTP, Net::POP3, Net::IMAP, IMAP::Admin

Web, côté client

  • LWP::UserAgent, LWP::Simple

  •     my $page = get($url);
  • LWP::Parallel, HTTP::Async

  • WWW::Mechanize

  • Web::Scraper

Web, côté serveur

  • HTTP::Daemon

  • HTTP::Server::Simple

  • HTTP::Server::Brick

        my $server = HTTP::Server::Brick->new( port => 8888 );
        $server->mount("/files" => { path => "/path/to/files" });
        $server->mount("/user"  => { handler => \&process_user });
        $server->start;
  • CGI, CGI::Simple, CGI::PathInfo

  • CGI::Application

HTML

  • HTML::Parser

  • HTML::TreeBuilder

  • WebService::Validator::HTML::W3C

Documents

  • Bureautique

    • Spreadsheet::WriteExcel, Spreadsheet::ParseExcel

    • OpenOffice::OODoc, Spreadsheet::ReadSXC

    • Spreadsheet::Read, Spreadsheet::Write

    • PDF::API2

  • Images

    • GD, Image::Magick, Gimp, Imager

Réseau

  • Protocoles réseau

    • Net::FTP, Net::SSH, Net::SCP, Net:LDAP, Net::NNTP, Net::RADIUS, Net::TacacsPlus, Net::SIP

    • Net::DNS, Net::Ping, Net::DHCP

  • Réseau bas niveau

    • Net::Pcap, Net::Frame, Net::Packet

Bases de données

  • Text::CSV_XS

  • DBI

  • MySQL, PostgreSQL, SQLite, Oracle, JDBC, ODBC, Sybase, ADO DB, Unify et encore plus...

  • DBI::Proxy, DBD::Gofer

  • DBIx::Simple

ORM

  • Tangram, Alzabo, SPOPS

  • Class::DBI, DBIx::Class

  • Rose::DB::Object, DBIx::DataModel, Fey::ORM

Templates

  • HTML::Template

  • Petal

  • Mason

  • Template Toolkit

Frameworks web modernes

  • Maypole

  • Catalyst

  • Jifty

Tests

  • Test::More, Test::Builder

  • Devel::Cover

  • Test::Deep, Test::LongString

  • Test::Exception, Test::NoWarnings

  • Test::MockModule, Test::MockObject

  • Test::Class, Test::Unit

  • Test::LectroTest

Outils

  • Module::Starter

  • ack

  • Perl::Critic

  • Perl::Tidy

Debugging

  • Smart::Comments

  • XXX

  • Devel::SimpleTrace

  • Devel::Graph

  • Devel::TraceLoad, Devel::TraceUse

  • Devel::LeakTrace

  • Devel::ebug

Le monde extérieur

  • Langages

    • Inline : C, Java, Python, Ruby, Tcl, Befunge, Lua

  • Bibliothèques externes

    • XS

    • Devel::PPPort

    • SWIG

    • P5NCI

Interfaces

  • Interfaces graphiques

    • Tk, Gtk, WxWidgets, Qt, Prima

    • GUI natives : Win32, Aqua (Mac OS X), X11

  • Pilotage natif des OS

    • Mac::Carbon, Mac::Glue

    • Win32, Win32::OLE, W2RK::WMI

Conclusion

  • CPAN, c'est bon, mangez-en

Questions ?

Merci