Top Banner

of 47

Perl 2000

Apr 07, 2018

Download

Documents

etta
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 8/3/2019 Perl 2000

    1/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 1

    I. INTRODUCTION........................................................................................................................................2

    A. QUEST CE QUE PERL ?..........................................................................................................................2B. QUELLE UTILISATION ? ...........................................................................................................................2C. DEUX VERSIONS .....................................................................................................................................3

    II. APERU........................................................................................................................................................3

    III. TYPES DE DONNES............................................................................................................................3

    A. CONSTANTES .........................................................................................................................................3B. SCALAIRES .............................................................................................................................................3C. TABLEAUX, LISTES .................................................................................................................................4D. TABLEAUX INDICS (OU ASSOCIATIFS) .....................................................................................................4E. REMARQUES ..........................................................................................................................................5

    IV. EXPRESSIONS........................................................................................................................................6

    A. OPRATEURS..........................................................................................................................................6B. COMPARAISONS .....................................................................................................................................7

    V. SYNTAXE GNRALE.........................................................................................................................8

    A. EXPRESSIONS CONDITIONNELLES ............................................................................................................9B. BOUCLES .............................................................................................................................................10C. PROCDURES .......................................................................................................................................12

    VI. FONCTIONS PRDFINIES............................................................................................................... 13

    A. SYSTME .............................................................................................................................................13B. MATHMATIQUE ..................................................................................................................................13C. CHANES DE CARACTRES .....................................................................................................................14D. TABLEAUX, LISTES ...............................................................................................................................14E. TABLEAUX INDICS ..............................................................................................................................16

    VII. GESTION DE FICHIERS...................................... ...............................................................................17A. OUVERTURE ........................................................................................................................................17B. FERMETURE ........................................................................................................................................18C. LECTURE.............................................................................................................................................18D. ECRITURE ...........................................................................................................................................18E. PARCOURS...........................................................................................................................................18F. FICHIER SPCIAL : ...........................................................................................................................19

    VIII. EXPRESSIONS RGULIRES.......................................................................................................20

    A. RAPPEL................................................................................................................................................20B. REMPLACEMENT ..................................................................................................................................23

    IX. VARIABLES ET TABLEAUX SPCIAUX.........................................................................................24

    X. STRUCTURES COMPLEXES .............................................................................................................24

    XI. EXEMPLES........................................................................................................................................... 25

    A. PASSAGES DE PARAMTRES AU PROGRAMME ..........................................................................................25B. PARCOURS DE FICHIER ..........................................................................................................................26C. PROGRAMMATION OBJET ......................................................................................................................28D. PERL ET CGI........................................................................................................................................31E. ACCS AUX BASES DE DONNES : DBPERL..............................................................................................36F. ACCS UNE BASE DE DONNES DEPUIS WEB ........................................................................................38

    XII. BIBLIOGRAPHIE ................................................................................................................................40

    XIII. INDEX 42XIV. ANNEXES: Installation/utilisation de perl sur Unix / Windows / Mac 43

  • 8/3/2019 Perl 2000

    2/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 2

    I. INTRODUCTION

    A. Quest ce que PERL ?

    P.E.R.L. signifie Practical Extraction and Report Language. Que l'on pourrait (essayer de)

    traduire par langage pratique d'extraction et d'dition .Cr en 1986 par Larry Wall (ingnieur systme). Au dpart pour grer un systme de News entre deux rseaux.C'est : Un langage de programmation Un logiciel gratuit (que l'on peut se procurer sur Internet notamment) Un langage interprt :

    pas de compilationmoins rapide qu'un programme compilchaque script (programme Perl) ncessite d'avoir l'interprteur Perl sur lamachine pour s'excuter.

    Pourquoi Perl est devenu populaire : portabilit : Perl existe sur la plupart des plateformes aujourdhui (Unix, NT, Windows, Mac,

    VMS, Amiga, Atari ...) gratuit : disponible sur Internet (ainsi qu'un nombre impressionnant de librairies et d'utilitaires) simplicit : Quelques commandes permettent de faire ce quun programme de 500 lignes en C

    ou en Pascal faisait. robustesse : Pas dallocation mmoire manipuler, chanes, piles, noms de variables illimits...

    B. Quelle utilisation ?

    A l'origine Perl a t cr pour :1) manipuler des fichiers (notamment pour grer plusieurs fichiers en mme temps),2) manipuler des textes (recherche, substitution),3) manipuler des processus (notamment travers le rseau).=> Perl tait essentiellement destin au monde UNIX

    Pourquoi utilise t'on Perl aujourd'hui ?

    1) gnrer, mettre jour, analyser des fichiers HTML (notamment pour lcriture de CGI),2) accs universel aux bases de donnes,3) conversion de formats de fichiers.=> Perl nest plus li au monde UNIXPerl nest pas fait pour : crire des interfaces interactives (mais il existe maintenant le module tkperl, qui le permet, sur

    Unix ou Windows), le calcul scientifique (Perl nest pas compil : problme de performances).

  • 8/3/2019 Perl 2000

    3/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 3

    C. Deux versions

    Deux versions principales de Perl :- Perl 4 : L'ancienne version (encore utilise)- Perl 5 : La nouvelle version qui intgre la programmation objet (actuellement 5.6.1)II. Aperu

    Petit programme poli :#!/bin/perl

    print "Bonjour";

    Affichage du nombre de lignes d'un fichier :#!/bin/perl

    open (F, 'monfichier') || die "Problme d'ouverture : $!" ;

    $i=0;

    while () {

    $i++;

    }

    close F;

    print "Nombre de lignes : $i";

    F est un descripteur de fichier, que l'on peut appeler comme on veut (l'usage veut que l'on note lesdescripteurs de fichier en majuscules : Fentree, ENTREE, Fichier, FIC ).Chaque instruction Perl se termine par un point-virgule.

    III. Types de donnes

    A. Constantes

    1, -12345, 0.1415, 1.6E16 (signifie 160 000 000 000 000 000), 'cerise','a', 'les fruits du palmier sont les dattes'

    B. Scalaires

    Les scalaires sont prcds du caractre $$i = 0; $c = 'a';$mon_fruit_prefere = 'kiwi';$racine_carree_de_2 = 1.41421;$chaine = '100 grammes de $mon_fruit_prefere';

    => '100 grammes de $mon_fruit_prefere'$chaine = "100 grammes de $mon_fruit_prefere";

    => '100 grammes de kiwi'

    Attention : Pas d'accents ni d'espaces dans les noms de variables (dans les dernires versions dePerl, les noms de variables peuvent tre accentus)

    Commentaireobligatoire : indiquel'interprteur Perl

    commande print :afficher l'cran

    ouverture d'un fichier en lecture

    initialisation du com teur

    our cha ue li ne lue...

    affichage du contenudu compteur

    Fermeture du fichier

    Incrmentation du com teur

    Dtection d'erreur

  • 8/3/2019 Perl 2000

    4/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 4

    Par contre un nom peut tre aussi long qu'on le veut.

    C. Tableaux, listes

    En Perl, les tableaux peuvent tre utiliss comme des ensembles ou des listes.Toujours prcds du caractre @ :@chiffres = (1,2,3,4,5,6,7,8,9,0);@fruits = ('amande','fraise','cerise');@alphabet = ('a'..'z'); Les deux points signifient de "tant tant"@a = ('a'); @nul = ();@cartes = ('01'..'10','Valet','Dame','Roi');on fait rfrence un lment du tableau selon son indice par :$chiffres[1](=> 2)$fruits[0] (=> 'amande')REMARQUE : En Perl (comme en C) les tableaux commencent l'indice 0On peut affecter un tableau un autre tableau :@ch = @chiffres;@alphanum = (@alphabet, '_', @chiffres);=> ('a','b,',...,'z','_','1','2','3','4','5','6','7','8','9','0')@ensemble = (@chiffres, 'datte', 'kiwi', 12.45);Remarques :On dispose d'un scalaire spcial : $#tableau qui indique le dernier indice du tableau (et doncsa taille - 1) : $fruits[$#fruits] (=> 'cerise')

    Possibilit de rfrencer une partie d'un tableau@cartes[6..$#cartes]=> ('07','08','09','10','Valet','Dame','Roi')@fruits[0..1] => ('amande', 'fraise')

    D. Tableaux indics (ou associatifs)

    Ils sont toujours prcds du caractre % :%prix = ('amande'=>30, 'fraise'=>9, 'cerise'=>25);ou :%prix = (amande=>30, fraise=>9, cerise=>25);En Perl 4 la notation est :%prix = ('amande',30, 'fraise',9, 'cerise',25);On rfrence ensuite un lment du tableau par : $prix{'cerise'} (=> 25)(ou $prix{cerise})Exemples:%chiffre = ();$chiffre{'un'} = 1; => ou $chiffre{un} = 1;print $chiffre{un};$var = 'un'; print $chiffre{$var};

  • 8/3/2019 Perl 2000

    5/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 5

    E. Remarques

    1. Perl5 autorise les combinaisons, comme un tableau de tableaux :%saisons = ('abricot'=>['t'],'fraise'=> ['printemps','t'],'pomme'=> ['automne','hiver'],'orange'=> ['hiver'],'cerise'=> ['printemps'],'amande'=> ['printemps','t','automne','hiver']);ou@departements = (['Ain', 'Bourg-en-Bresse', 'Rhne-Alpes'],['Aisne', 'Laon', 'Picardie'],...['Yonne', 'Auxerre', 'Bourgogne']);Et lon accdera la rgion du Finistre, ou la prfecture d'Ille et Vilaine par$departements[29 - 1][2], $departements[35 - 1][1](On retranche un car l'indice des tableaux commence toujours 0)

    2. Pas de boolens (comme en langage C)

    On utilise des entiers sachant que 0 est valu comme tant faux (en fait il s'agit de la chane decaractre vide) et 1 comme tant vrai.$deux_plus_grand_que_un = (2 > 1);if ($deux_plus_grand_que_un) {

    print "Ok !";}

    Le programme rpondra Ok !3. Tableaux deux dimensions

    On peut utiliser les tableaux indics pour simuler des tableaux 2 (ou n) dimensions :%table_multiplication = ('1,1'=>1, '1,2'=>2, ...,'9,8'=>72,'9,9'=>81);$traduction{'amande','anglais'} = 'almond';$traduction{'amande','italien'} = 'amoria';$traduction{'cerise','anglais'} = 'cherry';On peut galement utiliser les tableaux de tableaux de Perl 5 pour le faire :@table_multiplication = ([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # Multipli par 0[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], # Multipli par 1[ 0, 2, 4, 6, 8,10,12,14,16,18], # Multipli par 2...[ 0, 9,18,27,36,45,54,63,72,81]); # Multipli par 9On rfrencera alors 2*6 par $table_mult[6] [2]

  • 8/3/2019 Perl 2000

    6/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 6

    IV. Expressions

    A. Oprateurs

    De nombreux oprateurs existent en Perl (hrits la plupart du temps du langage C). Voici lesprincipaux :

    1. Oprateurs arithmtiques

    $a = 1; $b = $a; les variables a, et b auront pour valeur 1$c = 53 + 5 - 2*4; => 50Plusieurs notations pour incrmenter une variable$a = $a + 1; ou $a += 1; ou encore $a++; => additionMme chose pour * (multiplication), - (soustraction), / (division), ** (exponentielle)$a *= 3; $a /= 2; $a -= $b; ...% : modulo (17 % 3=>2)

    2. Chanes de caractres

    . concatnation$c = 'ce' . 'rise'; (=> $c devient 'cerise')$c .= 's'; (=> $c devient 'cerises')x rplique$b = 'a' x 5; => 'aaaaa'$b = 'jacqu' . 'adi' x 3 => 'jacquadiadiadi'$b = 'assez ! '; $b x= 5; => 'assez ! assez ! assez ! assez ! assez ! assez !'

    3. ParenthsesComme dans tous les langages de programmation, les parenthses peuvent tre utilises dans lesexpressions :$x = 2 * (56 - 78);

  • 8/3/2019 Perl 2000

    7/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 7

    B. Comparaisons

    1. de chiffres

    Ce sont les oprateurs habituels :>, >=, valu comme tant vrai !il faut crire :'b' eq 'a' => valu faux bien-sr

    3. de boolens

    Mme si le type boolen n'existe pas en tant que tel, des oprateurs existent :|| (ou inclusif), && (et), ! (ngation)(! 2 < 1) => vrai(1 < 2) && (2 < 3) => vrai($a < 2) || ($a == 2) quivaut ($a

  • 8/3/2019 Perl 2000

    8/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 8

    V. Syntaxe gnrale

    Chaque instruction doit tre termine par un point-virgule. Un passage la ligne ne signifie pasune fin d'instruction (ce qui est souvent source d'erreurs au dbut).$a = 'a'print $a;

    Ce programme est erron !$a = 'Une trs longue chane de caractre qui ne peut s'criresur une seule ligne';

    Ok !Les commentaires commencent par un #Tout le reste de la ligne est considr comme un commentaire.# voici un commentaire$a = 3; # Et en voici un autre

    Un bloc est un ensemble de commandes entoures par des crochets ({}), chaque commande tantsuivie d'un point-virgule.

    il manque ;

  • 8/3/2019 Perl 2000

    9/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 9

    A. Expressions conditionnelles

    Syntaxe

    Exempleif (expression) {

    bloc;}

    if ($prix{'datte'} > 20) {print 'Les dattes sont un peu cheres...';print 'Achetons plutt des cerises';

    }

    if (expression) {bloc;

    } else {bloc2;

    }

    if ($fruit eq 'fraise') {print 'parfait !';

    } else {print 'Bof!';print 'Je prfre sans ppin';

    }

    if (exp1) {bloc1;

    } elsif (exp2) {bloc2;

    } elsif (exp3) {bloc3;

    }

    if (($fruit eq 'cerise')or($fruit eq 'fraise')) {print 'rouge';

    } elsif ($fruit eq 'banane') {print 'jaune';

    } elsif ($fruit eq 'kiwi') {print 'vert';

    } else {print 'je ne sais pas...';

    }

    Remarque : il existe une autre notation :commande if (condition);print 'Quand nous chanterons...' if ($fruit eq 'cerise');Condition inverse :unless (condition) {

    bloc};Ou, selon la notation alternative:commande unless (condition);print 'Sans sucre SVP...' unless ($fruit eq 'fraise');

  • 8/3/2019 Perl 2000

    10/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 10

    B. Boucles

    1. tant que

    Syntaxe Exemplewhile (expression) {

    bloc;}

    $mon_argent = $porte_monnaie;while ($mon_argent > $prix{'cerise'}) {

    $mon_argent -= $prix{'cerise'};

    # ou $mon_argent = $mon_argent - $prix{'cerise'}print "Et un kilo de cerises !";

    }

    Remarque:L aussi il existe une autre notationcommande while (condition)print "Je compte : $i" while ($i++ < 10);

    2. rpter

    Syntaxe Exempledo {

    bloc;} while (expression);

    # Recherche du premier fruit 10);print "Je prend : $f";

    do {bloc;

    } until (expression);

    $i = 10;do {

    print $i;$i--;

    } until ($i == 0);

    Autre exemple : recherche du premier fruit par ordre alphabtique :$min = $fruits[0]; $i=0; # $min contient le premier fruit

    do {# Si on trouve un fruit moins grand (par ordre alphabtique)if ($fruits[$i] lt $min) {

    $min = $fruits[$i]; # il devient le minimum}$i++; # On passe au suivant

    } until ($i > $#fruits);

  • 8/3/2019 Perl 2000

    11/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 11

    3. pour

    Syntaxe Exemplefor (init;condition;cmd) {

    bloc;}

    for ($mon_argent = $porte_monnaie;

    $mon_argent > $prix{'cerise'};$mon_argent -= $prix{'cerise'}) {print "Et un kilo de cerises !";

    }

    Plus souvent utilis pour leparcours de tableaux :for ($i = 0;$i < taille; $i++) {

    bloc;}

    for ($i=0; $i

  • 8/3/2019 Perl 2000

    12/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 12

    C. Procdures

    1. dclaration

    sub ma_procedure {bloc;

    }

    Appel : &ma_procedure(); ou ma_procedure;2. avec paramtre(s)

    sub pepin {my($fruit) = @_;

    if (($fruit ne 'amande') and ($fruit ne 'fraise')) {print "ce fruit a des ppins !";

    }}

    Appel: &pepin('cerise'); ou pepin('cerise');Remarque: Linstruction my ralise une affectation dans des variables locales la procdureavec les lments du tableau. Les paramtres sont placs dans un tableau spcial @_, on peutventuellement rfrencer chaque paramtre par $_[0], $_[1] souvent au dtriment de lalisibilit ! Ce type de passage de paramtre est trs pratique car le nombre de paramtres nest pasforcment fixe.La procdure prcdente aurait pu s'crire :sub pepin {

    print " ce fruit a des ppins !"

    if (($_[0] ne 'amande') and ($_[0] ne 'fraise'));}

    3. fonctionsUne fonction est une procdure qui retourne quelque chose :sub pluriel {

    my($mot) = @_;

    $m = $mot.'s';return($m);

    }

    Appel: $mot_au_pluriel = &pluriel('cerise'); => 'cerises'Variables locales : Attention au petit pige habituel :$m = 'Dupont';$f = &pluriel('cerise');print "M. $m vend des $f\n";

    affichera : M. cerises vend des cerises !A cause du fait qu'on utilise la variable $m qui est modifie dans la fonction pluriel ...La solution consiste dclarer toutes les variables utilises dans les procdures en variables locales l'aide de my .A la troisime ligne de la procdure pluriel on rajoutera : my $m;

  • 8/3/2019 Perl 2000

    13/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 13

    VI. Fonctions prdfinies

    Quelques fonctions offertes par Perl pour manipuler les donnes. L'inventaire n'est pas exhaustif.A. Systme

    print : permet d'afficher un message, ou le contenu de variables.print 'bonjour';print 'J\'ai achet ', $nombre,' kilos de ', $fruit;print; => affiche le contenu de la variable spciale $_ou encore :print "J'ai achet $nombre kilos de ", &pluriel($fruit);Problmes courants : les caractres spciaux (',",$,...), que l'on peut afficher en lesprcdant d'un \ ex: print "Il dit alors : \"Non, je n'ai pas 50 \$ !\"...";Autre solution pour les longs textes :

    print

  • 8/3/2019 Perl 2000

    14/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 14

    C. Chanes de caractres

    chop(ch) Enlve le dernier caractre de la chane $ch='cerises'; chop($ch); => ch contient 'cerise' chomp(ch) Mme chose que chop mais enlve uniquement un retour-chariot ventuel en fin de chane. Utilis dans le parcours de fichiers (cf p. 18) length(ch) Retourne la longueur de la chane (nombre de caractres) $l = length('cerise') => 6 uc(ch) Retourne la chane en majuscules (Perl 5) $ch = uc('poire') => POIRE lc(ch) Retourne la chane en minuscules (Perl 5) $ch = lc('POIRE') => poire lcfirst(ch), ucfirst(ch) Retourne la chane avec simplement le premier caractre en

    minuscule/majuscule (Perl 5) $ch = ucfirst('la poire') => La poire split('motif', ch) Spare la chane en plusieurs lments (le sparateur tant motif). Le rsultat est un tableau. (Fonction trs utilise) @t = split(' / ', 'amande / fraise / cerise');

    => ('amande','fraise', 'cerise')

    substr(ch, indicedbut, longueur)Retourne la chane de caractre contenue dans ch, du caractre indicedbutet de longueur longueur(le premier caractre tant l'indice 0).

    $ch=substr('dupond', 0, 3) => 'dup'$ch=substr('Les fruits', 4) => 'fruits'

    index(ch, recherche) Retourne la position de recherche dans la chane ch

    $i=index('Le temps des cerises','cerise'); => 13

    Remarque:Par dfaut la plupart de ces fonctions travaillent sur la variable spciale $_$_ = 'amandes'; chop; print; => Affichera 'amande'

    D. tableaux, listes

    grep(/expression/, tableau) Recherche d'une expression dans un tableau if (grep(/poivron/, @fruits)); => faux if (grep(/$f/, @fruits)) {print 'fruit connu';} grep retourne un tableau des lments trouvs : @f = grep(/ise$/, @fruits); => fraise;cerise

  • 8/3/2019 Perl 2000

    15/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 15

    join(ch, tableau) Regroupe tous les lments d'un tableau dans une chane de

    caractres (en spcifiant le sparateur) print join(', ', @fruits); => affiche 'amande, fraise, cerise' pop (tableau) Retourne le dernier lment du tableau (et l'enlve) print pop(@fruits); => affiche 'cerise', @fruits devient ('amande','fraise') push (tableau, element) Ajoute un lment en fin de tableau (contraire de pop) push(@fruits, 'abricot');=> @fruits devient ('amande','fraise','abricot') shift(tableau) Retourne le premier lment du tableau (et l'enlve) print shift(@fruits)=> Affiche 'amande', @fruits devient ('fraise','abricot') unshift (tableau, element) Ajoute un lment en dbut de tableau unshift ('coing', @fruits);=> @fruits devient ('coing', 'fraise','abricot') sort (tableau) Tri le tableau par ordre croissant @fruits = sort (@fruits); => @fruits devient ('abricot', 'coing', 'fraise') reverse (tableau) Inverse le tableau @fruits = reverse(@fruits);=> @fruits devient ('fraise', 'coing', 'abricot') splice (tableau, dbut, nb) Enlve nb lments du tableau partir de l'indice dbut @derniers = splice(@fruits, 1,2); => @derniers devient ('coing', 'abricot')@fruits devient ('fraise')On peut ventuellement remplacer les lments supprims :@fruits=('fraise','pomme');splice(@fruits, 1,1, ('elstar','golden'));

    => @fruits contient ('fraise', 'elstar','golden')

    Exemple : Tirage des 7 chiffres du loto

    @c = (1..42); $i=0;print splice(@c, int(rand($#c+1)),1),"\n" while ($i++ < 7);

    On enlve 7 fois un lment (pris au hasard) du tableau des 42 chiffres.

    Pour information, lexemple prcdent aurait pu scrire :

    @c = (1..42); $i=0;while ($i < 7) {

    $nb = int(rand($#c + 1));print "$nb\n";splice (@c, $nb, 1);$i++;

    }

  • 8/3/2019 Perl 2000

    16/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 16

    E. tableaux indics

    Appels aussi tableaux associatifs each(tabi) Les couples cl/valeurs d'un tableau indic

    while (($fruit, $valeur) = each(%prix)) {print "kilo de $fruit : $valeur F";

    }

    Lutilisation habituelle est dafficher le contenu dun tableau

    Attention : Les cls d'un tableau associatif ne sont pas tries !

    ex:

    %t=('bernard'=>45, 'albert'=>32, 'raymond'=>2);while (($n, $s) = each(%t)) {print "$n,$s\n";}

    affichera :

    raymond,2

    albert,32bernard,45

    values(tabi) Toutes les valeurs d'un tableau indic (sous la forme d'un tableau)print 'les prix:', join(', ', values(%prix));

    keys(tabi) Toutes les "cls" d'un tableau indicprint 'les fruits:', join(', ', keys(%prix));

    exists(lment) Indique si un lment a t dfiniif (exists $prix{'kiwi'}) {

    print $prix{'kiwi'};} else {

    print 'Je ne connais pas le prix du kiwi !';}

    delete(lment) Supprimer un lmentdelete $prix{'cerise'};

    Remarque:

    Il n'existe pas de fonction permettant d'ajouter un lment dans un tableau indic (comme lepushdes tableaux normaux) car il suffit d'crire :$tab{nouvel-lment} = nouvelle-valeur;

  • 8/3/2019 Perl 2000

    17/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 17

    VII. Gestion de fichiers

    A. Ouverture

    L'ouverture consiste (le plus souvent) associer un descripteur de fichier (filehandle) unfichier physique (le fichier physique tant dcrit par son chemin d'accs).

    1. en lectureopen (FENT, 'fichier'); ouverture d'un fichier, rfrenc ensuite par FENT.

    open(FENT, 'fruits.txt');

    open(FENT, '/tmp/fruits.txt'); (sur Unix)

    open(FENT, 'd:\tmp\fruits.txt'); (sous DOS)

    open (COM, 'commande|');ouverture d'une commande dont le rsultat sera dans COM

    open (FDESS, 'ls /users/dess |'); (sur Unix)open (Dirtemp, 'dir c:\Temp |'); (sous DOS)

    Un fichier spcial : STDIN, le clavier (entre standard).

    2. en criture

    open (FSOR, '> fichier'); Ecriture du fichier, si ce fichier existait auparavant :

    l'ancien contenu est cras.

    open(FSOR, '> etat.txt');

    open (FSOR,'>>fichier'); Ecriture la fin du fichier, Le fichier est cr si besoinopen (FSOR, '>> liste.txt');

    open (FSOR, '| commande'); Le fichier de sortie sera en fait l'entre

    standard de la commande

    open (Imprime, '| lpr'); => La sortie sera imprimeopen (FMAIL, '| mail -s "Bonjour" lim\@univ-rennes1.fr');

    Deux fichiers spciaux : STDOUT, STDERR (respectivement: sortie standard, et sortie erreur),par dfaut l'cran.

    3. Gestion des erreurs (||)

    Lorsque lon ouvre un fichier il se peut quil y ait une erreur.En lecture : le fichier nexiste pas, ou ne peut pas tre lu (droits d'accs)...En criture : Le fichier existe mais on na pas le droit dcrire dessus, pour une commande Unix :la commande est inconnue...

    Il faut prendre lhabitude, quand on ouvre un fichier, de dtecter lerreur ventuelle.On peut le faire sous la forme suivante : (drive du C)

    if (! open (F, ...)) {die "Problme l'ouverture du fichier";

  • 8/3/2019 Perl 2000

    18/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 18

    }

    Ou sous la forme plus simple et plus usite en Perl :open (F, ...) || die "Pb d'ouverture";

    On peut, et c'est mme conseill, rcuprer le texte de l'erreur contenu dans la variable $!open (F, ...) || die "Pb d'ouverture : $!";

    B. Fermeture

    Commande closeclose FENT; close FSOR;

    C. Lecture

    $ligne = ;

    ex:$reponse = ; => lecture d'une ligne l'cran

    Remarque :- La fin de ligne (retour-chariot) est lue galement. Pour enlever cette fin de ligne il suffit d'utiliserla commande chop, ou son quivalent : chomp (enlve le dernier caractre uniquement si c'est unretour-chariot)- On peut lire toutes les lignes d'un fichier dans un tableau (en une seule instruction)

    @lignes = ;

    D. Ecriture

    print Fsor ce-que-je-veux;

    print FSOR 'DUPONT Jean';print FMAIL 'Comment fait-on pour se connecter SVP ?';print STDOUT "Bonjour\n";print STDERR 'Je dteste les oranges !';

    E. Parcours

    Se fait d'une manire relativement intuitive :open (F, $fichier) || die "Problme pour ouvrir $fichier: $!";while ($ligne = ) {

    print $ligne;}close F;

  • 8/3/2019 Perl 2000

    19/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 19

    F. Fichier spcial :

    Perl offre une fonctionnalit bien pratique : l'utilisation d'un fichier spcial en lecture quicontiendra ce qui est lu en entre standard.

    Exemple : le petit programme du dbut peut s'crire#!/bin/perl$i=0;while () {

    $i++;}print "Nombre de lignes : $i";

    Remarque: Lorsque, dans une boucle while , on ne spcifie pas dans quelle variable on lit le

    fichier : la ligne lue se trouvera dans la variale spciale $_ .Ainsi ce programme demandera d'crire quelques lignes et affichera le nombre de lignes

    qu'il a lues. Mais il permet galement de prendre un ou plusieurs fichiers en paramtre.(voir chapitre Passages de paramtres au programme page 25)

  • 8/3/2019 Perl 2000

    20/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 20

    VIII. Expressions rgulires

    Comme la commande "egrep" d'Unix, Perl offre la mme puissance de manipulation

    d'expressions rgulires.On utilise l'oprateur conditionnel =~ qui signifie "ressemble ".

    Syntaxe: chane =~/expression/

    Exemple: if ($nom =~ /^[Dd]upon/) {print "OK !";}=> Ok si nom est 'dupont', 'dupond', 'Dupont-Lassoeur'

    ^ signifie commence par

    On peut rajouter i derrire l'expression pour signifier qu'on ne diffrencie pas les majusculesdes minuscules.

    Le contraire de l'oprateur =~ est !~ (ne ressemble pas ...)if ($nom !~ /^dupon/i) {print "Non...";}

    A. Rappel

    Une expression rgulire (appele regexp ) est un motifde recherche, constitu de : Un caractre Un ensemble de caractres :

    [a-z] tout caractre alphabtique [aeiouy] toute voyelle. tout caractre sauf fin de ligne

    [a-zA-Z0-9] tout caractre alphanumrique le caractre ^ au dbut d'un ensemble signifie tout sauf

    ([^0-9] : tout caractre non numrique) Un caractre spcial: \n, retour-chariot , \t : tabulation, ^ : dbut de ligne, $ : fin

    de ligne\w signifie un mot , \s signifie un espace , \W tout sauf un mot , \S tout

    sauf un espace Quelques oprateurs : ? 0 ou 1 fois, * : 0 ou n fois, + : 1 ou n fois, | : ou

    (inclusif)

    Il y a mme l'oprateur {n,m} qui signifie de n m fois.

    Remarque : Si l'on veut qu'un carcatre spcial apparaisse tel quel, il faut le prcder d'un anti-slash (\), les caractres spciaux sont : ^ | ( ) [ ] { } \ / $ + * ? .

    ex: if (/\(.*\)/) {print;}qui affiche contenant des parenthses

    Attention :le caractre spcial ^ a deux significations diffrentes :

    1)

    dans un ensemble il signifie tout sauf 2) en dehors il signifie commence par

  • 8/3/2019 Perl 2000

    21/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 21

    1. Exemples dutilisation :

    Le traitement d'une rponse de type (Oui/Non) : en fait on teste que la rponse commence par "O"print Etes-vous d\accord ? ;$reponse = ;if ($reponse =~ /^O/i) { # commence par O (minus. ou majus.)

    print "Alors on continue";}

    Remarque: Le petit pige dans ce programme serait de mettre $reponse =~ /O/ (sans le ^ ) qui serait reconnu dans NON (qui contient un O )

    Recherche des numros de tlphone dans un fichier :while ($ligne = ) { # Tant quon lit une ligne

    if ($ligne =~ /([0-9][0-9]\.)+[0-9][0-9]/) {

    # si la ligne est de forme 99.45...print $ligne; # Alors on laffiche}

    }

    Remarque:Par dfaut lexpression rgulire est applique la variable $_.Donc crire if ($_ =~ /exp/) est quivalent crire : if (/exp/)

    2. Utilisation avance :Le contenu des parenthses d'une expression rgulire est retourn sous la forme d'un tableau.

    Exemple: Lister tous les hyperliens dun document HTML :un hyperlien est not sous la forme (avec quelquechose ne pouvant pascontenir le caractre ". Donc quelquechose sera reconnu par [^\"]+ qui signifie tout caractreautre que ".while ($ligne = ) {

    if ( ($h) = ($ligne =~ //Dbut de la balised'hyperlien

  • 8/3/2019 Perl 2000

    22/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 22

    On peut utiliser cette fonctionnalit pour faire des affectations :

    exemple :

    On a un fichier annuaire de la forme :

    M. Dupont tel: 99.27.82.67

    M. Durant tel: 99.34.54.56

    ...

    Mme Larivoisire 99.23.43.21

    Et on souhaiterait avoir un programme automatique qui soit capable de retrouver un numro detlphone daprs un nom (saisi lcran).

    print " entrez un nom : ";$nom = ;chomp($nom); # Enlve le retour-chariot en fin de chaneopen (ANNUAIRE, 'mon-annuaire.txt') ||die "Problme ouverture ";while ($l = ) {

    if ( ($tel) = ($l =~ /$nom.*(([0-9][0-9]\.)+[0-9][0-9])/)) {print "Le numro de tlphone de $nom est : $tel\n";

    }}close ANNUAIRE;

  • 8/3/2019 Perl 2000

    23/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 23

    B. Remplacement

    Comme le fait la commande sed en Unix, Perl permet de faire des remplacements surune chane de caractre, en utilisant la syntaxe :$chane =~ s/motif/remplacement/;o motifest une expression rgulire et remplacementce qui remplace.Exemples:$fruit =~ s/e$/es/; remplace un e final par es $tel =~ s/^02\./00\.33\.2\./; remplace les numros de tlphone (ouest de laFrance) par leur quivalent international

    On peux rfrencer une partie du motif dans le remplacement avec $1 ($1 est une variablespciale : le contenu de la premire parenthse).exemple :$tel =~ s/^0([0-4])\./00\.33\.$1\./; remplace TOUS les numros de

    tlphone par leur quivalent international

    Transformer automatiquement les noms darbre par arbre fruit$texte =~ s/([a-z]+)ier /arbre $1es /;

    cerisier sera traduit par arbre cerises (contenu de $1 => ceris)manguier => arbre mangues ...

    Les options :s/exp/remp/i; => Indiffrenciation minuscules/majusculess/exp/remp/g; => Remplace toute occurrence (pas seulement la premire)Pour remplacer un texte par le mme en majuscule (\U):s/([a-z])/\U$1/g;

    Exemple : mettre toutes les balises dun fichier HTML en majuscule (en fait on met le premiermot de la balise en majuscule). Ne pas oublier les fins de balises (commenant par / )while ($ligne = ) {

    $ligne =~ s/\

  • 8/3/2019 Perl 2000

    24/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 24

    IX. Variables et tableaux spciaux

    Petit rcapitulatif des variables spciales, ce sont les variables sous la forme $c (avec c uncaractre non alphabtique):

    $_ La dernire ligne lue (au sein dune boucle while )$! La dernire erreur, utilise dans les dtections derreursopen(F,fichier) || die "erreur $!"

    $$ Le numro systme du programme en cours: parfois utile car il change chaque fois$1, $2, ... Le contenu de la parenthse numro n dans la dernire expression rgulire$0 Le nom du programme ( utiliser, cela vous vitera de modifier le programme sil

    change de nom)Tableaux spciaux@_ qui contient les paramtres passs une procdure.@ARGV qui contient les paramtres passs au programme%ENV tableau indic contenant toutes les variables d'environnement

    @INC tous les rpertoires Perl contenant les librairies (rarement utilis)

    X. Structures complexes

    En Perl (version 5), on utilise la syntaxe des tableaux indics pour dsigner une structurecomplexe, exemple:$patient->{nom} = 'Dupont';$patient->{prenom} = 'Albert';$patient->{age} = 24;

    On peut initialiser la structure comme lorsqu'on initialise un tableau indic :

    $patient = {nom => 'Dupont',prenom => 'Albert',age => 24};

    Pour afficher le contenu d'une structure complexe :print "Nom:$patient->{nom} $patient->{prenom},ge:$patient->{age}";

    ou:foreach $champ ('nom','prenom','age') {

    print "$champ : $patient->{$champ}\n";}

    qui affiche:nom : Dupontprenom : Albertage : 24

    ou encore :foreach $champ (keys %$patient) {

    print "$champ : $patient->{$champ} ";}

    qui affiche:prenom : Albert

    nom : Dupontage : 24

    On utilise les accolades plutt que lesarenthses rfrence vers un tableau indic

    Les champs apparaissent dans le "dsordre"comme dans l'afficha e d'un tableau indic

    Pour rfrencer $patient comme untableau indic on utilise cette s ntaxe

  • 8/3/2019 Perl 2000

    25/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 25

    XI. Exemples

    A. Passages de paramtres au programme

    En Unix (ou Windows) on peut appeler un programme Perl en lui donnant des paramtres, commeon le fait pour les commandes Unix

    Les paramtres sont stocks dans un tableau spcial : @ARGVLe premier paramtre est donc $ARGV[0]

    exemple: bienvenue.pl#!/bin/perl$email = $ARGV[0];open (MAIL, "| mail -s 'Bonjour' $email") # commande unix mail

    || die "Problme : $!";print MAIL "Bonjour trs cher\n";print MAIL "Nous sommes trs heureux de vous envoyer un mail\n"print MAIL " A bientt\n"close MAIL;

    L'appel (sous Unix) se fera :bienvenue.pl [email protected]

    Si on veut traiter plusieurs paramtres il suffit de consulter le tableau @ARGV :ex: noel.pl#!/bin/perlforeach $email (@ARGV) {

    open (MAIL, "| mail -s '25 decembre' $email")|| die "Problme : $!";print MAIL "Joyeux nol\n";close MAIL;

    }

    Programme de recherche dun motif dans plusieurs fichiers, avec affichage du nom du fichierex: grep.pl#!/bin/perl# recherche un motif dans un ou plusieurs fichiers.

    # Le motif est demand l'utilisateurprint "Entrez votre motif de recherche\n";$motif = ; chomp($motif); # Enlever le retour-chariotforeach $f (@ARGV) {

    open(F, $f) || die "Impossible de lire le fichier $f : $!";while ($ligne = ) {

    if ($ligne =~ /$motif/) {print "On l'a trouv dans le fichier $f : $ligne";

    }}close F;

    }Remarque : On pourra utiliser ce dernier exemple sur Macintosh, on fera alors glisser les fichiers

  • 8/3/2019 Perl 2000

    26/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 26

    sur le programme Perl (c'est la seule manire de passer des paramtres sur Macintosh)

    B. Parcours de fichier

    Une des fonctionnalits de Perl est la manipulation de fichiers. Le parcours le plus simple,on l'a vu, est le suivant :#!/bin/perlwhile ($ligne = ) {

    print $ligne;}

    Qui se contente de lire le contenu du (ou des) fichier(s) pass(s) en paramtre pour lafficher l'cran.

    On peut avoir envie d'crire le rsultat d'une modification dans un fichier, par exemple, enlevertous les tags HTML et les crire dans un fichier "sanstag.txt" (ouvert donc en criture).

    #!/bin/perlopen (ST, '> sanstag.txt') || die "Impossible d'crire : $!";while ($ligne = ) {

    $ligne =~ s/]+>//g;# On remplace par rien du toutprint ST $ligne; # Le rsultat est crit dans le fichier

    }close ST;

    Par contre le traitement serait relativement complexe pour prendre tous les fichiers un par un, et, chaque fois, de lui enlever les "tags", Perl a une option (-i) qui permet de renommer le fichierd'origine et le rsultat de la transformation sera crite dans le fichier lui-mme.

    Cela parait compliqu mais c'est bien utile pour faire des transformations automatique surplusieurs fichiers en mme temps.Cette option (-iextension) se met dans la premire ligne :#!/bin/perl -i.avectagwhile ($ligne = ) {

    $ligne =~ s/]+>//g;print $ligne; # Affichage dans un fichier, pas lcran

    }

    Ainsi on peut lui donner en paramtre tous les fichiers HTML d'un rpertoire, ils seront tousrenomms sous la formefichier.HTML.avectag, et le fichier HTML de dpart sera le rsultat duprogramme.

    Remarque :

    Sous Unix, pour tester une petite commande Perl, on peut appeler Perl sans crer de programmeavec la syntaxe :noemed% perl -e 'commande'

    Ou mme on peut lutiliser pour appliquer une commande chaque ligne :ls /users/dess | perl n -e 'print if (! /protdess/);'

    => affiche tous les utilisateurs du DESS sauf protdess

    => Quand on utilise les option n et e , chaque ligne lue se trouve dans la variable spciale$_

  • 8/3/2019 Perl 2000

    27/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 27

    l'option -e permet de prendre une commande Perl en paramtrel'option -n permet d'appliquer la commande chaque ligne lueloption iextpermet de renommer un fichier avec lextension extavant dappliquer destraitements

    Exemple : Supprimer en une seule commande tous les tags HTML de plusieurs fichiers :perl -n -i.sanstag -e 's/]+>//g; print;' fichier1 fichier2

    Car l'option -i permet de renommer chaque fichier (avec lextension donne), ensuite, tout ce quiest lu est lu dans chaque fichier, tout ce qui est crit est crit dans chacun des fichiers.

    Autre exemple : Enlever toutes les lignes des fichiers qui comporte la chane de caractre secret perl -n -i.sanstag -e 'print unless (/secret/);' fic1 fic2

  • 8/3/2019 Perl 2000

    28/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 28

    C. Programmation objet

    Remarque : Ce paragraphe a t crit uniquement pour avoir un exemple de programmationobjet avec Perl : il ne sera pas dvelopp dans le cadre du DESS TIMH

    Pour ceux qui connaissent la programmation objet, Perl (version 5) permet de dfinir desobjets.

    En rsum on associe un objet des donnes et des mthodes . Ce qui simplifielutilisation ensuite de ces objets.En Perl objet : un objet est une rfrence, une mthode est une procdure, une classe dobjet est un package.

    En pratique :On cre un fichier Perl (avec le suffixe .pm) qui contient la classe dobjet que lon veut dfinirDeux mthodes particulires :

    new, constructeur, appele automatiquement la cration de lobjetet DESTROY, destructeur, appele automatiquement la destruction de lobjetNotes:

    On dclare les variables avec my plutt que local en Perl 5La fonction bless permet de rendre un objet visible de lextrieur.ex: maclasse.pm#!/bin/perlpackage maclasse; # Le nom que lon donnera lobjet

    sub new { # constructeur, Mthode appele la cration

    my ($classe, ...) = @_;# La classe est toujours le 1erparamtre...

    return bless rfrence;# on ne retourne pas une variable, mais sa rfrence,cf doc

    Perl}

    sub DESTROY { # destructeur, appele la destructionmy ($classe) = @_;...

    }

    sub methode1 { # On dfinit ainsi toutes les mthodesmy ($classe, ...) = @_;...

    }

    La classe de lobjet tant dfinie, on peut lutiliser maintenant dans un programme Perl de lamanire suivante :use maclasse;$mon_objet = new maclasse(paramtres); # Appel du constructeur$mon_objet->methode1(paramtres); # Appel dune mthode

    exit; # fin du programme, appel du destructeur de lobjet

  • 8/3/2019 Perl 2000

    29/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 29

    Comme exemple de programmation Objet nous allons prendre un objet patient qui seradfini par son nom et lunit mdicale dans laquelle il se trouve.

    Deux mthodes seront attribues au patient :transfert => Transfert vers une nouvelle unit mdicaleaffiche => Affiche le nom du patient ainsi que lunit mdicale dans laquelle il se trouve

    #!/bin/perlpackage patient; # Dclaration d'un package

    # Un nouveau patient consiste lui donner un nom# et ventuellement une unitsub new { # Constructeur

    my ($class, $nom, $unite) = @_;my $patient = {}; # Structure complexe

    $patient->{nom} = $nom;if ($unite) { # Si unit dfinie

    $patient->{unite} = $unite;} else {

    $patient->{unite} = 'Non dfinie';}return bless $patient;

    }

    sub transfert { # Transfert du patient vers nouvelle unitmy ($patient, $nvunite) = @_;

    $patient->{unite} = $nvunite;}

    sub affiche { # Affichage de la situation du patientmy ($patient) = @_;

    print "Le patient $patient->{nom} est dans l'unit$patient->{unite}\n";}

    sub DESTROY {

    my ($patient) = @_;

    print "Le patient $patient->{nom} est parti !\n";}1; # Une classe d'objet se termine toujours par 1;

  • 8/3/2019 Perl 2000

    30/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 30

    On peut maintenant utiliser cette classe dobjet dans un programme Perl :

    #!/bin/perluse sih; # Directive pour dire qu'on utilise le package SIH

    # Dclaration de deux nouveaux patients$patient1 = new patient('Dupont Pierre');$patient2 = new patient('Durand Albert', 'urgences');

    $patient1->affiche; # Appel d'une mthode pour patient$patient2->affiche; # (affichage de sa situation)

    $patient1->transfert('cardio'); # transfert vers nelle unite$patient2->transfert('pneumo');

    $patient1->affiche; # Affichage de la situation des 2 patients$patient2->affiche;# fin du programme, appel des destructeurs

    Le rsultat de ce programme sera :Le patient Dupont Pierre est dans l'unit Non dfinieLe patient Durand Albert est dans l'unit urgencesLe patient Dupont Pierre est dans l'unit cardioLe patient Durand Albert est dans l'unit pneumoLe patient Durand Albert est parti !Le patient Dupont Pierre est parti !

  • 8/3/2019 Perl 2000

    31/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 31

    D. Perl et CGI

    Rappel: Les CGI (common gateway interface), sont les programmes excuts sur un serveur Webet qui produisent (affichent) de lHTML (dans la plupart des cas, mais un CGI peut produire uneimage, un texte).

    Remarque: Un CGI est un programme (ici crit en Perl) qui doit afficher un header (ici Content-type: text/html suivit dune ligne vide), et qui ensuite affiche du HTML.

    Une alternative aux CGI : Les ASP du serveur Apache, http://www.apache-asp.org/Cest une nouvelle technologie (encore en cours de dveloppement) qui permetd embarquer des instructions Perl dans un code HTMLExemple : Affiche 10 fois Salut

    BonjourSalut

    1. Premier CGI: sans paramtres

    Exemple de petit programme CGI :Il sagit dun programme qui affiche les personnes du DESS (commande UNIX ls /users/DESS).

    #!/bin/perlprint "Content-type: text/html\n\n"; # Header indispensable

    # Corps du programmeopen(LISTE, 'ls /users/DESS |')

    || die "Impossible d'executer la commande ls: $!";print "Liste du DESS: ";while ($nom = ) {

    print "$nom";}print "";

    Ce programme affiche un fichier HTML qui ressemble :

    Content-type: text/html

    Liste du DESS: amellerbenajam...vannier

    Il sagit dun Header qui nesert que pour leserveur Web

    Le reste estdu HTML

  • 8/3/2019 Perl 2000

    32/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 32

    Le serveur Web affichera donc un document HTML qui aura laspect suivant:

    2. Deuxime CGI: associ un formulaire

    Le CGI prcdent est un cas particulier relativement rare... En gnral un programme CGI estparamtrable. Cest dire que lutilisateur peut entrer des donnes qui seront analyses par leCGI. Ce qui, sous Web, sous-entend lutilisation de formulaires.Le cas gnral est donc : Un formulaire pour entrer les donnes, et un CGI pour les exploiter.Rien noblige le formulaire tre sur le mme serveur que le CGI. Par contre le CGI doit tre dansun rpertoire spcial du serveur Web (en gnral /usr/local/httpd/cgi-bin/programme.pl) et seraaccessible avec lURL correspondante (en gnral http://serveur/cgi-bin/programme.pl).

    Exemple: Un petit CGI poli, bonjour.pl#!/bin/perluse CGI_Lite; # Utilisation d'un module CGI$cgi=new CGI_Lite; # Nouveau CGI%in = $cgi->parse_form_data; # Lecture des parametresprint "Content-type: text/html\n\n"; # Header indispensable

    # Corps du programmeprint "Bonjour $in{'nom'} !";

    Ce CGI utilise un module spcial (CGI_Lite) qui permet de lire les donnes dun formulaire et deles placer dans le tableau associatif %in. (cf. paragraphe XIV.B Installation de modules ).Il reste ensuite crire un formulaire qui remplit les donnes dont on a besoin (pour lexemple seulle paramtre nom est utilis).

    bonjour.htmlQuel est votre nom ?

    Le bouton submit est indispensable

    Il faut que le nom de lavariable corresponde celuiutilis dans le CGI

    Cest ici que lon nomme leCGI que lon appelle

  • 8/3/2019 Perl 2000

    33/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 33

    Ce formulaire HTML sous un navigateur Web :

    qui appellera le CGI bonjour.pl avec le paramtre nom ayant pour valeur Pr. Tournesol

    Le CGI rpondra alors:

    Remarque: Les diverses fonctionnalits du module CGI_Lite sont accessible via la documentationen ligne ladresse :http://www.med.univ-rennes1.fr/~poulique/cours/perl/CGI_Lite.html

  • 8/3/2019 Perl 2000

    34/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 34

    3. Un exemple un peu plus complexe

    Utilisation de diffrents tags pour saisir des informations.Un problme se pose avec les tags de type slection multiple : nous avons plusieurs valeursdans une mme variable... Pour rsoudre ce problme le module CGI_Lite offre une fonction$cgi->get_multiple_values ($in{'champ'}) qui permet de retourner sous forme de tableau lesdiffrentes valeur du champ.On va crer un CGI qui cre une salade de fruits avec les paramtres de lutilisateur.Voici le formulaire salade.html sous Netscape :

    Le programme CGI salade.pl rpondra :

  • 8/3/2019 Perl 2000

    35/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 35

    Source du formulaire: salade.htmlQuel est votre nom ?
    Que voulez vous dans votre salade de fruit ?
    Amande
    Banane
    Cerise
    Kiwi
    Et pour sucrer :sucre vannillsucre de canne

    siroprien du tout
    Une remarque ?

    Le source de salade.pl est un petit peu plus complexe :#!/bin/perluse CGI_Lite; # Module CGI_Lite...$cgi=new CGI_Lite; # On cree un objet de type CGI%in = $cgi->parse_form_data;# On lit les donneesprint "Content-type: text/html\n\n"; # Indispensable: Header# Les champs du formulaire sont maintenant dans le tableau# associatif %in# On fait donc reference a un champ par $in{'champ'}.# ATTENTION: Certains champs ont plusieurs valeurs# (SELECT multiple, boites-a-cocher ...)# dans ce cas on fait reference aux valeurs dans un tableau# obtenu par $cgi->get_multiple_values ($in{'champ'})print "Bonjour $in{'nom'} !

    \n";

    print "Voici donc une petite salade de fruits :\n";print "
    Compose de \n";# Pour toute valeurforeach $f ($cgi->get_multiple_values ($in{'fruit'})) {

    print "$f\n";}print "\n";print "Et pour la douceur un petit peu de $in{'sucre'}
    \n";if (exists($in{'remarques'})) { # Si le champ a ete rempli...

    print "Nous avons tenu compte de votre remarque
    \n";print "$in{'remarques'}\n";

    }

  • 8/3/2019 Perl 2000

    36/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 36

    E. Accs aux bases de donnes : DBI

    Un des aspects les plus intressants de Perl. Il permet d'intgrer des requtes SQL dans unprogramme.Depuis Perl version 5, on accde de la mme manire une base de donnes quelque soit lesystme choisi. Auparavant l'accs tait diffrent si on utilisait Oraperl (Oracle), ou Syperl(Sybase)... Maintenant on utilise un module DBI (database interface), ce qui permet de spcifier, la connexion, que l'on travaille sur une base Oracle, MySQL, Ingres, ou Sybase...

    Quand on installe Perl, il faut installer un module DBI, et un module

    DBD::Oracle (ouDBD::postgres, ouDBD::mysql ). Pour linstallation de modules cf XIV.BInstallation de modules p. 43).

    Au LIM nous utilisons indiffremment MySQL et Oracle (sur Unix uniquement)Voici quelques commandes utiliser pour accder aux bases de donnes. use DBI; En dbut de programme spcifie que l'on va faire de l'accs aux bases de donnes $dbh = DBI->connect("dbi:Oracle:cours", 'nom','mot-de-passe');

    => Connexion Oracle, sur la base de donnes qui s'appelle cours , avec lutilisateur nom etson mot de passe.Ou $dbh = DBI->connect("dbi:mysql:test", 'nom', 'mot-de-passe'); => Connexion MySQL, sur la base de donnes qui s'appelle test

    $dbh->disconnect; => Pour se dconnecter de la base de donnes en fin de programme $dbh->do("requte"); => Pour excuter une requte SQL.

    A n'utiliser qu'avec des requtes du genre create table, updatenom-table, insertintonom-table...Il est prfrable de traiter une erreur ventuelle dans ce genre d'opration (requte SQLmal formule, connexion interdite, ...). On le fait de la mme manire que pour la dtectiondes erreurs dans l'ouverture de fichier :$dbh->do("requte") || die "Pb de requte : $DBI::errstr";

    (l'erreur vient du systme de base de donnes, c'est pourquoi on utilise la variable$DBI::errstr)

    Pour une requte de type select, on va procder en quatre temps :1) prparation de la requte (prepare),

    2. excution (execute),3. parcours de chaque ligne retourne par la requte (fetchrow_array), dans une

    boucle,4. fin de la requte (finish)

    Exemple: Lister toutes les lignes d'une table$sel = $dbh->prepare("select * from table where condition");$sel->execute || die "Pb de slection : $DBI::errstr";while (($champ1, $champ2, ...) = $sel->fetchrow_array) {

    print "Contenu: $champ1, $champ2, ... \n";

    }$sel->finish; # On ferme la requte select

  • 8/3/2019 Perl 2000

    37/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 37

    Remarque:La lecture d'une ligne se fait donc avec $sel->fetchrow_array, qui retourne en fait untableau (d'o son nom). On pourrait donc crire @tab = $sel->fetchrow_array;Il est possible de paramtrer une requte, en mettant des points d'interrogation dans la requte auniveau du prepare, les paramtres seront spcifis dans leexecute.Exemple: Afficher le nom d'un patient dont le numro est demand l'utilisateur$sel = $dbh->prepare("select nom from patient where no = ?");print "Veuillez entrer un numro de patient";$nopatient = ; # lecture au clavier (ie entre standard)chomp($nopatient); # ne pas oublier denlever le retour-chariot$sel->execute($nopatient)

    || die "Pb de slection : $DBI::errstr";($nom) = $sel->fetchrow_array;print "Nom du patient $nopatient : $nom \n";$sel->finish;

    Voici maintenant un exemple de programme Perl qui cre une table "patient" avec trois champs(numro, nom, prnom), et qui demande de saisir une liste de noms - prnoms, et qui, pour chaqueligne, insre les donnes dans la table (le programme se charge d'incrmenter chaque fois lenumro de patient) :#!/bin/perluse DBI; # On va utiliser la base de donnes

    # Connexion Oracle sous l'utilisateur scott$dbh = DBI->connect("dbi:Oracle:cours", 'scott/tiger');

    # Cration de la table patient :$dbh->do("create table mpatient (

    numero integer not null primary key,nom varchar(40),prenom varchar(20))") || die "Pb cration table: $DBI::errstr";

    # Prparation d'une requte d'insertion des valeurs dans la BDD$ins = $dbh->prepare("insert into mpatient values (?, ?, ?)");

    $nopatient=0; # Initialisation du compteur

    print "Entrez une srie de nom-prenom, finir par CONTROL-D\n";

    while ($ligne = ) { # Pour chaque ligne lue...# Sparation en nom,prenom# caractre de sparation: tabulation($nom, $prenom) = split(/\t/, $ligne);

    # Excution de la requete (insert), dtection de l'erreur$ins->execute($nopatient, $nom, $prenom)

    || die "Pb l'insertion : $DBI::errstr";$nopatient++; # Incrmentation du compteur

    }$ins->finish; # On ferme la requte insert$dbh->disconnect; # Dconnexion de la BDD

    En fait, on lit les donnes de l'entre standard (), ce mme programme pourrait fonctionner

    aussi bien avec un fichier venu d'un tableur (Excel ou autre).

  • 8/3/2019 Perl 2000

    38/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 38

    Voici un programme qui affiche le contenu de la table mpatient (que l'on vient de crer).#!/bin/perluse DBI; # On va utiliser la base de donnes$dbh = DBI->connect("dbi:Oracle:cours", 'scott','tiger');# Prparation d'une requte de slection des valeurs

    $sel = $dbh->prepare("select * from mpatient");$sel->execute || die "Pb la slection : $DBI::errstr";print "Voici la liste des patients enregistrs";while (($nopatient, $nom, $prenom) = $sel->fetchrow_array) {# Pour chaque ligne lue...

    print "Patient no $nopatient : $nom, $prenom\n";}$sel->finish; # On ferme la requte insert$dbh->disconnect; # Dconnexion de la BDD

    Il existe dautres mthodes pour accder aux bases de donnes. Voir la documentation Perl cepropos, une copie HTML se trouve l'URL suivante :

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/DBI.html

    F. Accs une base de donnes depuis Web

    Pour accder une base de donnes depuis Web, cela sous-entend que lon va utiliser desprogrammes CGI qui accdent une base de donnes (CGI et DBperl)Voici un petit exemple simple qui liste tous les patients de notre base de donnes sous la formedun tableau (on demandera au pralable de saisir un motif de recherche des patients).Formulaire: listepatient.htmlVotre recherche ? Sous Netscape :

    La rponse sera :

  • 8/3/2019 Perl 2000

    39/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 39

    le programme listepatient.pl#!/bin/perluse DBI; # On va utiliser la base de donneesuse CGI_Lite; # Module CGI_Lite...$cgi=new CGI_Lite; # On cree un objet de type CGI

    %in = $cgi->parse_form_data;# On lit les donnees

    print "Content-type: text/html\n\n"; # Indispensable: Header

    $dbh = DBI->connect("dbi:Oracle:cours", 'scott','tiger');

    # Preparation d'une requete de selection des valeurs$sel = $dbh->prepare("select * from mpatient where nom like ?");$recherche = "%$in{'recherche'}%";$sel->execute($recherche)

    || die "Pb la slection : $DBI::errstr";

    print "Patients dont le nom contient $in{'recherche'}";print "Numronomprnom";$nblignes=0;while (($nopatient, $nom, $prenom) = $sel->fetchrow_array) {# Pour chaque ligne lue...

    print "$nopatient$nom$prenom\n";$nblignes++;

    }print "Nombre de patients : $nblignes";$sel->finish; # On ferme la requte insert

    $dbh->disconnect; # Dconnexion de la BDD

  • 8/3/2019 Perl 2000

    40/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 40

    XII. Bibliographie

    La bibliographie prsente les rfrences des livres en anglais. Il est prcis quand une traduction en

    Franais existe. Accessoirement une URL permet davoir des informations sur le livreTous les livres nont pas ts lus ! (les trois derniers). Un diteur revient souvent : OReilly quipossde une site contenant tous ses livres sur PERL : http://perl.oreilly.com/Sil ne faut retenir quune URL pour PERL ce serait celle-ci :http://www.perl.com/elle contient le programme Perl lui-mme (tlchargeable gratuitement bien sr)ainsi quune mine dinformation sur les diffrents modules, sur les adresses consulter

    LIVRE Titre, auteurs, prix, diteur, (ventuellementURL)

    Commentaires

    Programmation PerlLarry Wall, Tom Christiansen &Randal L.

    Schwartz,Dcembre 1996710 pages, 280Fed. O'Reilly & Associates

    ISBN: 2-84177-004-4http://www.editions-oreilly.fr/prog/pperl2/

    Le livre de rfrencesur Perl. Cette

    nouvelle versionintgre perl5.Larry Wall (crateurdu langage Perl) enest le co-auteur

    Introduction Perl, 2 ditionRandal L. Schwartz & Tom Christiansen.2nde dition fvrier 1998, 335 pages, 220F, ed.O'Reilly & Associates

    ISBN: 2-84177-41-9http://www.editions-oreilly.fr/prog/lperl.html

    Prface de LarryWall.Un livre pluspdagogique que

    programmationPerl , mais moinsfournit.

    Mastering Regular Expressions, PowerfulTechniques for Perl and Other ToolsJeffrey E. F. Friedlpremire dition Janvier 1997, 368 pages, $29.95ed. O'Reilly & AssociatesISBN: 1-56592-257-3http://www.ora.com/catalog/regex/

    Tout ce que vousavez toujours voulusavoir sur lesexpressionsrgulires.

    Serveurs CPAN (Comprehensive Perl ArchiveNetwork).ftp://ftp.oleane.net/pub/mirrors/CPAN/CPAN.htmlDocumentation Perl en franais :http://www.enstimac.fr/Perl/DocFr.htmlGroupe de news :fr.comp.lang.perl

    Il sagit de serveursofficiels desprogrammes Perl,des documentations,des modules...

    Apprendre Perl 5 en 21 joursDavid TillEd. SAMS,01-Mai-96,($28 - $39.99)ISBN: 0672308940http://www.ormart.com/bookstor/perl21.html

    ATTENTION: Une version franaise existe

    Gros livre quipermet dapprendrepas--pas toutes lesfonctionnalits dePerl. Il faut avoir 21

    jours devant vous !

  • 8/3/2019 Perl 2000

    41/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 41

    LIVRE Titre, auteurs, prix, diteur, (ventuellementURL)

    Commentaires

    Programmer des CGI sur World Wide Web

    Shishir Gundavaram ,1re dition, novembre 1996, 450 pages, 220francs, ed. O'Reilly & Associates

    ISBN: 2-84177-011-7http://www.editions-oreilly.fr/prog/cgi_prog.html

    Livre sur lestechniques CGIavec les exemples enPerl. Les diffrentstypes de CGI sontabords, mais pasforcment enprofondeur

    Perl resource kit (UNIX ou Windows)Larry Wall, Clay Irving, Nate Patwardhan, EllenSiever, Brian Jepsonpremire dition Novembre 1997

    1812 pages, $149.95ISBN 1-56592-370-7 (1-56592-409-6 pour Win)http://perl.oreilly.com/catalog/prkunix/

    Quatre volumes etun CDROM.Utilesi vous ntes pasconnect internet

    (cest en fait un miroir d' unCPAN). Inclu unmodule dinterfaceperl/java

    Introduction au langage PerlIl sagit de ce cours disponible sous Web lURL :http://www.med.univ-rennes1.fr/~poulique/cours/perl/Notamment les exemples sous :http://www.med.univ-rennes1.fr/~poulique/cours/perl/exemples/Autre Site interressant (contient un cours Perl, HTML et Unix) :ttp://www.esia.fr/public_html/Emmanuel.PIERRE/perl/

    Programmation avance en Perl

    Sriram Srinivasanjuin 1998, 448 pages, 280 francs

    ISBN : 2-84177-039-7

    Pour ceux quiveulent mieuxcomprendre lefonctionnement dePerl lui-mme.Comprend aussi uneinitiation PerlTk

    Perl en action, Tom Christiansen & Nathan

    Torkingtonseptembre 1999, 972 pages, 350 F

    ISBN : 2-84177-077-X

    Recettes et

    solutions. Une vraiemine dor.

    Perl for System AdministrationDavid N. Blank-EdelmanEd. QUEJuillet 2000($35)

    ISBN: 1-56592-609-9http://www.oreilly.com/catalog/perlsysadm/

    Utile pourladministration surWindows / NT(livre dcevant pourUnix, encore plus

    pour Mac OS)

  • 8/3/2019 Perl 2000

    42/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 42

    XIII. INDEX

    A

    abs.......................................................................13

    and..........................................................................7ARGV...................................................................25

    B

    bless......................................................................28

    C

    CGI_Lite...............................................................32chomp...................................................................14chop......................................................................14close......................................................................18cos.......................................................................13

    D

    DBI....................................................................... 36delete .................................................................... 16DESTROY............................................................28die.........................................................................13do ......................................................................... 10

    E

    each ...................................................................... 16else..........................................................................9elsif.........................................................................9exists.....................................................................16

    exit........................................................................13exp........................................................................13

    F

    for.........................................................................11foreach..................................................................11

    G

    grep.......................................................................14

    I

    if ...........................................................................9

    index.....................................................................14int.......................................................................13

    J

    join........................................................................15

    K

    keys.......................................................................16

    L

    lc ......................................................................... 14lcfirst.....................................................................14length....................................................................14local......................................................................28log.......................................................................13

    M

    mthode ................................................................28

    my...................................................................12, 28N

    new .......................................................................28not...........................................................................7

    O

    objet ......................................................................28open......................................................................17or ...........................................................................7

    P

    package................................................................. 28pop........................................................................15print ................................................................ 13, 18push ......................................................................15

    R

    rand ....................................................................13return....................................................................12reverse...................................................................15

    S

    shift.......................................................................15sin.......................................................................13

    sleep......................................................................13sort........................................................................15splice.....................................................................15split.......................................................................14sqrt ....................................................................13STDERR...............................................................17STDOUT...............................................................17sub ........................................................................12substr ....................................................................14system...................................................................13

    T

    tan.......................................................................13tkperl.......................................................................2

    U

    uc .........................................................................14ucfirst....................................................................14unshift...................................................................15until ......................................................................10use.........................................................................28

    V, W

    values....................................................................16while.....................................................................10

  • 8/3/2019 Perl 2000

    43/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 43

    XIV. ANNEXES : Installation et utilisation de Perl

    A. Installation du programme principal

    Tout commence ladresse http://www.perl.org/.Pour installer Perl, vous avez le choix entre tlcharger les sources du programme et lescompiler vous-mme (cest intressant, faisable, mais prvoyez 2-3 jours !).Bien heureux les utilisateurs de Linux qui ont Perl dentre de jeux !Sur les autres systmes, je vous conseille de tlcharger une distribution binaire que lontrouvera sur les serveurs CPAN (Comprehensive Perl Archive Netword) dont la page de gardeest : http://www.cpan.org/.Heureusement pour nous (malheureusement pour France Telecom) ils existe de nombreux sitesmiroirs, notamment en France :Exemple : ftp://ftp.pasteur.fr/pub/computing/CPAN/README.html

    Suivez le lien binary distributions ("ports") , et choisissez votre systme dexploitation.

    1. Sur Unix

    Tout dpend de lUnix, en gnral vous tlchargerez un fichier compact (utilisez gunzip ).Parfois le rsultat sera un installeur (programme faisant toute linstallation), parfois une archive(fichier finissant par .tar , que vous dcompacterez en utilisant la commande tar xvf

    fichier.tar), lire les instruction dinstallation dans un fichier README .

    2. Sur Windows ou NTJe vous propose de le tlcharger directement sur le Web une version ActiveState :http://www.activestate.com/Products/ActivePerl/Download.html

    Il suffit de cliquer sur le lien "Windows Intel", aprs le tlchargement, il suffit de double-cliquersur ActivePerl-5.6.0.618-MSWin32-x86-multi-thread.msi et de suivre les instructions...

    3. Sur Mac OS

    ftp://ftp.pasteur.fr/pub/computing/CPAN/ports/index.html#macVous tlchargez un fichier compact (ex : Mac_Perl_520r4_appl.bin), que vous traiterez aveclapplication stuffit expander , qui crera un fichier excutable (ex : Mac_Perl_520r4_appl).

    B. Installation de modules

    Les modules sont des librairies qui ajoutent des possibilits au langage Perl. Dans ce coursnous avons vu les deux exemples de modules : CGI_Lite et DBI , ces modules ne sont paslivrs avec le langage, cest vous de les installer.Ces modules sont tous rpertoris dans les archives CPAN. Un utilitaire vous permet detlcharger, compiler et installer un module depuis Internet. Cela signifie quil faut que vous soyezconnects Internet, et que vous connaissez les paramtres rseau (il faudra spcifier, si besoin,

    votre proxy).

  • 8/3/2019 Perl 2000

    44/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 44

    1. Sur Unix

    Utilisez la commande perl MCPAN e shell Pour installer un module, tapez :install CGI_Liteinstall Date::Manip

    Pour recherche un module (par exemple : les modules parlant de CGI) tapez :i /CGI/

    2. Sur Windows

    Vous trouverez dans votre distribution un programme ppm.bat , il suffit de le lancer, et vousaccderez la mme interface que sous Unix.

    Pour installer un module, tapez :

    install CGI_Liteinstall Date-Manip

    Pour recherche un module (par exemple : les modules parlant de CGI) tapez :search CGI

    3. Sur Macintosh

    Contrairement aux autres distributions, il ny a pas (demble) dutilitaire permettant de chargerautomatiquement les modules. Nanmoins un utilitaire a t dvelopp : cpan-mac , tlcharger ladresse :http://pudge.net/macperl

    4. Quelques modules utiles

    Nom du module CommentairesLWP : :UserAgent Utilitaires pour la consultation automatiques de site

    WebCGI_Lite Tout ce quil faut pour rcuprer les

    informations dun formulaire Web dans un CGICGI Offre plus de possibilits que le prcdent module,

    mais moins facile daccsDBI Accs aux bases de donnes

    Date : :Manip Tout ce quil faut pour manipuler des dates (ycompris en Franais !)GD Permet de crer des images GIFNet::LDAP Consulter des annuaires LDAP automatiquementNet::SMTP Envoyer des courriers lectroniqueMail::POP3Client Consultation automatise de courrierGIFGraph Crer des images GIF pour faire des graphes

    statistiques (Camemberts ou barres)Apache Un ensemble de modules pour la connexion avec

    Apache (installation complexe)XML : :Parse Permet de manipuler des fichiers XML

  • 8/3/2019 Perl 2000

    45/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 45

    C. Documentation en ligne

    Sur Unix, vous disposez dun manuel habituel : man perl Vous accderez aussi la documentation de chaque module en tapant :Perldoc module

    Exemple : perldoc DBD::mysql

    Documentation sur Internet :http://www.perldoc.com/ou, en franais :http://www.enstimac.fr/Perl/DocFr/perl.html

    D. Perl sous UnixIl faut bien comprendre quun script Perl est un texte contenant des instructions Perl. Ce texte seraensuite excut par linterprteur Perl.

    On crera donc un fichier texte laide dun diteur de texte (comme vi ou emacs )De prfrence, suffixer les scripts perl par lextension .pl

    Crer le script :emacs nom-fichier.pl

    Il faut obligatoirement commencer par la ligne :#!/bin/perl (ou le chemin daccs linterprteur Perl)

    Syntaxe Unix pour dsigner linterprteur

    Les programmes Perl sont des excutables , il faut donc placer le mode x sur le programme.

    E. Perl sous Windows

    Lancer notepad (ou tout un autre diteur de texte)Et crer un fichier qui s'appellera "bonjour.pl" (".pl" est l'extension dsignant perl)

    - taper le programme perl- l'enregistrer (bien penser lenregistrer au format texte).- Pour l'excuter, deux solutions :

    - dans le navigateur Windows "double-cliquer" dessus (problme : on na le temps de rienvoir !)- Ouvrir une session DOS et taper : perl bonjour.pl

    - Pour la mise au point: n'oubliez pas de le sauvegarder avant de l'excuterLe principal pige sous Windows : les chemins daccs aux fichiers sont dsigns par des \ (sparateur de fichiers) , ce qui amne souvent crire :Open (F, "C:\\repertoire\\$fichier") ;

  • 8/3/2019 Perl 2000

    46/47

    DESS TIMH Introduction au langage Perl

    http://www.med.univ-rennes1.fr/~poulique/cours/perl/ Page 46

    F. Utilisation de MacPerl

    Macperl est donc une implmentation du langage Perl pour Macintosh. Il sagit de la version 5 dePerl.

    Ensuite il faut ouvrir un nouveau script (programme) en choisissant new dans le menu file :

    Il faut ensuite taper un petit programme Perl. Essayez le programme suivant :print "Bonjour !!!";Et choisissez run untitled dans le menu script , une fentre apparatra alors avec le rsultatdu programme...

    Vous pouvez sauvegarder votre programme Perl.

    La fentre de droite permet galement de saisir des donnes, exemple : le programme fraise print "Aimez-vous les fraises ?";$reponse = ;

    print "Moi aussi !" if ($reponse =~ /^O/);

    On tape alors la rponse (suivie d'un retour-chariot ), le programme rpond:

    Le crayonindique que leprogrammeattend que

    uel ue chose

  • 8/3/2019 Perl 2000

    47/47

    DESS TIMH Introduction au langage Perl

    Vous remarquerez que le menu script disparat le temps de lexcution du programme.

    Essayez le programme suivant : changement des a en @ while () {

    s/a/@/g;print;

    }

    Quand vous excutez ce programme, il vous demande chaque fois de taper une phrase, et vousrpond automatiquement. Pour mettre fin votre saisie il faut alors taper CONTROL-D (commesous Unix).Sauvegarder ce fichier (sous le nom change_a par exemple)... Vous pouvez le sauvegardersous le format droplet , ceci vous permettra dutiliser ensuite votre programme comme unvritable convertisseur, sur le finder vous pourrez prendre un document texte (par exemple lefichier texte.txt) et le faire glisser sur licne de votre programme. Vous verrez alors apparatre lafentre de MacPerl avec le contenu de votre fichier converti...

    Le crayon adisparu, positionnormale !