voici un example du perlfaq5 de perl.
Comment manipuler un fichier avec des enregistrements de longueur fixe?
Le plus efficace est d'utiliser pack() et unpack(). C'est plus rapide que d'utiliser substr() sur de nombreuses, nombreuses
chaînes. C'est plus lent pour seulement quelques unes.
Voici un morceau de code démontrant comment décompiler et recompiler ensuite des lignes formattées selon un schéma donné, ici
la sortie du programme ps, version Berkeley:
# exemple de ligne:
# 15158 p5 T 0:00 perl /home/ram/bin/scripts/now-what
$PS_T = 'A6 A4 A7 A5 A*';
open(PS, "ps|" );
print scalar <PS>;
while (<PS> ) {
($pid, $tt, $stat, $time, $command) = unpack($PS_T, $_);
for $var (qw!pid tt stat time command!) {
print "$var: <$$var>\n";
}
print 'line=', pack($PS_T, $pid, $tt, $stat, $time, $command),
"\n";
}
Nous avons utilisé $$var d'une façon défendue par use strict 'refs'. En effet, nous promouvons une chaîne au statut de
référence sur une variable scalaire par le biais d'une référence symbolique. C'est justifié dans des petits programmes, mais
supporte mal l'utilisation intensive. D'autre part, cela ne fonctionne qu'avec des variables globales, par opposition aux
lexicales.
---------------
Mes News