eric laporte institut gaspard-monge universit© de marne-la-vall©e france laporte/...

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

Post on 04-Apr-2015

104 views

Category:

Documents

2 download

Embed Size (px)

TRANSCRIPT

  • Page 1
  • Eric Laporte Institut Gaspard-Monge Universit de Marne-la-Valle France http://www-igm.univ-mlv.fr/~laporte/ Introduction Perl
  • Page 2
  • 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
  • Dveloppement collaboratif, logiciel libre Principal auteur : Larry WallVersion : 5 Comprehensive Perl Archive Network ( http://www.cpan.org ) : sources, binaires, modules, documentation Philosophie : faire ce que l'utilisateur cherche faire Compilation et interprtation - un interprteur Perl compile le programme puis l'excute sans sauvegarder la forme compile (utilisation la plus courante) - un compilateur Perl compile le programme (plusieurs langages cibles sont possibles) et le sauvegarde sans l'excuter Notions de base (1/2)
  • Page 4
  • # villePays.pl open(INFILE, "villePays.lst") or die "Impossible d'ouvrir villePays.lst en lecture : $!"; my %table; while ( ) { 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
  • Pas de programme principal, mais il peut y avoir des fonctions # marque un commentaire d'une ligne Les parenthses autour des fonctions prdfinies sont facultatives $! $_ etc. variables prdfinies @villes : tableau %table : table de hachage $ville : scalaire (= types simples) Notions de base (2/2)
  • Page 6
  • #motDePasse.pl my $secretword = "lama" ; print "Votre nom ? " ; my $name = ; chomp ($name) ; print "Hello, $name !\n" ; print "Quel est le mot de passe ? " ; my $guess = ; chomp $guess ; while ($guess ne $secretword) { print "Faux, essayez encore. Quel est le mot de passe ? "; $guess = ; chomp ($ guess) ; } Entres-sorties, scalaires (1/2)
  • Page 7
  • my : oprateur qui dclare une variable locale (si on ne dclare pas la variable, elle est globale) : oprateur 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 : oprateur de comparaison de chanes (ordre alphabtique) Entres-sorties, scalaires (2/2)
  • Page 8
  • #tableau.pl my @words = ("alpaca", "dromadaire", "lama") ; #liste print "Quel est le mot de passe ? " ; my $guess = ; chomp $guess ; my $i = 0 ; my $correct = "maybe" ; while ($correct eq "maybe") { if ($words[$i] eq $guess) { $correct = "yes" ; } elsif ($i ; chomp ($ guess) ; $i = 0 ; } } Tableaux (1/2)
  • Page 9
  • Un tableau est un nom de liste, il commence par @ et il est initialis par une liste Pas de distinction entre nombres et chanes la dclaration Accs un tableau : avec $ et [] Elments numrots partir de 0 < : oprateur de comparaison de nombres if () {} elsif () {}... else {} accolades obligatoires mme pour une seule instruction Tableaux (2/2)
  • Page 10 "alpaca", "fabien" => "dromadaire", "lionel" => "lama", "nicolas" => "alpaca") ; print "Votre nom ? " ; my $n"> "alpaca", "fabien" => "dromadaire", "lionel" => "lama", "nicolas" => "alpaca") ; print "Votre nom ? " ; my $name = ; chomp ($name) ; print "Salut, $name !\n" ; my $secretword = $words{$name} ; print "Quel est le mot de passe ? " ; my $guess = ; chomp $guess ; while ($guess ne $secretword) { print "Faux, essayez encore. Quel est le mot de passe ? "; $guess = ; chomp ($ guess) ; } Tables de hachage (1/2)"> "alpaca", "fabien" => "dromadaire", "lionel" => "lama", "nicolas" => "alpaca") ; print "Votre nom ? " ; my $n" title="#hachage.pl my %words = ( "dominique" => "alpaca", "fabien" => "dromadaire", "lionel" => "lama", "nicolas" => "alpaca") ; print "Votre nom ? " ; my $n">
  • #hachage.pl my %words = ( "dominique" => "alpaca", "fabien" => "dromadaire", "lionel" => "lama", "nicolas" => "alpaca") ; print "Votre nom ? " ; my $name = ; chomp ($name) ; print "Salut, $name !\n" ; my $secretword = $words{$name} ; print "Quel est le mot de passe ? " ; my $guess = ; chomp $guess ; while ($guess ne $secretword) { print "Faux, essayez encore. Quel est le mot de passe ? "; $guess = ; chomp ($ guess) ; } Tables de hachage (1/2)
  • Page 11
  • Le nom d'une table de hachage commence par % et elle est initialise par une liste (on peut remplacer les => par des virgules) Accs aux valeurs : avec $ et {} Si la cl n'est pas trouve, la valeur est undef. Tables de hachage (2/2)
  • Page 12
  • #controle.pl my $stops = 0 ; if ($stops) { print "Arret $stops. \n" ; } else { print "Depart. \n" ; } while ($stops ) ; } unless ($stops) { print "Depart. \n" ; } else { print "Arret $stops. \n" ; } until ($stops eq 0) { $stops -- ; print "Prochain arret ? " ; chomp($location = ) ; } print "Terminus.\n" if ($stops eq 0) ; Structures conditionnelles (1/4)
  • Page 13
  • 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 value avant l'expression. do {instructions} until (condition) ; Les instructions sont excutes avant la condition. Structures conditionnelles (2/4)
  • Page 14
  • #controle2.pl my $stops = 0 ; do { $stops ++ ; print "Prochain arret ? " ; chomp($location = ) ; } while ($stops ) ; } until ($stops eq 0) ; print "Terminus.\n" ; for ($stops = 0 ; $stops ) ; } print "Terminus. \n" if ($stops == 5) ; Structures conditionnelles (3/4)
  • Page 15
  • #controle3.pl my $i = 0 ; foreach $i (1,2,3,4,5) { # $i est local foreach print "Prochain arret ? " ; chomp($location = ) ; } 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
  • #lireFichier.pl my $secretword = "lama" ; print "Quel est le mot de passe ? " ; my $guess ; while ($guess= ) { 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 ( ) {# Variable par dfaut $_ 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
  • #joinSplit.pl my @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
  • #piles.pl my @odd = (1, 3, 5, 7) ; print join(",", @odd), "\n" ; push(@odd, 9, 11, 13) ; #empiler print join(",", @odd), "\n" ; my $last = pop(@odd) ; #depiler print join(",", @odd), "\n" ; unshift(@odd, -5, -3, -1) ; #empiler a gauche print join(",", @odd), "\n" ; my $first = shift(@odd) ; #depiler a gauche print join(",", @odd), "\n" ; Piles
  • Page 19 4, AUG => 8 }; # $href est maintenant une rfrence une table de hachage Crer des rfrences">
  • $aref = \@array; # $aref est maintenant une rfrence @array $href = \%hash; # $href est maintenant une rfrence %hash $aref = [ 1, "foo", undef, 13 ]; # $aref est maintenant une rfrence une liste $href = { APR => 4, AUG => 8 }; # $href est maintenant une rfrence une table de hachage Crer des rfrences
  • Page 20
  • {$aref} peut tre utilis comme un tableau {$href} peut tre utilis comme une table de hachage @a @{$aref} Un tableau reverse @a reverse @{$aref} Retourner le tableau $a[3] ${$aref}[3] Un lment du tableau $a[3] = 17; ${$aref}[3] = 17 Affecter un lment %h %{$href}Une table de hachage keys %hkeys %{$href} Liste des cls de la table $h{'red'} ${$href}{'red'} Un lment de la table $h{'red'} = 17 ${$href}{'red'} = 17 Affecter un lment Utiliser des rfrences (1/2)
  • Page 21
  • ${$aref}[3] est abrg en $aref->[3] ${$href}{'red'} est abrg en $href->{'red'} Utiliser des rfrences (2/2)

View more