Langages de script - Perl - M2 Pro
Transcription
Langages de script - Perl - M2 Pro
Langages de script - Perl M2 Pro - 2014/2015 Clément Plancq [email protected] Laboratoire de Linguistique Formelle 24 sept 2014 Les structures de répétition ou boucles Principe essentiel en programmation, se retrouve dans la plupart des langages de programmation impérative Permet de répéter des instructions un nombre déterminé de fois ou en fonction d’une condition ou de parcourir une liste d’éléments ∃ plusieurs types de boucles en Perl Boucles (2) Boucle while Boucle foreach while(condition){ instruction; } foreach my $elem(liste){ instruction; } Boucle for (C style) for(init; test; iteration){ instruction; } (Perl specific) Boucles (3) guess while.pl #! / u s r / b i n / p e r l −w ## D e v i n e z a q u e l c h i f f r e use s t r i c t ; my my my my my j e pense $tmp = r a n d ( 1 0 ) ; $ c h i f f r e = i n t ( $tmp ) ; $chiffre user ; $essais = 0; $tentatives = 0; w h i l e ( $ e s s a i s < 5){ p r i n t ” Devinez a quel c h i f f r e $ c h i f f r e u s e r = <STDIN>; chomp $ c h i f f r e u s e r ; j e p e n s e [0 −9] : ” ; i f ( $ c h i f f r e == $ c h i f f r e u s e r ){ Je p e n s a i s a $ c h i f f r e \n” ; p r i n t ” Gagne ! exit ; } $ e s s a i s ++; $tentatives = 5 − $essais ; p r i n t ” E s s a y e e n c o r e !\ n I l ne t e r e s t e p l u s que $ t e n t a t i v e s u n l e s s $ t e n t a t i v e s == 0 ; } p r i n t ” Perdu ! Le c h i f f r e a d e v i n e r e t a i t : $ c h i f f r e \n” ; t e n t a t i v e s \n” Boucles (4) guess for.pl #! / u s r / b i n / p e r l −w ## D e v i n e z a q u e l c h i f f r e use s t r i c t ; my my my my j e pense $tmp = r a n d ( 1 0 ) ; $ c h i f f r e = i n t ( $tmp ) ; $chiffre user ; $tentatives = 0; f o r (my $ e s s a i s = 1 ; $ e s s a i s <= 5 ; $ e s s a i s ++){ p r i n t ” D e v i n e z a q u e l c h i f f r e j e p e n s e [0 −9] : ” ; $ c h i f f r e u s e r = <STDIN>; chomp $ c h i f f r e u s e r ; i f ( $ c h i f f r e == $ c h i f f r e u s e r ){ p r i n t ” Gagne ! Je p e n s a i s a $ c h i f f r e \n” ; exit ; } $tentatives = 5 − $essais ; p r i n t ” E s s a y e e n c o r e !\ n I l ne t e r e s t e p l u s que $ t e n t a t i v e s u n l e s s $ t e n t a t i v e s == 0 ; } p r i n t ” Perdu ! Le c h i f f r e a d e v i n e r e t a i t : $ c h i f f r e \n” ; t e n t a t i v e s \n” Boucles (5) guess foreach.pl #! / u s r / b i n / p e r l −w ## D e v i n e z a q u e l c h i f f r e use s t r i c t ; my my my my j e pense $tmp = r a n d ( 1 0 ) ; $ c h i f f r e = i n t ( $tmp ) ; $chiffre user ; $tentatives = 0; f o r e a c h my $ e s s a i s ( 1 . . 5 ) { p r i n t ” Devinez a quel c h i f f r e $ c h i f f r e u s e r = <STDIN>; chomp $ c h i f f r e u s e r ; j e p e n s e [0 −9] : ” ; i f ( $ c h i f f r e == $ c h i f f r e u s e r ){ p r i n t ” Gagne ! Je p e n s a i s a $ c h i f f r e \n” ; exit ; } $tentatives = 5 − $essais ; p r i n t ” E s s a y e e n c o r e !\ n I l ne t e r e s t e p l u s que $ t e n t a t i v e s u n l e s s $ t e n t a t i v e s == 0 ; } p r i n t ” Perdu ! Le c h i f f r e a d e v i n e r e t a i t : $ c h i f f r e \n” ; t e n t a t i v e s \n” Manipulations de fichiers L’accès aux fichiers est une opération qui peut être source d’erreurs (mauvais nom de chemin, mauvais nom de fichier, fichier protégé, ...). Pas d’accès direct aux fichiers, les opérations de lecture et d’écriture sont faites par l’intermédiaire d’un descripteur de fichier via la fonction open. open(FILEHANDLE, "<file name") || die ($!); < ouverture en lecture > ouverture en écriture (écrasement) >> ouverture en écriture (concaténation) Manipulations de fichiers (2) cat.pl #/ u s r / b i n / p e r l −w # cat l i k e s c r i p t # p e r l cat . pl nom de fichier use s t r i c t ; d i e ” Argument manquant \ nUsage : $0 f i c h i e r \n” u n l e s s d e f i n e d $ARGV [ 0 ] ; d i e ”$ARGV [ 0 ] n ’ e s t p a s un f i c h i e r \ nUsage : $0 f i c h i e r \n” u n l e s s −f $ARGV [ 0 ] ; open ( FILE , ”<$ARGV [ 0 ] ” ) | | d i e ” $ ! ” ; w h i l e (<FILE >){ p r i n t $ ; #$ e s t l a v a r i a b l e p a r d e f a u t } c l o s e ( FILE ) ; Ajoutez le numéro de la ligne en début de ligne. Manipulations de fichiers (3) La fonction print peut prendre en paramètre un descripteur de fichier. ex : open(OUTPUT, ">res.txt") || die ($!); print OUTPUT "Résultat : $res\n"; close OUTPUT; Modifiez le script précédent afin d’écrire le résultat dans un fichier. Exercices 1. Table de multiplication Écrivez un script perl qui affiche la table de multiplication de n, n étant un nombre donné par l’utilisateur sur STDIN. 2. Nombres premiers Écrivez un script perl qui détermine si n est un nombre premier , n étant un nombre donné par l’utilisateur sur STDIN. 3. wc Écrivez un script perl qui compte le nombre de lignes du fichier donné en argument lors de l’appel du script.