La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France Introduction à Perl."— Transcription de la présentation:

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

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

3 Développement 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 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)

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"; }

5 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)

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) ; } Entrées-sorties, scalaires (1/2)

7 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)

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)

9 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)

10 #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)

11 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)

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)

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 évaluée avant l'expression. do {instructions} until (condition) ; Les instructions sont exécutées avant la condition. Structures conditionnelles (2/4)

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)

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)

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 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

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

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

19 $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

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 élément du tableau $a[3] = 17; ${$aref}[3] = 17 Affecter un élément %h %{$href}Une table de hachage keys %hkeys %{$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)

21 ${$aref}[3] est abrégé en $aref->[3] ${$href}{'red'} est abrégé en $href->{'red'} Utiliser des références (2/2)


Télécharger ppt "Eric Laporte Institut Gaspard-Monge Université de Marne-la-Vallée France Introduction à Perl."

Présentations similaires


Annonces Google