perl:open
Un article de Polydoc.
Sommaire |
[modifier] Synopsis
[modifier] Description
Associe le nom de fichier ou le processus donné au descripteur DESCRIPTEUR.
Ici, $mode_nom est le nom du fichier/processus a ouvrir.
[modifier] Notes
Le fonctionnement de open ressemble à la gestion des redirections du shell :
-
'>fichier' -
'<fichier' -
'>>fichier' -
'|programme' -
'programme|'
[modifier] Fichiers
On peut préciser le mode d'ouverture (lecture/écriture/ajout) en plaçant respectivement devant le nom :
-
< -
> -
>>
Si aucune précision n'est donnée, le comportement par défaut est d'ouvrir en lecture. En mettant un + devant le mode, l'ouverture permettra la lecture et l'écriture.
En donnant uniquement le descripteur, le nom de fichier utilisé sera celui contenu dans le variable ayant le même nom que le descripteur. Il est aussi possible de séparé le mode du nom, en utilisant 2 variables (2ième prototype).
[modifier] Processus
open permet l'ouverture de pipe, de la même manière de c:popen en C.
De la même façon que pour un fichier, on peut écrire dans l'entrée standard du processus, ou bien lire la sortie standard du processus :
-
'programme|'ouvre un descripteur en lecture sur la sortie deprogramme. -
'|programme'ouvre un descripteur en écriture sur l'entrée deprogramme.
Pour fermer un descripteur, on utilise close.
[modifier] Exemples
# # Faire la meme chose de manière différente # $mode = '>'; $nom = 'fichier'; $mode_nom = $mode.$nom; open(DESC,$mode_nom); # ..action .. # close(DESC); open(DESC,$mode,$nom); print DESC "Hello World !\n"; # on ecrit dedans close(DESC); # # Affiche chaque ligne du fichier # # L'expression <DESCIPTEUR> renvoit une ligne du descripteur DESCRIPTEUR ou EOF open(DESC,$nom); # lecture par defaut while(<DESC>) { # tant que le descripteur renvoit une ligne (pas EOF) # (la ligne est stocké dans $_) print; # affiche $_ par defaut } # # Affiche chaque ligne retourné par ls # open(DESC,'ls|'); print while(<DESC>); # autre écriture plus concise de boucle précédente close(DESC); # # Ecriture dans un pipe (ici, vers less) # open(DESC,'|less'); print DESC "a"x42; # écrit 42 fois 'a' sur l'entrée de less close DESC;

