TP Langage Perl
Serge gadret
Ce tp sera constitue d'une suite de petits exercices,
qui dans la mesure du possible suivra le plan du cours.
Bien entendu il sera parfois nécessaire d'anticiper sur
les chapitres suivants pour réaliser l'exercice courant.
Vous trouverez tous les fichiers données ou à compléter
dans:
~gadret/public_html/TP_PERL/exos
et les corrigés sont dans:
~gadret/public_html/TP_PERL/exos/corrige
Ces chemins donnent permettent la recopie par les commandes Unix sur le site uniquement.
Ci-dessous les liens vers les fichiers désignés ci-dessus.
exos à compléter
corriges
I- Appel de Perl
A l'aide du transparent Execution d'un programme perl
et en utilisant l'instruction print, faire appel à
l'interpréteur perl de 3 manières suivantes:
- 1- Mode ligne de commande
- 2- A partir de la ligne de commande avec les instructions
contenues dans un fichier
- 3- A partir d'un script:
appel à perl et instructions dans un fichier
Le jeux d'instruction pourra se résumer à une
instruction d'affichage d'un message
.
print "Bonjour voici mon premier programme perl\n";
.
Commenter votre programme.
Vous trouverez dans le fichier scr_perl.pl un programme
un peu plus complet.
Le suffixe ".pl" n'est pas obligatoire mais son
utilisation permet de distinguer les scripts perl.
II-Variables
I-1 Scalaires
Le langage perl est non typé, mais on peut utiliser
les différentes bases décimale, octale et hexadécimale
La fonction "printf" est identique au langage C.
Donner sur la première ligne de "type_scal_ac.pl"
le bon chemin d'accès au programme perl, puis
compléter ce fichier en remplacemant les "..."
On décommentera les lignes au fur et à mesure.
I-2 Chaine de caractères
Afin de manipuler les simples quotes ', les doubles quotes
" " et l'anti slash \, voir l'exercice "
chaine_ac.pl"
I-3 Tableaux
En utilisant le fichier "tableau_ac.pl"", dont on décommentera
comme précédemment les lignes, réaliser les opérations
suivantes:
Définir les tableaux suivants:
- chiffres: 1,2,3,...0
- ordinateurs: PC, MAC, SUN
- alphabet: a,b,c ...., y, z #Utiliser l'operateur
intervalle
- cartes: 01, 02, ... Roi
On affichera :
- le 3 de chiffres
- MAC de ordinateurs
- le z de alphabet
Accéder au dernier élément de "alphabet" sans utiliser son
indice, de deux manières différentes.
Afficher l'indice de ce dernier élément, ainsi que la longueur
du tableau.
Affecter un tableau à un autre tableau
- Créer un nouveau tableau "new_ch" à partir du tableau
"chiffres"
- Afficher la totalité du nouveau tableau
- Afficher un élément du nouveau tableau
- Modifier cet élément
- Afficher cet élément de chaque tableau, pour constater
que l'on a bien 2 tableaux distincts
Définir un nouveau tableau "alphanum" constitue des tableaux
"alphabet" "chiffres" ainsi que du caractère souligné
"_" On obtiendra à l'affichage la liste suivante:
('a','b,',...,'z','_','1','2','3','4','5','6','7','8','9','0' )
- Afficher le tableau
- Afficher l'élément souligné sans utiliser directement
la valeur "27"
I-4 Tableaux de dimension 2 ou 3
voir les fichiers tab_n2.pl et tab_n3.pl
I-5 Tableaux associatifs
Définir un tableau de nom "machine" dont les clefs seront:
- nom: nom de la machine-> cosette
- IP: numero internet-> 137.194.168.23
- type: type de la machine-> Blade_1500
Afficher les caractéristiques de la machine.
Voir le fichier "tab_associa_2.pl", il s'agit d'un tableau
associatif dont les clefs sont des noms de machine, et chaque
élément étant un tableau composé des caractéristiques de la machine.
Afficher quelques caractéristiques de quelques machines au choix.
II-Opérateurs et Instructions
En utilisant l'opérateur "." construire les chaines suivantes
à partir de 2 chaines différentes:
- porte, feuille => portefeuille
- Exercice, s => Exercices
En utilisant l'opérateur duplicateur de chaine "x",
afficher plusieurs fois une meme chaine :
OK! => OK!OK!OK!
Vous trouverez une solution dans ch_oper.pl
En cas de chaine constituée d'une variable et d'une
chaine, utiliser le "{}"
Compléter le fichier ch_concat_ac.pl
Evaluer les 2 expressions suivantes, vérifier avec "parenth.pl"
- $result= 3 * ( 4 + 1 );
- $result= 3 * 4 + 1 ;
Voici une suite de questions dont on pourra vérifier l'exactitude
des réponses en éxécutant "operateur.pl"
$ch1='a'; $ch2='b';
- Question 1: if (ch1) vrai/faux
- Question 2: if ( $ch1 == $ch2 ) égal/différent
- Question 3: if ( $ch1 eq $ch2 ) équivaut/différent
- Question 4: $ch1=''; if ($ch1) vrai/faux
- Question 5: $ch1='\0'; if ($ch1) vrai/faux
- Question 6: $ch1='0'; if ($ch1) vrai/faux
- Question 7: $ch1=0; if ($ch1) vrai/faux
- Question 8: undef($ch1); if ($ch1) vrai/faux
- Question 9: if ( ! 5 < 1) vrai/faux
- Question 10: if (( 5> 2 ) && (7 > 5)) vrai/faux
- Question 11: if (( 5> 2 ) and (7 > 5)) vrai/faux
- Question 12: if (( 5> 2 ) || (5 > 7)) vrai/faux
Compléter le fichier "while_ac.pl" qui affiche la valeur
de la variable I jusqu'a 5, avec les 3 boucles:
- commande while (condt)
- do ... while
- do ... until
Refaire l'exercice ci-dessus en utilisant le "foreach"
(corrigé dans foreach.pl)
Modifier pour afficher des valeurs entre 3 et 9, en ne désignant que
les bornes
Voir avec le fichier "next_last_redo.pl" l'utilisation des
instructions de controle de boucle.
III-Fonctions
On definira les 2 variables suivantes:
$ch='param';
@tab=(1, 2, 3, 4);
Faire deux appel à deux fonctions "proc1" et "proc2" on passera
a "proc1"uniquement $ch , puis $ch et @tab lors
de l'appel à "proc2"
La fonction récupérera les paramètres on les affichera, ainsi que
leur nombre, que l'on retournera à la fonction appelante dans le cas
du premier appel, dans le second appel, modifier le tableau en
incrémentant les éléments de un, puis retourner le nouveau tableau;
Corrigé dans appel_fonct.pl
Voir visibilite.pl pour étudier la visibilité des variables et
l'utilisation du my
IV-Fichiers
En utilisant les opérateurs de test sur les fichiers (cours:Fichiers I)
afficher uniquement les fichiers du répertoire "exos".
Utiliser l'instruction "foreach" et la
fonction "glob" (cours:Fichiers X) pour générer la liste
complète des références.
Corrigé dans oper_fic.pl
Vous disposez du fichier texte "toto.text", lister ce fichier
ligne par ligne en affichant le numéro de ligne "$."(Fichiers X),
puis écrire ces lignes dans un nouveau fichier "ecrit.txt",
on pourra gérer les erreurs d'ouverture ou fermeture sur un fichier
avec la fonction "die" (Fichiers VI).
Utiliser le programme "tst_open_ac.pl".
V-Expressions regulieres
Le fichier "desordre" est un exemple de fichier passwd,
mais ou se sont introduites des lignes blanches, ainsi que des blancs
avant ou après le délimiteur de champ " : ".
Ecrire un programme qui comptera:
- les lignes vides,
- les lignes avec des blancs uniquement,
- les lignes avec des blancs avant et apres le separateur.
On affichera ces lignes, sauf les lignes vides.
Corrigé dans tri_desordre.pl
Dans un deuxieme temps on ecrira un programme permettant de remettre
en ordre le fichier désordre, en fait supprimer les lignes vides,
ainsi que les blancs autour du séparateur. Enfin modifier le shell de
login /usr/csh par /usr/enstsh
Corrigé dans ordre.pl
Soit la chaine suivante: /dev/dsk/c0t3d0s
La modifier en : /dev/rdsk/c0t3d0s0
Dans la partie droite de la substitution on ne retapera pas le motif
en entier, utiliser le motif désigné dans la partie gauche et
correspondant à la variable "$&"
Corrigé dans modif_chaine.pl
Réutiliser le fichier remis en forme précédemment, écrire un
programme permettant d'extraire les champs 1, 4, 5.
Utiliser la fonction "split"
split ( 'separateur' , "texte" );
La fonction split retourne une liste que l'on affectera
à un tableau.
Afficher le nombre total de lignes.
Corrigé dans passwd.pl