.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "PERLFORM 1"
.TH PERLFORM 1 "2009-03-16" "DocFr" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME/NOM"
.IX Header "NAME/NOM"
perlform \- Formats Perl
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Perl posse\*`de un me\*'canisme qui permet de ge\*'ne\*'rer des rapports et
tableaux simples. Pour ce faire, il vous aide a\*` e\*'crire le code
de manie\*`re semblable a\*` ce a\*` quoi il ressemblera lors de l'impression.
On peut garder la trace du
nombre de lignes par page, sur quelle page on se trouve, quand
imprimer des ente\*^tes, etc. Les mots\-cle\*'s sont emprunte\*'s au \s-1FORTRAN\s0 :
\&\fIformat()\fR pour de\*'clarer, \fIwrite()\fR pour exe\*'cuter\ ; re\*'fe\*'rez\-vous a\*` leurs
entre\*'es dans perlfunc. Heureusement, le layout est largement plus
lisible, un peu comme l'instruction \s-1PRINT\s0 \s-1USING\s0 du \s-1BASIC\s0. Voyez-le
comme une sorte de X\ \fInroff\fR\|(1) du pauvre\ X.
.PP
Les formats, comme les paquetages et les sous-programmes, sont
de\*'clare\*'s pluto\*^t qu'exe\*'cute\*'s\ : ils peuvent donc apparai\*^tre a\*`
n'importe quel point de vos programmes, mais mieux vaut les
regrouper. Ils ont leur propre espace de nommage, bien se\*'pare\*' des
autres X\ types\ X de Perl. Cela signifie que peuvent coexister une
fonction X\ bidule\ X et un format X\ bidule\ X. Cependant, le nom par de\*'faut
d'un format associe\*' a\*` un fichier est le nom du fichier. Par
conse\*'quent, le nom par de\*'faut du format pour \s-1STDOUT\s0 est X\ \s-1STDOUT\s0\ X, et
le nom du format par de\*'faut pour le fichier \s-1TEMP\s0 est X\ \s-1TEMP\s0\ X. Ils ont l'air
semblables, mais ne le sont pas.
.PP
Les formats de sortie sont de\*'clare\*'s comme suit\ :
.PP
.Vb 3
\& format NOM =
\& LISTEDEFORMATS
\& .
.Ve
.PP
Si le nom est omis, le format \s-1XSTDOUTX\s0 est alors automatiquement
de\*'fini. \s-1LISTEDEFORMATS\s0 consiste en une suite de lignes, chacune d'elle
pouvant e\*^tre de l'un des trois types suivants\ :
.IP "1." 4
Un commentaire, indique\*' par un '#' dans la premie\*`re colonne.
.IP "2." 4
Une ligne-image donnant le format de la ligne.
.IP "3." 4
Une ligne d'arguments, donnant les valeurs a\*` inse\*'rer dans la
ligne-image pre\*'ce\*'dente.
.PP
Les lignes-images s'imprimeront exactement comme elles ont e\*'te\*' e\*'crites,
a\*` l'exception des champs remplace\*'s par des arguments dans ces lignes.
Chaque champ d'une ligne-image commence par une arrobe (@) ou
un accent circonflexe (^). Ces lignes ne font l'objet d'aucune
interpre\*'tation. Le champ @, a\*` ne pas confondre avec le symbole de
tableau X\ @\ X, est le type de champ normal. L'autre type, le champ ^,
sert a\*` faire du remplissage multiligne rudimentaire.
On de\*'finit la longueur de
champ en le remplissant avec les caracte\*`res X\ <\ X, X\ >\ X, ou
X\ |\ X, pour aligner, respectivement, a\*` gauche, a\*` droite, ou au
centre. Si la variable exce\*`de la longueur spe\*'cifie\*'e, elle sera tronque\*'e.
.PP
On peut aussi aligner a\*` droite en utilisant le caracte\*`re X\ #\ X, avec un
X\ .\ X optionnel, pour spe\*'cifier un champ nume\*'rique\ : l'alignement se
fait sur le X\ .\ X de\*'cimal. Si la valeur spe\*'cifie\*'e pour ces types de
champs contient un retour a\*` la ligne, seul le texte jusqu'au
retour a\*` la ligne est imprime\*'.
Enfin, le champ spe\*'cial X@*X peut e\*^tre employe\*' pour
e\*'crire des valeurs multilignes non tronque\*'es\ ; il doit apparai\*^tre seul
sur la ligne.
.PP
Les valeurs sont spe\*'cifie\*'es sur la ligne suivante, dans le me\*^me ordre
que les champs images. Les expressions fournissant les valeurs
doivent e\*^tre se\*'pare\*'es par des virgules. Les expressions sont toutes
e\*'value\*'es en tant que liste avant que la ligne ne soit traite\*'e. Une
seule expression peut donc cre\*'er toute une liste d'e\*'le\*'ments. Les
expressions peuvent e\*^tre e\*'crites sur plusieurs lignes, a\*` condition de
les placer entre parenthe\*`ses. En pareil cas, la parenthe\*`se ouvrante
\&\fIdoit\fR commencer la premie\*`re ligne. Si une expression se transforme
en nombre avec une partie de\*'cimale, et si l'image correspondante
spe\*'cifie que la partie de\*'cimale doit e\*^tre affiche\*'e (c'est\-a\*`\-dire,
n'importe quelle image sauf des X\ #\ X \fBsans\fR un X\ .\ X), le caracte\*`re
utilise\*' pour indiquer la coupure de\*'cimale sera \fBtoujours\fR de\*'termine\*'
par la locale \s-1LC_NUMERIC\s0 utilise\*'e. Cela signifie que si
l'environnement dans lequel est lance\*' le script spe\*'cifie le franc\*,ais,
une virgule sera affiche\*'e au lieu du point. Voyez perllocale et
\&\*(L"\s-1MISE\s0 \s-1EN\s0 \s-1GARDE\s0\*(R" pour les de\*'tails.
.PP
Les champs images commenc\*,ant par ^ pluto\*^t que @ subissent un
traitement spe\*'cial. Avec un champ #, le champ est vide si la valeur
n'est pas de\*'finie. Pour d'autres types de champs, le ^ permet de
choisir un type de remplissage. Au lieu d'avoir une expression
arbitraire, la valeur spe\*'cifie\*'e doit e\*^tre une variable scalaire
contenant une chai\*^ne de caracte\*`res. Perl met autant de texte qu'il
peut dans le champ, puis supprime de la chai\*^ne ce qu'il a de\*'ja\*`
affiche\*'\ : a\*` l'appel suivant de la me\*^me variable, il affichera la
suite des informations. Cela signifie que la variable elle\-me\*^me est
modifie\*'e pendant l'exe\*'cution du \fIwrite()\fR, et elle n'est pas retourne\*'e.
Vous devez normalement utiliser une se\*'quence de champs aligne\*'s
verticalement pour afficher un bloc de texte. Vous pouvez terminer le
dernier champ par X...X, qui apparai\*^tra si le texte est trop long
pour e\*^tre affiche\*' entie\*`rement. Vous pouvez changer les caracte\*`res ou\*`
il est possible de changer de ligne en utilisant la variable \f(CW$:\fR
(c'est \f(CW$FORMAT_LINE_BREAK_CHARACTERS\fR si vous utilisez le module
English) pour satisfaire vos besoins.
.PP
L'utilisation des champs ^ peut produire des enregistrements de
longueur variable. Si le texte a\*` formater est court, vous pouvez
supprimer les lignes vides en mettant un caracte\*`re X\ ~\ X (tilde)
n'importe ou\*` sur la ligne. Le tilde sera transforme\*' en espace lors de
l'affichage. Si vous mettez un deuxie\*`me tilde contigu au premier, la
ligne sera re\*'pe\*'te\*'e tant que les champs sur la ligne ne seront pas
vides. (si vous utilisez un champ @, l'expression que vous lui avez
donne\*' a inte\*'re\*^t a\*` ne pas donner la me\*^me valeur tout le temps\ !)
.PP
Les en\-te\*^tes de formulaires sont par de\*'faut pris en charge par un
format ayant le me\*^me nom que le fichier associe\*', avec X_TOPX
ajoute\*'. Il est affiche\*' en haut de chaque page. Voyez \*(L"write\*(R" in perlfunc.
.PP
Exemples\ :
.PP
.Vb 10
\& # Un rapport sur le fichier /etc/passwd
\& format STDOUT_TOP =
\& Fichier de mots de passe
\& Nom Login Bureau Uid Gid Maison
\& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
\& .
\& format STDOUT =
\& @<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
\& $nom, $login, $bureau,$uid,$gid, $maison
\& .
\&
\& # Un formulaire de rapport de bogue
\& format STDOUT_TOP =
\& Bug Reports
\& @<<<<<<<<<<<<<<<<<<<<<<< @||| @>>>>>>>>>>>>>>>>>>>>>>>
\& $system, $%, $date
\& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
\& .
\& format STDOUT =
\& Sujet : @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $sujet
\& Index : @<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $index, $description
\& Priorite\*' : @<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $priorite, $date, $description
\& De : @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $de, $description
\& Assigne\*' a\*` : @<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $programmeur, $description
\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $description
\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $description
\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $description
\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $description
\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<...
\& $description
\& .
.Ve
.PP
Vous pouvez me\*^ler les \fIprint()\fR et les \fIwrite()\fR sur le me\*^me canal de
sortie, mais vous devez prendre en charge \f(CW\*(C`$\-\*(C'\fR
(\f(CW$FORMAT_LINES_LEFT\fR) vous\-me\*^me.
.Sh "Variables de formats"
.IX Subsection "Variables de formats"
Le nom du format en cours est enregistre\*' dans la variable \f(CW$~\fR
(\f(CW$FORMAT_NAME\fR), le format d'en\-te\*^te en cours dans \f(CW$^\fR
(\f(CW$FORMAT_TOP_NAME\fR), le nume\*'ro de la page en cours dans \f(CW$%\fR
(\f(CW$FORMAT_PAGE_NUMBER\fR), et le nombre de lignes par page dans \f(CW$=\fR
(\f(CW$FORMAT_LINES_PER_PAGE\fR). Si filehandle doit e\*^tre affiche\*'
imme\*'diatement, on l'indique par \f(CW$|\fR (\f(CW$OUTPUT_AUTOFLUSH\fR). La
chai\*^ne imprime\*'e avant chaque de\*'but de page (sauf la premie\*`re) est
enregistre\*'e dans \f(CW$^L\fR (\f(CW$FORMAT_FORMFEED\fR). Ces variables sont
spe\*'cifiques a\*` un filehandle spe\*'cifique\ : vous devrez se\*'lectionner
celui qui vous inte\*'resse, avec \fIselect()\fR\ :
.PP
.Vb 4
\& select((select(OUTF),
\& $~ = "Mon_Autre_Format",
\& $^ = "Mon_Top_Format"
\& )[0]);
.Ve
.PP
C'est pas beau, hein\ ? C'est pourtant assez commun, donc, ne soyez
pas trop surpris quand vous le verrez. Vous pouvez a\*` la limite
utiliser une variable temporaire pour pouvoir re\*'cupe\*'rer le filehandle
pre\*'ce\*'dent (c'est une bien meilleure approche en ge\*'ne\*'ral, non seulement
car vous avez plusieurs e\*'tapes pour pouvoir faire joujou avec le
debuggeur)\ :
.PP
.Vb 4
\& $ofh = select(OUTF);
\& $~ = "Mon_Autre_Format";
\& $^ = "Mon_Top_Format";
\& select($ofh);
.Ve
.PP
Si vous utilisez le module English, vous pouvez me\*^me lire les noms de
variables\ :
.PP
.Vb 5
\& use English;
\& $ofh = select(OUTF);
\& $FORMAT_NAME = "Mon_Autre_Format";
\& $FORMAT_TOP_NAME = "Mon_Top_Format";
\& select($ofh);
.Ve
.PP
Mais il y a toujours les dro\*^les de \fIselect()\fR. Donc, utilisez juste le
module FileHandle. Maintenant, vous pouvez acce\*'der a ces variables
spe\*'ciales en utilisant des me\*'thodes en minuscules\ :
.PP
.Vb 3
\& use FileHandle;
\& format_name OUTF "Mon_autre_Format";
\& format_top_name OUTF "Mon_Top_Format";
.Ve
.PP
Largement mieux\ !
.SH "NOTES"
.IX Header "NOTES"
Parce que les lignes contenant les valeurs peuvent contenir des
expressions arbitraires (pour les champs @, pas les ^), vous pouvez
construire des affichages tre\*`s sophistique\*'s, comme \fIsprintf()\fR ou une
bien a\*` vous. Par exemple\ :
.PP
.Vb 4
\& format Ident =
\& @<<<<<<<<<<<<<<<
\& &commify($n)
\& .
.Ve
.PP
Pour avoir un vrai @ ou ^ dans un champ, faites\ :
.PP
.Vb 4
\& format Ident =
\& J\*(Aqai un @ ici.
\& "@"
\& .
.Ve
.PP
Pour centrer une ligne entie\*`re de texte, faites\ :
.PP
.Vb 4
\& format Ident =
\& @|||||||||||||||||||||||||||||||||||||||||||||||
\& "Une ligne de texte"
\& .
.Ve
.PP
Il n'existe pas de fac\*,on pre\*'de\*'finie de dire X\ mets c\*,a a\*` droite de la
page, quelle que soit sa largeur\ X\ : vous devez spe\*'cifier ou\*` chaque chose
doit aller. Dans les cas vraiment de\*'sespe\*'re\*'s on peut ge\*'ne\*'rer un format
a\*` la vole\*'e, en se basant sur le nombre de colonnes, pour ensuite
l'e\*'valuer avec \fIeval()\fR\ :
.PP
.Vb 9
\& $format = "format STDOUT = \en"
\& . \*(Aq^\*(Aq . \*(Aq<\*(Aq x $cols . "\en"
\& . \*(Aq$entry\*(Aq . "\en"
\& . "\et^" . "<" x ($cols\-8) . "~~\en"
\& . \*(Aq$entry\*(Aq . "\en"
\& . ".\en";
\& print $format if $Debugging;
\& eval $format;
\& die $@ if $@;
.Ve
.PP
qui ge\*'ne\*'rera un format ressemblant a quelque chose dans ce gou\*^t\-la\*`\ :
.PP
.Vb 6
\& format STDOUT =
\& ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\& $entry
\& ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
\& $entry
\& .
.Ve
.PP
Voici un petit programme qui fait a peu pre\*`s la me\*^me chose que \fIfmt\fR\|(1)\ :
.PP
.Vb 3
\& format =
\& ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
\& $_
\&
\& .
\&
\& $/ = \*(Aq\*(Aq;
\& while (<>) {
\& s/\es*\en\es*/ /g;
\& write;
\& }
.Ve
.Sh "Pied de page"
.IX Subsection "Pied de page"
Alors que \f(CW$FORMAT_TOP_NAME\fR contient le nom de l'en\-te\*^te du format en cours, il
n'y a pas de me\*'canisme de correspondance pour faire la me\*^me chose avec le pied
de page. L'une des causes est qu'on ne connai\*^t pas la taille d'un format avant
qu'il ne soit e\*'value\*'. C'est sur la liste des choses a\*` faire.
.PP
Voici une premie\*`re strate\*'gie\ : si vous avez un pied de page de taille
constante, vous pouvez ve\*'rifier \f(CW$FORMAT_LINES_LEFT\fR avant chaque \fIwrite()\fR et
imprimer le pied de page quand c'est ne\*'cessaire.
.PP
Une autre strate\*'gie consiste a\*` ouvrir un pipe sur soi\-me\*^me, utilisant
\&\f(CW\*(C`open(MOIMEME, "|\-")\*(C'\fR (re\*'fe\*'rez vous a \*(L"\fIopen()\fR\*(R" in perlfunc) et a\*` ne faire que
des \fIwrite()\fR sur \s-1MOIMEME\s0 pluto\*^t que \s-1STDOUT\s0. Faites en sorte que le processus
fils remanie \s-1STDIN\s0 pour ajouter le pied de page comme il vous plai\*^t. Ce n'est
pas tre\*`s pratique, mais c'est faisable.
.Sh "Acce\*'der aux formats de l'inte\*'rieur"
.IX Subsection "Acce'der aux formats de l'inte'rieur"
Pour un acce\*`s de bas niveau au me\*'canisme de formatage, vous pouvez utiliser
\&\fIformline()\fR et acce\*'der a\*` la variable \f(CW$^A\fR (la variable \f(CW$ACCUMULATOR\fR)
directement.
.PP
Par exemple\ :
.PP
.Vb 3
\& $str = formline <<\*(AqEND\*(Aq, 1,2,3;
\& @<<< @||| @>>>
\& END
\&
\& print "Yo, je viens de mettre \`$^A\*(Aq dans l\*(Aqaccumulateur !\en";
.Ve
.PP
Ou faire une routine \fIswrite()\fR, qui est a\*` \fIwrite()\fR ce que \fIsprintf()\fR est a\*`
\&\fIprintf()\fR, comme suit\ :
.PP
.Vb 8
\& use Carp;
\& sub swrite {
\& croak "utilisation : swrite IMAGE ARGUMENTS" unless @_;
\& my $format = shift;
\& $^A = "";
\& formline($format,@_);
\& return $^A;
\& }
\&
\& $string = swrite(<<\*(AqEND\*(Aq, 1, 2, 3);
\& Check me out
\& @<<< @||| @>>>
\& END
\& print $string;
.Ve
.SH "MISE EN GARDE"
.IX Header "MISE EN GARDE"
Le point isole\*' qui termine un format peut aussi provoquer la perte d'un
courriel passant via un serveur de mail mal configure\*' (et l'expe\*'rience montre
qu'une telle configuration est la re\*`gle, et non pas l'exception). Donc,
lorsque vous envoyez un format par courriel, indentez-le\ !
ainsi, le point terminant le format ne soit pas aligne\*' a\*` gauche\ : cela
e\*'vitera une coupe par le serveur \s-1SMTP\s0.
.PP
Les variables lexicales (de\*'clare\*'es avec X\ my\ X) ne sont pas visibles dans un
format sauf celui-ci est de\*'clare\*' dans le champ de vision de la
variable lexicale. Ils n'e\*'taient pas visibles du tout avant la version 5.001.
.PP
Les formats sont le seul morceau de Perl qui utilisent de fac\*,on
inconditionnelle les
informations provenant de la locale d'un programme. Si l'environnement du
programme spe\*'cifie une locale \s-1LC_NUMERIC\s0, elle sera toujours utilise\*'e pour
spe\*'cifier le point de\*'cimal dans une sortie formate\*'e. Perl ignore tout
simplement
le reste de la locale si le pragma \f(CW\*(C`use locale\*(C'\fR n'est pas utilise\*'. Les sorties
formate\*'es ne peuvent pas prendre en compte ce pragma car il est lie\*' a la
structure de bloc du programme, et, pour des raison historiques, les formats
sont de\*'finis hors de cette structure. Re\*'fe\*'rez\-vous a\*` perllocale pour plus
d'informations sur la gestion des locales.
.SH "TRADUCTION"
.IX Header "TRADUCTION"
.Sh "Version"
.IX Subsection "Version"
Cette traduction franc\*,aise correspond a\*` la version anglaise distribue\*'e avec
perl 5.005_02. Pour en savoir plus concernant ces traductions, consultez
.
.Sh "Traducteur"
.IX Subsection "Traducteur"
Mathieu Arnold .
.Sh "Relecture"
.IX Subsection "Relecture"
Yves Maniette ,
Ge\*'rard Delafond.