Cours introduction au langage Perl les fonctions prédéfinies, tutoriel & guide de travaux pratiques en pdf.
Soyons rigoureux
Il est fortement recommandé d’utiliser les modules « strict » et « warnings » : le fait de les inclure au début de programme vous oblige à déclarer toutes les variables que vous utilisez (à l’aide de
« my »). C’est assez contraignant mais cela vous économisera des heures de « débogage ». En effet, Perl est parfois trop souple et vous laisse écrire des choses erronées, comme :
$mavariable=5;
print $Mavariable;
Le « m » est en majuscule dans la seconde ligne, et n’affichera donc pas « 5 ».
Par contre, si vous utilisez les deux modules
use strict; use warnings;
my $mavariable=5; # L’usage de “my” devient obligatoire print $Mavariable;
vous aurez le message :
Global symbol « $Mavariable » requires explicit package name qui, même s’il n’est pas très explicite, vous indique que « $Mavariable » pose problème
Chaque variable utilisée (scalaire, tableau…) doit maintenant être déclarée avant d’être utilisée.
Cette déclaration doit être faite dans le même bloc. Voici quelques exemples :
use strict; use warnings;
my $mavariable=’oui’;
print $mavariable;
Ok
use strict; use warnings;
my $mavariable;
if (3>1) {$mavariable=’oui’;}
print $mavariable;
Ok
use strict; use warnings;
if (3>1) {my $mavariable=’oui’;}
print $mavariable;
Non : déclenche une erreur disant que « $mavariable » est utilisée sans être déclarée
On a déclaré « $mavariable » dans le bloc « if », elle n’est « visible » que dans ce bloc, pas à l’extérieur
Remarque : il existe une autre notation :
commande if (condition);
print ‘Quand nous chanterons…’ if ($fruit eq ‘cerise’);
Condition inversée :
unless (condition) {
bloc
};
Ou, selon la notation alternative:
commande unless (condition);
print ‘Avec du sucre SVP…’ if ($fruit eq ‘fraise’);
Procédures
1. déclaration
sub ma_procedure {
bloc;
}
Appel : &ma_procedure(); ou, plus simplement: ma_procedure;
2. avec paramètre(s)
sub pepin {
my($fruit) = @_;
if (($fruit ne ‘amande’) and ($fruit ne ‘fraise’)) { print « ce fruit a des pépins ! »;
}
}
Appel: &pepin(‘cerise’); ou: pepin(‘cerise’);
3. fonctions
Une fonction est en fait une procédure qui retourne quelque chose :
sub pluriel {
my($mot) = @_;
$m = $mot.’s’;
return($m);
}
Appel: $mot_au_pluriel = &pluriel(‘cerise’); => ‘cerises’
Remarque: Le passage de paramètres se fait donc à l’aide du tableau spécial @_ (géré par le système Perl). L’instruction « my » réalise une affectation dans des variables locales à la procédure avec les éléments du tableau. Ce type de passage de paramètre est très pratique car le nombre de paramètres n’est pas forcément fixe.
Variables locales :
Attention au petit piège habituel :
$m = ‘Dupont’;
$f = &pluriel(‘cerise’);
print « M. $m vend des $f\n »;
affichera : M. cerises vend des cerises !
A cause du fait qu’on utilise la variable $ m qui est modifiée dans le programme pluriel … La solution consiste à déclarer toutes les variables utilisées dans les procédures en variables locales à l’aide de « my ». D’ou l’avantage d’utiliser les modules “strict” et “warning” (cf. paragraphe “Soyons rigoureux” p. 11).
A la troisième ligne de la procédure « pluriel » on rajoutera : my $m; perlsub
DESS TIMH Introduction au langage Perl
Fonctions prédéfinies
Quelques fonctions offertes par Perl pour manipuler les données. L’inventaire est loin d’être
exhaustif (cf. perlfunc)
A. Système
• print : permet d’afficher un message, ou le contenu de variables. print ‘bonjour’;
print ‘J\’ai acheté ‘, $nombre,’ kilos de ‘, $fruit; print; => affiche le contenu de la variable spéciale $_
ou encore :
print « J’ai acheté $nombre kilos de « , &pluriel($fruit);
Problèmes courants : les caractères spéciaux (‘, »,$,…), que l’on peut afficher en les précédant d’un « \ »
ex: print « Il dit alors : \ »Non, je n’ai pas 50 \$ !\ »… »;
Autre solution pour les longs textes :
print <<« FIN »; #Tout ce qui suit jusqu’à FIN en début de ligne Ceci est un long texte
qui n’est pas perturbé par la présence de « guillemets » ou
d’apostrophes
FIN
Quelques caractères spéciaux affichables avec « print » :
\n => « retour-chariot », \t => tabulation, \b => « bip »
(une fonction utile: quotemeta($chaine) permet de préfixer chaque caractère spécial par un “\”)
• exit : permet d’arrêter le programme en cours if ($erreur) {exit;}
• die : permet d’arrêter le programme en cours en affichant un message d’erreur.
if ($fruit eq ‘orange’) {die ‘Je déteste les oranges !’}
• system : permet de lancer une commande système system ‘mkdir mon_repertoire’;
• sleep n : le programme « dort » pendant n secondes
ex: programme « bip horaire »
while (1) {sleep 3600; print « \b »;}
le fait d’écrire « while (1) » permet de faire une boucle infinie (on aurait pu écrire :
« for (;;) »)
DESS TIMH Introduction au langage Perl
Mathématique
Les fonctions mathématiques habituelles existent aussi en Perl :
sin, cos, tan, int (partie entière d’un nombre), sqrt, rand (nombre aléatoire entre 0 et n), exp (exponentielle de n), log, abs (valeur absolue).
$s = cos(0); => 1
$s = log(exp(1)); => 1
$i = int(sqrt(8)); => 2
$tirage_loto = int(rand(42)) + 1;
$i = abs(-5.6) => 5.6
C. Chaînes de caractères
chop(ch) Enlève le dernier caractère de la chaîne => ch contient ‘cerise’
$ch=’cerises’; chop($ch);
• chomp(ch) Même chose que « chop » mais enlève uniquement un « retour-chariot » éventuel en fin de chaîne. Utilisé dans le parcours de fichiers (cf p. 22)
• length(ch) Retourne la longueur de la chaîne (nombre de caractères)
$l = length(‘cerise’) => 6
uc(ch) Retourne la chaîne en majuscules (Perl 5)
$ch = uc(‘poire’) => ‘POIRE’
lc(ch) Retourne la chaîne en minuscules (Perl 5)
$ch = lc(‘POIRE’) => ‘poire’
lcfirst(ch), ucfirst(ch) Retourne la chaîne avec simplement lepremier caractère en
minuscule/majuscule (Perl 5) => ‘La poire’
$ch = ucfirst(‘la poire’)
split(‘motif’, ch) Sépare la chaîne en plusieurs éléments (le séparateur étant motif).
Le résultat est un tableau. (Fonction très utilisée pour l’analyse de fichiers)
@t = split(‘ / ‘, ‘amande / fraise / cerise’); => (‘amande’,’fraise’, ‘cerise’)
• substr(ch, indicedébut, longueur)
Retourne la chaîne de caractère contenue dans ch, du caractère indicedébut et de longueur longueur.
$ch=substr(‘dupond’, 0, 3) => ‘dup’
$ch=substr(‘Les fruits’, 4) => ‘fruits’
index(ch, recherche) Retourne la position de recherche dans la chaîne ch
$i=index(‘Le temps des cerises’,’cerise’); => 13
DESS TIMH Introduction au langage Perl
Remarques:
Par défaut la plupart de ces fonctions travaillent sur la variable spéciale $_$_ = ‘amandes’; chop; print; => Affichera ‘amande’
Si votre environnement est bien configuré, (cf. perllocale) tout ces
fonctions prennent en compte les caractères internationaux :
print uc(substr(‘euro ou ••••’,8)); => Affichera ‘ ΕΥΡΏ’
D. tableaux, listes
grep(/expression/, tableau) Recherche d’une expression dans un tableau
if (grep(/poivron/, @fruits)); => faux
if (grep(/$f/, @fruits) {print ‘fruit connu’;}
grep retourne un tableau des éléments trouvés : => fraise;cerise @f = grep(/ise$/, @fruits);
join(ch, tableau) Regroupe tous les éléments d’un tableau dans une chaîne de
caractères (en spécifiant le séparateur) => affiche ‘amande, fraise, cerise’ print join(‘, ‘, @fruits);
pop (tableau) Retourne le dernier élément du tableau (et l’enlève) print pop(@fruits); => affiche ‘cerise’, @fruits devient (‘amande’,’fraise’)
push (tableau, element) Ajoute un élément en fin de tableau (contraire de pop) push(@fruits, ‘abricot’);=> @fruits devient (‘amande’,’fraise’,’abricot’)
shift(tableau) Retourne le premier élément du tableau (et l’enlève) print shift(@fruits) => Affiche ‘amande’, @fruits devient (‘fraise’,’abricot’)
• unshift (tableau, element) Ajoute un élément en début de tableau
unshift (‘coing’, @fruits); => @fruits devient (‘coing’, ‘fraise’,’abricot’)
sort (tableau) Tri le tableau par ordre croissant @fruits = sort (@fruits); => @fruits devient (‘abricot’, ‘coing’, ‘fraise’)
reverse (tableau) Inverse le tableau @fruits = reverse(@fruits);=> @fruits devient (‘fraise’, ‘coing’, ‘abricot’)
DESS TIMH Introduction au langage Perl
• splice (tableau, début, nb) Enlève nb éléments du tableau à partir de l’indice début @derniers = splice(@fruits, 1,2);
=> @derniers devient (‘coing’, ‘abricot’) @fruits devient (‘fraise’) On peut éventuellement remplacer les éléments supprimés : @fruits=(‘fraise’,’pomme’);
splice(@fruits, 1,1, (‘elstar’,’golden’)); => @fruits contient (‘fraise’, ‘elstar’,’golden’)
Exemple : Tirage des 7 chiffres du loto
my @c = (1..42); my $i=0;
print splice(@c, int(rand($#c+1)),1), »\n » while ($i++ < 7);
On enlève 7 fois un élément (pris au hasard) du tableau des 42 chiffres.
Pour information, l’exemple précédent aurait pu s’écrire :
my @c = (1..42); my $i=0;
while ($i < 7) {
my $nb = int(rand($#c + 1));
print « $nb\n »;
splice (@c, $nb, 1);
$i++;
}
I. INTRODUCTION
A. QU’EST CE QUE PERL ?
B. QUELLE UTILISATION ?
III. TYPES DE DONNÉES
A. CONSTANTES
B. SCALAIRES
C. TABLEAUX, LISTES
D. TABLEAUX INDICÉS (OU ASSOCIATIFS)
E. REMARQUES
IV. EXPRESSIONS
A. OPÉRATEURS
B. COMPARAISONS
V. SYNTAXE GÉNÉRALE
A. SOYONS RIGOUREUX
B. EXPRESSIONS CONDITIONNELLES
C. BOUCLES
D. PROCÉDURES
VI. FONCTIONS PRÉDÉFINIES
A. SYSTÈME
B. MATHÉMATIQUE
C. CHAÎNES DE CARACTÈRES
D. TABLEAUX, LISTES
E. TABLEAUX INDICÉS
VII. GESTION DE FICHIERS
A. OUVERTURE
B. FERMETURE
C. LECTURE
D. ECRITURE
E. PARCOURS
F. FICHIER SPÉCIAL
G. AUTRE NOTATION
VIII. EXPRESSIONS RÉGULIÈRES
A. RAPPEL
B. REMPLACEMENT
IX. VARIABLES ET TABLEAUX SPÉCIAUX
X. STRUCTURES COMPLEXES
XI. EXEMPLES
A. PASSAGE DE PARAMÈTRES AU PROGRAMME
B. PARCOURS DE FICHIER
C. PROGRAMMATION OBJET
D. PERL ET CGI
E. ACCÈS AUX BASES DE DONNÉES : DBI
F. ACCÈS À UNE BASE DE DONNÉES DEPUIS WEB
XII. BIBLIOGRAPHIE