250 likes | 463 Views
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
E N D
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 Appel système / Fonctions Orienté Objet Exemples de CGI Socket Sommaire • Historique / Caractéristiques • Installation / Début d ’un programme • Variables / Structures de contrôle • Contrôle spéciaux • Expressions Rationnelles • Gestion Fichiers • Appel système • Fonctions • Orienté Objet • Un exemple de CGI • Un exemple de socket
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Historique • En 1987, 1ere version par Larry Wall. • Inspiré de Awk, sed, sh, C. • langage naturelle. • Il y a plus d’une façon de le faire.TIM-toady. • Perl rend le travail simple, facile et le travail difficile possible. • Le couteau suisse des chaînes. • Aujourd’hui Version 5.
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Caractéristiques • Points positifs: • Rapide/efficace pour programmer • Grand nombre de possibilités • Portable • Points négatifs: • difficilement réutilisable • s’écrit en un unique fichier • Lent à l’exécution
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Installation • 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/NT www.activestate.com/download/ActivePerl/Windows/5.6/
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Début d ’un programme • Options de compilation: • #!usr/bin/Perl - w : warning • #!c:/Perl/bin/Perl - d : debug • Librairies comme #include • Use CGI; • CGI : librairie pour accès web • SQL : librairie pour accéder à une base SQL • Socket: égal socket.h
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Variables • variable scalaire • $variable • $variable=« Hello World »; • $variable=25; • Tableau • @tab • $tab[0]: Valeur 0eme de @tab. • table de hashage. • %tabhash • %tabhash{$var}=@tab;
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Structures de contrôle • Conditions • If ( expression ){}else{} • Unless ( expression ){} • $val=(expression ? truevalue : falsevalue); • boucles • do{}while/until (expression ) • For{exp_initiale;test_exp;increm_exp }() • while(test_exp)() • foreach $i (@liste){}
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Contrôle spéciaux • last : • branchement après la boucle • While(exp 1){ if( exp2 ){ last; }} #saut last ici • next: • branchement en fin de boucle. • While(exp 1){ if( exp2 ){ next; } truc; #saut next ici} • redo: • branchement en début de boucle • While(exp 1){#saut redo ici truc;if( exp2 ){redo; }}
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Expressions 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.
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Expressions Rationnelles(bis) • Alternatif : "|" correspond à un ou. • Multiplicatif * , 0 ou n fois + , 1 ou n fois ?, 0 ou 1 fois le • Utilisations • /pattern/option • if ( $a =~ /^bon/ i) vrai si $a commence par bon ou Bon • s/pattern/replace/option • $wi= ~ s/y/x/g : remplace toute les y dans wi par x. • Split • @tab= split(/:/,$v) : coupe la chaîne $v suivant le délimiteur « : » et le stocke dans tab.
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Gestion Fichiers • Descripteurs • STDIN entrée standard STDOUT sortie standard • Fonction open • open(FILEH, « monfichier »); mon fichier est ouvert en lecture. • open(FILEW, « >monfichier »); mon fichier est ouvert en écriture. • open(FILEW, « >>monfichier »); mon fichier est ouvert en écriture et créé en mode append. • Fonction close • close (DES); ferme le descripteur de fichier
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Gestion Fichiers • exemple: copie du fichier toto dans titi. print "Voulez vous copier toto dans titi:"; if(<STDIN>=~ /(yes|oui)/i) { open(FILEW, ">>titi"); open(FILER, "toto"); while ($a=<FILER>) {print FILEW "ligne de toto $a";} close FILER; close FILEW; }
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Appel système • Exécution de programme • System(« programme »); sortie <STDIN> • `programme` sortie chaîne de caractère • open(DESCRI ,«|programme |»); entrée ou sortie pipe • Gestion de processus • fork(); exec(); • wait(); waitpid(); • exemple: #!/usr/bin/perl open(LPR,« |lpr »); @mywho=`who`; foreach $_ (@mywho){ print LPR $_; } close LPR;
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Fonctions • Définition sous Fonctions • sub mafonction{ $_[0]; # premier argument @_; # tableau d ’argument ... return $var; return $var1,var2; } • Appel Sous Fonction • $var / @tab = mafonction($first, $second); • &myfunc (@list); • Toutes les variables sont globales. • Contournement my($variable_locale);
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Fonctions (bis) • exemple: • #!c:/perl/bin/perl -w $a=1; $b=2; $c=sum(); print " valeur de sum : $c \n valeur de a: $a \n"; sub sum{ my($a)=10; return $a+$b; } • Résultat: • valeur de sum : 12 • valeur de a: 1
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Orienté Objet • Classe -> Package • Objet -> référence • exemple package Personne; my %champs=(nom=>undef,age=>undef,enfants=>undef); use Personne; $lui=new Personne; $lui->nom("Dupont"); $lui->age(30); $lui->enfants(["lucie","pierre"];
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Le cgi • Header • header();<HEAD> • start_html(); <HTML> • h1('some','contents'); <H1>some contents</H1> • h1({-align=>left},'contents'); <H1ALIGN="LEFT">contents</H1> • Liste • radio_group(); <INPUT TYPE="radio"> • popup_menu(); <SELECT NAME="toto" > • checkbox(); <INPUT TYPE="checkbox"> • textarea(); <INPUT TYPE="text" > • scrolling_list( -name=> ’toto', -Values=>[England,France,] , -Labels=>{England=>"EN",France=>"FR",} , -size=>1, -multiple=>0); <SELECT NAME="toto" SIZE=1> <OPTION VALUE="England">EN <OPTION VALUE="France">FR</SELECT>
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Un 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 programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Un exemple cgi #!C:\PERL\bin\perl.exe use CGI ':standard'; $query = new CGI; print $query->header; print $query->start_html("Example CGI.pm Form"); print $query->h1('A Simple Example'); print $query-> start_form; print "What's your name? "; print $query-> textfield('name'),p; print "What's the combination?",p; print $query-> checkbox_group(-name=>'words', -values=>['key1','key2','key3','key4'], -defaults=>['key1','key3']);
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Un exemple cgi print p,"What's your favorite color? "; print popup_menu(-name=>'color', -values=>['red','green','blue','chartreuse']),p; print $query->submit('Action','Send'); print $query->endform; print hr; if (param()) { print "Your name is: ",em(param('name')),p, "The keywords are: ",em(join(", ",param('words'))),p, "Your favorite color is: ",em(param('color')), hr; } print a({href=>'../cgi_docs.html'},'Go to the documentation'); print end_html;
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Un exemple de socket • Librairie Socket • Tcp Client #!/usr/bin/perl -w use Socket; $remote='localhost'; $port=8011; $iaddr=inet_aton($remote); $paddr=sockaddr_in($port,$iaddr); $proto=getprotobyname('tcp'); socket(SOCK,PF_INET,SOCK_STREAM,$proto); connect(SOCK,$paddr); while($ligne=<SOCK>) { print $ligne; } close (SOCK); exit;
Historique / Caractéristiques Installation / Début d ’un programme Variables / Structures de contrôle Contrôle spéciaux Expressions Rationnelles Gestion Fichiers Appel système / Fonctions Orienté Objet Exemples de CGI Socket Un exemple de socket • TCP Serveur #!/usr/bin/perl -w use Socket; $port=8011; $proto=getprotobyname('tcp'); socket(Serveur,PF_INET,SOCK_STREAM,$proto); setsockopt(Serveur,SOL_SOCKET,SO_REUSEADDR,pack("l",1)); bind(Serveur,sockaddr_in($port,INADDR_ANY)); listen(Serveur,SOMAXCONN); for(;$paddr=accept(Client,Serveur);close Client) { ($portc,$iaddrcl)=sockaddr_in($paddr); $nom=gethostbyaddr($iaddrcl,AF_INET); print Client "Salut $nom coucou\n"; } >>Salut localhost.localdomain coucou
Conclusions « Perl permet La paresse L ’impatience et la démesure. »
Bibliographie • Introduction à Perl, RL.Schwartz & T.Christiansem, O ’reilly • Programming Perl,L.Walls & RL.Schwartz O ’reilly • Sites • « Picking up Perl » www.ebb.org • www.perl.org • www.activestate.com