magali sauvergeat

25
Introduction à Perl Introduction à Perl (Pratical Extraction and Report (Pratical Extraction and Report language) language) (pathologically Eclectic Rubbish Lister) (pathologically Eclectic Rubbish Lister) Magali Sauvergeat Magali Sauvergeat

Upload: nemo

Post on 06-Jan-2016

80 views

Category:

Documents


0 download

DESCRIPTION

Introduction à Perl (Pratical Extraction and Report language) (pathologically Eclectic Rubbish Lister). Magali Sauvergeat. Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Magali Sauvergeat

Introduction à PerlIntroduction à Perl(Pratical Extraction and Report language)(Pratical Extraction and Report language)

(pathologically Eclectic Rubbish Lister)(pathologically Eclectic Rubbish Lister)

Magali SauvergeatMagali Sauvergeat

Page 2: Magali Sauvergeat

SommaireSommaire

Historique / Caractéristiques Historique / Caractéristiques Installation / Début d ’un programmeInstallation / Début d ’un programme Variables / Structures de contrôleVariables / Structures de contrôle Contrôle spéciauxContrôle spéciaux Expressions RationnellesExpressions Rationnelles Gestion FichiersGestion Fichiers Appel systèmeAppel système FonctionsFonctions Orienté ObjetOrienté Objet Un exemple de CGIUn exemple de CGI Un exemple de socketUn exemple de socket

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 3: Magali Sauvergeat

HistoriqueHistorique

En 1987, 1En 1987, 1ereere version par Larry Wall. version par Larry Wall. Inspiré de Awk, sed, sh, C.Inspiré de Awk, sed, sh, C.

langage naturelle.langage naturelle. Il y a plus d’une façon de le faire.TIM-toady.Il y a plus d’une façon de le faire.TIM-toady. Perl rend le travail simple, facile et le travail Perl rend le travail simple, facile et le travail

difficile possible. difficile possible. Le couteau suisse des chaînes.Le couteau suisse des chaînes.

Aujourd’hui Version 5.Aujourd’hui Version 5.

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 4: Magali Sauvergeat

CaractéristiquesCaractéristiques

Points positifs:Points positifs: Rapide/efficace pour programmer Rapide/efficace pour programmer Grand nombre de possibilitésGrand nombre de possibilités PortablePortable

Points négatifs:Points négatifs: difficilement réutilisabledifficilement réutilisable s’écrit en un unique fichiers’écrit en un unique fichier Lent à l’exécutionLent à l’exécution

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 5: Magali Sauvergeat

InstallationInstallation

Linux par défaut sur: Debian version 2.1 RedHat version 6.0

Slackware version 2.5 SuSE version 6.0

Unix par défaut sur: Aix 4.3.3. Solaris 8 IRIX pour HPUX SCO : source (www.perl.com/CPAN-local/src/5.0/)

Macintosh www.macperl.com

Windows 9x/NTwww.activestate.com/download/ActivePerl/Windows/5.6/

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 6: Magali Sauvergeat

Début d ’un programmeDébut d ’un programme

Options de compilation:Options de compilation: #!usr/bin/Perl #!usr/bin/Perl - w : warning- w : warning #!c:/Perl/bin/Perl#!c:/Perl/bin/Perl - d : debug - d : debug

Librairies comme #includeLibrairies comme #include Use CGI;Use CGI;

CGICGI : : librairie pour accès weblibrairie pour accès web SQLSQL : : librairie pour accéder à une base SQLlibrairie pour accéder à une base SQL Socket: Socket: égal socket.hégal socket.h

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 7: Magali Sauvergeat

VariablesVariables

variable scalairevariable scalaire $variable$variable

$variable=« Hello World »;$variable=« Hello World »; $variable=25;$variable=25;

TableauTableau @tab@tab

$tab[0]: Valeur 0$tab[0]: Valeur 0emeeme de @tab. de @tab.

table de hashage.table de hashage. %tabhash%tabhash

%tabhash{$var}=@tab;%tabhash{$var}=@tab;

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 8: Magali Sauvergeat

Structures de contrôleStructures de contrôle

ConditionsConditions If ( expression ){}else{}If ( expression ){}else{} Unless ( expression ){}Unless ( expression ){} $val=(expression ? truevalue : falsevalue);$val=(expression ? truevalue : falsevalue);

bouclesboucles do{}while/until (expression )do{}while/until (expression ) For{exp_initiale;test_exp;increm_exp }()For{exp_initiale;test_exp;increm_exp }() while(test_exp)()while(test_exp)() foreach $i (@liste){}foreach $i (@liste){}

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 9: Magali Sauvergeat

Contrôle spéciauxContrôle spéciaux

last :last : branchement après la bouclebranchement après la boucle

While(exp 1){ if( exp2 ){ While(exp 1){ if( exp2 ){ last;last; }} #saut last ici }} #saut last ici

nextnext: : branchement en fin de boucle.branchement en fin de boucle.

While(exp 1){ if( exp2 ){ While(exp 1){ if( exp2 ){ next;next; } truc; #saut } truc; #saut next next ici}ici}

redo: redo: branchement en début de bouclebranchement en début de boucle

While(exp 1){#saut While(exp 1){#saut redoredo ici truc;if( exp2 ){ ici truc;if( exp2 ){redo;redo; }} }}

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 10: Magali Sauvergeat

Expressions RationnellesExpressions Rationnelles

Motifs . n ’importe quel lettre sauf \n.

\s caractères espace [ \n\t\n\f] | inverse \S

\w : caractères de mots [a-zA-Z0-9] | inverse \W

\d : chiffres [0-9] | inverse \D

/i : ignorer la case.

[^ ...] : négation des caractères du crochet.

Ancrage   ^  : correspond au début de ligne.^  : correspond au début de ligne.

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 11: Magali Sauvergeat

Expressions RationnellesExpressions Rationnelles(bis)(bis) Alternatif : "|" correspond à un ou.Alternatif : "|" correspond à un ou. MultiplicatifMultiplicatif

* ,* , 0 ou n fois 0 ou n fois  + , + , 1 ou n fois 1 ou n fois ?,?, 0 ou 1 fois le  0 ou 1 fois le

UtilisationsUtilisations /pattern/option /pattern/option

if ( $a =~ /^bon/ i) vrai si $a commence par bon ou Bon if ( $a =~ /^bon/ i) vrai si $a commence par bon ou Bon s/pattern/replace/options/pattern/replace/option

$wi= ~ s/y/x/g : remplace toute les y dans wi par x.$wi= ~ s/y/x/g : remplace toute les y dans wi par x. SplitSplit

@tab= split(/:/,$v) : coupe la chaîne $v suivant le délimiteur @tab= split(/:/,$v) : coupe la chaîne $v suivant le délimiteur « : » et le stocke dans tab.« : » et le stocke dans tab.

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 12: Magali Sauvergeat

Gestion FichiersGestion Fichiers Descripteurs Descripteurs

STDIN entrée standardSTDIN entrée standard STDOUT sortie standardSTDOUT sortie standard

Fonction openFonction open open(FILEH, « monfichier »); mon fichier est ouvert en open(FILEH, « monfichier »); mon fichier est ouvert en

lecture.lecture. open(FILEW, « open(FILEW, « >>monfichier »); mon fichier est ouvert en monfichier »); mon fichier est ouvert en

écriture.écriture. open(FILEW, « open(FILEW, « >>>>monfichier »); mon fichier est ouvert en monfichier »); mon fichier est ouvert en

écriture et créé en mode append.écriture et créé en mode append.

Fonction closeFonction close close (DES); ferme le descripteur de fichier close (DES); ferme le descripteur de fichier

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 13: Magali Sauvergeat

Gestion FichiersGestion Fichiers exemple:exemple: copie du fichier toto dans titi.copie du fichier toto dans titi.

print "Voulez vous copier toto dans titi:";print "Voulez vous copier toto dans titi:";

if(<STDIN>=~ /(yes|oui)/i)if(<STDIN>=~ /(yes|oui)/i)

{{

open(FILEW, ">>titi");open(FILEW, ">>titi");

open(FILER, "toto");open(FILER, "toto");

while ($a=<FILER>)while ($a=<FILER>)

{print FILEW "ligne de toto {print FILEW "ligne de toto $a";}$a";}

close FILER;close FILER;

close FILEW;close FILEW;

}}

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 14: Magali Sauvergeat

Appel systèmeAppel système Exécution de programmeExécution de programme

System(« programme »);System(« programme »); sortie <STDIN>sortie <STDIN> `programme``programme` sortie chaîne de caractèresortie chaîne de caractère open(DESCRI ,«|programme |»); entrée ou sortie pipeopen(DESCRI ,«|programme |»); entrée ou sortie pipe

Gestion de processusGestion de processus fork(); exec();fork(); exec(); wait(); waitpid();wait(); waitpid();

exemple:exemple:#!/usr/bin/perl#!/usr/bin/perl

open(LPR,« |lpr »); open(LPR,« |lpr »);

@mywho=`who`;@mywho=`who`;

foreach $_ (@mywho){ print LPR $_; }foreach $_ (@mywho){ print LPR $_; }

close LPR;close LPR;

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 15: Magali Sauvergeat

FonctionsFonctions Définition sous Fonctions

sub mafonction{sub mafonction{$_[0]; # premier argument$_[0]; # premier argument @_; # tableau d ’argument@_; # tableau d ’argument

......

return $var; return $var1,var2; }return $var; return $var1,var2; }

Appel Sous Fonction $var / @tab = mafonction($first, $second);$var / @tab = mafonction($first, $second); &myfunc (@list);&myfunc (@list);

Toutes les variables sont globales.. ContournementContournement my($variable_locale); my($variable_locale);

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 16: Magali Sauvergeat

Fonctions (bis)Fonctions (bis)

exemple: #!c:/perl/bin/perl -w#!c:/perl/bin/perl -w

$a=1; $b=2;$a=1; $b=2;

$c=sum();$c=sum();

print  " valeur de sum : $c \n valeur de a: $a \n";print  " valeur de sum : $c \n valeur de a: $a \n";

sub sum{sub sum{

my($a)=10;my($a)=10;

return $a+$b; }return $a+$b; }

Résultat: valeur de sum : 12valeur de sum : 12 valeur de a: 1valeur de a: 1

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 17: Magali Sauvergeat

Orienté ObjetOrienté Objet

Classe -> Package Objet -> référence

exemplepackage Personne;package Personne;

my %champs=(nom=>undef,age=>undef,enfants=>undef);my %champs=(nom=>undef,age=>undef,enfants=>undef);

use Personne;use Personne;

$lui=new Personne;$lui=new Personne;

$lui->nom("Dupont");$lui->nom("Dupont");

$lui->age(30);$lui->age(30);

$lui->enfants(["lucie","pierre"];$lui->enfants(["lucie","pierre"];

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 18: Magali Sauvergeat

Le cgiLe cgi Header

header(); <HEAD><HEAD> start_html(); start_html(); <<HTML>HTML> h1('some','contents'); <H1>some contents</H1> h1({-align=>left},'contents'); <H1ALIGN="LEFT">contents</H1>

Liste

radio_group();radio_group(); <INPUT TYPE="radio"><INPUT TYPE="radio">

popup_menu();popup_menu(); <SELECT NAME="toto" > <SELECT NAME="toto" >

checkbox();checkbox(); <INPUT TYPE="checkbox"> <INPUT TYPE="checkbox">

textarea();textarea(); <INPUT TYPE="text" ><INPUT TYPE="text" >

scrolling_listscrolling_list( -name=> ’toto', -Values=>[England,France,] ,( -name=> ’toto', -Values=>[England,France,] ,

-Labels=>{England=>"EN",France=>"FR",} , -size=>1, -multiple=>0);-Labels=>{England=>"EN",France=>"FR",} , -size=>1, -multiple=>0);

<SELECT NAME="toto" SIZE=1> <OPTION VALUE="England">EN<SELECT NAME="toto" SIZE=1> <OPTION VALUE="England">EN

<OPTION VALUE="France">FR</SELECT><OPTION VALUE="France">FR</SELECT>

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 19: Magali Sauvergeat

Un exemple cgiUn exemple cgi

Print Hello world

#!/usr/local/bin/perl use CGI; # load CGI routines $q = new CGI; # create new CGI object print $q->header, # create the HTTP header $q->start_html('hello world'),

# start the HTML $q->h1('hello world'), # level 1 header $q->end_html; # end the HTML

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 20: Magali Sauvergeat

Un exemple cgiUn exemple cgi#!C:\PERL\bin\perl.exe#!C:\PERL\bin\perl.exe

use CGI ':standard';use CGI ':standard';

$query = new CGI;$query = new CGI;

printprint $query->header; $query->header;

printprint $query->start_html("Example CGI.pm Form"); $query->start_html("Example CGI.pm Form");

printprint $query->h1('A Simple Example'); $query->h1('A Simple Example');

printprint $query-> start_form; $query-> start_form;

printprint "What's your name? "; "What's your name? ";

printprint $query-> textfield('name'),p; $query-> textfield('name'),p;

printprint "What's the combination?",p; "What's the combination?",p;

printprint $query-> checkbox_group(-name=>'words', $query-> checkbox_group(-name=>'words',

-values=>['key1','key2','key3','key4'],-values=>['key1','key2','key3','key4'],

-defaults=>['key1','key3']);-defaults=>['key1','key3']);

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 21: Magali Sauvergeat

Un exemple cgiUn exemple cgiprintprint p,"What's your favorite color? "; p,"What's your favorite color? ";

printprint popup_menu(-name=>'color',popup_menu(-name=>'color',

-values=>['red','green','blue','chartreuse']),p;-values=>['red','green','blue','chartreuse']),p;

printprint $query->submit('Action','Send'); $query->submit('Action','Send');

printprint $query->endform; $query->endform;

printprint hr; hr;

if (param()) {if (param()) {

printprint "Your name is: ",em(param('name')),p, "Your name is: ",em(param('name')),p,

"The keywords are: ",em(join(", ",param('words'))),p,"The keywords are: ",em(join(", ",param('words'))),p,

"Your favorite color is: ",em(param('color')),"Your favorite color is: ",em(param('color')),

hr;hr;

}}

printprint a({href=>'../cgi_docs.html'},'Go to the documentation'); a({href=>'../cgi_docs.html'},'Go to the documentation');

printprint end_html; end_html;

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 22: Magali Sauvergeat

Un exemple de socketUn exemple de socket Librairie SocketLibrairie Socket

Tcp ClientTcp Client#!/usr/bin/perl -w#!/usr/bin/perl -w

use Socket;use Socket;

$remote='localhost';$remote='localhost';

$port=8011;$port=8011;

$iaddr=inet_aton($remote);$iaddr=inet_aton($remote);

$paddr=sockaddr_in($port,$iaddr);$paddr=sockaddr_in($port,$iaddr);

$proto=getprotobyname('tcp');$proto=getprotobyname('tcp');

socket(SOCK,PF_INET,SOCK_STREAM,$proto);socket(SOCK,PF_INET,SOCK_STREAM,$proto);

connect(SOCK,$paddr);connect(SOCK,$paddr);

while($ligne=<SOCK>) { print $ligne; }while($ligne=<SOCK>) { print $ligne; }

close (SOCK);close (SOCK);

exit;exit;

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 23: Magali Sauvergeat

Un exemple de socketUn exemple de socket TCP ServeurTCP Serveur#!/usr/bin/perl -w#!/usr/bin/perl -w

use Socket;use Socket;

$port=8011;$port=8011;

$proto=getprotobyname('tcp');$proto=getprotobyname('tcp');

socket(Serveur,PF_INET,SOCK_STREAM,$proto);socket(Serveur,PF_INET,SOCK_STREAM,$proto);

setsockopt(Serveur,SOL_SOCKET,SO_REUSEADDR,pack("l",1));setsockopt(Serveur,SOL_SOCKET,SO_REUSEADDR,pack("l",1));

bind(Serveur,sockaddr_in($port,INADDR_ANY));bind(Serveur,sockaddr_in($port,INADDR_ANY));

listen(Serveur,SOMAXCONN);listen(Serveur,SOMAXCONN);

for(;$paddr=accept(Client,Serveur);close Client)for(;$paddr=accept(Client,Serveur);close Client)

{{ ($portc,$iaddrcl)=sockaddr_in($paddr);($portc,$iaddrcl)=sockaddr_in($paddr);

$nom=gethostbyaddr($iaddrcl,AF_INET);$nom=gethostbyaddr($iaddrcl,AF_INET);

print Client "Salut $nom coucou\n"; }print Client "Salut $nom coucou\n"; }

>>Salut localhost.localdomain coucou>>Salut localhost.localdomain coucou

Historique / Caractéristiques Installation / Début d ’un programmeVariables / Structures de contrôleContrôle spéciaux Expressions RationnellesGestion FichiersAppel système / Fonctions Orienté ObjetExemples de CGI Socket

Page 24: Magali Sauvergeat

ConclusionsConclusions

« Perl permet« Perl permet

La paresseLa paresse

L ’impatienceL ’impatience

et la démesure. »et la démesure. »

Page 25: Magali Sauvergeat

BibliographieBibliographie

Introduction à Perl, RL.Schwartz & T.Christiansem, Introduction à Perl, RL.Schwartz & T.Christiansem, O ’reillyO ’reilly

Programming Perl,L.Walls & RL.Schwartz Programming Perl,L.Walls & RL.Schwartz O ’reilly O ’reilly

SitesSites « Picking up Perl » www.ebb.org« Picking up Perl » www.ebb.org www.perl.orgwww.perl.org www.activestate.comwww.activestate.com