21
Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France http://www-igm.univ-mlv.fr/~laporte/ Introduction à Perl

Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

Embed Size (px)

Citation preview

Page 1: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

Eric LaporteInstitut Gaspard-Monge

Université de Marne-la-ValléeFrance

http://www-igm.univ-mlv.fr/~laporte/

Introduction à Perl

Page 2: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

Schwartz, R., Christiansen, T., 1998 (2e édition), Introduction à Perl, O'Reilly, 303 p.

Wall, L., Christiansen, T., Orwant, J., 2001 (3e édition), Programmation en Perl, O'Reilly, 1045 p.

Ray, E., McIntosh, J., 2003, Perl & XML, O'Reilly, 211 p.

Bibliographie

Page 3: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

Développement collaboratif, logiciel librePrincipal auteur : Larry Wall Version : 5Comprehensive Perl Archive Network (http://www.cpan.org) :sources, binaires, modules, documentationPhilosophie : faire ce que l'utilisateur cherche à faire

Compilation et interprétation- un interpréteur Perl compile le programme puis l'exécute sans sauvegarder la forme compilée (utilisation la plus courante)- un compilateur Perl compile le programme (plusieurs langages cibles sont possibles) et le sauvegarde sans l'exécuter

Notions de base (1/2)

Page 4: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

# villePays.plopen(INFILE, "villePays.lst") or die "Impossible d'ouvrir villePays.lst en lecture : $!";my %table;while (<INFILE>) { chomp; my ($ville, $pays) = split /, /; push @{$table{$pays}}, $ville; }foreach $pays (sort keys %table) { print "$pays: "; my @villes = @{$table{$pays}}; print join ', ', sort @villes; print ".\n"; }

Page 5: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

Pas de programme principal, mais il peut y avoir des fonctions

# marque un commentaire d'une ligne

Les parenthèses autour des fonctions prédéfinies sont facultatives

$! $_ etc. variables prédéfinies

@villes : tableau%table : table de hachage$ville : scalaire (= types simples)

Notions de base (2/2)

Page 6: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#motDePasse.plmy $secretword = "lama" ;print "Votre nom ? " ;my $name = <STDIN> ;chomp ($name) ;print "Hello, $name !\n" ;print "Quel est le mot de passe ? " ;my $guess = <STDIN> ;chomp $guess ;while ($guess ne $secretword) { print "Faux, essayez encore. Quel est le mot de passe ? "; $guess = <STDIN> ; chomp ($ guess) ; }

Entrées-sorties, scalaires (1/2)

Page 7: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

my : opérateur qui déclare une variable locale (si on ne déclare pas la variable, elle est globale)

<...> : opérateur qui lit une ligne dans un descripteur de fichier

chomp() : fonction qui supprime la fin de ligne finale (modifie la variable à laquelle elle s'applique)

ne : opérateur de comparaison de chaînes (ordre alphabétique)

Entrées-sorties, scalaires (2/2)

Page 8: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#tableau.plmy @words = ("alpaca", "dromadaire", "lama") ; #listeprint "Quel est le mot de passe ? " ;my $guess = <STDIN> ;chomp $guess ;my $i = 0 ;my $correct = "maybe" ;while ($correct eq "maybe") { if ($words[$i] eq $guess) { $correct = "yes" ; } elsif ($i < 2) { $i ++ ; } else { print "Faux, essayez encore. Quel est le mot de passe ? "; $guess = <STDIN> ; chomp ($ guess) ; $i = 0 ; } }

Tableaux (1/2)

Page 9: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

Un tableau est un nom de liste, il commence par @ et il est initialisé par une liste

Pas de distinction entre nombres et chaînes à la déclaration

Accès à un tableau : avec $ et []

Eléments numérotés à partir de 0

< : opérateur de comparaison de nombres

if () {} elsif () {} ... else {}accolades obligatoires même pour une seule instruction

Tableaux (2/2)

Page 10: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#hachage.plmy %words = ( "dominique" => "alpaca", "fabien" => "dromadaire", "lionel" => "lama", "nicolas" => "alpaca") ;print "Votre nom ? " ;my $name = <STDIN> ;chomp ($name) ;print "Salut, $name !\n" ;my $secretword = $words{$name} ;print "Quel est le mot de passe ? " ;my $guess = <STDIN> ;chomp $guess ;while ($guess ne $secretword) { print "Faux, essayez encore. Quel est le mot de passe ? "; $guess = <STDIN> ; chomp ($ guess) ; }

Tables de hachage (1/2)

Page 11: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

Le nom d'une table de hachage commence par % et elle est initialisée par une liste (on peut remplacer les => par des virgules)

Accès aux valeurs : avec $ et {}

Si la clé n'est pas trouvée, la valeur est undef.

Tables de hachage (2/2)

Page 12: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#controle.plmy $stops = 0 ;if ($stops) { print "Arret $stops. \n" ; }else { print "Depart. \n" ; }while ($stops < 5 && $location ne "terminus") { $stops ++ ; print "Prochain arret ? " ; chomp($location = <STDIN>) ; }unless ($stops) { print "Depart. \n" ; }else { print "Arret $stops. \n" ; }until ($stops eq 0) { $stops -- ; print "Prochain arret ? " ; chomp($location = <STDIN>) ; }print "Terminus.\n" if ($stops eq 0) ;

Structures conditionnelles (1/4)

Page 13: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

unless(condition) : équivalent à if(not(condition))

until(condition) : équivalent à while(not(condition))

expression if(condition) ;L'expression ne peut pas être une instruction complexe.Possible aussi avec unless, while, until.

expression until(condition) ;La condition est évaluée avant l'expression.

do {instructions} until (condition) ;Les instructions sont exécutées avant la condition.

Structures conditionnelles (2/4)

Page 14: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#controle2.plmy $stops = 0 ;do { $stops ++ ; print "Prochain arret ? " ; chomp($location = <STDIN>) ; }while ($stops < 5 && $location ne "terminus") ;print "Terminus. \n" unless ($stops == 5) ;do { $stops -- ; print "Prochain arret ? " ; chomp($location = <STDIN>) ; }until ($stops eq 0) ;print "Terminus.\n" ;for ($stops = 0 ; $stops < 5 ; $stops ++) { print "Prochain arret ? " ; chomp($location = <STDIN>) ; }print "Terminus. \n" if ($stops == 5) ;

Structures conditionnelles (3/4)

Page 15: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#controle3.plmy $i = 0 ;foreach $i (1,2,3,4,5) { # $i est local а foreach print "Prochain arret ? " ; chomp($location = <STDIN>) ; }print "$i. \n" ; # vaut toujours 0.my @words = ("alpaca", "chameau", "dromadaire", "lama") ;foreach $i (reverse @words) { print "$i" ; }print "\n" ;foreach (reverse @words) { # Variable par defaut print "$_" ; }print "\n" ;foreach (reverse @words) { print ; }print "\n" ;

Structures conditionnelles (4/4)

Page 16: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#lireFichier.plmy $secretword = "lama" ;print "Quel est le mot de passe ? " ;my $guess ;while ($guess=<STDIN>) { chomp $guess ; if($guess ne $secretword) { print "Faux, essayez encore. Quel est le mot de passe ? "; } else { die "Exact.\n" ; } }

print "Quel est le mot de passe ? " ;while (<STDIN>) { # Variable par défaut $_ chomp $_ ; # On peut supprimer $_ if($_ ne $secretword) { #Ici on ne peut pas le supprimer print "Faux, essayez encore. Quel est le mot de passe ? "; } else { die "Exact.\n" ; } }

Lecture d'un fichier

Page 17: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#joinSplit.plmy @odd = (1, 3, 5, 7) ;my $string = join(",", @odd) ;print $string, "\n" ;my $line = "merlyn::118:10:Randal:/home/merlyn:/usr/bin/perl:" ;my @fields = split(/:/,$line) ;print "$fields[0], $fields[1], $fields[2]...\n" ;@fields = split(/:+/,$line) ;print "$fields[0], $fields[1], $fields[2]...\n" ;

join, split

Page 18: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

#piles.plmy @odd = (1, 3, 5, 7) ;print join(",", @odd), "\n" ;push(@odd, 9, 11, 13) ; #empilerprint join(",", @odd), "\n" ;my $last = pop(@odd) ; #depilerprint join(",", @odd), "\n" ;unshift(@odd, -5, -3, -1) ; #empiler a gaucheprint join(",", @odd), "\n" ;my $first = shift(@odd) ; #depiler a gaucheprint join(",", @odd), "\n" ;

Piles

Page 19: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

$aref = \@array; # $aref est maintenant une référence à @array$href = \%hash; # $href est maintenant une référence à %hash

$aref = [ 1, "foo", undef, 13 ]; # $aref est maintenant une référence à une liste $href = { APR => 4, AUG => 8 }; # $href est maintenant une référence à une table de hachage

Créer des références

Page 20: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

{$aref} peut être utilisé comme un tableau{$href} peut être utilisé comme une table de hachage

@a @{$aref} Un tableaureverse @a reverse @{$aref} Retourner le tableau$a[3] ${$aref}[3] Un élément du tableau$a[3] = 17; ${$aref}[3] = 17 Affecter un élément

%h %{$href} Une table de hachagekeys %h keys %{$href} Liste des clés de la table$h{'red'} ${$href}{'red'} Un élément de la table$h{'red'} = 17 ${$href}{'red'} = 17 Affecter un élément

Utiliser des références (1/2)

Page 21: Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France laporte/ Introduction à Perl

${$aref}[3] est abrégé en $aref->[3]${$href}{'red'} est abrégé en $href->{'red'}

Utiliser des références (2/2)