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.