CSI 3525 - Groupe de discussion #7
Perl (et un peu d'Unix)
Perl s'utilise dans un environnement de type Unix.
Il faut donc se connecter a site0 ou site1 (comme avec ML). Ensuite, on
tape tout simplement "perl fichier.pl" pour executer "fichier.pl".
Au debut, du fichier Perl, on tapera la ligne
suivante:
#!/usr/local/perl5/bin/perl -w
I. Quelques programmes faciles
1. Somme d'entiers
Realiser un programme qui realise la somme des sommes d'entiers jusqu'
a un entier n (utiliser <STDIN>) donne par l'utilisateur.
Pour n=3, on attend donc: 1 + (1 + 2) + (1 + 2 + 3) = 10.
Pour n = 4, 20 ainsi de suite...
Solution
2. Fichiers
Il est possible de recuperer les arguments envoyes au lancement d'un fichier
avec la liste @ARGV. Ainsi dans l'exemple suivant:
perl program.pl arg1 arg2 arg3...
On accede a arg1 par $ARGV[0], a arg2 par $ARGV[1], a arg3 par $ARGV[2]...
On desire que la commande perl mult.pl x y z ... output imprime les
tables de multiplication (jusqu'a 10) des nombres x, y, z ... (le nombre
d'arguments n'est pas connu a l'avance) dans le fichier output.
Les tables seront presentees ainsi:
1 * 17 = 17
2 * 17 = 34
3 * 17 = 51
4 * 17 = 68
5 * 17 = 85
6 * 17 = 102
7 * 17 = 119
8 * 17 = 136
9 * 17 = 153
10 * 17 = 170
Solution
3. Hashes (tableaux associatifs)
Les commandes importantes pour utiliser les hashes sont: % qui precede
le tableau (comme @ pour les listes et $ pour les variables), les accolades
{} qui permettent d'acceder a un element par sa cle, each ou foreach pour
explorer l'ensemble des elements.
Ecrire un programme qui lit une serie de mots, un mot par ligne, (ctrl-D
pour mettre fin a l'entree de donnees) puis affiche un compte-rendu detaillant
combien de fois chaque mot a ete entre.
Solution
II. Expressions regulieres
Pour comprendre le concept difficile (mais o combien riche) des expressions
regulieres, nous allons resoudre les questions suivantes a l'aide d'un
programme de test. Ce programme vous permet en changeant
simplement l'expression en majuscules de voir si une expression reguliere
est trouvee ("match") dans une chaine de caracteres.
A l'aide de ce programme:
- Ecrire une expression reguliere qui va trouver les lignes contenant
le mot Paul ou le mot Marie suivi d'un certain nombre d'espaces et du mot
dupont.
- Identifier au contraire les chaines susceptibles d'etre detectees
par les expressions regulieres suivantes:
/"([^"]*)"/
/^0?[0-3]?[0-7]{1,2}$/
/^\b[\w.]{1,12}\b$/
- Ecrire une expression reguliere detectant les noms de variable reguliers
en Perl (ie commencant par $, non suivi d'un chiffre).
- Ecrire une expression reguliere permettant d'identifier les lignes
contenant plus de deux fois le meme mot (un mot est constitue de caracteres
\w).
- Trouver une expression reguliere permettant d'identifier trois occurences
consecutives de ce que contient la variable $truc.
Solution
3. Probleme
Un vrai programme pour terminer, mais pas trop difficile.
On veut que le programme fasse deviner un nombre entre 1 et 100 a l'utilisateur
(le nombre sera determine par la commande int(1+ rand 100) en repondant
"Plus petit" ou "Plus grand" a chaque essai. Si l'utilisateur n'entre pas
un nombre, on lui demande de recommencer sauf si il entre quit, exit ou
une ligne vide auquel cas, le programme se termine (utiliser la commande
last, l'equivalent de break en C).
Solution
Ces exercices viennent du livre "Learning Perl" (Schwartz et Phoenix).
rigouste@site.uottawa.ca
.