On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une
connexion d'entrée-sortie (les entrées-sorties standards vues précédemment
sont connues par les filehandles STDIN et STDOUT). Les
fichiers, étant des entrées-sorties, sont manipulés sous Perl à
l'aide d'un nom: leur filehandle!
Les descripteurs de fichiers sous Perl portent des noms
non-précédés d'un caractère
spécial. Ainsi, il est conseillé (voire fortement recommandé
de nommer les descripteurs de fichiers à l'aide de noms en majuscules
afin de réduire au maximum le risque d'utiliser un mot clé du langage réservé
pour une utilisation future.
Pour pouvoir être utilisé, un descripteur de fichier doit dans un premier
temps être ouvert, à l'aide de la fonction open(), puis
fermé (à l'aide de la fonction close() lorsque son utilisation n'est plus nécessaire, afin de libérer
la ressource.
La syntaxe pour ouvrir un fichier est la suivante:
open(FILEHANDLER,"nom_de_la_ressource");
Ce qui donnera par exemple:
open(FILE,">toto.txt");
|
- Lorsque le nom du fichier n'est précédé d'aucun signe particulier
il s'agit d'une ouverture en lecture seule.
- Lorsque le nom du fichier est précédé du signe supérieur >
il s'agit d'une création de fichier.
- Lorsque le nom du fichier est précédé du double signe supérieur >>
il s'agit d'une ouverture en écriture.
|
La fonction open() retourne une valeur indiquant la réussite (true)
ou l'échec (false) de l'ouverture du fichier.
La fonction close() admet comme unique argument le descripteur de fichier:
close(FILEHANDLER);
Lorsque la fonction open() ne parvient pas à ouvrir un fichier pour une quelconque
raison (fichier inexistant, fichier déjà ouvert en écriture), il est
parfois nécessaire d'interrompre l'exécution du programme pour éviter
de dangereuses erreurs en cascade. Pour cela Perl fournit un outil très pratique: la fonction
die, permettant de terminer l'exécution du programme et afficher un éventuel
message d'erreur sur la sortie standard (l'écran). La fonction die s'utilise
de la façon suivante:
open(TOTO,">toto.txt") ¦¦ die "Erreur d'ouverture de TOTO" ;
Par cette écriture il faut comprendre "Ouvre ce fichier sinon meurt et affiche le message
suivant...".
Dès qu'un fichier est ouvert, il est possible de lire son contenu ligne
par ligne grâce à la fonction print(). Pour cela, il suffit
de placer la variable $_ dans la chaine qui suit la fonction print()
(ou bien une variable contenant une partie de la chaine...):
open(TOTO,"toto.txt") ¦¦ die "Erreur d'ouverture de TOTO" ;
while (<TOTO>) {
print "la ligne $_ a ete lue\n";
}
close(TOTO);
Cela est en réalité équivalent à la ligne suivante car
STDOUT est le descripteur de fichiers par défaut de la fonction print():
open(TOTO,"toto.txt") ¦¦ die "Erreur d'ouverture de TOTO" ;
while () {
print STDOUT "la ligne $_ a ete lue\n";
}
close(TOTO);
Ainsi, lorsqu'un fichier est ouvert en écriture (lorsque son nom est précédé
du caractère > dans la fonction open()) il suffit de remplacer la destination du print (c'est-à-dire
STDOUT) par le descripteur du fichier:
open(LIRE,"lire.txt") ¦¦ die "Erreur d'ouverture de LIRE" ;
open(ECRIRE,">ecrire.txt") ¦¦ die "Erreur de creation de TOTO" ;
while () {
print ECRIRE $_;
}
close(LIRE);
close(ECRIRE);
Le script ci-dessus effectue en faite une copie de fichier ligne par ligne du fichier lire.txt
vers le fichier ecrire.txt.
|