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 .