perl:utilisation_des_fichiers
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
perl:utilisation_des_fichiers [2009/03/15 00:51] – root | perl:utilisation_des_fichiers [2013/03/12 23:36] (Version actuelle) – root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Les fichiers ====== | ||
+ | |||
====== 1. Descripteurs ====== | ====== 1. Descripteurs ====== | ||
Ligne 6: | Ligne 8: | ||
Perl peut également manipuler ces descripteurs avec deux types de syntaxe. La syntaxe " | Perl peut également manipuler ces descripteurs avec deux types de syntaxe. La syntaxe " | ||
+ | <code perl> | ||
open(TEXT, "> | open(TEXT, "> | ||
print TEXT " | print TEXT " | ||
close(TEXT); | close(TEXT); | ||
+ | </ | ||
La deuxième syntaxe, plus " | La deuxième syntaxe, plus " | ||
+ | <code perl> | ||
open(my $text, "> | open(my $text, "> | ||
print $text " | print $text " | ||
close($text); | close($text); | ||
+ | </ | ||
Notons qu'il existe une version moderne (orienté objet) qui requiert l' | Notons qu'il existe une version moderne (orienté objet) qui requiert l' | ||
+ | <code perl> | ||
use FileHandle; | use FileHandle; | ||
| | ||
Ligne 21: | Ligne 28: | ||
print $text " | print $text " | ||
$text-> | $text-> | ||
+ | </ | ||
===== Descripteurs implicites ===== | ===== Descripteurs implicites ===== | ||
Ligne 51: | Ligne 59: | ||
Il est important de noter qu' | Il est important de noter qu' | ||
+ | <code perl> | ||
sub log_error { | sub log_error { | ||
open(my $log, ">> | open(my $log, ">> | ||
print $log @_; | print $log @_; | ||
} | } | ||
+ | </ | ||
===== Avec des programmes ===== | ===== Avec des programmes ===== | ||
On peut facilement reproduire le mécanisme du " | On peut facilement reproduire le mécanisme du " | ||
+ | <code perl> | ||
open(MAIL, " | open(MAIL, " | ||
print MAIL "From: eleve@insia.org\r\nSubject: | print MAIL "From: eleve@insia.org\r\nSubject: | ||
Ligne 68: | Ligne 79: | ||
} | } | ||
close FILES; | close FILES; | ||
+ | </ | ||
Ceci implique bien entendu que Perl se charge d' | Ceci implique bien entendu que Perl se charge d' | ||
Ligne 83: | Ligne 95: | ||
Dans ce cas on peut utiliser les appels systèmes POSIX standard : | Dans ce cas on peut utiliser les appels systèmes POSIX standard : | ||
+ | <code perl> | ||
use Fcntl; # Imports O_xxx constants | use Fcntl; # Imports O_xxx constants | ||
| | ||
Ligne 93: | Ligne 106: | ||
} | } | ||
close FILE; | close FILE; | ||
+ | </ | ||
===== Mode binaire ===== | ===== Mode binaire ===== | ||
Ligne 105: | Ligne 119: | ||
On peut lire une quantité de donnée quelconque depuis un fichier simplement à l'aide de //read// : | On peut lire une quantité de donnée quelconque depuis un fichier simplement à l'aide de //read// : | ||
+ | <code perl> | ||
read(FILE, $buffer, 1500); | read(FILE, $buffer, 1500); | ||
read(FILE, $buffer, 1500, 2000); # Lit à partir du 2000ème octet | read(FILE, $buffer, 1500, 2000); # Lit à partir du 2000ème octet | ||
seek(FILE, 5000); # Positionne le curseur de lecture au 5000ème octet | seek(FILE, 5000); # Positionne le curseur de lecture au 5000ème octet | ||
+ | </ | ||
===== Par enregistrement ===== | ===== Par enregistrement ===== | ||
Il s'agit de l' | Il s'agit de l' | ||
- | | + | <code perl> |
$/ = " | $/ = " | ||
while (< | while (< | ||
print "< | print "< | ||
} | } | ||
- | | + | </code> |
L' | L' | ||
Il est possible de lire un fichier entier en un seul appel en utilisant la chaîne vide comme séparateur : | Il est possible de lire un fichier entier en un seul appel en utilisant la chaîne vide comme séparateur : | ||
+ | <code perl> | ||
$/ = ""; | $/ = ""; | ||
my $whole = < | my $whole = < | ||
- | | + | </ |
**Note**: une technique alternative, | **Note**: une technique alternative, | ||
Ligne 132: | Ligne 150: | ||
Il existe de nombreuses fonctions de formattage, dont les fameux //print//, //printf//, //write// et //format// : | Il existe de nombreuses fonctions de formattage, dont les fameux //print//, //printf//, //write// et //format// : | ||
+ | <code perl> | ||
print FILE "Une information...\n"; | print FILE "Une information...\n"; | ||
+ | </ | ||
**Note**: //write// n'est **pas** le pendant de //read// ! (Il n'est pas nécessaire, | **Note**: //write// n'est **pas** le pendant de //read// ! (Il n'est pas nécessaire, | ||
Ligne 140: | Ligne 159: | ||
Il est possible de changer momentanément le fichier de sortie par défaut, ce qui permet de rediriger facilement la sortie d'un sous-programme sans avoir à le modifier : | Il est possible de changer momentanément le fichier de sortie par défaut, ce qui permet de rediriger facilement la sortie d'un sous-programme sans avoir à le modifier : | ||
+ | <code perl> | ||
make_report(); | make_report(); | ||
my $previous = select(LOG); | my $previous = select(LOG); | ||
make_report(); | make_report(); | ||
select($previous); | select($previous); | ||
+ | </ | ||
===== Bufferisation ===== | ===== Bufferisation ===== | ||
Ligne 152: | Ligne 171: | ||
On peut facilement outrepasser ce cache, par exemple pour la sortie courante (STDOUT par défaut, mais cf. //select//) : | On peut facilement outrepasser ce cache, par exemple pour la sortie courante (STDOUT par défaut, mais cf. //select//) : | ||
+ | <code perl> | ||
$| = 1; # Autoflush = 1 | $| = 1; # Autoflush = 1 | ||
+ | </ | ||
Et il existe une syntaxe plus générique fonctionnant sur tous les descripteurs de fichiers, mais elle nécessite le module orienté objet : | Et il existe une syntaxe plus générique fonctionnant sur tous les descripteurs de fichiers, mais elle nécessite le module orienté objet : | ||
+ | <code perl> | ||
use FileHandle; | use FileHandle; | ||
| | ||
open(my $tty, ">/ | open(my $tty, ">/ | ||
$tty-> | $tty-> | ||
+ | </ |
perl/utilisation_des_fichiers.1237078302.txt.gz · Dernière modification : 2009/03/15 00:51 de root