perl:open

Un article de Polydoc.

Sommaire

[modifier] Synopsis

open(DESCRIPTEUR,$mode_nom);
open(DESCRIPTEUR,$mode,$nom);
open(DESCRIPTEUR);

[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 de programme.
  • '|programme' ouvre un descripteur en écriture sur l'entrée de programme.

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;

[modifier] Voir aussi

[modifier] Liens internes