Perl - PowerPoint PPT Presentation

About This Presentation
Title:

Perl

Description:

Perl est inspir du langage C et d'interpr teurs de commande Unix ... langages qui ajoutent des structures de contr le l'interpr teur de commande Unix) tel que sh, sed et awk. ... – PowerPoint PPT presentation

Number of Views:252
Avg rating:3.0/5.0
Slides: 61
Provided by: alanwi8
Category:
Tags: ajoutent | perl

less

Transcript and Presenter's Notes

Title: Perl


1
Perl
  • Sources
  • 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
  • Dr. Nathalie Japkowicz, Dr. Alan Williams

CSI 3525, Perl, page 1
2
Perl
  • Perl est inspiré du langage C et dinterpréteurs
    de commande Unix comme sed, awk, et sh.
  • La facilitée de manipulation de texte, fichiers
    et processus par Perl font quil est populaire
    pour le prototypage rapide, les outils de système
    dexploitation, laccès aux bases de données, la
    gestion de réseaux, et la programmation pour le
    web.
  • - Populaire pour ladministration de systèmes et
    les scriptes CGI.

3
Survol (1)
  • Perl Practical Extraction and Report Language
  • Aussi (Pathologically Eclectic Rubbish Lister )
  • Un langage puissant et générale.
  • Utile pour des programmes quick and dirty.
  • Développé by Larry Wall, sans excuse pour le
    manque délégance.
  • Facile à apprendre pour quelquun qui connaît C
    et Unix.

4
Survol (2)
  • Perl nest pas tout à fait un langage de haut
    niveau, il se trouve entre C ou C et les shell
    scripts (des langages qui ajoutent des structures
    de contrôle à linterpréteur de commande Unix)
    tel que sh, sed et awk.
  • awk langage qui permet de lire des patrons et
    exécuter des commandes selon ce qui est lu.
  • sed permet de modifier des fichiers texte
  • sh peut exécuter plusieurs instructions de
    linterpréteur de commandes, contenu dans un
    fichier (comme les fichiers batch de DOS).

5
Avantages de Perl (1)
  • Selon certains, Perl combine les meilleurs
    aspects de
  • Unix/Linux shell programming,
  • Les commandes sed, grep, awk et tr,
  • C,
  • Cobol.
  • - tr permet déliminer ou de substituer des
    caractères dans un texte.
  • Les shell scripts sont normalement écrit dans
    plusieurs petits fichiers referant les uns aux
    autres. Perl permet les même résultats avec un
    seul programme dans un fichier.

6
Avantages de Perl (2)
  • Perl incorpore des capacité puissante de
    traitement des expressions régulières. Ceci
    permet un traitement de chaînes de caractères
    très rapide, fiable et flexible, surtout pour le
    filtrage de texte (pattern matching).
  • Conséquemment, Perl est particulièrement utile
    pour le traitement de chaînes de caractères.
  • En fait, Perl à permis de rapidement traduire
    plusieurs documents texte en HTML au début des
    années 1990,permettant au web de prendre beaucoup
    dexpansion.

7
Désavantages de Perl
  • Ce nest pas un langage élégant. Plutôt une
    combinaison de plusieurs éléments provenant de
    différent langages et outils.
  • Contient plusieurs façons différentes daccomplir
    la même chose (plusieurs instructions de boucle
    ou expressions conditionnelles).
  • ?un langage peu lisible
  • Les programmes ne sont pas compilé en fichier
    binaires, mais sont plutôt exécuté directement à
    partir du texte. Ainsi, il est difficile de
    commercialiser des programmes développé en Perl.

8
Perl ressources et versions
  • http//www.perl.org vous dira tout ce que vous
    avez toujours voulu savoir sur le Perl.
  • Ce que nous allons voir dans ce cours est le Perl
    5.
  • Perl 5.8.0 a été déployé en Juillet 2002.
  • Perl 6 (http//dev.perl.org/perl6/) est la
    prochaine version, qui nest pas encore prête,
    mais qui sera bientôt déployée. Le premier livre
    sur le Perl 6 se vend déjà (http//www.oreilly.com
    /catalog/perl6es).

9
Scalaires chaînes de caractères et nombres
  • Les scalaires de sont pas nont pas à être
    déclaré.
  • Perl comprend à partir du contexte.
  • Fichier hellos.pl
  • ! /usr/bin/perl
  • print "Hello" . " " . "world\n"
  • print "hi there " . 2 . " worlds!" ."\n"
  • print (("5" 6) ." eggs\n" . " in " . " 3 2
    " . ("3" "2") . " baskets\n" )

invoque Perl
hellos.pl Hello world hi there 2 worlds! 11
eggs in 3 2 5 baskets
10
Variables scalaire
  • Les variables scalaires commencent par un .
    Elles nont pas à être déclarée.

cat scalar.pl ! /usr/bin/perl 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
11
Guillemets et substitution
  • Supposons x 3
  • Les apostrophes ' ' ne permettent aucune
    substitutions sauf pour les séquences
    déchappement \\ et \'.
  • print('x\n') donne x\n et pas de nouvelle
    ligne.
  • Les guillemets " " permettent la substitution de
    variables comme x et des séquences déchappement
    comme \n (newline).
  • print("x\n") donne 3 (avec la nouvelle ligne).
  • Les accents graves permettent les
    substitution, et tentent dexécuter les commandes
    de système résultant. Ils retournent la sortie
    du système.
  • y date print(y) donne
  • Mon Aug 12 144824 EDT 2002

12
Instructions de contrôle if, else, elsif
cat names.pl ! /usr/bin/perl 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"
Input standard
élimine le newline
names.pl Stan 'Stan' precedes 'fred'
input de lutilisateur
Output de Perl
  • names.pl
  • stan
  • 'stan' follows 'fred'

13
Instructions de contrôle boucles (1)
cat oddsum_while.pl ! /usr/bin/perl 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 sum)
  • The total is 25.

Input de lutilisateur
warning
Output de Perl
14
Instructions de contrôle boucles (2)
  • Les commentaires débutent par
  • On peut utiliser une variable sans linitialiser
    (comme sum). Elle sera initialiser à 0 si elle
    est dabord utilisée comme un nombre, ou à la
    chaîne vide "" si elle est dabord utilisée comme
    chaîne de caractères. En fait, cest toujours
    undef, qui est converti selon le contexte.
  • Le flag -w demande à Perl dindiquer les
    warnings.
  • Il y a plusieurs autres instructions de boucles

15
Instructions de contrôle boucles (3)
  • cat oddsum_until.pl
  • ! /usr/bin/perl
  • 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.

16
Instructions de contrôle boucles (4)
  • cat oddsum_for.pl
  • ! /usr/bin/perl
  • 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.

17
Instructions de contrôle boucles (5)
  • cat oddsum_foreach.pl
  • ! /usr/bin/perl
  • 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.

18
Comparaison avec C
C Perl
même chose if () ... if () ...
différent else if () ... elsif () ...
même chose while () ... while () ...
même chose for (aabbcc) ... for (aabbcc) ...
foreach v (_at_array)...
différent break last
différent continue next
similaire 0 est FALSE 0, "0", and "" sont FALSE
similaire ! 0 est TRUE Tout ce qui nest pas FALSE est TRUE
19
Listes et tableaux
  • Une liste est une collection ordonnée de
    scalaires. Un tableau est une variable contenant
    une liste.
  • Chaque élément est un scalaire indépendant. Une
    liste peut contenir des nombres, chaînes de
    caractères, undef, ou tout mélange de différent
    scalaires.
  • Pour utiliser un tableau, places un devant et
    utilises les (ex a2).
  • Pour accéder au tableau en entier _at_.
  • On peut copier un tableau, et utiliser les
    opérateurs sort, reverse, push, pop, split.

20
Examples de tableaux (0)
  • cat somme_de_carre.pl
  • ! /usr/bin/perl
  • s ltSTDINgt
  • for (i0 ilts i1)
  • ai ii
  • print _at_a
  • print "\n"
  • somme_de_carre.pl
  • 4
  • 0

21
Paramètre de lappel au programme (comand-line
argument)
  • Si un programme Perl écrit dans un fichier
    myProg.pl est invoqué par la commande
  • myProg.pl -o big.basket.htm candle.htm
  • La liste _at_ARGV , prédéfinie dans Perl, contient
    alors
  • ('-o', 'big.basket.htm', 'candle.htm')
  • Ces éléments peuvent être accédés
    par ARGV0 ARGV1 ARGV2

22
Exemples de tableau (1)
  • cat arraysort.pl
  • ! /usr/bin/perl
  • 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 hello
nil notary
control-D (pour arrêter la boucle)
23
Exemples de tableau (2A)
Inverser un texte (lignes entières). cat
whole_rev.pl ! /usr/bin/perl 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

control-D
24
Exemples de tableau (2B)
Inverser les lignes dun texte
cat each_rev.pl ! /usr/bin/perl 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

control-D
output
split sépare les lignes aux espaces chop élimine
le dernier caractère (un espace)
25
Exemples de tableau (3)
  • Inverser les lignes
  • print reverse(ltSTDINgt)
  • Inverser chaque ligne
  • while(k ltSTDINgt)
  • s ""
  • foreach i
  • (reverse(split(/\s/, k)))
  • s "si "
  • chop(s)
  • print "s\n"

26
Une digressionLa variable défaut favorite du
Perl
par défaut,Perl lit dans _
while(ltSTDINgt) s "" foreach i
(reverse(split(/\s/, _))) s "si "
chop(s) print "s\n"
par défaut,Perl sépare _ également!
while(ltSTDINgt) s "" foreach i
(reverse(split(/\s/ ))) s "si "
chop(s) print "s\n"
27
Haches
  • Un hache est semblable à un tableau, mais au lieu
    des entiers comme index, un hache peut utiliser
    nimporte quoi comme clef. Les accolades
    sont utilisées au lieu des parenthèses carrées
    .
  • Le nom officiel est tableau associatif
    (implémenté par hachage).
  • Les clefs et valeurs peuvent être nimporte quel
    scalaire. Les clefs sont toujours convertie en
    chaînes de caractères.
  • Pour référer au hache en entier, on place un
    devant.
  • Si un hache est assigné à un tableau, il devient
    une liste.

28
exemple I (1)
  • cat hash_array.pl
  • ! /usr/bin/perl
  • 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"

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

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"
30
exemple II
cat hash_arrows.pl ! /usr/bin/perl 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

31
Un petit interludelopérateur diamand
cat concat !/usr/bin/perl -w while ( ltgt )
print _
cat a one-a two-a cat b three-b four-b five-b
concat a b one-a two-a three-b four-b five-b
ltgt Fait une boucle sur tous les fichiers listés
dans les arguments de la ligne de commande
concat a b gtc cat c one-a two-a three-b four-b
five-b
32
exemple III Fréquence de caractères
  • cat frequency.pl
  • ! /usr/bin/perl
  • while (ltgt)
  • loop over characters in input line
  • foreach c (split //)
  • Increment count of c
  • countc
  • end of input, print count
  • for c (sort keys count)
  • print "c\tcountc\n"

33
Fréquence de caractères (2)
  • frequency.pl
  • Nathalie
  • Fran
  • hello
  • John
  • rather
  • Notary
  • F 1
  • J 1

\n
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
space
D
34
Sous-programmes
  • Un sous-programme est une fonction définie par
    lutilisateur. La syntaxe est très simple. La
    sémantique aussi.

! /usr/bin/perl sub max if ( x gt y ) x
else y x 10 y 11 print max .
"\n"
  • Il ny a pas darguments le script accède a deux
    variables globales. Lappel de sous-programme
    sindique avec un . La valeur retournée est
    celle de la dernière expression évaluée.

35
Sous-programmes (2)
  • Quelques règles utiles.
  • Vous pouvez placer vos définitions nimporte où
    dans vos fichiers. Néanmoins, il est recommandé
    de les mettre au début.
  • Perl utilise toujours la dernière définition dans
    le fichierles précédentes sont ignorées.
  • Certains éléments de syntaxe sont optionnels.
  • Le peut parfois être omit (mais cela nest pas
    une bonne idée)
  • Lopérateur return peut précéder une valeur a
    retourner (cela peut être utile)
  • if ( x gt y ) return x
  • else return y

36
Sous-programmes (3)
  • Il est clair que lutilisation seule de variables
    globales est trop limitée. Les sous-programmes
    peuvent prendre des arguments et les utiliser
    grâce a une variable de liste _at__ prédéfinie ou
    ses éléments _0, _1, etc

! /usr/bin/perl sub max if ( _0 gt _1 )
_0 else _1 print max ( 12, 13
) . "\n"
37
Sous-programmes (4)
  • _0, _1 ne sont pas faciles à utiliser. Vous
    pouvez les re-nommer localement en utilisant
    lopérateur myIl crée les variables privées dun
    sous-programme. Ici, on déclare deux variables de
    ce type et on les initialise immédiatement.

! /usr/bin/perl sub max my ( a, b ) _at__
if ( a gt b ) a else b print max (
15, 14 ) . "\n"
38
Sous-programmes (5)
  • Mais ceci nest pas un calcul du maximum bien
    conçu

! /usr/bin/perl sub max my ( a, b ) _at__
if ( a gt b ) a else b print max (
16, 19, 23 ) . "\n" print max ( 26 ) . "\n"
  • Il produit 19 (23 est ignoré) et 26 (la deuxième
    valeur est undef, ce qui veut dire 0)

39
Sous-programmes (6)
  • On pourrait stopper le sous-programme si le
    nombre darguments était le mauvais. Lopérateur
    (très utile) die le fait pour nous.

! /usr/bin/perl sub max if ( _at__ ! 2 )
die "max needs two arguments _at__\n" my (
a, b ) _at__ if ( a gt b ) a else b
print max ( 16, 19, 23 ) . "\n"
Le script est stoppé après avoir imprimé max
needs two arguments 16 19 23
40
Sous-programmes (7)
  • On peut choisir de navoir quun warning avec
    lopérateur warn.

! /usr/bin/perl sub max if ( _at__ ! 2 )
warn "max needs two arguments _at__\n" my (
a, b ) _at__ if ( a gt b ) a else b
print max ( 16, 19, 23 ) . "\n"
Le script imprime max needs two arguments 16 19
23 19
41
Sous-programmes (8)
  • De toutes façons, ce nest pas une mauvaise idée
    de généraliser max en lui permettant de prendre
    nimporte quel nombre darguments.

! /usr/bin/perl sub max my ( curr_max )
shift _at__ foreach ( _at__ ) if ( _ gt
curr_max ) curr_max _
curr_max print max ( 15, 14 ) . "\n" print
max ( 16, 19, 23 ) . "\n" print max ( 26 ) .
"\n"
42
Sous-programmes (9)
  • Cela marche même pour les listes vides.

! /usr/bin/perl sub max my ( curr_max )
shift _at__ foreach ( _at__ ) if ( _ gt
curr_max ) curr_max _
curr_max z max ( ) if ( defined z )
print z . "\n" else print "undefined\n"
43
Expressions régulières (1)
  • Une expression régulière (patron) décrit une
    classe de chaînes de caractères.
  • Une chaîne de caractères peut matcher ou non le
    patron.
  • Le patron le plus simple est un seul caractère.
  • Une classe de caractères est écrite entre
    parenthèses carrées
  • 01234567 un chiffre octal
  • 0-7 un chiffre octal
  • 0-9A-F un chiffre hexadécimale
  • A-Za-z pas une lettre
  • 0-9- un chiffre décimale ou un moins (-)

44
Expressions régulières (2)
  • Metacaractères
  • . (point) nimporte quel caractère sauf \n
  • Ancres
  • le debout dune chaîne de caractères
  • la fin
  • Multiplicateurs
  • répète ce qui précède 0 fois ou plus
  • répète ce qui précède 1 fois ou plus
  • ? ce qui précède devient optionnel
  • n répète n fois
  • n, m répète de n à m fois (n lt m)
  • n, répète n fois ou plus

45
Expressions régulières (3)
  • Lopérateur Booléen essaye de matcher une
    chaine avec une expression régulière écrite entre
    deux barres inclinées (slashes).

x "01239876AGH" if ( x /01-94,/ )
print "yes1\n" if ( x /A-Z3/ )
print "yes2\n" if ( x /.A-Z4/ )
print "yes3\n"
46
Expressions régulières (4)
  • Lopérateur booléen matche une chaîne à un
    patron, écrit entre barres obliques /.
  • Les patrons peuvent être regroupes entre
    parenthèses (le patron en entier devient un
    item).
  • Les alternatives sont séparées par la barre .
  • x "01239876AGH"
  • if ( x /(0-94A-Z3)2,/ )
  • print "yes4\n"
  • if ( x /(0?4)(51abc1,)/ )
  • print "yes5\n"

to be explained shortly
47
Expressions régulières (5)
  • La précédence des éléments dun patron
  • parenthèses ( )
  • multiplicateurs ? n
  • séquence, ancres
  • alternatives
  • Certaines classes de caractères sont prédéfinies
  • classe C non C
  • chiffres \d \D
  • caractères a-zA-Z0-9_ \w \W
  • espaces blanc \s \S
  • Autre ancres
  • frontières entre les mots \b \B

48
Exemple (1)
  • i "Jim"
  • match
  • i /Jim/ oui
  • i /J/ non
  • i /j/ non
  • i /j/i oui
  • i /\w/ oui
  • i /\W/ non
  • La différence majuscule-minuscule est ignorée si
    postfix i est utilisé.

49
Exemple (2)
  • j "JjJjJjJj"
  • j /j/ oui pour nimporte quoi
  • j /j/ oui matche le premier j
  • j /j?/ oui matche le premier j
  • j /j2/ non
  • j /j2/i oui ignore majuscule-minuscule
  • j /(Jj)3/ oui

50
Exemple (3)
  • k "Boom Boom, out go the lights!"
  • k /JimBoom/ oui matche Boom
  • k /(Boom)2/ non un espace entre Booms
  • k /(Boom )2/ non la virgule
  • k /(Boom\W)2/ oui
  • k /\bBoom\b/ oui les mots sont séparés
  • k /\bBoom.the\b/ oui
  • k /\Bgo\B/ non "go" est un mot
  • k /\Bgh\B/ oui le "gh" dans "lights"

51
Substitution dexpressions régulières (1)
  • On peut modifier une variable de type string en
    appliquant une substitution.
  • Lopérateur est et la substitution est écrite
    comme il suit
  • s/pattern1/pattern2/
  • v "a string to play with"
  • v s/\w/just a single/
  • print "v\n"
  • just a single string to play with

52
Substitution dexpressions régulières (2)
  • Les patrons matchés sont sauvegardés dans les
    variables préconstruites 1, 2, 3 etc. Ces
    variables gardent leurs valeurs jusquà
    lopération de match suivante. Chaque paire de
    parenthèses dun patron correspond à une variable
    de mémoire
  • v "just a single string to play with"
  • v s/(\b\w\b)(.)/'1'2/
  • print "v\n"
  • print "2, 1 1\n"
  • 'just' a single string to play with
  • a single string to play with, just just

53
Substitution dexpressions régulières (3)
  • Une substitution peut être appliquée à toutes les
    incidences du patron, cest à dire, globalement
  • s/pattern1/pattern2/g
  • v "'just' a single string to play with"
  • v s/\b\w\b/word/g
  • print "v\n"
  • 'word' word word word word word word
  • v s/\b\w\b/last/
  • print "v\n"
  • 'word' word word word word word last

54
Substitution dexpressions régulières (4)
Les parenthèses utilisées comme de la mémoire
peut aider à construire des patrons puissants
avec répétition instantanée. On peut utiliser
\1, \2 etc. pour les sous-chaines matchées.
  • v "This is a double double word."
  • v s/(\b\w\b) \1/\1/
  • print "v\n"
  • This is a double word.
  • v "This is a triple triple triple word."
  • v s/(\b\w\b) \1 \1/\1/
  • print "v\n"
  • This is a triple word.

55
Substitution dexpressions régulières (5)
Voici un exemple plus réaliste (le devoir de
lannée dernière). Vous aurez sûrement besoin
dexplicationsdiscussion en classe.
  • Day '01-9120-93011-9'
  • Month '01-910121-9'
  • Year number up to 31 must have a leading zero
    or two.
  • Year '0-940-9332-94-90-9'
  • while(ltgt)
  • Find all dates, selecting and reinserting the
    context.
  • 1 and 6 match the context. Superfluous
    digits,
  • as 43 and 55 in 432001-01-2255, belong in the
    context.
  • "Dates" such as April 31 or February 30 are
    allowed.
  • There are no provisions for leap years.
  • s/(\D)((Year)-(Month)-(Day))(\D.)/1ltdate
    gt2lt\/dategt6/g
  • s/(\D)((Day)-(Month)-(Year))(\D.)/1ltdate
    gt2lt\/dategt6/g
  • print _

56
Substitution dexpressions régulières (6)
On lexécute sur un exemple, juste pour montrer
comment il marche.
  • DATA
  • Both 12-09-2000 and 25-8-324 are good dates,
  • but 30-14-1955 and 10-10-10 are not. OTOH,
    10-10-010 is.
  • RESULTS
  • Both ltdategt12-09-2000lt/dategt and
    ltdategt25-8-324lt/dategt are good dates,
  • but 30-14-1955 and 10-10-10 are not. OTOH,
    ltdategt10-10-010lt/dategt is.

57
Il reste à voir
  • Variables prédéfinies
  • Plus sur les listes, et haches
  • Plus sur les expressions régulières
  • Traitement de fichier
  • Traitement de répertoires
  • Traitement de processus
  • Bases de données
  • Programmation CGI

58
Erreurs fréquentes (1)
  • Vient de  Programming Perl , page 361.
  • Tester  dun coup  plutôt que de façon
    incrémentale.
  • 2. Ne pas afficher les résultat temporaires pour
    vérifier le progrès
  • 3. Ne pas utiliser le switch -w pour trouver des
    erreurs typographiques.
  • 4. Oublier , _at_ ou devant une variable.
  • 5. Oublier le à la fin des lignes.
  • 6. Oublier les autours dun bloc.

59
Erreurs fréquentes (2)
  • (), , , "", '', , ltgt non équilibrés.
  • Confusion entre '' et "", ou / et \.
  • Utiliser plutôt que eq, ! plutôt que ne,
    plutôt que ,
  • ('White' 'Black') et (x 5) sont évalué
    comme (0 0) et (5), donc true!
  • Utiliser "else if" plutôt que "elsif".
  • Placer une virgule après le fichier dans une
    expression print.

60
Erreurs fréquentes (3)
  • Ne pas  chopper  loutput des accents graves
    date ou linput
  • print "Enter y to proceed "
  • ans ltSTDINgt
  • chop ans
  • if (ans eq 'y') print "You said y\n"
  • else print "You did not say 'y'\n"
  • Oublier que les indexes commencent par 0, et non
    1.
  • Utiliser _, 1, ou dautres variables
    prédéfinie, puis modifier le code dune manière
    qui les affecte indirectement.
  • Oublier que les expressions régulières sont
    gloutonnes, recherchant le plus long match, et
    non le plus court.
Write a Comment
User Comments (0)
About PowerShow.com