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

CSI 3525, Automne 2001 Une introduction au Perl Preparee par Stan Szpakowicz, base sur ces sources et inspirations:

Présentations similaires


Présentation au sujet: "CSI 3525, Automne 2001 Une introduction au Perl Preparee par Stan Szpakowicz, base sur ces sources et inspirations:"— Transcription de la présentation:

1 CSI 3525, Automne 2001 Une introduction au Perl Preparee par Stan Szpakowicz, base sur ces sources et inspirations: http://www.cs.utk.edu/~plank/plank/classes/cs494/notes/Perl/lecture.html Randal L. Schwartz and Tom Christiansen, Learning Perl 2 nd ed., OReilly Randal L. Schwartz and Tom Phoenix, Learning Perl 3 rd ed., OReilly Nathalie Japkowicz Go O'Reilly!

2 CSI 3525 Perl, page 2 Perl: Survol (1) Perl = Practical extraction and report language Perl = Pathologically eclectic rubbish lister Cest un langage puissant a usage general, qui est particulierement utile pour lecriture rapide et sans trop de principes de programmes (quick and dirty programs!) Le langage a ete invente par Larry Wall, sans excuses pour son manque delegance (!) Si vous connaissez le C et lUnix, vous pouvez apprendre Perl (ou au moins, un bon morceau de Perl ) en quelques jours.

3 CSI 3525 Perl, page 3 Perl: Survol (2) Dans la hierarchie des langages de programmation, Perl se trouve a mi-chemin entre les langages de haut-niveau tels que le Pascal, le C et le C++ et les scriptes de coquille (shell scripts) [les langages qui ajoute une structure de controle aux instruction de lignes de controle de lUnix] tels que sh, sed et awk. En passant, awk = Aho, Weinberger, Kernighan, et sed = Stream Editor.

4 CSI 3525 Perl, page 4 Les avantages du Perl (1) Le Perl combine les meilleures caracteristiques (selon ses admirateurs ) de: La programmation de la shell Unix/Linux, Des commandes sed, grep, awk et tr, C, Cobol. Les Shell scripts sont, habituellement, ecrits dans une multitude de petits fichiers qui se referencient les uns les autres. Perl atteint cette fonctionalite en utilisant un seul fichier.

5 CSI 3525 Perl, page 5 Les avantages du Perl (2) Le Perl offre des capabilites puissantes pour les expressions regulieres. Ceci permet des operations de prise en charge des chaines de caracteresen particulier le pattern matchingrapides, flexibles, et fiables. En consequence, le Perl est particulierement utile pour les applications de traitement de texte. En fait, cest le Perl qui a permis la transformation de documents en documents HTML au debut des annees 1990, permettant au Web son expansion si rapide.

6 CSI 3525 Perl, page 6 Les Desavantages du Perl Le Perl est un vrai fouillis! Il contient de nombreuses constructions provenant de nombreux langages et de nombreux outils informatique. Tres souvent, il contient differentes constructions pour une meme fonctionalite (par example, il existe au moins 5 facons dexecuter une commande if dune ligne) Ce nest pas un langage tres lisible! Vous ne pouvez pas ditribuer un programme en Perl en tant que fichier binaire opaque. Cela veut dire que vous ne pouvez pas vraiement commercialiser les produits que vous developpez en Perl.

7 CSI 3525 Perl, page 7 Donnees Scalaires: chaines et nombres Les scalaires nont pas besoin detre definis ou davoir leur type declare: Perl comprend a partir du context. % cat hellos.pl #!/usr/local/perl5/bin/perl -w print "Hello". " ". "world\n"; print "hi there ". 2. " worlds!"."\n"; print (("5" + 6). " eggs\n". " in ". " 3 + 2 = ". ("3" + "2"). " baskets\n" ); % hellos.pl Hello world hi there 2 worlds! 11 eggs in 3 + 2 = 5 baskets <-- invoke Perl

8 CSI 3525 Perl, page 8 Variables Scalaires Les variables scalaires debutent avec un signe de dollar. Elles nont pas besoin detre declarees. % cat scalar.pl #!/usr/local/perl5/bin/perl -w $i = 1; $j = "2"; print "$i and $j \n"; $k = $i + $j; print "$k\n"; print $i. $j. "\n"; print '$k\n'. "\n"; % scalar.pl 1 and 2 3 12 $k\n

9 CSI 3525 Perl, page 9 Structures de Control: if, else, elsif % cat names.pl #!/usr/local/perl5/bin/perl -w $name = ; chomp($name); if ($name gt 'fred') { print "'$name' follows 'fred'\n";} elsif ('$name' eq 'fred') { print "both names are 'fred'\n";} else { print "'$name' precedes 'fred'\n";} % names.pl Stan 'Stan' precedes 'fred' % names.pl stan 'stan' follows 'fred' <-- my input <-- Perls' output <-- cut newline

10 CSI 3525 Perl, page 10 Structures de Controle: boucles (1) % cat oddsum_while.pl #!/usr/local/perl5/bin/perl -w # Add up some odd numbers $max = ; $n = 1; while ($n < $max) { $sum += $n; $n += 2; } # On to the next odd number print "The total is $sum.\n"; % oddsum_while.pl 10 Use of uninitialized value at oddnums.pl line 6, chunk 1. The total is 25. <-- my input <-- a warning <-- Perl's output

11 CSI 3525 Perl, page 11 Structures de Controle: boucles (2) Les commentaires commencent avec #. Vous pouvez, bien que ce ne soit pas tres elegant, utiliser une variable sans linitialiser (comme $sum ). Une telle variable sera initialisee a 0 si elle est, au depart, utilisee comme un nombre ou un si son premier usage est en tant que chaine. En fait, sa vraie valeur est toujours undef, convertie comme il le faut. Si vous le voulez, Perl peut donner des avertissements (le signal -w). Bien entendu, while est seulement lune des constructions de boucles du Perl. Continuons…

12 CSI 3525 Perl, page 12 Structures de Controle: boucles (3) % cat oddsum_until.pl #!/usr/local/perl5/bin/perl -w # Add up some odd numbers $max = ; $n = 1; $sum = 0; until ($n >= $max) { $sum += $n; $n += 2; } # On to the next odd number print "The total is $sum.\n"; % oddsum_until.pl 10 The total is 25.

13 CSI 3525 Perl, page 13 Structures de Controle: boucles (4) % cat oddsum_for.pl #!/usr/local/perl5/bin/perl -w # Add up some odd numbers $max = ; $sum = 0; for ($n = 1 ; $n < $max ; $n += 2) { $sum += $n; } print "The total is $sum.\n"; % oddsum_for.pl 10 The total is 25. Il y a aussi do-while et do-until, et on a foreach. Continuouns...

14 CSI 3525 Perl, page 14 Structures de Controle: boucles (5) % cat oddsum_foreach.pl #!/usr/local/perl5/bin/perl -w # Add up some odd numbers $max = ; $sum = 0; foreach $n ( (1.. $max) ) { if ( $n % 2 != 0 ) { $sum += $n; } } print "The total is $sum.\n"; % oddsum_foreach.pl 10 The total is 25.

15 CSI 3525 Perl, page 15 Listes et tableaux Une liste est une collection ordinee de scalaires. Un tableau est une variable contennant une liste. Chaque element est une valeur scalaire independante. Une liste peut contenir des nombres, des chaines, des valeurs undeftout melange de type est permis! Pour utiliser un element de tableau, prefixez le nom du tableau par un $; placez lindex dans des crochets. Afin daccer au tableau en entier, prefixez son nom par un @. Vous pouvez copier un tableau dans un autre. Vous pouvez egalement utiliser les operateurs sort, reverse, push, pop, split.

16 CSI 3525 Perl, page 16 Exemples de Tableaux I % cat arraysort.pl #!/usr/local/perl5/bin/perl -w $i = 0; while ($k = ) { $a[$i++] = $k; } print "====== sorted ======\n"; print sort(@a); % arraysort.pl Nathalie Frank hello John Zebra notary nil <-- ^D here ====== sorted ====== Frank John Nathalie Zebra hello nil notary

17 CSI 3525 Perl, page 17 Exemples de Tableaux IIa Reversing a text file (whole lines) % cat whole_rev.pl #!/usr/local/perl5/bin/perl -w while ($k = ) { push(@a, $k); } print "=== reversed ===\n"; while ($oldval = pop(@a)) { print $oldval; } % whole_rev.pl a b c d e f g h i === reversed === g h i e f a b c d

18 CSI 3525 Perl, page 18 Exemples de Tableaux IIb % each_rev.pl a bc d efg efg d bc a hi j j hi klm nopq st st nopq klm Reversing each line in a text file % cat each_rev.pl #!/usr/local/perl5/bin/perl -w while($k = ) { @a = split(/\s+/, $k); $s = ""; for ($i = @a; $i > 0; $i--) { $s = "$s$a[$i-1] "; } chop($s); print "$s\n" } output ^D

19 CSI 3525 Perl, page 19 Exemples de Tableaux III Reversing a text file (whole lines) print reverse( ); Reversing each line in a text file while($k = ) { $s = ""; foreach $i (reverse(split(/\s+/, $k))) { $s = "$s$i "; } chop($s); print "$s\n"; }

20 CSI 3525 Perl, page 20 Hashes un hash est comme un tableau, mais a la place dindices, on peut avoir nimporte quelle cle, et on utilise des accolades plutot que des crochets. Le nom officiel est tableau associatif (implemente par du hashing ). Les cles et le valeurs peuvent etre nimporte quel scalaire; Les cles sont toujours converties en chaines. Afin de referer a un hash en entier il faut prefixer son nom dun %. Si vous affectez un hash a un tableau, il devient une simple liste.

21 CSI 3525 Perl, page 21 Hash: exemples I (1) % cat hash_array.pl #!/usr/local/perl5/bin/perl -w %some_hash = ("foo", 35, "bar", 12.4, 2.5, "hello", "wilma", 1.72e30, "betty", "bye\n"); @an_array = %some_hash; print "@an_array\n========\n"; foreach $key (keys %some_hash) { print "$key: "; print delete $some_hash{$key}; print "\n";}

22 CSI 3525 Perl, page 22 Hash: exemples I (2) % hash_array.pl betty bye wilma 1.72e+30 foo 35 2.5 hello bar 12.4 ======== betty: bye wilma: 1.72e+30 foo: 35 2.5: hello bar: 12.4

23 CSI 3525 Perl, page 23 Hash: exemples II % cat hash_arrows.pl #!/usr/local/perl5/bin/perl -w my %hash = ( "a" => 1, "b" => 2, "c" => 3); foreach $key (sort keys %hash) { $value = $hash{$key}; print "$key => $value\n"; } % hash_arrows.pl a => 1 b => 2 c => 3

24 CSI 3525 Perl, page 24 Hash: exemples III: Compte de frequence de caracteres % cat frequency.pl #!/usr/local/perl5/bin/perl -w while (<>) { # loop over chars in input line for $c (split //) { # Increment $count of $c ++$count{$c}; } # end of input, print %count for $c (sort keys %count) { print "$c\t$count{$c}\n"; }

25 CSI 3525 Perl, page 25 Hash: exemples III: Compte de frequence de caracteres % frequency.pl Nathalie Fran hello John rather Notary F 1 J 1 ^D 8 2 1 2 F 2 J 2 N 2 a 5 e 3 h 4 i 1 l 3 n 2 o 3 r 4 t 3 y 1

26 CSI 3525 Perl, page 26 Expressions Regulieres I Une expression reguliere (ou pattern) est un patron decrivant une classe de chaines. Une chaine peut correspondre ou ne pas correspondre a ce patron. Les patrons les plus simples sont dun seul caractere. Une class de caracteres secrit entre crochets: [01234567]un chiffre octal [0-7]un chiffre octal [0-9A-F]un chiffre hex [^A-Za-z]pas une lettre [0-9-]un chiffre decimal ou un moins.

27 CSI 3525 Perl, page 27 Expressions Regulieres II Metacaracteres:.(dot) nimporte quel caractere sauf \n Anchors: ^le debut dune $la fin dune chaine Multiplicateurs: *repete litem precedent 0 ou plus de fois +repete litem precedent 1 ou plus de fois ?rend litem precedent optionnel {n}repete n fois {n, m}repete n a m fois (n <= m) {n,}repete n ouplus de fois

28 CSI 3525 Perl, page 28 Expressions Regulieres III Loperateur Booleen =~ fait correspondre une chaine a une expression reguliere, que lon ecrit entre deux barres inclinees. Les patrons peuvent etre groupes dans des parentheses (le patron en entier devient un item). Les alternatives sont denotees par la barre droite |. $x = "01239876AGH"; if ( $x =~ /([0-9]{4}|[A-Z]{3}){2,}/ ) { print "yes1\n"; } if ( $x =~ /(0?|4)(5|[1abc]{1,})/ ) { print "yes2\n"; } Sera explique dans un moment

29 CSI 3525 Perl, page 29 Expressions Regulieres IV La precedence des elements dun patron: parentheses ( ) multiplicateurs * + ? {n} sequence, ancres ^ $ alternation | Certaines classes de caracteres sont predefinies: class Cnot C chiffre \d \D mot char [a-zA-Z0-9_]+ \w \W espace blanc \s \S Des ancres additionnelles: word boundary \b \B

30 CSI 3525 Perl, page 30 Expressions Regulieres: exemples I $i = "Jim"; Correspondence $i =~ /Jim/; oui $i =~ /J/; oui $i =~ /j/; non $i =~ /j/i; oui $i =~ /\w/; oui $i =~ /\W/; non Majuscule/Minuscule ignore si on utilise le i postfixe.

31 CSI 3525 Perl, page 31 Expressions Regulieres: exemples II $j = "JjJjJjJj"; $j =~ /j*/; oui: corresponds a tout $j =~ /j+/; oui: correspond au premier j $j =~ /j?/; oui: correspond au premier j $j =~ /j{2}/; non $j =~ /j{2}/i; oui: ignore les Majusc./Minusc. $j =~ /(Jj){3}/; oui: corresponds a la chaine entiere

32 CSI 3525 Perl, page 32 Expressions Regulieres: exemples III $k = "Boom Boom, out go the lights!"; $k =~ /Jim|Boom/; oui: corresponds a Boom $k =~ /(Boom){2}/; non: espace entre Booms $k =~ /(Boom ){2}/; non: a cause de la virgule $k =~ /(Boom\W){2}/; oui $k =~ /\bBoom\b/; oui: montre les limites de mots $k =~ /\bBoom.*the\b/; oui $k =~ /\Bgo\B/; non: "go" est un mot $k =~ /\Bgh\B/; oui: le "gh" dans "lights"

33 CSI 3525 Perl, page 33 Expressions Regulieres: Substitution I Vous pouvez modifier une variable de type chaine de caractere en appliquant une substitution. Loperateur est de nouveau =~, et la substitution secrit de la facon suivante: s/pattern1/pattern2/ $j = "Jim Plank"; $j devient: $j =~ s/.*/i Hendrix/;Jimi Hendrix $j =~ s/i/I/g ; JImI HendrIx $j =~ s/\b\w*\b/Dikembe/;Dikembe HendrIx $j =~ s/(\b\w*\b).*/J\. "\1"/;J. "Dikembe"

34 CSI 3525 Perl, page 34 Expressions Regulieres: Substitution II $j = "Jim Plank"; $j devient $j =~ s/(\w*) (\w*)/\1 \1 \2/;Jim Jim Plank $i = "I am the the man"; $i devient $i =~ s/(\b\w+\b) \1/\1/;I am the man (pourquoi?) Afin dexpliquer J. "Dikembe", nous devons expliquer Les parentheses en tant que memoire.

35 CSI 3525 Perl, page 35 Dans un autre cours Variables predefinies (il y en a plein!) Plus de detail sur les listes, tableaux et hashes Plus de detail sur les expressions regulieres Fonctions definies par lusager Gestion de Fichiers Gestion de Directoires Gestion de Processus Capabilites pour gestion de bases de donnees en Perl Programmation CGI


Télécharger ppt "CSI 3525, Automne 2001 Une introduction au Perl Preparee par Stan Szpakowicz, base sur ces sources et inspirations:"

Présentations similaires


Annonces Google