CSI 3525, Automne 2001 - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

CSI 3525, Automne 2001

Description:

Randal L. Schwartz and Tom Christiansen, 'Learning Perl' 2nd ed., O'Reilly ... Le Perl combine les meilleures caracteristiques (selon ses admirateurs ) de: ... – PowerPoint PPT presentation

Number of Views:37
Avg rating:3.0/5.0
Slides: 36
Provided by: siteUo
Category:

less

Transcript and Presenter's Notes

Title: CSI 3525, Automne 2001


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/n
    otes/Perl/lecture.html
  • Randal L. Schwartz and Tom Christiansen,
    Learning Perl 2nd ed., OReilly
  • Randal L. Schwartz and Tom Phoenix, Learning
    Perl 3rd ed., OReilly
  • Nathalie Japkowicz

Go O'Reilly!
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
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
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
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
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
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

lt-- invoke Perl
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
Structures de Control if, else, elsif
  • cat names.pl
  • !/usr/local/perl5/bin/perl -w
  • name ltSTDINgt
  • 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'

lt-- cut newline
lt-- my input lt-- Perls' output
10
Structures de Controle boucles (1)
  • cat oddsum_while.pl
  • !/usr/local/perl5/bin/perl -w
  • Add up some odd numbers
  • max ltSTDINgt
  • n 1
  • while (n lt 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,
    ltSTDINgt chunk 1.
  • The total is 25.

lt-- my input lt-- a warning lt-- Perl's output
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
Structures de Controle boucles (3)
  • cat oddsum_until.pl
  • !/usr/local/perl5/bin/perl -w
  • Add up some odd numbers
  • max ltSTDINgt
  • n 1
  • sum 0
  • until (n gt 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
Structures de Controle boucles (4)
  • cat oddsum_for.pl
  • !/usr/local/perl5/bin/perl -w
  • Add up some odd numbers
  • max ltSTDINgt
  • sum 0
  • for (n 1 n lt 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
Structures de Controle boucles (5)
  • cat oddsum_foreach.pl
  • !/usr/local/perl5/bin/perl -w
  • Add up some odd numbers
  • max ltSTDINgt
  • 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
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 _at_.
  • Vous pouvez copier un tableau dans un autre. Vous
    pouvez egalement utiliser les operateurs sort,
    reverse, push, pop, split.

16
Exemples de Tableaux I
  • cat arraysort.pl
  • !/usr/local/perl5/bin/perl -w
  • i 0
  • while (k ltSTDINgt)
  • ai k
  • print " sorted \n"
  • print sort(_at_a)
  • arraysort.pl
  • Nathalie
  • Frank
  • hello
  • John
  • Zebra
  • notary
  • nil

sorted Frank John Nathalie Zebra hel
lo nil notary
lt-- D here
17
Exemples de Tableaux IIa
  • Reversing a text file (whole lines)
  • cat whole_rev.pl
  • !/usr/local/perl5/bin/perl -w
  • while (k ltSTDINgt) push(_at_a, k)
  • print " reversed \n"
  • while (oldval pop(_at_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
Exemples de Tableaux IIb
Reversing each line in a text file
cat each_rev.pl !/usr/local/perl5/bin/perl
-w while(k ltSTDINgt) _at_a split(/\s/,
k) s "" for (i _at_a i gt 0 i--)
s "sai-1 " chop(s) print
"s\n"
  • each_rev.pl
  • a bc d efg
  • efg d bc a
  • hi j
  • j hi
  • klm nopq st
  • st nopq klm

D
output
19
Exemples de Tableaux III
  • Reversing a text file (whole lines)
  • print reverse(ltSTDINgt)
  • Reversing each line in a text file
  • while(k ltSTDINgt)
  • s ""
  • foreach i
  • (reverse(split(/\s/, k)))
  • s "si "
  • chop(s)
  • print "s\n"

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
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")
  • _at_an_array some_hash
  • print "_at_an_array\n\n"
  • foreach key (keys some_hash)
  • print "key "
  • print delete some_hashkey
  • print "\n"

22
Hash exemples I (2)
  • hash_array.pl
  • betty bye
  • wilma 1.72e30 foo 35 2.5 hello bar 12.4
  • betty bye
  • wilma 1.72e30
  • foo 35
  • 2.5 hello
  • bar 12.4

23
Hash exemples II
  • cat hash_arrows.pl
  • !/usr/local/perl5/bin/perl -w
  • my hash
  • ( "a" gt 1, "b" gt 2, "c" gt 3)
  • foreach key (sort keys hash)
  • value hashkey
  • print "key gt value\n"
  • hash_arrows.pl
  • a gt 1
  • b gt 2
  • c gt 3

24
Hash exemples III Compte de frequence de
caracteres
  • cat frequency.pl
  • !/usr/local/perl5/bin/perl -w
  • while (ltgt)
  • loop over chars in input line
  • for c (split //)
  • Increment count of c
  • countc
  • end of input, print count
  • for c (sort keys count)
  • print "c\tcountc\n"

25
Hash exemples III Compte de frequence de
caracteres
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
  • frequency.pl
  • Nathalie
  • Fran
  • hello
  • John
  • rather
  • Notary
  • F 1
  • J 1

D
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
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 lt m)
  • n, repete n ouplus de fois

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-94A-Z3)2,/ )
  • print "yes1\n"
  • if ( x /(0?4)(51abc1,)/ )
  • print "yes2\n"

Sera explique dans un moment
29
Expressions Regulieres IV
  • La precedence des elements dun patron
  • parentheses ( )
  • multiplicateurs ? n
  • sequence, ancres
  • alternation
  • Certaines classes de caracteres sont predefinies
  • class C not C
  • chiffre \d \D
  • mot char a-zA-Z0-9_ \w \W
  • espace blanc \s \S
  • Des ancres additionnelles
  • word boundary \b \B

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
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 /j2/ non
  • j /j2/i oui ignore les Majusc./Minusc.
  • j /(Jj)3/ oui corresponds a la chaine
    entiere

32
Expressions Regulieres exemples III
  • k "Boom Boom, out go the lights!"
  • k /JimBoom/ 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
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
Expressions Regulieres Substitution II
Afin dexpliquer J. "Dikembe", nous devons
expliquer Les parentheses en tant que memoire.
  • 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?)

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
Write a Comment
User Comments (0)
About PowerShow.com