.\" Automatically generated by Pod::Man 2.09 (Pod::Simple 3.04) .\" .\" 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. | will give a .\" real vertical bar. \*(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-|\(bv\*(Tr .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\} .\" .\" 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. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" 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 "PERLVAR 1" .TH PERLVAR 1 "2006-03-11" "DocFr" "User Contributed Perl Documentation" .SH "NAME/NOM" .IX Header "NAME/NOM" perlvar \- Variables pre\*'de\*'finies en Perl .SH "DESCRIPTION" .IX Header "DESCRIPTION" .Sh "Noms pre\*'de\*'finis" .IX Subsection "Noms pre'de'finis" Les noms suivants ont une signification spe\*'ciale en Perl. La plupart de ces noms ont des mne\*'moniques acceptables ou e\*'quivalents dans l'un des shells. Ne\*'anmoins, si vous souhaitez utiliser des descripteurs longs, vous avez juste a\*` ajouter .PP .Vb 1 \& use English; .Ve .PP en te\*^te de votre programme. Cela cre\*'era un alias entre les noms courts et les noms longs du module courant. Certains ont me\*^me des noms de longueur interme\*'diaire, ge\*'ne\*'ralement emprunte\*'s a\*` \fBawk\fR. En ge\*'ne\*'ral, il est pre\*'fe\*'rable d'invoquer .PP .Vb 1 \& use English '\-no_match_vars'; .Ve .PP si vous n'avez pas besoin de \f(CW$PREMATCH\fR, \f(CW$MATCH\fR, ou \f(CW$POSTMATCH\fR, ce qui e\*'vite une baisse de performance certaine dans le traitement des expressions rationnelles. Voir English. .PP Les variables de\*'pendant du descripteur de fichier courant peuvent e\*^tre initialise\*'es en appelant une me\*'thode de l'objet \f(CW\*(C`IO::Handle\*(C'\fR, bien que ce soit moins efficace que d'utiliser les variables inte\*'gre\*'es courantes. (Pour cela, les sous-titres ci-dessous contiennent le mot \s-1HANDLE\s0). Vous devez e\*'crire d'abord\ : .PP .Vb 1 \& use IO::Handle; .Ve .PP apre\*`s quoi vous pouvez utiliser soit .PP .Vb 1 \& method HANDLE EXPR .Ve .PP soit, de manie\*`re plus su\*^re, .PP .Vb 1 \& HANDLE\->method(EXPR) .Ve .PP Chaque me\*'thode retourne l'ancienne valeur de l'attribut \f(CW\*(C`IO::Handle\*(C'\fR. Les me\*'thodes acceptent chacune \s-1EXPR\s0 en option, qui, s'il est pre\*'cise\*', spe\*'cifie la nouvelle valeur pour l'attribut \f(CW\*(C`IO::Handle\*(C'\fR en question. S'il n'est pas pre\*'cise\*', la plupart des me\*'thodes ne modifient pas la valeur courante, excepte\*'e \&\f(CW\*(C`autoflush()\*(C'\fR, qui fixera la valeur a\*` 1, juste pour se distinguer. .PP Parce que le chargement de la classe \f(CW\*(C`IO::Handle\*(C'\fR est cou\*^teux, vous devriez apprendre a\*` utiliser les variables inte\*'gre\*'es normales. .PP Quelques-unes de ces variables sont conside\*'re\*'es comme e\*'tant en Xlecture seuleX. Cela signifie que si vous essayez de leur attribuer une valeur, directement ou indirectement a\*` travers une re\*'fe\*'rence, vous obtiendrez une erreur d'exe\*'cution. .PP Vous devriez e\*^tre tre\*`s prudent quand vous modifiez les valeurs par de\*'faut de la plupart des variables spe\*'ciales de\*'crites dans ce document. Dans la plupart des cas vous devez localiser ces variables avant de les changer, puisque, si vous ne faites pas, le changement peut affecter d'autres modules qui comptent sur les valeurs par de\*'faut des variables spe\*'ciales que vous avez change\*'es. Voici une des fac\*,ons correctes de lire un fichier entier en une seule fois\ : .PP .Vb 4 \& open my $fh, "foo" or die $!; \& local $/; # e\*'tablit le mode slurp en local \& my $content = <$fh>; \& close $fh; .Ve .PP Mais le code suivant est assez mauvais\ : .PP .Vb 4 \& open my $fh, "foo" or die $!; \& undef $/; # e\*'tablit le mode slurp \& my $content = <$fh>; \& close $fh; .Ve .PP puisque un autre module peut vouloir lire des donne\*'es d'un fichier quelconque dans le Xmode ligneX par de\*'faut; donc si le code que nous venons juste de pre\*'senter a e\*'te\*' exe\*'cute\*', la valeur globale de \f(CW$/\fR est maintenant change\*'e pour tout autre code qui tourne a\*` l'inte\*'rieur du me\*^me interpre\*'teur Perl. .PP Habituellement, quand une variable est localise\*'e, vous voulez e\*^tre su\*^r que ce changement ait la plus petite e\*'tendue possible. Donc, a\*` moins que vous ne soyez de\*'ja\*` a\*` l'inte\*'rieur d'un bloc court \f(CW\*(C`{}\*(C'\fR, vous devriez en cre\*'er un vous\-me\*^me. Par exemple: .PP .Vb 7 \& my $content = ''; \& open my $fh, "foo" or die $!; \& { \& local $/; \& $content = <$fh>; \& } \& close $fh; .Ve .PP Voici un exemple de la manie\*`re dont votre propre code peut aller de travers\ : .PP .Vb 8 \& for (1..5){ \& nasty_break(); \& print "$_ "; \& } \& sub nasty_break { \& $_ = 5; \& # do something with $_ \& } .Ve .PP Vous vous attendez probablement a\*` ce que code affiche\ : .PP .Vb 1 \& 1 2 3 4 5 .Ve .PP mais a\*` la place vous obtenez: .PP .Vb 1 \& 5 5 5 5 5 .Ve .PP Pourquoi? Parce que \fInasty_break()\fR modifie \f(CW$_\fR sans d'abord le localiser. La solution est d'ajouter \fIlocal()\fR\ : .PP .Vb 1 \& local $_ = 5; .Ve .PP C'est facile de repe\*'rer le proble\*`me dans un exemple court comme celui\-la\*`, mais dans un code plus complique\*' vous cherchez a\*` avoir des proble\*`mes si vous ne localisez pas les changements des variables spe\*'ciales. .PP Dans la liste suivante, on trouvera les variables scalaires d'abord, puis les tableaux, et enfin les tableaux associatifs. .ie n .IP "$ARG" 8 .el .IP "\f(CW$ARG\fR" 8 .IX Item "$ARG" .PD 0 .ie n .IP "$_" 8 .el .IP "\f(CW$_\fR" 8 .IX Item "$_" .PD La variable de stockage par de\*'faut et l'espace de recherche de motif. Les paires suivantes sont e\*'quivalentes\ : .Sp .Vb 2 \& while (<>) {...} # e\*'quivalent seulement dans while! \& while (defined($_ = <>)) {...} \& \& /^Subject:/ \& $_ =~ /^Subject:/ \& \& tr/a\-z/A\-Z/ \& $_ =~ tr/a\-z/A\-Z/ \& \& chomp \& chomp($_) .Ve .Sp Voici les endroits ou\*` Perl utilisera \f(CW$_\fR me\*^me si vous ne le pre\*'cisez pas\ : .RS 8 .IP "\(bu" 3 Diverses fonctions unaires, notamment les fonctions comme \f(CW\*(C`ord()\*(C'\fR et \&\f(CW\*(C`int()\*(C'\fR, ainsi que tous les tests sur les fichiers (\f(CW\*(C`\-f\*(C'\fR, \f(CW\*(C`\-d\*(C'\fR) a\*` l'exception de \f(CW\*(C`\-t\*(C'\fR, qui utilise par de\*'faut \s-1STDIN\s0. .IP "\(bu" 3 Diverses fonctions de liste comme \f(CW\*(C`print()\*(C'\fR et \f(CW\*(C`unlink()\*(C'\fR. .IP "\(bu" 3 Les ope\*'rations de recherche de motif \f(CW\*(C`m//\*(C'\fR, \f(CW\*(C`s///\*(C'\fR, et \f(CW\*(C`tr///\*(C'\fR quand elles sont utilise\*'es sans l'ope\*'rateur \f(CW\*(C`=~\*(C'\fR. .IP "\(bu" 3 La variable d'ite\*'ration par de\*'faut dans une boucle \f(CW\*(C`foreach\*(C'\fR si aucune autre variable n'est pre\*'cise\*'e. .IP "\(bu" 3 La variable implicite d'ite\*'ration dans les fonctions \f(CW\*(C`grep()\*(C'\fR et \f(CW\*(C`map()\*(C'\fR. .IP "\(bu" 3 La variable par de\*'faut ou\*` est stocke\*'e un enregistrement quand le re\*'sultat de \&\f(CW\*(C`\*(C'\fR s'autoteste et repre\*'sente le crite\*`re unique d'un \f(CW\*(C`while\*(C'\fR. Attention\ : en dehors d'un test \f(CW\*(C`while\*(C'\fR cela ne marche pas. .RE .RS 8 .Sp (Moyen mne\*'monique: le \fIsous\fR\-ligne\*' est \fIsous\fR\-entendu dans certaines ope\*'rations.) .RE .ie n .IP "$a" 8 .el .IP "\f(CW$a\fR" 8 .IX Item "$a" .PD 0 .ie n .IP "$b" 8 .el .IP "\f(CW$b\fR" 8 .IX Item "$b" .PD Variables spe\*'ciales de paquetage quand \fIsort()\fR est utilise\*', voyez \&\*(L"sort\*(R" in perlfunc. A\*` cause de cette particularite\*' \f(CW$a\fR et \f(CW$b\fR n'ont pas besoin d'e\*^tre de\*'clare\*' (en utilisant use vars, ou \fIour()\fR) me\*^me si vous utilisez le pragma vars strict. N'en faites pas des variables lexicales avec \f(CW\*(C`my $a\*(C'\fR ou \f(CW\*(C`my $b\*(C'\fR si vous voulez les utiliser dans un bloc ou une fonction de comparaison de \fIsort()\fR. .IP "$<\fIchiffres\fR>" 8 .IX Item "$" Contient le groupement inclus dans les parenthe\*`ses correspondantes du dernier motif trouve\*', sans prendre en compte les motifs trouve\*'s dans les sous-blocs dont on est de\*'ja\*` sortis.(Mne\*'monique\ : comme \&\e<\fIchiffres\fR>.) Ces variables sont en lecture seule et ont une porte\*'e dynamique e\*'tendue au \s-1BLOC\s0 courant. .ie n .IP "$MATCH" 8 .el .IP "\f(CW$MATCH\fR" 8 .IX Item "$MATCH" .PD 0 .IP "$&" 8 .PD La chai\*^ne de caracte\*`res trouve\*'e par la dernie\*`re recherche de motif re\*'ussie (sans prendre en compte les motifs cache\*'s dans un \s-1BLOC\s0 ou par un \fIeval()\fR inclus dans le \s-1BLOC\s0 courant). (Mne\*'monique\ : comme \f(CW\*(C`&\*(C'\fR dans certains e\*'diteurs de texte.) Variable en lecture seule dont la porte\*'e dynamique s'e\*'tend au \s-1BLOC\s0 courant. .Sp L'utilisation de cette variable, n'importe ou\*` dans un programme, pe\*'nalise conside\*'rablement les performances de toutes les recherches de motifs. Voir \&\*(L"\s-1BUGS\s0\*(R". .ie n .IP "$PREMATCH" 8 .el .IP "\f(CW$PREMATCH\fR" 8 .IX Item "$PREMATCH" .PD 0 .IP "$`" 8 .PD La chai\*^ne de caracte\*`res qui pre\*'ce\*`de tout ce qui a e\*'te\*' trouve\*' au cours de la dernie\*`re recherche de motif re\*'ussie (non compte\*'es les correspondances cache\*'es dans un \s-1BLOC\s0 ou un \f(CW\*(C`eval()\*(C'\fR du \s-1BLOC\s0 courant). (Mne\*'monique\ : \f(CW\*(C``\*(C'\fR est souvent utilise\*', en anglais, comme guillemet ouvrant dans les citations). Variable en lecture seule. .Sp L'utilisation de cette variable, n'importe ou\*` dans un programme, pe\*'nalise conside\*'rablement les performances de toutes les recherches de motifs. Voir \&\*(L"\s-1BUGS\s0\*(R". .ie n .IP "$POSTMATCH" 8 .el .IP "\f(CW$POSTMATCH\fR" 8 .IX Item "$POSTMATCH" .PD 0 .IP "$'" 8 .PD La chai\*^ne de caracte\*`res qui suit tout ce qui a e\*'te\*' trouve\*' au cours de la dernie\*`re recherche de motif re\*'ussie (non compte\*'es les correspondances cache\*'es dans un \s-1BLOC\s0 ou un \fIeval()\fR du \s-1BLOC\s0 courant). (Mne\*'monique\ : \f(CW\*(C`'\*(C'\fR est souvent utilise\*', en anglais, comme guillemet fermant dans les citations). Exemple\ : .Sp .Vb 3 \& local $_ = 'abcdefghi'; \& /def/; \& print "$`:$&:$'\en"; # affiche abc:def:ghi .Ve .Sp Variable en lecture seule dont la porte\*'e dynamique s'e\*'tend au \s-1BLOC\s0 courant. .Sp L'utilisation de cette variable, n'importe ou\*` dans un programme, pe\*'nalise conside\*'rablement les performances de toutes les recherches de motifs. Voir \&\*(L"\s-1BUGS\s0\*(R". .ie n .IP "$LAST_PAREN_MATCH" 8 .el .IP "\f(CW$LAST_PAREN_MATCH\fR" 8 .IX Item "$LAST_PAREN_MATCH" .PD 0 .IP "$+" 8 .PD Le texte du dernier groupement parenthe\*'se\*' trouve\*' par une recherche de motif. Utile si vous ignorez lequel des motifs d'une alternative a donne\*' un re\*'sultat. Exemple\ : .Sp .Vb 1 \& /Version: (.*)|Revision: (.*)/ && ($rev = $+); .Ve .Sp (Mne\*'monique: Soyez positif et allez de l'avant.) Variable en lecture seule dont la porte\*'e dynamique s'e\*'tend au \s-1BLOC\s0 courant. .IP "$^N" 8 .IX Item "$^N" Le texte du groupement parenthe\*'se\*' le plus re\*'cemment ferme\*' (c.\-a\*`\-d. le groupe avec la parenthe\*`se ferme\*'e la plus a\*` droite) du mode\*`le de la dernie\*`re recherche de motifs re\*'ussie. (Mne\*'monique: la parenthe\*`se eNcha\*^sse\*'e (e\*'ventuelle) qui a e\*'te\*' plus re\*'cemment a ferme\*'.) .Sp Essentiellement utilise\*' a\*` l'inte\*'rieur de blocs \f(CW\*(C`(?{...})\*(C'\fR pour examiner le texte correspondant le plus re\*'cent. Par exemple, pour capturer efficacement le texte dans une variable (en plus de \f(CW$1\fR, \f(CW$2\fR, etc.), remplacez \&\f(CW\*(C`(...)\*(C'\fR par .Sp .Vb 1 \& (?:(...)(?{ $var = $^N })) .Ve .Sp Fixer et utiliser \f(CW$var\fR de cette manie\*`re vous e\*'vite d'avoir a\*` vous soucier de savoir exactement combien il y a d'ensemble de parenthe\*`ses. .Sp Variable dont la porte\*'e dynamique s'e\*'tend au \s-1BLOC\s0 courant. .ie n .IP "@LAST_MATCH_END" 8 .el .IP "\f(CW@LAST_MATCH_END\fR" 8 .IX Item "@LAST_MATCH_END" .PD 0 .IP "@+" 8 .PD Ce tableau contient les positions [offsets] des fins des sous\-chai\*^nes correspondant aux groupements de la dernie\*`re recherche de motifs re\*'ussie dans la porte\*'e dynamique courante. \&\f(CW$+[0]\fR est la position dans la chai\*^ne de la fin de la recherche entie\*`re. C'est la me\*^me valeur que celle retourne\*'e par la fonction \f(CW\*(C`pos\*(C'\fR quand elle est appele\*'e avec la variable sur laquelle porte la recherche. Le \fIn\fR\-ie\*`me e\*'le\*'ment de ce tableau contient la position du \fIn\fR\-ie\*`me groupement, donc \f(CW$+[1]\fR est la position ou\*` \f(CW$1\fR fini, \f(CW$+[2]\fR la position ou\*` \f(CW$2\fR fini, et ainsi de suite. Vous pouvez utiliser \f(CW$#+\fR pour de\*'terminer combien il y a de groupements dans la dernie\*`re recherche re\*'ussie. Voyez les exemples donne\*'s pour la variable \f(CW\*(C`@\-\*(C'\fR. .IP "$*" 8 Fixe\*' a\*` une valeur entie\*`re non nulle pour rechercher dans une chai\*^ne multilignes, a\*` 0 (ou undef) pour signifier a\*` Perl que la chai\*^ne ne contient qu'une seule ligne, dans le but d'optimiser la recherche. La recherche de motif sur des chai\*^nes contenant plusieurs retours lignes peut produire des re\*'sultats e\*'tranges quand "\f(CW$*\fR\*(L" est a\*` 0 ou undef. La valeur par de\*'faut est undef. (Mne\*'monique\ : * remplace plusieurs.) Cette variable n'influence que l'interpre\*'tation de \*(R"\f(CW\*(C`^\*(C'\fR\*(L" et de \*(R"\f(CW\*(C`$\*(C'\fR". Un retour ligne peut e\*^tre recherche\*' me\*^me si \f(CW\*(C`$* == 0\*(C'\fR. .Sp L'utilisation de "\f(CW$*\fR" est obsole\*`te dans les Perl modernes, et est supplante\*'e par les modificateurs de recherche \f(CW\*(C`/s\*(C'\fR et \f(CW\*(C`/m\*(C'\fR. .Sp Assigner une valeur non nume\*'rique a\*` \f(CW$*\fR de\*'clenche un avertissement (et fait que \f(CW$*\fR agit comme si \f(CW\*(C`$* == 0\*(C'\fR), tandis que lui donner une valeur nume\*'rique fait qu'un \f(CW\*(C`int\*(C'\fR implicite est applique\*' a\*` cette valeur. .IP "\s-1HANDLE\-\s0>input_line_number(\s-1EXPR\s0)" 8 .IX Item "HANDLE->input_line_number(EXPR)" .PD 0 .ie n .IP "$INPUT_LINE_NUMBER" 8 .el .IP "\f(CW$INPUT_LINE_NUMBER\fR" 8 .IX Item "$INPUT_LINE_NUMBER" .ie n .IP "$NR" 8 .el .IP "\f(CW$NR\fR" 8 .IX Item "$NR" .IP "$." 8 .PD Le nume\*'ro de la ligne courante du dernier descripteur de fichier auquel vous avez acce\*'de\*'. .Sp Chaque descripteur de fichier en Perl compte le nombre de lignes qui ont e\*'te\*' lues par son interme\*'diaire. (De\*'pendant de la valeur de \f(CW$/\fR, l'ide\*'e de ce que Perl ce fait d'une ligne peut ne pas correspondre a\*` la votre.) Quand une ligne est lue d'un descripteur de fichier (via \fIreadline()\fR or \&\f(CW\*(C`<>\*(C'\fR), ou quand \fItell()\fR ou \fIseek()\fR est appele\*' sur lui, \f(CW$.\fR devient un alias du compteur de lignes pour ce descripteur de fichier. .Sp Vous pouvez ajuster le compteur en assignant une valeur a\*` \f(CW$.\fR, mais cela ne de\*'placera pas en fait le pointeur seek. \fILocaliser \f(CI$.\fI\fR ne localisera pas le compteur du descripteur de fichier. Au lieu de cela, il localisera la notion que Perl a du descripteur de fichier pour lequel \&\f(CW$.\fR est un alias. .Sp \&\f(CW$.\fR est re\*'initialise\*' quand le descripteur de fichier est ferme\*', mais \&\fBnon\fR quand un descripteur de fichier ouvert est re\*'ouvert sans avoir e\*'te\*' ferme\*' par \fIclose()\fR. Comme \f(CW\*(C`<>\*(C'\fR ne provoque pas de fermeture explicite, le nume\*'ro de ligne augmente au travers des fichiers \s-1ARGV\s0 (voir les exemples dans \*(L"eof\*(R" in perlfunc). .Sp Vous pouvez aussi utiliser \f(CW\*(C`HANDLE\->input_line_number(EXPR)\*(C'\fR pour avoir acce\*`s au compteur de lignes d'un descripteur de fichier donne\*' sans avoir a\*` vous tracasser de savoir quel est le dernier descripteur utilise\*'. .Sp (Mne\*'monique\ : beaucoup de programmes utilisent \*(L".\*(R" pour \&\fIpoint\fRer la ligne en cours) .IP "IO::Handle\->input_record_separator(\s-1EXPR\s0)" 8 .IX Item "IO::Handle->input_record_separator(EXPR)" .PD 0 .ie n .IP "$INPUT_RECORD_SEPARATOR" 8 .el .IP "\f(CW$INPUT_RECORD_SEPARATOR\fR" 8 .IX Item "$INPUT_RECORD_SEPARATOR" .ie n .IP "$RS" 8 .el .IP "\f(CW$RS\fR" 8 .IX Item "$RS" .IP "$/" 8 .PD Le se\*'parateur d'enregistrement en lecture, par de\*'faut retour\-ligne. Il influence l'ide\*'e que Perl se fait d'une \*(L"ligne\*(R". Fonctionne comme la variable \s-1RS\s0 de \fBawk\fR, y compris le traitement des lignes vides comme des de\*'limiteurs si initialise\*' a\*` vide. (Note\ : une ligne vide ne peut contenir ni espace, ni tabulation.) Vous pouvez le de\*'finir comme une chai\*^ne de caracte\*`res pour correspondre a\*` un de\*'limiteur multicaracte\*`re, ou a\*` \f(CW\*(C`undef\*(C'\fR pour lire jusqu'a\*` la fin du fichier. Notez que le fixer a\*` \f(CW"\en\en"\fR est le\*'ge\*`rement diffe\*'rent que de le fixer a\*` \f(CW""\fR si le fichier contient plusieurs lignes vides conse\*'cutives. Le positionner a\*` \f(CW""\fR traitera deux lignes vides conse\*'cutives (ou plus) comme une seule. Le positionner a\*` \f(CW"\en\en"\fR implique que le prochain caracte\*`re lu appartient syste\*'matiquement a\*` un nouveau paragraphe, me\*^me si c'est un retour\-ligne. (Mne\*'monique: / est utilise\*' comme se\*'parateur de ligne quand on cite une poe\*'sie.) .Sp .Vb 3 \& local $/; # activer le mode "slurp" \& local $_ = ; # Fichier complet depuis la position courante \& s/\en[ \et]+/ /g; .Ve .Sp Attention\ : La valeur de \f(CW$/\fR doit e\*^tre du texte et non une expression re\*'gulie\*`re. Il faut bien laisser quelque chose a\*` \fBawk\fR :\-) .Sp Initialiser \f(CW$/\fR avec une re\*'fe\*'rence a\*` un entier, un scalaire contenant un entier, ou un scalaire convertissable en entier va provoquer la lecture d'enregistrements au lieu de lignes, avec une taille maximum par enregistrement correspondant a\*` l'entier en re\*'fe\*'rence. Donc\ : .Sp .Vb 3 \& local $/ = \e32768; # ou \e"32768", ou \e$var_contenant_32768 \& open my $fh, $myfile or die $!; \& local $_ = <$fh>; .Ve .Sp va lire un enregistrement d'une longueur maximale de 32768 octets depuis \s-1FILE\s0. Si votre fichier ne contient pas d'enregistrements (ou si votre syste\*`me d'exploitation ne supporte pas les fichiers d'enregistrements), vous obtiendrez probablement des valeurs incohe\*'rentes a\*` chaque lecture. Si l'enregistrement est plus long que la taille spe\*'cifie\*'e, il vous faudra le lire en plusieurs fois. .Sp Sur \s-1VMS\s0, les lectures d'enregistrements sont faites avec l'e\*'quivalent de \&\f(CW\*(C`sysread\*(C'\fR, donc il vaut mieux e\*'viter de me\*'langer les lectures en mode enregistrements et en mode lignes sur le me\*^me fichier. (Cela n'est ge\*'ne\*'ralement pas un proble\*`me, puisque les fichiers que vous souhaiteriez lire en mode enregistrement sont probablement illisibles en mode ligne). Les syste\*`mes non \s-1VMS\s0 effectuent des Entre\*'es/Sorties standards, donc il est possible de me\*'langer les deux modes de lecture. .Sp Voir aussi \*(L"Les retours chariots\*(R" in perlport et \f(CW$.\fR. .IP "\s-1HANDLE\-\s0>autoflush(\s-1EXPR\s0)" 8 .IX Item "HANDLE->autoflush(EXPR)" .PD 0 .ie n .IP "$OUTPUT_AUTOFLUSH" 8 .el .IP "\f(CW$OUTPUT_AUTOFLUSH\fR" 8 .IX Item "$OUTPUT_AUTOFLUSH" .IP "$|" 8 .PD Si initialise\*' a\*` une valeur diffe\*'rente de ze\*'ro, force une actualisation imme\*'diatement et juste apre\*`s chaque ope\*'ration de lecture/e\*'criture sur le canal de sortie se\*'lectionne\*' courant. La valeur par de\*'faut est 0 (que le canal de sortie soit bufferise\*' par le syste\*`me ou non; \f(CW$|\fR vous indique seulement si vous avez explicitement demande\*' a\*` Perl d'actualiser apre\*`s chaque e\*'criture). Notez que \s-1STDOUT\s0 est typiquement bufferise\*' par ligne en sortie e\*'cran et par blocs sinon. Initialiser cette variable est surtout utile dans le cas d'une redirection de sortie, par exemple si vous exe\*'cutez un script Perl avec \fBrsh\fR et que vous voulez voir le re\*'sultat au fur et a\*` mesure. Cela n'a aucun effet sur les buffers d'entre\*'e. Voir \*(L"getc\*(R" in perlfunc pour cela. (Mne\*'monique\ : l'e\*'dition actualise\*'e de vos redirections | ) .IP "IO::Handle\->output_field_separator \s-1EXPR\s0" 8 .IX Item "IO::Handle->output_field_separator EXPR" .PD 0 .ie n .IP "$OUTPUT_FIELD_SEPARATOR" 8 .el .IP "\f(CW$OUTPUT_FIELD_SEPARATOR\fR" 8 .IX Item "$OUTPUT_FIELD_SEPARATOR" .ie n .IP "$OFS" 8 .el .IP "\f(CW$OFS\fR" 8 .IX Item "$OFS" .IP "$," 8 .PD Le se\*'parateur de champs pour l'ope\*'rateur print. Si de\*'finie, cette valeur est affiche\*'e entre chacun des arguments de print. La valeur par de\*'faut est \f(CW\*(C`undef\*(C'\fR. (Mne\*'monique\ : Ce qui est imprime\*' quand vous avez une \*(L",\*(R" dans vos champs) .IP "IO::Handle\->output_record_separator \s-1EXPR\s0" 8 .IX Item "IO::Handle->output_record_separator EXPR" .PD 0 .ie n .IP "$OUTPUT_RECORD_SEPARATOR" 8 .el .IP "\f(CW$OUTPUT_RECORD_SEPARATOR\fR" 8 .IX Item "$OUTPUT_RECORD_SEPARATOR" .ie n .IP "$ORS" 8 .el .IP "\f(CW$ORS\fR" 8 .IX Item "$ORS" .IP "$\e" 8 .IX Item "$" .PD Le se\*'parateur d'enregistrements pour l'ope\*'rateur print. Si de\*'finie, cette valeur est affiche\*'e apre\*`s le dernier argument d'un print. (Mne\*'monique\ : positionnez "\f(CW\*(C`$\e\*(C'\fR" au lieu d'ajouter \en a\*` la fin de chaque impression. Ou\ : Comme \f(CW$/\fR, mais c'est ce que vous \*(L"obtenez\*(R" de Perl.) (NdT. get \fBback\fR = \*(L"obtenez\*(R", \e = \fBback\fRslash) .ie n .IP "$LIST_SEPARATOR" 8 .el .IP "\f(CW$LIST_SEPARATOR\fR" 8 .IX Item "$LIST_SEPARATOR" .PD 0 .IP "$""" 8 .PD Me\*^me chose que "\f(CW$,\fR\*(L", sauf que cela s'applique aux tableaux de valeurs interpole\*'es dans une chai\*^ne de caracte\*`res entre guillemets doubles (ou toute chai\*^ne interpre\*'te\*'e d'une manie\*`re e\*'quivalente). La valeur par de\*'faut est \&\*(R"espace". (Mne\*'monique\ : e\*'vident, je pense). .ie n .IP "$SUBSCRIPT_SEPARATOR" 8 .el .IP "\f(CW$SUBSCRIPT_SEPARATOR\fR" 8 .IX Item "$SUBSCRIPT_SEPARATOR" .PD 0 .ie n .IP "$SUBSEP" 8 .el .IP "\f(CW$SUBSEP\fR" 8 .IX Item "$SUBSEP" .IP "$;" 8 .PD Le se\*'parateur d'indices pour l'e\*'mulation de tableaux a\*` plusieurs dimensions. Si vous vous re\*'fe\*'rez a\*` un e\*'le\*'ment de type tableau associatif comme .Sp .Vb 1 \& $foo{$a,$b,$c} .Ve .Sp Cela signifie en fait .Sp .Vb 1 \& $foo{join($;, $a, $b, $c)} .Ve .Sp Mais n'utilisez pas .Sp .Vb 1 \& @foo{$a,$b,$c} # une tranche \-\- notez le @ .Ve .Sp qui signifie .Sp .Vb 1 \& ($foo{$a},$foo{$b},$foo{$c}) .Ve .Sp La valeur par de\*'faut est \*(L"\e034\*(R", la me\*^me que pour le \s-1SUBSEP\s0 en \fBawk\fR. Si vos clefs contiennent des valeurs binaires, il se peut qu'il n'y ait aucune valeur su\*^re pour "\f(CW$;\fR\*(L". (Mne\*'monique\ : la virgule (le se\*'parateur d'indices) est un demi\-point\-virgule. Ouais, je sais; c'est tire\*' par les cheveux, mais \*(R"\f(CW$,\fR" est de\*'ja\*` utilise\*' pour quelque chose de plus important.) .Sp Envisagez d'utiliser de \*(L"vrais\*(R" tableaux a\*` plusieurs dimensions comme de\*'crit dans perllol. .IP "$#" 8 C'est le format de sortie des nombres. Cette variable est une pa\*^le tentative d'e\*'mulation de la variable \s-1OFMT\s0 de \fBawk\fR. Il y a des cas, cependant, ou\*` Perl et \fBawk\fR ont des vues diffe\*'rentes sur la notion de nume\*'rique. La valeur par de\*'faut est %.\fIn\fRg, ou\*` \fIn\fR est la valeur de la macro \s-1DBL_DIG\s0 du \fIfloat.h\fR de votre syste\*`me. C'est diffe\*'rent de la valeur par de\*'faut de \s-1OFMT\s0 en \fBawk\fR qui est \*(L"%.6g\*(R", donc il vous faut initialiser \f(CW$#\fR explicitement pour obtenir la valeur \fBawk\fR. (Mne\*'monique\ : # est le signe des nombres \*(-- nume\*'ros) .Sp L'utilisation de "\f(CW$#\fR" est obsole\*`te. .IP "\s-1HANDLE\-\s0>format_page_number(\s-1EXPR\s0)" 8 .IX Item "HANDLE->format_page_number(EXPR)" .PD 0 .ie n .IP "$FORMAT_PAGE_NUMBER" 8 .el .IP "\f(CW$FORMAT_PAGE_NUMBER\fR" 8 .IX Item "$FORMAT_PAGE_NUMBER" .IP "$%" 8 .PD Le nume\*'ro de la page en cours sur le canal de sortie en cours. Utilise\*'s avec les formats. (Mne\*'monique\ : % est le nume\*'ro de page pour \fBnroff\fR.) .IP "\s-1HANDLE\-\s0>format_lines_per_page(\s-1EXPR\s0)" 8 .IX Item "HANDLE->format_lines_per_page(EXPR)" .PD 0 .ie n .IP "$FORMAT_LINES_PER_PAGE" 8 .el .IP "\f(CW$FORMAT_LINES_PER_PAGE\fR" 8 .IX Item "$FORMAT_LINES_PER_PAGE" .IP "$=" 8 .PD La longueur de la page courante (en nombre de lignes imprimables) du canal de sortie en cours. Le de\*'faut est 60. (Mne\*'monique\ : = est forme\*' de lignes horizontales.) .IP "\s-1HANDLE\-\s0>format_lines_left(\s-1EXPR\s0)" 8 .IX Item "HANDLE->format_lines_left(EXPR)" .PD 0 .ie n .IP "$FORMAT_LINES_LEFT" 8 .el .IP "\f(CW$FORMAT_LINES_LEFT\fR" 8 .IX Item "$FORMAT_LINES_LEFT" .IP "$\-" 8 .PD Le nombre de lignes restantes sur la page en cours du canal de sortie courant. Utilise\*' avec les formats. (Mne\*'monique\ : lignes_sur_la_page \- lignes_imprime\*'es.) .ie n .IP "@LAST_MATCH_START" 8 .el .IP "\f(CW@LAST_MATCH_START\fR" 8 .IX Item "@LAST_MATCH_START" .PD 0 .IP "@\-" 8 .PD \&\f(CW\*(C`$\-[0]\*(C'\fR est la position [offset] du de\*'but de la dernie\*`re recherche de motif re\*'ussie. \f(CW\*(C`$\-[\*(C'\fR\fIn\fR\f(CW\*(C`]\*(C'\fR est la position du de\*'but de la sous\-chai\*^ne qui correspond au \fIn\fR\-ie\*`me groupement, ou undef si le groupement ne correspond pas. .Sp Donc, apre\*`s une recherche de motif dans \f(CW$_\fR, $& coi\*:ncide avec \f(CW\*(C`substr $_, $\-[0], $+[0] \- $\-[0]\*(C'\fR. De la me\*^me manie\*`re, $\fIn\fR coi\*:ncide avec \&\f(CW\*(C`substr $_, $\-[n], $+[n] \- $\-[n]\*(C'\fR si \f(CW\*(C`$\-[n]\*(C'\fR est de\*'fini, et $+ coi\*:ncide avec \f(CW\*(C`substr $_, $\-[$#\-], $+[$#\-]\*(C'\fR. On peut utiliser \f(CW\*(C`$#\-\*(C'\fR pour trouver le dernier groupement dans la dernie\*`re recherche re\*'ussie. En opposition avec \f(CW$#+\fR, le nombre de groupements dans l'expression re\*'gulie\*`re. Comparez avec \f(CW\*(C`@+\*(C'\fR. .Sp Ce tableau contient les positions des de\*'buts des sous\-chai\*^nes correspondant aux groupements de la dernie\*`re recherche de motif re\*'ussie dans la porte\*'e dynamique courante. \f(CW\*(C`$\-[0]\*(C'\fR est la position dans la chai\*^ne du de\*'but de la chai\*^ne trouve\*'e entie\*`re. Le \fIn\fR\-ie\*`me e\*'le\*'ment de ce tableau contient la position du \fIn\fR\-ie\*`me groupement, donc \f(CW$+[1]\fR est la position ou\*` \f(CW$1\fR commence, \f(CW$+[2]\fR est la position ou\*` \f(CW$2\fR commence, et ainsi de suite. .Sp Apre\*`s une recherche sur une variable \f(CW$var\fR\ : .RS 8 .IP "\(bu" 5 \&\f(CW$`\fR est semblable a\*` \f(CW\*(C`substr($var, 0, $\-[0])\*(C'\fR .IP "\(bu" 5 \&\f(CW$&\fR est semblable a\*` \f(CW\*(C`substr($var, $\-[0], $+[0] \- $\-[0])\*(C'\fR .IP "\(bu" 5 \&\f(CW$'\fR est semblable a\*` \f(CW\*(C`substr($var, $+[0])\*(C'\fR .IP "\(bu" 5 \&\f(CW$1\fR est semblable a\*` \f(CW\*(C`substr($var, $\-[1], $+[1] \- $\-[1])\*(C'\fR .IP "\(bu" 5 \&\f(CW$2\fR est semblable a\*` \f(CW\*(C`substr($var, $\-[2], $+[2] \- $\-[2])\*(C'\fR .IP "\(bu" 5 \&\f(CW$3\fR est semblable a\*` \f(CW\*(C`substr($var, $\-[3], $+[3] \- $\-[3])\*(C'\fR .RE .RS 8 .RE .IP "\s-1HANDLE\-\s0>format_name(\s-1EXPR\s0)" 8 .IX Item "HANDLE->format_name(EXPR)" .PD 0 .ie n .IP "$FORMAT_NAME" 8 .el .IP "\f(CW$FORMAT_NAME\fR" 8 .IX Item "$FORMAT_NAME" .IP "$~" 8 .PD Le nom du format de rapport courant pour le canal de sortie se\*'lectionne\*'. La valeur par de\*'faut est le nom du descripteur de fichier. (Mne\*'monique\ : fre\*`re de "\f(CW$^\fR".) .IP "\s-1HANDLE\-\s0>format_top_name(\s-1EXPR\s0)" 8 .IX Item "HANDLE->format_top_name(EXPR)" .PD 0 .ie n .IP "$FORMAT_TOP_NAME" 8 .el .IP "\f(CW$FORMAT_TOP_NAME\fR" 8 .IX Item "$FORMAT_TOP_NAME" .IP "$^" 8 .PD Nom du format de l'en\-te\*^te de page courant pour le canal de sortie se\*'lectionne\*'. La valeur par de\*'faut est le nom du descripteur de fichier suivi de _TOP. (Mne\*'monique\ : pointe vers le haut de la page.) .IP "IO::Handle\->format_line_break_characters \s-1EXPR\s0" 8 .IX Item "IO::Handle->format_line_break_characters EXPR" .PD 0 .ie n .IP "$FORMAT_LINE_BREAK_CHARACTERS" 8 .el .IP "\f(CW$FORMAT_LINE_BREAK_CHARACTERS\fR" 8 .IX Item "$FORMAT_LINE_BREAK_CHARACTERS" .ie n .IP "$:" 8 .el .IP "\f(CW$:\fR" 8 .IX Item "$:" .PD L'ensemble des caracte\*`res courants apre\*`s lesquels une chai\*^ne de caracte\*`res peut e\*^tre coupe\*'e pour passer a\*` la ligne (commenc\*,ant par ^) dans une sortie formate\*'e. La valeur par de\*'faut est \*(L"\ \en\-\*(R", pour couper sur les espaces ou les traits d'unions. (Mne\*'monique\ : en poe\*'sie un \*(L"deux\-points\*(R" fait partie de la ligne.) .IP "IO::Handle\->format_formfeed \s-1EXPR\s0" 8 .IX Item "IO::Handle->format_formfeed EXPR" .PD 0 .ie n .IP "$FORMAT_FORMFEED" 8 .el .IP "\f(CW$FORMAT_FORMFEED\fR" 8 .IX Item "$FORMAT_FORMFEED" .IP "$^L" 8 .IX Item "$^L" .PD Ce que les formats utilisent pour passer a\*` la page suivante. La valeur par de\*'faut est \*(L"\ef\*(R". .ie n .IP "$ACCUMULATOR" 8 .el .IP "\f(CW$ACCUMULATOR\fR" 8 .IX Item "$ACCUMULATOR" .PD 0 .IP "$^A" 8 .IX Item "$^A" .PD La valeur courante de la pile de la fonction \fIwrite()\fR pour formater les lignes avec \f(CW\*(C`format()\*(C'\fR. Un format contient des commandes \fIformline()\fR, qui stockent leurs re\*'sultats dans \f(CW$^A\fR. Apre\*`s appel a\*` son format, \fIwrite()\fR sort le contenu de \f(CW$^A\fR et le re\*'initialise. Donc vous ne voyez jamais le contenu de \f(CW$^A\fR, a\*` moins que vous n'appeliez \f(CW\*(C`formline()\*(C'\fR vous\-me\*^me, et ne regardiez le contenu. Voir perlform et \*(L"\fIformline()\fR\*(R" in perlfunc . .ie n .IP "$CHILD_ERROR" 8 .el .IP "\f(CW$CHILD_ERROR\fR" 8 .IX Item "$CHILD_ERROR" .PD 0 .IP "$?" 8 .PD Le statut retourne\*' par la dernie\*`re fermeture d'une redirection, une commande \&'anti\-apostrophe' (\f(CW``\fR), un appel re\*'ussi a\*` \f(CW\*(C`wait()\*(C'\fR ou \f(CW\*(C`waitpid()\*(C'\fR, ou un ope\*'rateur \fIsystem()\fR. Notez que c'est le statut retourne\*' par l'appel syste\*`me \&\fIwait()\fR (ou cela lui ressemble). Le code de terminaison du sous-processus est (\f(CW\*(C`$? >> 8\*(C'\fR), et \f(CW\*(C`$? & 127\*(C'\fR indique quel signal (s'il y a lieu) a arre\*^te\*' le processus, enfin \f(CW\*(C`$? & 128\*(C'\fR indique s'il y a eu un vidage me\*'moire [core dump]. (Mne\*'monique\ : similaire a\*` \fBsh\fR et \fBksh\fR.) .Sp De plus, si la variable \f(CW\*(C`h_errno\*(C'\fR est supporte\*'e en C, sa valeur est retourne\*'e par $? si n'importe laquelle des fonctions \f(CW\*(C`gethost*()\*(C'\fR e\*'choue. .Sp Si vous avez installe\*' un gestionnaire de signal pour \f(CW\*(C`SIGHLD\*(C'\fR, la valeur \&\f(CW$?\fR sera la plupart du temps errone\*'e en dehors de ce gestionnaire. .Sp A l'inte\*'rieur d'un sous-programme \f(CW\*(C`END\*(C'\fR, \f(CW$?\fR contient la valeur qui sera passe\*'e a\*` \f(CW\*(C`exit()\*(C'\fR. Vous pouvez modifier \f(CW$?\fR dans un sous-programme \f(CW\*(C`END\*(C'\fR pour changer le code de sortie d'un script. Par exemple\ : .Sp .Vb 3 \& END { \& $? = 1 if $? == 255; # die lui donnerait la valeur 255 \& } .Ve .Sp Sous \s-1VMS\s0, la de\*'claration \f(CW\*(C`use vmsish 'status'\*(C'\fR fait renvoyer a\*` \f(CW$?\fR le code de sortie re\*'el de \s-1VMS\s0, pluto\*^t que le code d'e\*'mulation \s-1POSIX\s0 habituel status; voir \*(L"$?\*(R" in perlvms pour les details. .Sp Voir aussi \*(L"Indicateurs d'erreur\*(R". .IP "${^ENCODING}" 8 .IX Item "${^ENCODING}" La \fIre\*'fe\*'rence d'objet\fR a\*` l'objet Encode qui est utilise\*' pour convertir le code source en Unicode. Gra\*^ce a\*` cette variable, votre script Perl n'a pas besoin d'e\*^tre e\*'crit en \s-1UTF\-8\s0. La valeur par de\*'faut est \fIundef\fR. La manipulation directe de cette variable est fortement de\*'conseille\*'e. Voyez encoding pour plus de de\*'tails. .ie n .IP "$OS_ERROR" 8 .el .IP "\f(CW$OS_ERROR\fR" 8 .IX Item "$OS_ERROR" .PD 0 .ie n .IP "$ERRNO" 8 .el .IP "\f(CW$ERRNO\fR" 8 .IX Item "$ERRNO" .IP "$!" 8 .PD Dans un contexte nume\*'rique, contient la valeur courante de la variable \&\f(CW\*(C`errno\*(C'\fR ou, en d'autres termes, si un appel syste\*`me ou a\*` une bibliothe\*`que e\*'choue, il fixe cette variable. Cela signifie que la valeur de \f(CW$!\fR n'est significative qu'\fIimme\*'diatement\fR apre\*`s un \fBe\*'chec\fR. .Sp .Vb 10 \& if (open(FH, $filename)) { \& # Ici $! est sans signification. \& ... \& } else { \& # Ici SEULEMENT $! est significative. \& ... \& # Ici, a\*` nouveau, $! peut e\*^tre sans signification. \& } \& # Puisqu'ici nous pouvons avoir ou succe\*`s ou e\*'chec, \& # $! est sans signification ici. .Ve .Sp Ci\-dessus, \fIsans signification\fR est mis pour n'importe quoi\ : ze\*'ro, non\-ze\*'ro, \f(CW\*(C`undef\*(C'\fR. Un appel re\*'ussi au syste\*`me ou a une bibliothe\*`que ne met pas la variable a\*` ze\*'ro. .Sp Dans un contexte textuel, contient le texte de l'erreur. Vous pouvez affecter un nmobre a\*` \f(CW$!\fR pour fixer \f(CW\*(C`errno\*(C'\fR si, par exemple, vous voulez utiliser \f(CW"$!"\fR pour retourner le texte de l'erreur \fIn\fR, ou si vous voulez fixer la valeur de l'ope\*'rateur \f(CW\*(C`die()\*(C'\fR. (Mne\*'monique\ : Plantage !) .Sp Voir aussi \*(L"Indicateurs d'erreur\*(R". .IP "%!" 8 Chaque e\*'le\*'ment de \f(CW\*(C`%!\*(C'\fR a\*` une valeur vraie seulement si \f(CW$!\fR est fixe\*' a\*` cette valeur. Par exemple, \f(CW$!{ENOENT}\fR est vrai si et seulement si la valeur courante de \f(CW$!\fR est \f(CW\*(C`ENOENT\*(C'\fR; c'est\-a\*`\-dire si la plus re\*'cente erreur a e\*'te\*' \*(L"No such file or directory\*(R" (ou son e\*'quivalent moral\ : tous les syste\*`mes d'exploitation ne donne pas exactement cette erreur et encore moins tous les langages). Pour ve\*'rifier si une cle\*' particulie\*`re est significative sur votre syste\*`me utilisez \f(CW\*(C`exists $!{the_key}\*(C'\fR; pour une liste des cle\*'s le\*'gales, utilisez \&\f(CW\*(C`keys %!\*(C'\fR. Voir Errno pour plus d'information, et voir aussi ci-dessus pour la validite\*' de \f(CW$!\fR. .ie n .IP "$EXTENDED_OS_ERROR" 8 .el .IP "\f(CW$EXTENDED_OS_ERROR\fR" 8 .IX Item "$EXTENDED_OS_ERROR" .PD 0 .IP "$^E" 8 .IX Item "$^E" .PD Information d'erreur spe\*'cifique au syste\*`me d'exploitation. Actuellement diffe\*`re de \f(CW$!\fR seulement sous \s-1VMS\s0, \s-1OS/2\s0 et Win32 (et MacPerl). Sur toutes les autres plates\-formes, \f(CW$^E\fR est e\*'quivalent a\*` \f(CW$!\fR. .Sp Sous \s-1VMS\s0, \f(CW$^E\fR fournit la valeur du statut \s-1VMS\s0 de la dernie\*`re erreur syste\*`me. Les informations sont plus spe\*'cifiques que celles fournies par \f(CW$!\fR. Ceci est particulie\*`rement important quand \f(CW$!\fR est fixe\*' a\*` \fB\s-1EVMSERR\s0\fR. .Sp Sous \s-1OS/2\s0, \f(CW$^E\fR correspond au code d'erreur du dernier appel \s-1API\s0, soit au travers de \s-1CRT\s0, soit directement depuis Perl. .Sp Sous Win32, \f(CW$^E\fR retourne toujours l'information relative au dernier appel Win32 \f(CW\*(C`GetLastError()\*(C'\fR, qui de\*'crit le dernier code d'erreur de l'\s-1API\s0 Win32. La plupart des applications spe\*'cifiques Win32 reportent les erreurs via \f(CW$^E\fR. \s-1ANSI\s0 C et \s-1UNIX\s0 positionnent \f(CW\*(C`errno\*(C'\fR, donc les programmes Perl les plus portables utiliseront \f(CW$!\fR pour remonter les messages d'erreur. .Sp Les avertissements mentionne\*'s dans la description de \f(CW$!\fR s'appliquent ge\*'ne\*'ralement a\*` \f(CW$^E\fR. (Mne\*'monique\ : Extra-Explication d'Erreur) .Sp Voir aussi \*(L"Indicateurs d'erreur\*(R". .ie n .IP "$EVAL_ERROR" 8 .el .IP "\f(CW$EVAL_ERROR\fR" 8 .IX Item "$EVAL_ERROR" .PD 0 .IP "$@" 8 .PD Le message d'erreur de syntaxe de la dernie\*`re commande \f(CW\*(C`eval()\*(C'\fR. Si $@ est la chai\*^ne nulle, le dernier \fIeval()\fR s'est exe\*'cute\*' correctement (bien que l'ope\*'ration a\*` exe\*'cuter ait pu e\*'chouer en mode normal). (Mne\*'monique\ : \f(CW@ttention\fR a\*` l'erreur de syntaxe !) .Sp Les messages d'avertissements ne sont pas re\*'cupe\*'re\*'s dans cette variable. Vous pouvez toutefois construire une routine de traitement des avertissements en positionnant \f(CW$SIG{_\|_WARN_\|_}\fR comme de\*'crit plus loin. .Sp Voir aussi \*(L"Indicateurs d'erreur\*(R". .ie n .IP "$PROCESS_ID" 8 .el .IP "\f(CW$PROCESS_ID\fR" 8 .IX Item "$PROCESS_ID" .PD 0 .ie n .IP "$PID" 8 .el .IP "\f(CW$PID\fR" 8 .IX Item "$PID" .IP "$$" 8 .PD Nume\*'ro du processus Perl exe\*'cutant ce script. Vous devriez conside\*'rer cette variable comme e\*'tant en lecture seule, bien qu'elle puisse e\*^tre modifie\*'e a\*` travers des appels a\*` \f(CW\*(C`fork()\*(C'\fR. (Mne\*'monique\ : comme en shell.) .Sp Note pour les utilisateurs de Linux\ : sur Linux, les fonctions C \&\f(CW\*(C`getpid()\*(C'\fR et \f(CW\*(C`getppid()\*(C'\fR retourne des valeurs diffe\*'rentes pour des fils d'exe\*'cution (threads) diffe\*'rents. Afin d'e\*^tre portable, ce comportement n'est pas celui de \f(CW$$\fR dont la valeur reste cohe\*'rente entre les fils d'exe\*'cution. Si vous souhaitez appeler la fonction \&\f(CW\*(C`getpid()\*(C'\fR re\*'elle, vous pouvez utiliser le module \s-1CPAN\s0 \f(CW\*(C`Linux::Pid\*(C'\fR. .ie n .IP "$REAL_USER_ID" 8 .el .IP "\f(CW$REAL_USER_ID\fR" 8 .IX Item "$REAL_USER_ID" .PD 0 .ie n .IP "$UID" 8 .el .IP "\f(CW$UID\fR" 8 .IX Item "$UID" .IP "$<" 8 .PD L'uid (id utilisateur) re\*'el du processus. (Mne\*'monique\ : l'uid d'\fI\s-1OU\s0\fR vous venez si vous exe\*'cutez setuid.) Vous pouvez changer l'uid re\*'el et l'uid effectif en me\*^me temps en utilisant \fIPOSIX::setuid()\fR. Puisque une modification de $< ne\*'cessite un appel syste\*`me, ve\*'rifiez $! apre\*`s chaque tentative de modification pour de\*'tecter une e\*'ventuelle erreur. .ie n .IP "$EFFECTIVE_USER_ID" 8 .el .IP "\f(CW$EFFECTIVE_USER_ID\fR" 8 .IX Item "$EFFECTIVE_USER_ID" .PD 0 .ie n .IP "$EUID" 8 .el .IP "\f(CW$EUID\fR" 8 .IX Item "$EUID" .IP "$>" 8 .PD L'uid effectif de ce processus. Exemple\ : .Sp .Vb 2 \& $< = $>; # Positionne l'uid re\*'el a\*` la valeur de l'iud effectif \& ($<,$>) = ($>,$<); # Inverse les uid re\*'el et effectif .Ve .Sp Vous pouvez a\*` la fois changer l'uid re\*'el et l'uid effectif en me\*^me temps en utilisant \fIPOSIX::setuid()\fR. .Sp (Mne\*'monique\ : l'uid \fI\s-1VERS\s0\fR lequel vous alliez, si vous exe\*'cutez setuid.) Note\ : \f(CW$<\fR and \f(CW$>\fR peuvent e\*^tre inverse\*'s seulement sur les machines supportant \f(CW\*(C`setreuid()\*(C'\fR. Puisque une modification de $> ne\*'cessite un appel syste\*`me, ve\*'rifiez $! apre\*`s chaque tentative de modification pour de\*'tecter une e\*'ventuelle erreur. .ie n .IP "$REAL_GROUP_ID" 8 .el .IP "\f(CW$REAL_GROUP_ID\fR" 8 .IX Item "$REAL_GROUP_ID" .PD 0 .ie n .IP "$GID" 8 .el .IP "\f(CW$GID\fR" 8 .IX Item "$GID" .IP "$(" 8 .PD Le gid (id de groupe) re\*'el du processus. Si vous e\*^tes sur une machine qui supporte l'appartenance simultane\*'e a\*` plusieurs groupes, renvoie une liste des groupes auxquels vous appartenez, se\*'pare\*'s par des espaces. Le premier nombre retourne\*' est le me\*^me que celui retourne\*' par \f(CW\*(C`getgid()\*(C'\fR, les autres sont ceux retourne\*'s par \f(CW\*(C`getgroups()\*(C'\fR, avec possibilite\*' de doublon entre l'un d'eux et le premier nombre. .Sp Toutefois une valeur assigne\*'e a\*` \f(CW$(\fR doit e\*^tre un nombre unique utilise\*' pour fixer le gid re\*'el. Donc la valeur donne\*'e par \f(CW$(\fR ne doit \fIpas\fR e\*^tre re\*'assigne\*'e a\*` \f(CW$(\fR sans e\*^tre force\*'e en nume\*'rique, par exemple en lui ajoutant 0. .Sp Vous pouvez a\*` la fois changer le gid re\*'el et le gid effectif en me\*^me temps en utilisant \fIPOSIX::setgid()\fR. Puisque une modification de $( ne\*'cessite un appel syste\*`me, ve\*'rifiez $! apre\*`s chaque tentative de modification pour de\*'tecter une e\*'ventuelle erreur. .Sp (Mne\*'monique\ : les parenthe\*`ses sont utilise\*'es pour \fI\s-1GROUPER\s0\fR les choses. Le gid re\*'el est le groupe que vous laissez a\*` votre \fI\s-1GAUCHE\s0\fR, si vous utilisez setgid.) (NdT: \fI\s-1GAUCHE\s0\fR = parenthe\*`se gauche) .ie n .IP "$EFFECTIVE_GROUP_ID" 8 .el .IP "\f(CW$EFFECTIVE_GROUP_ID\fR" 8 .IX Item "$EFFECTIVE_GROUP_ID" .PD 0 .ie n .IP "$EGID" 8 .el .IP "\f(CW$EGID\fR" 8 .IX Item "$EGID" .IP "$)" 8 .PD Le gid effectif du processus. Si vous e\*^tes sur une machine qui supporte l'appartenance simultane\*'e a\*` plusieurs groupes, renvoie une liste des groupes auxquels vous appartenez, se\*'pare\*'s par des espaces. Le premier nombre retourne\*' est le me\*^me que celui retourne\*' par \f(CW\*(C`getegid()\*(C'\fR, les autres sont ceux retourne\*'s par \f(CW\*(C`getgroups()\*(C'\fR, avec possibilite\*' de doublon entre l'un d'eux et le premier nombre. .Sp De la me\*^me fac\*,on, une valeur assigne\*'e a\*` \f(CW$)\fR doit e\*^tre une liste de nombres se\*'pare\*'s par des espaces. Le premier nombre est utilise\*' pour fixer le gid effectif, et les autres (si pre\*'sents) sont passe\*'s a\*` \f(CW\*(C`setgroups()\*(C'\fR. Pour obtenir le re\*'sultat d'une liste vide pour \f(CW\*(C`setgroups()\*(C'\fR, il suffit de re\*'pe\*'ter le nouveau gid effectif; c'est a\*` dire pour forcer un gid effectif de 5 et un \&\fIsetgroups()\fR vide il faut utiliser\ : \f(CW\*(C` $) = "5 5" \*(C'\fR. .Sp Vous pouvez a\*` la fois changer le gid re\*'el et le gid effectif en me\*^me temps en utilisant \fIPOSIX::setgid()\fR (utilise seulement un unique argument nume\*'rique). Puisque une modification de $) ne\*'cessite un appel syste\*`me, ve\*'rifiez $! apre\*`s chaque tentative de modification pour de\*'tecter une e\*'ventuelle erreur. .Sp (Mne\*'monique\ : les parenthe\*`ses sont utilise\*'es pour \fI\s-1GROUPER\s0\fR les choses. Le gid effectif est le groupe qui vous donne le bon \fI\s-1DROIT\s0\fR pour vous si vous exe\*'cutez setgid.) (NdT: \fI\s-1DROIT\s0\fR = parenthe\*`se droite) .Sp Note\ : \f(CW$<\fR, \f(CW$>\fR, \f(CW$(\fR et \f(CW$)\fR peuvent e\*^tre positionne\*'s seulement sur les machines qui supportent les fonctions correspondantes \&\fIset[re][ug]\fIid()\fI\fR. \f(CW$(\fR et \f(CW$)\fR peuvent e\*^tre inverse\*'e seulement sur les machines supportant \f(CW\*(C`setregid()\*(C'\fR. .ie n .IP "$PROGRAM_NAME" 8 .el .IP "\f(CW$PROGRAM_NAME\fR" 8 .IX Item "$PROGRAM_NAME" .PD 0 .ie n .IP "$0" 8 .el .IP "\f(CW$0\fR" 8 .IX Item "$0" .PD Contient le nom du script Perl en cours d'exe\*'cution. .Sp Sur certains syste\*`mes (pas tous), assigner une valeur a\*` "\f(CW$0\fR" modifie la zone d'argument que le programme \f(CW\*(C`ps\*(C'\fR voit. Sur certaines plateformes vous devez une option spe\*'ciale de \f(CW\*(C`ps\*(C'\fR ou un \f(CW\*(C`ps\*(C'\fR diffe\*'rent pour voir cette modification. C'est utile pluto\*^t pour indiquer l'e\*'tat courant du programme que pour cacher le programme en cours d'exe\*'cution. (Mne\*'monique\ : comme en \fBsh\fR et \fBksh\fR.) .Sp Notez qu'il existe une limite spe\*'cifique a\*` chaque plateforme pour la longueur maximale de \f(CW$0\fR. Dans les cas les plus extre\*^mes, cette limite est la longueur de la valeur initiale de \f(CW$0\fR. .Sp Sur certaines plateformes, il y a un remplissage arbitraire par, par exemple, des espaces apre\*`s le nom modifie\*' tel que vu par \f(CW\*(C`ps\*(C'\fR. Sur certaines plateformes, ce remplissage s'e\*'tend a\*` la longueur initiale du nom quoique vous fassiez (c'est le cas de Linux 2.2 par exemple). .Sp Note pour les utilisateurs de \s-1BSD\s0\ : fixer la valeur de \f(CW$0\fR ne retire pas comple\*`tement \*(L"perl\*(R" de la sortie de \fB\f(BIps\fB\|(1)\fR. Par exemple, donner la valeur \f(CW"foobar"\fR a\*` \f(CW$0\fR peut donner le re\*'sultat \f(CW"perl: foobar (perl)"\fR (la pre\*'sence ou l'absence du pre\*'fixe \f(CW"perl:"\fR ou du suffixe \&\f(CW"(perl)"\fR de\*'pend de la variante et de la version \s-1BSD\s0 utilise\*'e). C'est une caracte\*'ristique du syste\*`me d'exploitation a\*` laquelle Perl ne peut rien. .Sp Dans des scripts multi-fils (multi\-threads), chaque fil peut modifier sa copie de \f(CW$0\fR et Perl les coordonne afin que ce changement soit visible par \fIps\fR\|(1) (en supposant que le syste\*`me d'exploitation le permette). Notez que la valeur \f(CW$0\fR des autres fils n'est pas modifie\*'e puisqu'ils enont une copie qui leur est propre. .IP "$[" 8 L'index du premier e\*'le\*'ment dans un tableau, et du premier caracte\*`re dans une sous\-chai\*^ne de caracte\*`re. La valeur par de\*'faut est 0, mais vous pouvez la fixer a\*` 1 pour faire ressembler Perl a\*` \fBawk\fR (ou Fortran) quand vous utilisez les index ou les fonctions \fIindex()\fR et \fIsubstr()\fR. (Mne\*'monique\ : [ commence les index) .Sp Depuis Perl 5, fixer la valeur de "\f(CW$[\fR" est traite\*' comme une directive de compilation et ne peut influencer le comportement des autres fichiers (ce qui explique que vous ne puissiez lui affecter qu'une valeurs constante a\*` la compilation). Son usage est fortement de\*'conseille\*'. .Sp Notez que, contrairement a\*` d'autres directives de compilation (tel que strict), la modification de \f(CW$[\fR est perc\*,ue dans tout le fichier, et donc en dehors de sa porte\*'e lexicale normale. En revanche, vous pouvez utiliser \fIlocal()\fR pour limiter sa porte\*'e a\*` un bloc lexical. .IP "$]" 8 La version + le niveau de patch / 1000 de l'interpre\*'teur Perl. Cette variable peut e\*^tre utilise\*'e pour de\*'terminer si l'interpre\*'teur Perl exe\*'cutant un script est au niveau de version souhaite\*'. (Mne\*'monique\ : Cette version du Perl est-elle accroche\*'e droite) (Ndt\ : Les jeux de mots utilise\*'s dans les mne\*'moniques anglais sont des plus de\*'licats a\*` rendre en franc\*,ais...) Exemple\ : .Sp .Vb 1 \& warn "No checksumming!\en" if $] < 3.019; .Ve .Sp Voir e\*'galement la documentation de \f(CW\*(C`use VERSION\*(C'\fR et \f(CW\*(C`require VERSION\*(C'\fR pour un moyen pratique d'empe\*^cher l'exe\*'cution d'un script si l'interpre\*'teur est trop vieux. .Sp Lorsque vous testez cette variable, pour e\*'viter les proble\*`mes dus aux impre\*'cisions nume\*'riques, utilisez les tests d'ine\*'galite\*' \f(CW\*(C`<\*(C'\fR et \f(CW\*(C`>\*(C'\fR pluto\*^t que les tests contenant l'e\*'galite\*' comme \f(CW\*(C`<=\*(C'\fR, \&\f(CW\*(C`==\*(C'\fR et \f(CW\*(C`>=\*(C'\fR. .Sp La repre\*'sentation nume\*'rique en point flottant peut quelquefois amener des comparaisons nume\*'riques inexactes. Voir \f(CW$^V\fR pour une repre\*'sentation plus moderne du nume\*'ro de la version Perl qui permet des comparaisons exactes sur les chai\*^nes. .ie n .IP "$COMPILING" 8 .el .IP "\f(CW$COMPILING\fR" 8 .IX Item "$COMPILING" .PD 0 .IP "$^C" 8 .IX Item "$^C" .PD La valeur courante de l'indicateur binaire [flag] associe\*' au commutateur \fB\-c\fR. Principalement utilise\*' avec \fB\-MO=...\fR pour permettre au code de modifier son comportement pendant qu'il est compile\*', comme par exemple pour utiliser \s-1AUTOLOAD\s0 pendant la compilation pluto\*^t que le chargement diffe\*'re\*' normal. Voir See perlcc. Fixer \f(CW\*(C`$^C = 1\*(C'\fR est e\*'quivalent a\*` appeler \&\f(CW\*(C`B::minus_c\*(C'\fR. .ie n .IP "$DEBUGGING" 8 .el .IP "\f(CW$DEBUGGING\fR" 8 .IX Item "$DEBUGGING" .PD 0 .IP "$^D" 8 .IX Item "$^D" .PD La valeur des options de de\*'buggage. (Mne\*'monique\ : valeur de l'option \&\fB\-D\fR.) Peut e\*^tre lue ou modifie\*'e. Comme pour l'option e\*'quivalente en ligne de commande, vous pouvez utiliser soit une valeur nume\*'rique (\f(CW\*(C`$^D = 10\*(C'\fR) soit une valeur symbolique (\f(CW\*(C`$^D = "st"\*(C'\fR). .ie n .IP "$SYSTEM_FD_MAX" 8 .el .IP "\f(CW$SYSTEM_FD_MAX\fR" 8 .IX Item "$SYSTEM_FD_MAX" .PD 0 .IP "$^F" 8 .IX Item "$^F" .PD Le nombre maximum de descripteurs de fichier syste\*`me, habituellement 2. Les descripteurs de fichiers syste\*`me sont passe\*'s aux processus lance\*'s par \&\fIexec()\fR, alors que ce n'est pas le cas pour les autres descripteurs de fichiers. De plus, pendant un \fIopen()\fR; les descripteurs de fichiers syste\*`me sont pre\*'serve\*'s me\*^me si \fIopen()\fR e\*'choue. (Les autres descripteurs sont ferme\*'s avant qu'un \fIopen()\fR ne soient tente\*'.). Le statut fermeture-sur-exec d'un descripteur de fichier sera de\*'cide\*' suivant la valeur de \f(CW$^F\fR au moment de l'ouverture du fichier, pipe ou socket correspondant et non au moment de l'\fIexec()\fR. .IP "$^H" 8 .IX Item "$^H" \&\s-1ATTENTION\s0\ : Cette variable est disponible pour utilisation interne uniquement. Sa disponibilite\*', son comportement et son contenu sont soumis a\*` changement sans avis. .Sp Cette variable contient des directives de compilation pour l'interpre\*`te Perl. A\*` la fin de la compilation d'un \s-1BLOC\s0 la valeur de cette variable est restaure\*'e a\*` la valeur qu'elle avait avant que l'interpre\*`te ne commence la compilation du \s-1BLOC\s0. .Sp Quand perl commence a\*` analyser toute construction d'un bloc qui fournit une porte\*'e lexicale (par exemple, corps d'un eval, fichier requis, corps d'un sous\-programme, corps de boucle, ou bloc conditionnel), la valeur existante de $^H est sauvegarde\*'e, mais sa valeur est inchange\*'e. Quand la compilation du bloc est termine\*'e, elle reprend la valeur sauvegarde\*'e. Entre les points ou\*` sa valeur est sauvegarde\*'e et ou\*` elle est restaure\*'e, le code des blocs \s-1BEGIN\s0 est libre de changer la valeur de $^H. .Sp Ce comportement fournit la se\*'mantique du traitement de porte\*'e lexicale, et est utilise\*', par exemple, dans le pragma \f(CW\*(C`use strict\*(C'\fR. .Sp Le contenu devrait e\*^tre un nombre entier; les diffe\*'rents bits de celui-ci sont utilise\*'s comme indicateurs binaires de pragma. Voici un exemple: .Sp .Vb 1 \& sub add_100 { $^H |= 0x100 } \& \& sub foo { \& BEGIN { add_100() } \& bar\->baz($boon); \& } .Ve .Sp Conside\*'rons ce qui se passe pendant l'exe\*'cution du bloc \s-1BEGIN\s0. A\*` ce moment, le bloc \s-1BEGIN\s0 a de\*'ja\*` e\*'te\*' compile\*', mais le corps de \fIfoo()\fR est encore a\*` compiler. Par conse\*'quent, la nouvelle valeur de $^H ne sera visible seulement que pendant que le corps de \fIfoo()\fR est compile\*'. .Sp La substitution du bloc \s-1BEGIN\s0 pre\*'ce\*'dent par\ : .Sp .Vb 1 \& BEGIN { require strict; strict\->import('vars') } .Ve .Sp montre comment \f(CW\*(C`use strict 'vars'\*(C'\fR est imple\*'mente\*'. Voici une version conditionnelle du me\*^me pragma lexical\ : .Sp .Vb 1 \& BEGIN { require strict; strict\->import('vars') if $condition } .Ve .IP "%^H" 8 .IX Item "%^H" \&\s-1ATTENTION\s0\ : Cette variable est disponible pour utilisation interne uniquement. Sa disponibilite\*', son comportement et son contenu sont soumis a\*` changement sans avis. .Sp Le hachage %^H fournit la me\*^me se\*'mantique du traitement de porte\*'e lexicale que $^H. Ceci le rend utile pour imple\*'menter des pragmas de porte\*'e lexicale. .ie n .IP "$INPLACE_EDIT" 8 .el .IP "\f(CW$INPLACE_EDIT\fR" 8 .IX Item "$INPLACE_EDIT" .PD 0 .IP "$^I" 8 .IX Item "$^I" .PD La valeur courante de l'extension \*(L"e\*'dition sur place\*(R". Utilise \f(CW\*(C`undef\*(C'\fR pour mettre hors service l'e\*'dition sur place. (Mne\*'monique\ : valeur de l'option \&\fB\-i\fR.) .IP "$^M" 8 .IX Item "$^M" Par de\*'faut, le de\*'passement de me\*'moire ne peut pas e\*^tre capture\*' et entrai\*^ne une erreur fatale. Cependant, s'il est compile\*' pour cela, Perl peut utiliser le contenu de \f(CW$^M\fR comme une re\*'serve d'urgence apre\*`s un \fIdie()\fR du\*^ a\*` un de\*'passement de me\*'moire. Supposons que votre Perl ait e\*'te\*' compile\*' avec l'option \f(CW\*(C`\-DPERL_EMERGENCY_SBRK\*(C'\fR et utilise le malloc de Perl. Dans ce cas .Sp .Vb 1 \& $^M = 'a' x (1<<16); .Ve .Sp allouera un buffer de 64K a\*` utiliser en cas d'urgence. Voir le fichier \&\fI\s-1INSTALL\s0\fR de votre distribution pour savoir comment ajouter vos propres options C de compilation lors de la compilation de perl. Pour de\*'courager l'utilisation abusive de cette fonction avance\*'e, il n'y a pas de noms longs English pour cette variable. .ie n .IP "$OSNAME" 8 .el .IP "\f(CW$OSNAME\fR" 8 .IX Item "$OSNAME" .PD 0 .IP "$^O" 8 .IX Item "$^O" .PD Le nom du syste\*`me d'exploitation utilise\*' pour compiler cette copie de Perl, de\*'termine\*' pendant le processus de configuration. Cette valeur est identique a\*` \f(CW$Config{'osname'}\fR. Voir aussi Config et le commutateur en ligne de commande \fB\-V\fR documente\*' dans perlrun. .Sp Sur les plate-formes Windows $^O n'est pas tre\*`s utile: puisqu'elle donne toujours \f(CW\*(C`MSWin32\*(C'\fR, elle ne fait pas la diffe\*'rence entre 95/98/ME/NT/2000/XP/CE / .NET. Utilisez \fIWin32::GetOSName()\fR ou \&\fIWin32::GetOSVersion()\fR (voir Win32 et perlport) pour distinguer ces variantes. .IP "${^OPEN}" 8 .IX Item "${^OPEN}" Une variable interne utilise\*'e par PerlIO. Une chai\*^ne en deux parties, se\*'pare\*'es par un octet \f(CW\*(C`\e0\*(C'\fR, la premie\*`re partie de\*'crit les couches d'entre\*'e, la seconde partie de\*'crit les couches de sortie. .ie n .IP "$PERLDB" 8 .el .IP "\f(CW$PERLDB\fR" 8 .IX Item "$PERLDB" .PD 0 .IP "$^P" 8 .IX Item "$^P" .PD Variable interne pour le de\*'buggage. La signification des diffe\*'rents bits est sujet a\*` changement, mais est actuellement\ : .RS 8 .IP "0x01" 6 .IX Item "0x01" De\*'buggage d'un sous-programme enter/exit. .IP "0x02" 6 .IX Item "0x02" De\*'buggage ligne a\*` ligne. .IP "0x04" 6 .IX Item "0x04" Annuler les options d'optimisation. .IP "0x08" 6 .IX Item "0x08" Pre\*'server plus de donne\*'es pour les inspections interactives a\*` venir. .IP "0x10" 6 .IX Item "0x10" Garder des informations sur les lignes sources ou\*` un sous-programme est de\*'fini. .IP "0x20" 6 .IX Item "0x20" De\*'marrer en mode pas a\*` pas. .IP "0x40" 6 .IX Item "0x40" Dans le rapport, utiliser l'adresse du sous-programme au lieu de nom. .IP "0x80" 6 .IX Item "0x80" Mettre aussi les \f(CW\*(C`goto &subroutine\*(C'\fR dans le rapport. .IP "0x100" 6 .IX Item "0x100" Fournir des noms de fichier significatifs pour les evals, base\*'s sur l'endroit ou\*` ils ont e\*'te\*' compile\*'s. .IP "0x200" 6 .IX Item "0x200" Fournir des noms significatifs pour les sous-programmes anonymes, base\*'s sur l'endroit ou\*` ils ont e\*'te\*' compile\*'s. .IP "0x400" 6 .IX Item "0x400" Assertion de de\*'bogage de l'entre\*'e/sortie des sous\-programmes. .RE .RS 8 .Sp Note\ : Certains bits peuvent avoir un sens uniquement a\*` la compilation , d'autres seulement a\*` l'exe\*'cution. C'est un me\*'canisme nouveau, et les de\*'tails peuvent varier. .RE .ie n .IP "$LAST_REGEXP_CODE_RESULT" 8 .el .IP "\f(CW$LAST_REGEXP_CODE_RESULT\fR" 8 .IX Item "$LAST_REGEXP_CODE_RESULT" .PD 0 .IP "$^R" 8 .IX Item "$^R" .PD Re\*'sultat de l'e\*'valuation de la dernie\*`re utilisation re\*'ussie d'une expression re\*'gulie\*`re \f(CW\*(C`(?{ code })\*(C'\fR. Voir perlre. Cette variable est en lecture/e\*'criture. .ie n .IP "$EXCEPTIONS_BEING_CAUGHT" 8 .el .IP "\f(CW$EXCEPTIONS_BEING_CAUGHT\fR" 8 .IX Item "$EXCEPTIONS_BEING_CAUGHT" .PD 0 .IP "$^S" 8 .IX Item "$^S" .PD E\*'tant courant de l'interpre\*'teur. .Sp .Vb 5 \& $^S E\*'tat \& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& undef Analyse d'un module/eval \& true (1) En cours d'exe\*'cution d'un eval \& false (0) Autre .Ve .Sp Le premier e\*'tat peut apprai\*^tre dans un gestionnaire (handler) \&\f(CW$SIG\fR{_\|_DIE_\|_} ou \f(CW$SIG\fR{_\|_WARN_\|_}. .ie n .IP "$BASETIME" 8 .el .IP "\f(CW$BASETIME\fR" 8 .IX Item "$BASETIME" .PD 0 .IP "$^T" 8 .IX Item "$^T" .PD Heure a\*` laquelle le script a de\*'marre\*', en secondes depuis le 01/01/1970. Les valeurs retourne\*'es par les tests de fichiers \fB\-M\fR, \fB\-A\fR, et \fB\-C\fR sont base\*'es sur cette valeur. .IP "${^TAINT}" 8 .IX Item "${^TAINT}" Indique si le mode souille\*' est actif ou non. 1 si actif (le programme a e\*'te\*' lance\*' avec l'option \fB\-T\fR), 0 si inactif, \-1 si seuls les avertissements sont active\*'s (avec \fB\-t\fR ou \fB\-TU\fR). .IP "${^UNICODE}" 8 .IX Item "${^UNICODE}" Indique l'e\*'tat de certains re\*'glage Unicode de Perl. Voir la documentation de l'option \f(CW\*(C`\-C\*(C'\fR dans perlrun pour plus d'information sur les valeurs possibles. Cette variable est positionne\*'e au lancement de Perl et n'est plus modifiable ensuite. .IP "${^UTF8LOCALE}" 8 .IX Item "${^UTF8LOCALE}" Cette variable indique si un locale \s-1UTF\-8\s0 a e\*'te\*' de\*'tecte\*' par perl au lancement. Cette information est utilise\*'e par perl lorsqu'il est dans le mode d'ajustement de l'utf\-8 au locale (lorsqu'on utilise l'option \&\f(CW\*(C`\-CL\*(C'\fR) ; voir perlrun pour plus d'informations. .ie n .IP "$PERL_VERSION" 8 .el .IP "\f(CW$PERL_VERSION\fR" 8 .IX Item "$PERL_VERSION" .PD 0 .IP "$^V" 8 .IX Item "$^V" .PD Les nume\*'ros de re\*'vision, version et sous-version de l'interpre\*'teur Perl, sous la forme d'une chai\*^ne compose\*'e des caracte\*`res portant ces nume\*'ros. Ainsi, dans Perl v5.6.0, elle est e\*'gale a\*` \f(CW\*(C`chr(5) . chr(6) . chr(0)\*(C'\fR et \f(CW\*(C`$^V eq v5.6.0\*(C'\fR retourne vrai. Notez que les caracte\*`res dans cette chai\*^ne peuvent e\*^tre potentiellement des caracte\*`res Unicode. .Sp On peut l'utiliser pour de\*'terminer si l'interpre\*'teur Perl qui exe\*'cute un script est dans la bonne gamme de versions. (Mne\*'monique: utilisez ^V pour contro\*^le de la Version.) Exemple: .Sp .Vb 1 \& warn "No \e"our\e" declarations!\en" if $^V and $^V lt v5.6.0; .Ve .Sp Pour convertir \f(CW$^V\fR en sa repre\*'sentation en chai\*^ne de caracte\*`res, utilisez le motif \f(CW"%vd"\fR de \fIsprintf()\fR\ : .Sp .Vb 1 \& printf "version is v%vd\en", $^V; # Version de Perl .Ve .Sp Voir la documentation de \f(CW\*(C`use VERSION\*(C'\fR et de \f(CW\*(C`require VERSION\*(C'\fR pour une manie\*`re commode de terminer le script si l'interpre\*'teur Perl courant est trop ancien. .Sp Voyez aussi \f(CW$]\fR pour une plus ancienne repre\*'sentation de la version Perl. .ie n .IP "$WARNING" 8 .el .IP "\f(CW$WARNING\fR" 8 .IX Item "$WARNING" .PD 0 .IP "$^W" 8 .IX Item "$^W" .PD Valeur de l'option 'warning' (avertissement), initialement vrai si \fB\-w\fR est utilise\*', faux sinon, mais peut e\*^tre directement modifie\*'. (Mne\*'monique\ : comme l'option \fB\-w\fR.) Voir aussi warnings. .IP "${^WARNING_BITS}" 8 .IX Item "${^WARNING_BITS}" L'ensemble des contro\*^les courants demande\*'s avec le pragma \f(CW\*(C`use warnings\*(C'\fR Voir la documentation de \f(CW\*(C`warnings\*(C'\fR pour plus de de\*'tails. .ie n .IP "$EXECUTABLE_NAME" 8 .el .IP "\f(CW$EXECUTABLE_NAME\fR" 8 .IX Item "$EXECUTABLE_NAME" .PD 0 .IP "$^X" 8 .IX Item "$^X" .PD Le nom utilise\*' pour exe\*'cuter la copie courante de Perl, vient de \&\f(CW\*(C`argv[0]\*(C'\fR en C ou de \fI/proc/self/exe\fR (lorsque c\*,a existe). .Sp Selon le syste\*`me d'exploitation ho\*^te, la valeur de $^X peut e\*^tre un chemin relatif ou absolu du fichier programme perl, ou peut e\*^tre la chai\*^ne utilise\*'e pour invoquer perl et non le chemin du programme perl. E\*'galement, la plupart des syste\*`mes d'exploitation permettent l'invocation de programmes qui ne sont pas dans la variable d'environnement \s-1PATH\s0, donc il n'y a aucune garantie que la valeur de $^X soit dans \s-1PATH\s0. Pour \s-1VMS\s0, la valeur peut ou peut ne pas inclure de nume\*'ro de version. .Sp Vous pouvez ge\*'ne\*'ralement utiliser la valeur de $^X pour re\*'invoquer une copie inde\*'pendante du me\*^me perl qui est en train de tourner, par exemple\ : .Sp .Vb 1 \& @first_run = `$^X \-le "print int rand 100 for 1..100"`; .Ve .Sp Mais rappelez-vous que tous les syste\*`mes d'exploitation ne supportent pas le forking ou la capture de sortie des commandes, donc cette instruction complexe peut ne pas e\*^tre portable. .Sp Il n'est pas sans danger d'utiliser la valeur de $^X comme un nom de chemin vers un fichier car certains syste\*`mes d'exploitation qui ont un suffixe obligatoire pour les fichiers exe\*'cutables n'exige pas l'usage du suffixe quand on invoque une commande. Pour convertir la valeur de $^X en un nom de chemin, utilisez les instructions suivantes: .Sp .Vb 6 \& # Construit un ensemble de noms de fichier (pas des noms de commande). \& use Config; \& $this_perl = $^X; \& if ($^O ne 'VMS') \& {$this_perl .= $Config{_exe} \& unless $this_perl =~ m/$Config{_exe}$/i;} .Ve .Sp Parce que beaucoup de syste\*`mes d'exploitation permettent a\*` n'importe qui posse\*'dant un acce\*`s en lecture au fichier programme Perl d'en faire une copie, de modifier la copie, et ensuite d'exe\*'cuter cette copie, le programmeur Perl soucieux de se\*'curite\*' doit prendre soin d'invoquer la copie installe\*'e de perl et non pas la copie re\*'fe\*'rence\*'e par $^X. Les instructions suivantes permettent d'atteindre ce but, et produisent un chemin qui peut e\*^tre invoque\*' comme une commande ou qui peut e\*^tre re\*'fe\*'rence\*' comme un fichier. .Sp .Vb 5 \& use Config; \& $secure_perl_path = $Config{perlpath}; \& if ($^O ne 'VMS') \& {$secure_perl_path .= $Config{_exe} \& unless $secure_perl_path =~ m/$Config{_exe}$/i;} .Ve .IP "\s-1ARGV\s0" 8 .IX Item "ARGV" Le descripteur de fichier spe\*'cial qui ite\*`re sur les noms de fichier de la ligne de commande de \f(CW@ARGV\fR. Habituellement e\*'crit comme le descripteur de fichier nul dans l'ope\*'rateur angle \f(CW\*(C`<>\*(C'\fR. Notez qu'actuellement \&\f(CW\*(C`ARGV\*(C'\fR n'a son effet magique qu'avec seulement l'ope\*'rateur \f(CW\*(C`<>\*(C'\fR; ailleurs c'est juste un descripteur de fichier ordinaire qui correspond au dernier fichier ouvert par \f(CW\*(C`<>\*(C'\fR. En particulier, passer \f(CW\*(C`\e*ARGV\*(C'\fR comme parame\*`tre a\*` une fonction qui attend un descripteur de fichier ne permet pas a\*` cette fonction de lire automatiquement le contenu de tous les fichiers de \f(CW@ARGV\fR. .ie n .IP "$ARGV" 8 .el .IP "\f(CW$ARGV\fR" 8 .IX Item "$ARGV" Contient le nom du fichier courant quand on lit depuis <>. .ie n .IP "@ARGV" 8 .el .IP "\f(CW@ARGV\fR" 8 .IX Item "@ARGV" Contient les arguments de la ligne de commande du script. \f(CW$#ARGV\fR est ge\*'ne\*'ralement le nombre d'argument moins 1 car \f(CW$ARGV[0]\fR est le premier argument, et \fInon pas\fR le nom du script qui est dans "\f(CW$0\fR\*(L". Voir \*(R"\f(CW$0\fR" pour le nom du script. .IP "\s-1ARGVOUT\s0" 8 .IX Item "ARGVOUT" Le descripteur de fichier spe\*'cial qui pointe le fichier de sortie ouvert courant quand on fait de l'e\*'dition sur place avec \fBI\fR. Utile quand vous devez faire beaucoup d'insertions et que vous ne voulez pas modifier \f(CW$_\fR. Voir perlrun pour le commutateur \fBI\fR. .ie n .IP "@F" 8 .el .IP "\f(CW@F\fR" 8 .IX Item "@F" Le tableau \f(CW@F\fR contient les champs de chaque ligne lue quand le mode auto\-de\*'coupage (autosplit) est active\*'. Voir perlrun pour le commutateur \fBA\fR. Ce tableau est spe\*'cifique au paquetage et doit e\*^tre de\*'clare\*' ou doit e\*^tre invoque\*' avec un nom pleinement qualifie\*' s'il n'est pas dans le paquetage main quand on utilise \f(CW\*(C`strict 'vars'\*(C'\fR. .ie n .IP "@INC" 8 .el .IP "\f(CW@INC\fR" 8 .IX Item "@INC" Contient la liste des re\*'pertoires ou\*` chercher pour e\*'valuer les constructeurs \&\f(CW\*(C`do EXPR\*(C'\fR, \f(CW\*(C`require\*(C'\fR, ou \f(CW\*(C`use\*(C'\fR. Il est constitue\*' au de\*'part des arguments \&\fB\-I\fR de la ligne de commande, suivi du chemin par de\*'faut de la bibliothe\*`que Perl, probablement \fI/usr/local/lib/perl\fR, suivi de \*(L".\*(R", pour repre\*'senter le re\*'pertoire courant. (\*(L".\*(R" ne sera pas ajoute\*' si le mode souille\*' (taint mode) est active\*', que ce soit par \f(CW\*(C`\-T\*(C'\fR ou par \f(CW\*(C`\-t\*(C'\fR.) Si vous devez modifier cette variable a\*` l'exe\*'cution vous pouvez utiliser \f(CW\*(C`use lib\*(C'\fR pour charger les bibliothe\*`ques de\*'pendant de la machine\ : .Sp .Vb 2 \& use lib '/mypath/libdir/'; \& use SomeMod; .Ve .Sp Vous pouvez aussi inse\*'rer des crochets [hooks] dans le syste\*`me d'inclusion de fichiers en mettant du code Perl directement dans \f(CW@INC\fR. Ces crochets peuvent e\*^tre des re\*'fe\*'rences a\*` des sous\-programmes, des re\*'fe\*'rences a\*` des tableaux ou des objets be\*'nis. Voir \*(L"require\*(R" in perlfunc pour les de\*'tails. .ie n .IP "@_" 8 .el .IP "\f(CW@_\fR" 8 .IX Item "@_" Dans un sous\-programme, le tableau \f(CW@_\fR contient les parame\*`tres passe\*'s a\*` ce sous\-programme. Voir perlsub. .ie n .IP "%INC" 8 .el .IP "\f(CW%INC\fR" 8 .IX Item "%INC" Contient une entre\*'e pour chacun des fichiers inclus par les ope\*'rateurs \f(CW\*(C`do\*(C'\fR, \&\f(CW\*(C`require\*(C'\fR ou \f(CW\*(C`use\*(C'\fR. La clef est le nom du fichier (avec les noms de modules convertis en chemin), et la valeur est la localisation du fichier effectivement trouve\*'. La commande \f(CW\*(C`require\*(C'\fR utilise ce hachage pour de\*'terminer si un fichier donne\*' a de\*'ja\*` e\*'te\*' inclus. .Sp Si le dossier a e\*'te\*' charge\*' par un crochet (par exemple une re\*'fe\*'rence a\*` un sous\-programme, voyez \*(L"require\*(R" in perlfunc pour une description de ces crochets), ce crochet est inse\*'re\*' par de\*'faut dans \f(CW%INC\fR a\*` la place d'un nom de fichier. Notez toutefois que le crochet a pu placer l'entre\*'e dans \f(CW%INC\fR par lui\-me\*^me pour fournir quelques infos plus spe\*'cifiques. .ie n .IP "%ENV" 8 .el .IP "\f(CW%ENV\fR" 8 .IX Item "%ENV" .PD 0 .ie n .IP "$ENV{expr}" 8 .el .IP "\f(CW$ENV\fR{expr}" 8 .IX Item "$ENV{expr}" .PD Contient les variables d'environnement. Fixer une valeur dans \f(CW\*(C`ENV\*(C'\fR change l'environnement pour les processus fils. .ie n .IP "%SIG" 8 .el .IP "\f(CW%SIG\fR" 8 .IX Item "%SIG" .PD 0 .ie n .IP "$SIG{expr}" 8 .el .IP "\f(CW$SIG\fR{expr}" 8 .IX Item "$SIG{expr}" .PD Contient les gestionnaires de divers signaux. Par exemple\ : .Sp .Vb 6 \& sub handler { # Le premier argument est le nom du signal \& my($sig) = @_; \& print "Caught a SIG$sig\-\-shutting down\en"; \& close(LOG); \& exit(0); \& } \& \& $SIG{'INT'} = \e&handler; \& $SIG{'QUIT'} = \e&handler; \& ... \& $SIG{'INT'} = 'DEFAULT'; # Restaure l'action par de\*'faut \& $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT .Ve .Sp Donner la valeur \f(CW'IGNORE'\fR a habituellement pour effet d'ignorer le signal, a\*` l'exception du signal \f(CW\*(C`CHLD\*(C'\fR. Voir perlipc pour en savoir plus au sujet de ce cas spe\*'cial. .Sp Voici d'autres exemples\ : .Sp .Vb 4 \& $SIG{"PIPE"} = "Plumber"; # suppose main::Plumber (Pas recommande\*') \& $SIG{"PIPE"} = \e&Plumber; # Bien; suppose Plumber en sous\-programme \& $SIG{"PIPE"} = *Plumber; # quelque peu e\*'sote\*'rique \& $SIG{"PIPE"} = Plumber(); # ai\*:e, que retourne Plumber() ?? .Ve .Sp Assurez-vous de ne pas utiliser de mot nu comme nom de descripteur de signal, de peur que vous ne l'appeliez par inadvertance. .Sp Si votre syste\*`me reconnai\*^t la fonction \fIsigaction()\fR, alors la gestion des signaux est imple\*'mente\*'e par cette fonction. Ce qui signifie que vous avez une gestion des signaux fiable. .Sp Depuis la version 5.8.0, par de\*'faut, la re\*'ception d'un signal n'est plus imme\*'diate (comprendre \*(L"non fiable\*(R") mais diffe\*'re\*'e (comprendre \&\*(L"fiable\*(R"). Voir perlipc pour plus d'information. .Sp On peut attacher un gestionnaire a\*` certaines interruptions internes via la table de hachage \f(CW%SIG\fR. La routine indique\*'e par \&\f(CW$SIG{_\|_WARN_\|_}\fR est appele\*'e quand un message d'avertissement est sur le point d'e\*^tre affiche\*'. Le message est passe\*' en premier argument. La pre\*'sence de l'indicateur _\|_WARN_\|_ supprime les avertissements normaux sur \s-1STDERR\s0. Vous pouvez vous en servir pour stocker les avertissements dans une variable, ou pour les transformer en erreurs fatales, comme ceci\ : .Sp .Vb 2 \& local $SIG{_\|_WARN_\|_} = sub { die $_[0] }; \& eval $proggie; .Ve .Sp La routine indique\*'e par \f(CW$SIG{_\|_DIE_\|_}\fR est appele\*'e juste avant la gestion d'une erreur fatale, avec le message d'erreur comme premier argument. En sortie de la routine, le traitement de l'erreur reprend son cours normal, sauf si la routine provoque un arre\*^t du traitement via un \f(CW\*(C`goto\*(C'\fR, une sortie de boucle ou un \fIdie()\fR. Le gestionnaire \f(CW\*(C`_\|_DIE_\|_\*(C'\fR est explicitement de\*'sactive\*' pendant l'appel, de sorte que l'interruption \f(CW\*(C`_\|_DIE_\|_\*(C'\fR soit possible. Me\*^me chose pour \f(CW\*(C`_\|_WARN_\|_\*(C'\fR. .Sp Du\*^ a\*` une erreur d'imple\*'mentation, le gestionnaire \f(CW$SIG{_\|_DIE_\|_}\fR est appele\*' me\*^me a\*` l'inte\*'rieur d'un \fIeval()\fR. N'utilisez pas ceci pour re\*'crire une exception en suspens dans \f(CW$@\fR, ou bizarrement pour surcharger \fICORE::GLOBAL::die()\fR. Cette e\*'trange action a\*` distance devrait e\*^tre supprime\*'e dans une version future de manie\*`re que \f(CW$SIG{_\|_DIE_\|_}\fR soit appele\*' uniquement quand votre programme est sur le point de se terminer, ce qui e\*'tait l'intention a\*` l'origine. Tout autre usage est de\*'sapprouve\*'. .Sp Note\ : \f(CW\*(C`_\|_DIE_\|_\*(C'\fR/\f(CW\*(C`_\|_WARN_\|_\*(C'\fR ont ceci de spe\*'cial, qu'ils peuvent e\*^tre appele\*'s pour signaler une erreur (probable) pendant l'analyse du script. Dans ce cas, l'analyseur peut e\*^tre dans un e\*'tat instable, et toute tentative pour e\*'valuer du code Perl provoquera certainement une faute de segmentation. Donc un appel entrai\*^nant une analyse du code devra e\*^tre utilise\*'e avec pre\*'caution, comme ceci\ : .Sp .Vb 4 \& require Carp if defined $^S; \& Carp::confess("Un proble\*`me") if defined &Carp::confess; \& die "Un proble\*`me, mais je ne peux charger Carp pour les de\*'tails... \& Essayer de relancer avec l'option \-MCarp"; .Ve .Sp Dans cet exemple, la premie\*`re ligne chargera Carp \fIsauf\fR si c'est l'analyseur qui a appele\*' l'interruption. La deuxie\*`me ligne affichera une trace de l'e\*'chec et arre\*^tera le programme si Carp est disponible. La troisie\*`me ligne ne sera exe\*'cute\*'e que si Carp n'est pas disponible. .Sp Voir \*(L"die\*(R" in perlfunc, \*(L"warn\*(R" in perlfunc et \*(L"eval\*(R" in perlfunc pour plus d'informations. .Sh "Indicateurs d'erreur" .IX Subsection "Indicateurs d'erreur" Les variables $@, $!, $^E, et $? contiennent des informations a\*` propos des diffe\*'rentes conditions d'erreur pouvant survenir pendant l'exe\*'cution d'un script Perl. Les variables sont donne\*'es en fonction de la \*(L"distance\*(R" qui se\*'pare le sous\-syste\*`me de\*'clenchant l'erreur et le programme Perl. Elles correspondent respectivement aux erreurs de\*'tecte\*'es par l'interpre\*'teur Perl, la bibliothe\*`que C, le syste\*`me d'exploitation ou un programme externe. .PP Pour illustrer ces diffe\*'rences, prenons l'exemple suivant\ : .PP .Vb 5 \& eval q{ \& open my $pipe, "/cdrom/install |" or die $!; \& my @res = <$pipe>; \& close $pipe or die "bad pipe: $?, $!"; \& }; .Ve .PP Apre\*`s l'exe\*'cution du code, les 4 variables peuvent e\*^tre positionne\*'es. .PP $@ le sera si l'expression a\*` (\f(CW\*(C`eval\*(C'\fR)\-uer ne s'est pas compile\*'e (cela peut se produire si les fonctions \f(CW\*(C`open\*(C'\fR ou \f(CW\*(C`close\*(C'\fR ont e\*'te\*' importe\*'es avec de mauvais prototypes), ou si le code Perl exe\*'cute\*' pendant l'e\*'valuation e\*'choue via \fIdie()\fR. Dans ce cas $@ contient l'erreur de compilation, ou l'argument de \f(CW\*(C`die\*(C'\fR (qui interpolera \&\f(CW$!\fR et \f(CW$?\fR). (Ne\*'anmoins, voir aussi Fatal.) .PP Quand le code pre\*'ce\*'dent est exe\*'cute\*', \fIopen()\fR, \f(CW\*(C`\*(C'\fR, et \f(CW\*(C`close\*(C'\fR sont traduits en appels a\*` la librairie C et de la\*` vers le noyau du syste\*`me d'exploitation. La variable \f(CW$!\fR est positionne\*'e a\*` la valeur \f(CW\*(C`errno\*(C'\fR de la bibliothe\*`que C si l'un de ces appels e\*'choue. .PP Sous quelques syste\*`mes d'exploitation, \f(CW$^E\fR peut contenir un indicateur d'erreur plus verbeux, tel que, dans ce cas\ : \*(L"Le tiroir du \s-1CDROM\s0 n'est pas ferme\*'.\*(R" Sur les syste\*`mes qui ne supportent pas de messages d'erreur e\*'tendus, \f(CW$^E\fR contient la me\*^me chose que \&\f(CW$!\fR. .PP Finalement, \f(CW$?\fR sera diffe\*'rent de \f(CW0\fR si le programme externe au script \&\f(CW\*(C`/cdrom/install\*(C'\fR e\*'choue. Les huit bits de poids fort refle\*`tent les conditions spe\*'cifiques de l'erreur rencontre\*'e par le programme (la valeur \fIexit()\fR du programme). Les huit bits de poids faible refle\*`tent le mode de l'e\*'chec, comme signal d'arre\*^t et information de vidage me\*'moire. Voir \fIwait\fR\|(2) pour les de\*'tails. Contrairement a\*` \f(CW$!\fR et \f(CW$^E\fR qui changent de valeur uniquement quand une erreur est de\*'tecte\*'e, la variable \f(CW$?\fR est change\*'e a\*` chaque \f(CW\*(C`wait\*(C'\fR ou fermeture de pipe, e\*'crasant l'ancienne valeur. C'est un peu comme \f(CW$@\fR qui, sur chaque \fIeval()\fR, est toujours fixe\*'e en cas d'e\*'chec et vide\*'e en cas de re\*'ussite. .PP Pour plus de de\*'tails, voir les descriptions individuelles de $@, $!, $^E, et $?. .Sh "Note technique sur la syntaxe de noms variables" .IX Subsection "Note technique sur la syntaxe de noms variables" Les noms de variables en Perl peuvent avoir plusieurs formats. Habituellement, ils doivent commencer par une lettre ou un trait\-de\-soulignement, auquel cas ils peuvent e\*^tre arbitrairement long (jusqu'a\*` une limite interne de 251 caracte\*`res) et peuvent contenir des lettres, des chiffres, des traits\-de\-soulignement, ou la se\*'quence spe\*'ciale \f(CW\*(C`::\*(C'\fR ou encore \f(CW\*(C`'\*(C'\fR. Dans ce cas, la partie place\*'e avant le dernier \f(CW\*(C`::\*(C'\fR ou \f(CW\*(C`'\*(C'\fR est interpre\*'te\*'e comme un \fIqualificateur de paquetage\fR; voir perlmod. .PP Les noms de variables en Perl peuvent e\*^tre aussi une se\*'quence de chiffres ou un signe de ponctuation unique ou un caracte\*`re du contro\*^le. Ces noms sont tous re\*'serve\*'s par Perl pour des usages spe\*'ciaux ; par exemple, les noms 'tout en chiffres' sont utilise\*'s pour contenir les donne\*'es capture\*'es par les re\*'fe\*'rences\-arrie\*`res d'une expression rationnelle apre\*`s une recherche de motif re\*'ussie. Perl a une syntaxe spe\*'ciale pour les noms 'caracte\*`re de contro\*^le seul'\ : il comprend \f(CW\*(C`^X\*(C'\fR (circonflexe \f(CW\*(C`X\*(C'\fR) comme signifiant le caracte\*`re contro\*^le\-\f(CW\*(C`X\*(C'\fR. Par exemple, la notation \f(CW$^W\fR (dollar circonflexe \f(CW\*(C`W\*(C'\fR) est la variable scalaire dont le nom est le seul caracte\*`re contro\*^le\-\f(CW\*(C`W\*(C'\fR. C'est mieux que de taper un contro\*^le\-\f(CW\*(C`W\*(C'\fR directement dans votre programme. .PP Finalement, ce qui est nouveau dans Perl 5.6, les noms de variables peuvent e\*^tre des chai\*^nes alphanume\*'riques qui commencent par des caracte\*`res de contro\*^le (ou mieux encore, un circonflexe). Ces variables doivent e\*^tre e\*'crites sous la forme \f(CW\*(C`${^Foo}\*(C'\fR; les accolades ne sont pas facultatives. \f(CW\*(C`${^Foo}\*(C'\fR de\*'note la variable scalaire dont le nom est un contro\*^le\-\f(CW\*(C`F\*(C'\fR suivi par deux \f(CW\*(C`o\*(C'\fR. Ces variables sont re\*'serve\*'es par Perl pour de futurs usages spe\*'ciaux, a\*` l'exception de ceux qui commencent par \f(CW\*(C`^_\*(C'\fR (contro\*^le\-soulignement ou circonflexe\-soulignement). Aucun nom du type contro\*^le\-caracte\*`re qui commence par \f(CW\*(C`^_\*(C'\fR n'acquerra de signification spe\*'ciale dans toute future version de Perl ; de tels noms peuvent donc e\*^tre utilise\*'s sans risque dans les programmes. Toutefois \f(CW$^_\fR lui\-me\*^me, \fIest\fR re\*'serve\*'. .PP Les identificateurs Perl qui commencent par des chiffres, des caracte\*`res de contro\*^le ou des caracte\*`res de ponctuation ne sont pas soumis aux effets de la de\*'claration \f(CW\*(C`package\*(C'\fR et sont toujours force\*'ment dans le paquetage \f(CW\*(C`main\*(C'\fR ; ils ne sont pas non plus soumis aux erreurs de \f(CW\*(C`strict 'vars'\*(C'\fR. Quelques autres noms en sont aussi exempte\*'s\ : .PP .Vb 5 \& ENV STDIN \& INC STDOUT \& ARGV STDERR \& ARGVOUT _ \& SIG .Ve .PP En particulier, les nouvelles variables spe\*'ciales \f(CW\*(C`${^_XYZ}\*(C'\fR sont toujours associe\*'es au paquetage \f(CW\*(C`main\*(C'\fR, inde\*'pendamment de toute de\*'claration de paquetage dans la porte\*'e. .SH "BUGS" .IX Header "BUGS" Du\*^ a\*` un accident fa\*^cheux dans l'imple\*'mentation de Perl, \f(CW\*(C`use English\*(C'\fR impose une pe\*'nalite\*' de performance conside\*'rable sur toutes les recherches de motif dans un programme, inde\*'pendamment de l'endroit ou\*` elles se trouvent dans la porte\*'e de \f(CW\*(C`use English\*(C'\fR. Pour cette raison, l'utilisation de \f(CW\*(C`use English\*(C'\fR est fortement de\*'conseille\*'e dans les bibliothe\*`ques. Voir la documentation du module Devel::SawAmpersand du \&\s-1CPAN\s0 ( http://www.cpan.org/modules/by\-module/Devel/ ) pour plus d'information. .PP Avoir a\*` penser a\*` la variable \f(CW$^S\fR dans vos gestionnaires d'exceptions est tout simplement mauvais. \f(CW$SIG{_\|_DIE_\|_}\fR, tel qu'il est imple\*'mente\*' actuellement, favorise le risque d'erreurs graves et difficiles a\*` localiser. E\*'vitez\-le et utilisez un \f(CW\*(C`END{}\*(C'\fR ou CORE::GLOBAL::die a\*` la place. .SH "TRADUCTION" .IX Header "TRADUCTION" .Sh "Version" .IX Subsection "Version" Cette traduction franc\*,aise correspond a\*` la version anglaise distribue\*'e avec perl 5.8.8. Pour en savoir plus concernant ces traductions, consultez . .Sh "Traducteur" .IX Subsection "Traducteur" Fabien Martinet (version de perl 5.00502). Mise a\*` jour\ : Jean-Louis Morel , Paul Gaborit . .Sh "Relecture" .IX Subsection "Relecture" Jean-Louis Morel .