POD2-FR
view release on metacpan or search on metacpan
FR/perlform.pod view on Meta::CPAN
=head1 NOTES
Parce que les lignes contenant les valeurs peuvent contenir des
expressions arbitraires (pour les champs @, pas les ^), vous pouvez
construire des affichages très sophistiqués, comme sprintf() ou une
bien à vous. Par S<exemple :>
format Ident =
@<<<<<<<<<<<<<<<
&commify($n)
.
Pour avoir un vrai @ ou ^ dans un champ, S<faites :>
format Ident =
J'ai un @ ici.
"@"
.
Pour centrer une ligne entière de texte, S<faites :>
format Ident =
@|||||||||||||||||||||||||||||||||||||||||||||||
"Une ligne de texte"
.
Il n'existe pas de façon prédéfinie de dire «E<nbsp>mets ça à droite de la
page, quelle que soit sa largeurE<nbsp>»E<nbsp>: vous devez spécifier où chaque chose
doit aller. Dans les cas vraiment désespérés on peut générer un format
à la volée, en se basant sur le nombre de colonnes, pour ensuite
l'évaluer avec eval()E<nbsp>:
$format = "format STDOUT = \n"
. '^' . '<' x $cols . "\n"
. '$entry' . "\n"
. "\t^" . "<" x ($cols-8) . "~~\n"
. '$entry' . "\n"
. ".\n";
print $format if $Debugging;
eval $format;
die $@ if $@;
qui générera un format ressemblant a quelque chose dans ce S<goût-là :>
format STDOUT =
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$entry
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
$entry
.
Voici un petit programme qui fait a peu près la même chose que S<fmt(1) :>
format =
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
$_
.
$/ = '';
while (<>) {
s/\s*\n\s*/ /g;
write;
}
=head2 Pied de page
Alors que $FORMAT_TOP_NAME contient le nom de l'en-tête du format en cours, il
n'y a pas de mécanisme de correspondance pour faire la même chose avec le pied
de page. L'une des causes est qu'on ne connaît pas la taille d'un format avant
qu'il ne soit évalué. C'est sur la liste des choses à faire.
Voici une première stratégieE<nbsp>: si vous avez un pied de page de taille
constante, vous pouvez vérifier $FORMAT_LINES_LEFT avant chaque write() et
imprimer le pied de page quand c'est nécessaire.
Une autre stratégie consiste à ouvrir un pipe sur soi-même, utilisant
C<open(MOIMEME, "|-")> (référez vous a L<perlfunc/open()>) et à ne faire que
des write() sur MOIMEME plutôt que STDOUT. Faites en sorte que le processus
fils remanie STDIN pour ajouter le pied de page comme il vous plaît. Ce n'est
pas très pratique, mais c'est faisable.
=head2 Accéder aux formats de l'intérieur
Pour un accès de bas niveau au mécanisme de formatage, vous pouvez utiliser
formline() et accéder à la variable C<$^A> (la variable $ACCUMULATOR)
directement.
Par S<exemple :>
$str = formline <<'END', 1,2,3;
@<<< @||| @>>>
END
print "Yo, je viens de mettre `$^A' dans l'accumulateur !\n";
Ou faire une routine swrite(), qui est à write() ce que sprintf() est à
printf(), comme S<suit :>
use Carp;
sub swrite {
croak "utilisation : swrite IMAGE ARGUMENTS" unless @_;
my $format = shift;
$^A = "";
formline($format,@_);
return $^A;
}
$string = swrite(<<'END', 1, 2, 3);
Check me out
@<<< @||| @>>>
END
print $string;
=head1 MISE EN GARDE
Le point isolé qui termine un format peut aussi provoquer la perte d'un
courriel passant via un serveur de mail mal configuré (et l'expérience montre
qu'une telle configuration est la règle, et non pas l'exception). Donc,
lorsque vous envoyez un format par courriel, S<indentez-le !>
( run in 1.771 second using v1.01-cache-2.11-cpan-b301d465b3d )