diff options
Diffstat (limited to 'upstream/mageia-cauldron/man1/perlvar.1')
-rw-r--r-- | upstream/mageia-cauldron/man1/perlvar.1 | 2893 |
1 files changed, 2893 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/perlvar.1 b/upstream/mageia-cauldron/man1/perlvar.1 new file mode 100644 index 00000000..9b06d42d --- /dev/null +++ b/upstream/mageia-cauldron/man1/perlvar.1 @@ -0,0 +1,2893 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.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 +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'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 >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "PERLVAR 1" +.TH PERLVAR 1 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" 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 +perlvar \- Perl predefined variables +.SH DESCRIPTION +.IX Header "DESCRIPTION" +.SS "The Syntax of Variable Names" +.IX Subsection "The Syntax of Variable Names" +Variable names in Perl can have several formats. Usually, they +must begin with a letter or underscore, in which case they can be +arbitrarily long (up to an internal limit of 251 characters) and +may contain letters, digits, underscores, or the special sequence +\&\f(CW\*(C`::\*(C'\fR or \f(CW\*(C`\*(Aq\*(C'\fR. In this case, the part before the last \f(CW\*(C`::\*(C'\fR or +\&\f(CW\*(C`\*(Aq\*(C'\fR is taken to be a \fIpackage qualifier\fR; see perlmod. +A Unicode letter that is not ASCII is not considered to be a letter +unless \f(CW"use\ utf8"\fR is in effect, and somewhat more complicated +rules apply; see "Identifier parsing" in perldata for details. +.PP +Perl variable names may also be a sequence of digits, a single +punctuation character, or the two-character sequence: \f(CW\*(C`^\*(C'\fR (caret or +CIRCUMFLEX ACCENT) followed by any one of the characters \f(CW\*(C`[][A\-Z^_?\e]\*(C'\fR. +These names are all reserved for +special uses by Perl; for example, the all-digits names are used +to hold data captured by backreferences after a regular expression +match. +.PP +Since Perl v5.6.0, Perl variable names may also be alphanumeric strings +preceded by a caret. These must all be written using the demarcated +variable form using curly braces such as \f(CW\*(C`${^Foo}\*(C'\fR; +the braces are \fBnot\fR optional. \f(CW\*(C`${^Foo}\*(C'\fR denotes the scalar variable +whose name is considered to be a control\-\f(CW\*(C`F\*(C'\fR followed by two \f(CW\*(C`o\*(C'\fR's. +(See "Demarcated variable names using braces" in perldata for more +information on this form of spelling a variable name or specifying +access to an element of an array or a hash). +These variables are +reserved for future special uses by Perl, except for the ones that +begin with \f(CW\*(C`^_\*(C'\fR (caret-underscore). No +name that begins with \f(CW\*(C`^_\*(C'\fR will acquire a special +meaning in any future version of Perl; such names may therefore be +used safely in programs. \f(CW$^_\fR itself, however, \fIis\fR reserved. +.PP +Note that you also \fBmust\fR use the demarcated form to access subscripts +of variables of this type when interpolating, for instance to access the +first element of the \f(CW\*(C`@{^CAPTURE}\*(C'\fR variable inside of a double quoted +string you would write \f(CW"${^CAPTURE[0]}"\fR and NOT \f(CW"${^CAPTURE}[0]"\fR +which would mean to reference a scalar variable named \f(CW\*(C`${^CAPTURE}\*(C'\fR and +not index 0 of the magic \f(CW\*(C`@{^CAPTURE}\*(C'\fR array which is populated by the +regex engine. +.PP +Perl identifiers that begin with digits or +punctuation characters are exempt from the effects of the \f(CW\*(C`package\*(C'\fR +declaration and are always forced to be in package \f(CW\*(C`main\*(C'\fR; they are +also exempt from \f(CW\*(C`strict \*(Aqvars\*(Aq\*(C'\fR errors. A few other names are also +exempt in these ways: +.PP +.Vb 5 +\& ENV STDIN +\& INC STDOUT +\& ARGV STDERR +\& ARGVOUT +\& SIG +.Ve +.PP +In particular, the special \f(CW\*(C`${^_XYZ}\*(C'\fR variables are always taken +to be in package \f(CW\*(C`main\*(C'\fR, regardless of any \f(CW\*(C`package\*(C'\fR declarations +presently in scope. +.SH "SPECIAL VARIABLES" +.IX Header "SPECIAL VARIABLES" +The following names have special meaning to Perl. Most punctuation +names have reasonable mnemonics, or analogs in the shells. +Nevertheless, if you wish to use long variable names, you need only say: +.PP +.Vb 1 +\& use English; +.Ve +.PP +at the top of your program. This aliases all the short names to the long +names in the current package. Some even have medium names, generally +borrowed from \fBawk\fR. For more info, please see English. +.PP +Before you continue, note the sort order for variables. In general, we +first list the variables in case-insensitive, almost-lexigraphical +order (ignoring the \f(CW\*(C`{\*(C'\fR or \f(CW\*(C`^\*(C'\fR preceding words, as in \f(CW\*(C`${^UNICODE}\*(C'\fR +or \f(CW$^T\fR), although \f(CW$_\fR and \f(CW@_\fR move up to the top of the pile. +For variables with the same identifier, we list it in order of scalar, +array, hash, and bareword. +.SS "General Variables" +.IX Subsection "General Variables" +.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 Xref "$_ $ARG" +.IX Item "$_" +.PD +The default input and pattern-searching space. The following pairs are +equivalent: +.Sp +.Vb 2 +\& while (<>) {...} # equivalent only in while! +\& while (defined($_ = <>)) {...} +\& +\& /^Subject:/ +\& $_ =~ /^Subject:/ +\& +\& tr/a\-z/A\-Z/ +\& $_ =~ tr/a\-z/A\-Z/ +\& +\& chomp +\& chomp($_) +.Ve +.Sp +Here are the places where Perl will assume \f(CW$_\fR even if you don't use it: +.RS 8 +.IP \(bu 3 +The following functions use \f(CW$_\fR as a default argument: +.Sp +abs, alarm, chomp, chop, chr, chroot, +cos, defined, eval, evalbytes, exp, fc, glob, hex, int, lc, +lcfirst, length, log, lstat, mkdir, oct, ord, pos, print, printf, +quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only), +rmdir, say, sin, split (for its second +argument), sqrt, stat, study, uc, ucfirst, +unlink, unpack. +.IP \(bu 3 +All file tests (\f(CW\*(C`\-f\*(C'\fR, \f(CW\*(C`\-d\*(C'\fR) except for \f(CW\*(C`\-t\*(C'\fR, which defaults to STDIN. +See "\-X" in perlfunc +.IP \(bu 3 +The pattern matching operations \f(CW\*(C`m//\*(C'\fR, \f(CW\*(C`s///\*(C'\fR and \f(CW\*(C`tr///\*(C'\fR (aka \f(CW\*(C`y///\*(C'\fR) +when used without an \f(CW\*(C`=~\*(C'\fR operator. +.IP \(bu 3 +The default iterator variable in a \f(CW\*(C`foreach\*(C'\fR loop if no other +variable is supplied. +.IP \(bu 3 +The implicit iterator variable in the \f(CWgrep()\fR and \f(CWmap()\fR functions. +.IP \(bu 3 +The implicit variable of \f(CWgiven()\fR. +.IP \(bu 3 +The default place to put the next value or input record +when a \f(CW\*(C`<FH>\*(C'\fR, \f(CW\*(C`readline\*(C'\fR, \f(CW\*(C`readdir\*(C'\fR or \f(CW\*(C`each\*(C'\fR +operation's result is tested by itself as the sole criterion of a \f(CW\*(C`while\*(C'\fR +test. Outside a \f(CW\*(C`while\*(C'\fR test, this will not happen. +.RE +.RS 8 +.Sp +\&\f(CW$_\fR is a global variable. +.Sp +However, between perl v5.10.0 and v5.24.0, it could be used lexically by +writing \f(CW\*(C`my $_\*(C'\fR. Making \f(CW$_\fR refer to the global \f(CW$_\fR in the same scope +was then possible with \f(CW\*(C`our $_\*(C'\fR. This experimental feature was removed and is +now a fatal error, but you may encounter it in older code. +.Sp +Mnemonic: underline is understood in certain operations. +.RE +.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 Xref "@_ @ARG" +.IX Item "@_" +.PD +Within a subroutine the array \f(CW@_\fR contains the parameters passed to +that subroutine. Inside a subroutine, \f(CW@_\fR is the default array for +the array operators \f(CW\*(C`pop\*(C'\fR and \f(CW\*(C`shift\*(C'\fR. +.Sp +See perlsub. +.ie n .IP $LIST_SEPARATOR 8 +.el .IP \f(CW$LIST_SEPARATOR\fR 8 +.IX Item "$LIST_SEPARATOR" +.PD 0 +.IP "$""" 8 +.IX Xref "$"" $LIST_SEPARATOR" +.PD +When an array or an array slice is interpolated into a double-quoted +string or a similar context such as \f(CW\*(C`/.../\*(C'\fR, its elements are +separated by this value. Default is a space. For example, this: +.Sp +.Vb 1 +\& print "The array is: @array\en"; +.Ve +.Sp +is equivalent to this: +.Sp +.Vb 1 +\& print "The array is: " . join($", @array) . "\en"; +.Ve +.Sp +Mnemonic: works in double-quoted context. +.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 +.IX Xref "$$ $PID $PROCESS_ID" +.PD +The process number of the Perl running this script. Though you \fIcan\fR set +this variable, doing so is generally discouraged, although it can be +invaluable for some testing purposes. It will be reset automatically +across \f(CWfork()\fR calls. +.Sp +Note for Linux and Debian GNU/kFreeBSD users: Before Perl v5.16.0 perl +would emulate POSIX semantics on Linux systems using LinuxThreads, a +partial implementation of POSIX Threads that has since been superseded +by the Native POSIX Thread Library (NPTL). +.Sp +LinuxThreads is now obsolete on Linux, and caching \f(CWgetpid()\fR +like this made embedding perl unnecessarily complex (since you'd have +to manually update the value of $$), so now \f(CW$$\fR and \f(CWgetppid()\fR +will always return the same values as the underlying C library. +.Sp +Debian GNU/kFreeBSD systems also used LinuxThreads up until and +including the 6.0 release, but after that moved to FreeBSD thread +semantics, which are POSIX-like. +.Sp +To see if your system is affected by this discrepancy check if +\&\f(CW\*(C`getconf GNU_LIBPTHREAD_VERSION | grep \-q NPTL\*(C'\fR returns a false +value. NTPL threads preserve the POSIX semantics. +.Sp +Mnemonic: same as shells. +.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 Xref "$0 $PROGRAM_NAME" +.IX Item "$0" +.PD +Contains the name of the program being executed. +.Sp +On some (but not all) operating systems assigning to \f(CW$0\fR modifies +the argument area that the \f(CW\*(C`ps\*(C'\fR program sees. On some platforms you +may have to use special \f(CW\*(C`ps\*(C'\fR options or a different \f(CW\*(C`ps\*(C'\fR to see the +changes. Modifying the \f(CW$0\fR is more useful as a way of indicating the +current program state than it is for hiding the program you're +running. +.Sp +Note that there are platform-specific limitations on the maximum +length of \f(CW$0\fR. In the most extreme case it may be limited to the +space occupied by the original \f(CW$0\fR. +.Sp +In some platforms there may be arbitrary amount of padding, for +example space characters, after the modified name as shown by \f(CW\*(C`ps\*(C'\fR. +In some platforms this padding may extend all the way to the original +length of the argument area, no matter what you do (this is the case +for example with Linux 2.2). +.Sp +Note for BSD users: setting \f(CW$0\fR does not completely remove "perl" +from the \fBps\fR\|(1) output. For example, setting \f(CW$0\fR to \f(CW"foobar"\fR may +result in \f(CW"perl: foobar (perl)"\fR (whether both the \f(CW"perl: "\fR prefix +and the " (perl)" suffix are shown depends on your exact BSD variant +and version). This is an operating system feature, Perl cannot help it. +.Sp +In multithreaded scripts Perl coordinates the threads so that any +thread may modify its copy of the \f(CW$0\fR and the change becomes visible +to \fBps\fR\|(1) (assuming the operating system plays along). Note that +the view of \f(CW$0\fR the other threads have will not change since they +have their own copies of it. +.Sp +If the program has been given to perl via the switches \f(CW\*(C`\-e\*(C'\fR or \f(CW\*(C`\-E\*(C'\fR, +\&\f(CW$0\fR will contain the string \f(CW"\-e"\fR. +.Sp +On Linux as of perl v5.14.0 the legacy process name will be set with +\&\f(CWprctl(2)\fR, in addition to altering the POSIX name via \f(CW\*(C`argv[0]\*(C'\fR as +perl has done since version 4.000. Now system utilities that read the +legacy process name such as ps, top and killall will recognize the +name you set when assigning to \f(CW$0\fR. The string you supply will be +cut off at 16 bytes, this is a limitation imposed by Linux. +.Sp +Wide characters are invalid in \f(CW$0\fR values. For historical reasons, +though, Perl accepts them and encodes them to UTF\-8. When this +happens a wide-character warning is triggered. +.Sp +Mnemonic: same as \fBsh\fR and \fBksh\fR. +.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 +.IX Xref "$( $GID $REAL_GROUP_ID" +.PD +The real gid of this process. If you are on a machine that supports +membership in multiple groups simultaneously, gives a space separated +list of groups you are in. The first number is the one returned by +\&\f(CWgetgid()\fR, and the subsequent ones by \f(CWgetgroups()\fR, one of which may be +the same as the first number. +.Sp +However, a value assigned to \f(CW$(\fR must be a single number used to +set the real gid. So the value given by \f(CW$(\fR should \fInot\fR be assigned +back to \f(CW$(\fR without being forced numeric, such as by adding zero. Note +that this is different to the effective gid (\f(CW$)\fR) which does take a +list. +.Sp +You can change both the real gid and the effective gid at the same +time by using \f(CWPOSIX::setgid()\fR. Changes +to \f(CW$(\fR require a check to \f(CW$!\fR +to detect any possible errors after an attempted change. +.Sp +Mnemonic: parentheses are used to \fIgroup\fR things. The real gid is the +group you \fIleft\fR, if you're running setgid. +.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 +.IX Xref "$) $EGID $EFFECTIVE_GROUP_ID" +.PD +The effective gid of this process. If you are on a machine that +supports membership in multiple groups simultaneously, gives a space +separated list of groups you are in. The first number is the one +returned by \f(CWgetegid()\fR, and the subsequent ones by \f(CWgetgroups()\fR, +one of which may be the same as the first number. +.Sp +Similarly, a value assigned to \f(CW$)\fR must also be a space-separated +list of numbers. The first number sets the effective gid, and +the rest (if any) are passed to \f(CWsetgroups()\fR. To get the effect of an +empty list for \f(CWsetgroups()\fR, just repeat the new effective gid; that is, +to force an effective gid of 5 and an effectively empty \f(CWsetgroups()\fR +list, say \f(CW\*(C` $) = "5 5" \*(C'\fR. +.Sp +You can change both the effective gid and the real gid at the same +time by using \f(CWPOSIX::setgid()\fR (use only a single numeric argument). +Changes to \f(CW$)\fR require a check to \f(CW$!\fR to detect any possible errors +after an attempted change. +.Sp +\&\f(CW$<\fR, \f(CW$>\fR, \f(CW$(\fR and \f(CW$)\fR can be set only on +machines that support the corresponding \fIset[re][ug]\fR\f(BIid()\fR routine. \f(CW$(\fR +and \f(CW$)\fR can be swapped only on machines supporting \f(CWsetregid()\fR. +.Sp +Mnemonic: parentheses are used to \fIgroup\fR things. The effective gid +is the group that's \fIright\fR for you, if you're running setgid. +.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 +.IX Xref "$< $UID $REAL_USER_ID" +.PD +The real uid of this process. You can change both the real uid and the +effective uid at the same time by using \f(CWPOSIX::setuid()\fR. Since +changes to \f(CW$<\fR require a system call, check \f(CW$!\fR after a change +attempt to detect any possible errors. +.Sp +Mnemonic: it's the uid you came \fIfrom\fR, if you're running setuid. +.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 +.IX Xref "$> $EUID $EFFECTIVE_USER_ID" +.PD +The effective uid of this process. For example: +.Sp +.Vb 2 +\& $< = $>; # set real to effective uid +\& ($<,$>) = ($>,$<); # swap real and effective uids +.Ve +.Sp +You can change both the effective uid and the real uid at the same +time by using \f(CWPOSIX::setuid()\fR. Changes to \f(CW$>\fR require a check +to \f(CW$!\fR to detect any possible errors after an attempted change. +.Sp +\&\f(CW$<\fR and \f(CW$>\fR can be swapped only on machines +supporting \f(CWsetreuid()\fR. +.Sp +Mnemonic: it's the uid you went \fIto\fR, if you're running setuid. +.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 +.IX Xref "$; $SUBSEP SUBSCRIPT_SEPARATOR" +.PD +The subscript separator for multidimensional array emulation. If you +refer to a hash element as +.Sp +.Vb 1 +\& $foo{$x,$y,$z} +.Ve +.Sp +it really means +.Sp +.Vb 1 +\& $foo{join($;, $x, $y, $z)} +.Ve +.Sp +But don't put +.Sp +.Vb 1 +\& @foo{$x,$y,$z} # a slice\-\-note the @ +.Ve +.Sp +which means +.Sp +.Vb 1 +\& ($foo{$x},$foo{$y},$foo{$z}) +.Ve +.Sp +Default is "\e034", the same as SUBSEP in \fBawk\fR. If your keys contain +binary data there might not be any safe value for \f(CW$;\fR. +.Sp +Consider using "real" multidimensional arrays as described +in perllol. +.Sp +Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon. +.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 Xref "$a $b" +.IX Item "$b" +.PD +Special package variables when using \f(CWsort()\fR, see "sort" in perlfunc. +Because of this specialness \f(CW$a\fR and \f(CW$b\fR don't need to be declared +(using \f(CW\*(C`use vars\*(C'\fR, or \f(CWour()\fR) even when using the \f(CW\*(C`strict \*(Aqvars\*(Aq\*(C'\fR +pragma. Don't lexicalize them with \f(CW\*(C`my $a\*(C'\fR or \f(CW\*(C`my $b\*(C'\fR if you want to +be able to use them in the \f(CWsort()\fR comparison block or function. +.ie n .IP %ENV 8 +.el .IP \f(CW%ENV\fR 8 +.IX Xref "%ENV" +.IX Item "%ENV" +The hash \f(CW%ENV\fR contains your current environment. Setting a +value in \f(CW\*(C`ENV\*(C'\fR changes the environment for any child processes +you subsequently \f(CWfork()\fR off. +.Sp +As of v5.18.0, both keys and values stored in \f(CW%ENV\fR are stringified. +.Sp +.Vb 7 +\& my $foo = 1; +\& $ENV{\*(Aqbar\*(Aq} = \e$foo; +\& if( ref $ENV{\*(Aqbar\*(Aq} ) { +\& say "Pre 5.18.0 Behaviour"; +\& } else { +\& say "Post 5.18.0 Behaviour"; +\& } +.Ve +.Sp +Previously, only child processes received stringified values: +.Sp +.Vb 2 +\& my $foo = 1; +\& $ENV{\*(Aqbar\*(Aq} = \e$foo; +\& +\& # Always printed \*(Aqnon ref\*(Aq +\& system($^X, \*(Aq\-e\*(Aq, +\& q/print ( ref $ENV{\*(Aqbar\*(Aq} ? \*(Aqref\*(Aq : \*(Aqnon ref\*(Aq ) /); +.Ve +.Sp +This happens because you can't really share arbitrary data structures with +foreign processes. +.ie n .IP $OLD_PERL_VERSION 8 +.el .IP \f(CW$OLD_PERL_VERSION\fR 8 +.IX Item "$OLD_PERL_VERSION" +.PD 0 +.IP $] 8 +.IX Xref "$] $OLD_PERL_VERSION" +.PD +The revision, version, and subversion of the Perl interpreter, represented +as a decimal of the form 5.XXXYYY, where XXX is the version / 1e3 and YYY +is the subversion / 1e6. For example, Perl v5.10.1 would be "5.010001". +.Sp +This variable can be used to determine whether the Perl interpreter +executing a script is in the right range of versions: +.Sp +.Vb 1 +\& warn "No PerlIO!\en" if "$]" < 5.008; +.Ve +.Sp +When comparing \f(CW$]\fR, numeric comparison operators should be used, but the +variable should be stringified first to avoid issues where its original +numeric value is inaccurate. +.Sp +See also the documentation of \f(CW\*(C`use VERSION\*(C'\fR and +\&\f(CW\*(C`require VERSION\*(C'\fR for a convenient way to fail if the running Perl +interpreter is too old. +.Sp +See "$^V" for a representation of the Perl version as a version +object, which allows more flexible string comparisons. +.Sp +The main advantage of \f(CW$]\fR over \f(CW$^V\fR is that it works the same on any +version of Perl. The disadvantages are that it can't easily be compared +to versions in other formats (e.g. literal v\-strings, "v1.2.3" or +version objects) and numeric comparisons are subject to the binary +floating point representation; it's good for numeric literal version +checks and bad for comparing to a variable that hasn't been +sanity-checked. +.Sp +The \f(CW$OLD_PERL_VERSION\fR form was added in Perl v5.20.0 for historical +reasons but its use is discouraged. (If your reason to use \f(CW$]\fR is to +run code on old perls then referring to it as \f(CW$OLD_PERL_VERSION\fR would +be self-defeating.) +.Sp +Mnemonic: Is this version of perl in the right bracket? +.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 Xref "$^F $SYSTEM_FD_MAX" +.IX Item "$^F" +.PD +The maximum system file descriptor, ordinarily 2. System file +descriptors are passed to \f(CWexec()\fRed processes, while higher file +descriptors are not. Also, during an +\&\f(CWopen()\fR, system file descriptors are +preserved even if the \f(CWopen()\fR fails (ordinary file descriptors are +closed before the \f(CWopen()\fR is attempted). The close-on-exec +status of a file descriptor will be decided according to the value of +\&\f(CW$^F\fR when the corresponding file, pipe, or socket was opened, not the +time of the \f(CWexec()\fR. +.ie n .IP @F 8 +.el .IP \f(CW@F\fR 8 +.IX Xref "@F" +.IX Item "@F" +The array \f(CW@F\fR contains the fields of each line read in when autosplit +mode is turned on. See perlrun for the \fB\-a\fR switch. This +array is package-specific, and must be declared or given a full package +name if not in package main when running under \f(CW\*(C`strict \*(Aqvars\*(Aq\*(C'\fR. +.ie n .IP @INC 8 +.el .IP \f(CW@INC\fR 8 +.IX Xref "@INC" +.IX Item "@INC" +The array \f(CW@INC\fR contains the list of places that the \f(CW\*(C`do EXPR\*(C'\fR, +\&\f(CW\*(C`require\*(C'\fR, or \f(CW\*(C`use\*(C'\fR constructs look for their library files. It +initially consists of the arguments to any \fB\-I\fR command-line +switches, followed by the default Perl library, probably +\&\fI/usr/local/lib/perl\fR. +Prior to Perl 5.26, \f(CW\*(C`.\*(C'\fR \-which represents the current directory, was included +in \f(CW@INC\fR; it has been removed. This change in behavior is documented +in \f(CW\*(C`PERL_USE_UNSAFE_INC\*(C'\fR and it is +not recommended that \f(CW\*(C`.\*(C'\fR be re-added to \f(CW@INC\fR. +If you need to modify \f(CW@INC\fR at runtime, you should use the \f(CW\*(C`use lib\*(C'\fR pragma +to get the machine-dependent library properly loaded as well: +.Sp +.Vb 2 +\& use lib \*(Aq/mypath/libdir/\*(Aq; +\& use SomeMod; +.Ve +.Sp +You can also insert hooks into the file inclusion system by putting Perl +code directly into \f(CW@INC\fR. Those hooks may be subroutine references, +array references or blessed objects. See "require" in perlfunc for details. +.ie n .IP %INC 8 +.el .IP \f(CW%INC\fR 8 +.IX Xref "%INC" +.IX Item "%INC" +The hash \f(CW%INC\fR contains entries for each filename included via the +\&\f(CW\*(C`do\*(C'\fR, \f(CW\*(C`require\*(C'\fR, or \f(CW\*(C`use\*(C'\fR operators. The key is the filename +you specified (with module names converted to pathnames), and the +value is the location of the file found. The \f(CW\*(C`require\*(C'\fR +operator uses this hash to determine whether a particular file has +already been included. +.Sp +If the file was loaded via a hook (e.g. a subroutine reference, see +"require" in perlfunc for a description of these hooks), this hook is +by default inserted into \f(CW%INC\fR in place of a filename. Note, however, +that the hook may have set the \f(CW%INC\fR entry by itself to provide some more +specific info. +.ie n .IP $INC 8 +.el .IP \f(CW$INC\fR 8 +.IX Xref "$INC" +.IX Item "$INC" +As of 5.37.7 when an \f(CW@INC\fR hook is executed the index of the \f(CW@INC\fR +array that holds the hook will be localized into the \f(CW$INC\fR variable. +When the hook returns the integer successor of its value will be used to +determine the next index in \f(CW@INC\fR that will be checked, thus if it is +set to \-1 (or \f(CW\*(C`undef\*(C'\fR) the traversal over the \f(CW@INC\fR array will be +restarted from its beginning. +.Sp +Normally traversal through the \f(CW@INC\fR array is from beginning to end +(\f(CW\*(C`0 .. $#INC\*(C'\fR), and if the \f(CW@INC\fR array is modified by the hook the +iterator may be left in a state where newly added entries are skipped. +Changing this value allows an \f(CW@INC\fR hook to rewrite the \f(CW@INC\fR array +and tell Perl where to continue afterwards. See "require" in perlfunc for +details on \f(CW@INC\fR hooks. +.ie n .IP $INPLACE_EDIT 8 +.el .IP \f(CW$INPLACE_EDIT\fR 8 +.IX Item "$INPLACE_EDIT" +.PD 0 +.IP $^I 8 +.IX Xref "$^I $INPLACE_EDIT" +.IX Item "$^I" +.PD +The current value of the inplace-edit extension. Use \f(CW\*(C`undef\*(C'\fR to disable +inplace editing. +.Sp +Mnemonic: value of \fB\-i\fR switch. +.ie n .IP @ISA 8 +.el .IP \f(CW@ISA\fR 8 +.IX Xref "@ISA" +.IX Item "@ISA" +Each package contains a special array called \f(CW@ISA\fR which contains a list +of that class's parent classes, if any. This array is simply a list of +scalars, each of which is a string that corresponds to a package name. The +array is examined when Perl does method resolution, which is covered in +perlobj. +.Sp +To load packages while adding them to \f(CW@ISA\fR, see the parent pragma. The +discouraged base pragma does this as well, but should not be used except +when compatibility with the discouraged fields pragma is required. +.IP $^M 8 +.IX Xref "$^M" +.IX Item "$^M" +By default, running out of memory is an untrappable, fatal error. +However, if suitably built, Perl can use the contents of \f(CW$^M\fR +as an emergency memory pool after \f(CWdie()\fRing. Suppose that your Perl +were compiled with \f(CW\*(C`\-DPERL_EMERGENCY_SBRK\*(C'\fR and used Perl's malloc. +Then +.Sp +.Vb 1 +\& $^M = \*(Aqa\*(Aq x (1 << 16); +.Ve +.Sp +would allocate a 64K buffer for use in an emergency. See the +INSTALL file in the Perl distribution for information on how to +add custom C compilation flags when compiling perl. To discourage casual +use of this advanced feature, there is no English long name for +this variable. +.Sp +This variable was added in Perl 5.004. +.IP ${^MAX_NESTED_EVAL_BEGIN_BLOCKS} 8 +.IX Item "${^MAX_NESTED_EVAL_BEGIN_BLOCKS}" +This variable determines the maximum number \f(CW\*(C`eval EXPR\*(C'\fR/\f(CW\*(C`BEGIN\*(C'\fR or +\&\f(CW\*(C`require\*(C'\fR/\f(CW\*(C`BEGIN\*(C'\fR block nesting that is allowed. This means it also +controls the maximum nesting of \f(CW\*(C`use\*(C'\fR statements as well. +.Sp +The default of 1000 should be sufficiently large for normal working +purposes, and if you must raise it then you should be conservative +with your choice or you may encounter segfaults from exhaustion of +the C stack. It seems unlikely that real code has a use depth above +1000, but we have left this configurable just in case. +.Sp +When set to \f(CW0\fR then \f(CW\*(C`BEGIN\*(C'\fR blocks inside of \f(CW\*(C`eval EXPR\*(C'\fR or +\&\f(CW\*(C`require EXPR\*(C'\fR are forbidden entirely and will trigger an exception +which will terminate the compilation and in the case of \f(CW\*(C`require\*(C'\fR +will throw an exception, or in the case of \f(CW\*(C`eval\*(C'\fR return the error in +\&\f(CW$@\fR as usual. +.Sp +Consider the code +.Sp +.Vb 1 +\& perl \-le\*(Aqsub f { eval "BEGIN { f() }"; } f()\*(Aq +.Ve +.Sp +each invocation of \f(CWf()\fR will consume considerable C stack, and this +variable is used to cause code like this to die instead of exhausting +the C stack and triggering a segfault. Needless to say code like this is +unusual, it is unlikely you will actually need to raise the setting. +However it may be useful to set it to 0 for a limited time period to +prevent BEGIN{} blocks from being executed during an \f(CW\*(C`eval EXPR\*(C'\fR. +.Sp +Note that setting this to 1 would NOT affect code like this: +.Sp +.Vb 1 +\& BEGIN { $n += 1; BEGIN { $n += 2; BEGIN { $n += 4 } } } +.Ve +.Sp +The reason is that BEGIN blocks are executed immediately after they are +completed, thus the innermost will execute before the ones which contain +it have even finished compiling, and the depth will not go above 1. In +fact the above code is equivalent to +.Sp +.Vb 3 +\& BEGIN { $n+=4 } +\& BEGIN { $n+=2 } +\& BEGIN { $n+=1 } +.Ve +.Sp +which makes it obvious why a ${^MAX_EVAL_BEGIN_DEPTH} of 1 would not +block this code. +.Sp +Only \f(CW\*(C`BEGIN\*(C'\fR's executed inside of an \f(CW\*(C`eval\*(C'\fR or \f(CW\*(C`require\*(C'\fR (possibly via +\&\f(CW\*(C`use\*(C'\fR) are affected. +.ie n .IP $OSNAME 8 +.el .IP \f(CW$OSNAME\fR 8 +.IX Item "$OSNAME" +.PD 0 +.IP $^O 8 +.IX Xref "$^O $OSNAME" +.IX Item "$^O" +.PD +The name of the operating system under which this copy of Perl was +built, as determined during the configuration process. For examples +see "PLATFORMS" in perlport. +.Sp +The value is identical to \f(CW$Config{\*(Aqosname\*(Aq}\fR. See also Config +and the \fB\-V\fR command-line switch documented in perlrun. +.Sp +In Windows platforms, \f(CW$^O\fR is not very helpful: since it is always +\&\f(CW\*(C`MSWin32\*(C'\fR, it doesn't tell the difference between +95/98/ME/NT/2000/XP/CE/.NET. Use \f(CWWin32::GetOSName()\fR or +\&\fBWin32::GetOSVersion()\fR (see Win32 and perlport) to distinguish +between the variants. +.Sp +This variable was added in Perl 5.003. +.ie n .IP %SIG 8 +.el .IP \f(CW%SIG\fR 8 +.IX Xref "%SIG" +.IX Item "%SIG" +The hash \f(CW%SIG\fR contains signal handlers for signals. For example: +.Sp +.Vb 6 +\& sub handler { # 1st argument is signal name +\& my($sig) = @_; +\& print "Caught a SIG$sig\-\-shutting down\en"; +\& close(LOG); +\& exit(0); +\& } +\& +\& $SIG{\*(AqINT\*(Aq} = \e&handler; +\& $SIG{\*(AqQUIT\*(Aq} = \e&handler; +\& ... +\& $SIG{\*(AqINT\*(Aq} = \*(AqDEFAULT\*(Aq; # restore default action +\& $SIG{\*(AqQUIT\*(Aq} = \*(AqIGNORE\*(Aq; # ignore SIGQUIT +.Ve +.Sp +Using a value of \f(CW\*(AqIGNORE\*(Aq\fR usually has the effect of ignoring the +signal, except for the \f(CW\*(C`CHLD\*(C'\fR signal. See perlipc for more about +this special case. Using an empty string or \f(CW\*(C`undef\*(C'\fR as the value has +the same effect as \f(CW\*(AqDEFAULT\*(Aq\fR. +.Sp +Here are some other examples: +.Sp +.Vb 7 +\& $SIG{"PIPE"} = "Plumber"; # assumes main::Plumber (not +\& # recommended) +\& $SIG{"PIPE"} = \e&Plumber; # just fine; assume current +\& # Plumber +\& $SIG{"PIPE"} = *Plumber; # somewhat esoteric +\& $SIG{"PIPE"} = Plumber(); # oops, what did Plumber() +\& # return?? +.Ve +.Sp +Be sure not to use a bareword as the name of a signal handler, +lest you inadvertently call it. +.Sp +Using a string that doesn't correspond to any existing function or a +glob that doesn't contain a code slot is equivalent to \f(CW\*(AqIGNORE\*(Aq\fR, +but a warning is emitted when the handler is being called (the warning +is not emitted for the internal hooks described below). +.Sp +If your system has the \f(CWsigaction()\fR function then signal handlers +are installed using it. This means you get reliable signal handling. +.Sp +The default delivery policy of signals changed in Perl v5.8.0 from +immediate (also known as "unsafe") to deferred, also known as "safe +signals". See perlipc for more information. +.Sp +Certain internal hooks can be also set using the \f(CW%SIG\fR hash. The +routine indicated by \f(CW$SIG{_\|_WARN_\|_}\fR is called when a warning +message is about to be printed. The warning message is passed as the +first argument. The presence of a \f(CW\*(C`_\|_WARN_\|_\*(C'\fR hook causes the +ordinary printing of warnings to \f(CW\*(C`STDERR\*(C'\fR to be suppressed. You can +use this to save warnings in a variable, or turn warnings into fatal +errors, like this: +.Sp +.Vb 2 +\& local $SIG{_\|_WARN_\|_} = sub { die $_[0] }; +\& eval $proggie; +.Ve +.Sp +As the \f(CW\*(AqIGNORE\*(Aq\fR hook is not supported by \f(CW\*(C`_\|_WARN_\|_\*(C'\fR, its effect is +the same as using \f(CW\*(AqDEFAULT\*(Aq\fR. You can disable warnings using the +empty subroutine: +.Sp +.Vb 1 +\& local $SIG{_\|_WARN_\|_} = sub {}; +.Ve +.Sp +The routine indicated by \f(CW$SIG{_\|_DIE_\|_}\fR is called when a fatal +exception is about to be thrown. The error message is passed as the +first argument. When a \f(CW\*(C`_\|_DIE_\|_\*(C'\fR hook routine returns, the exception +processing continues as it would have in the absence of the hook, +unless the hook routine itself exits via a \f(CW\*(C`goto &sub\*(C'\fR, a loop exit, +or a \f(CWdie()\fR. The \f(CW\*(C`_\|_DIE_\|_\*(C'\fR handler is explicitly disabled during +the call, so that you can die from a \f(CW\*(C`_\|_DIE_\|_\*(C'\fR handler. Similarly +for \f(CW\*(C`_\|_WARN_\|_\*(C'\fR. +.Sp +The \f(CW$SIG{_\|_DIE_\|_}\fR hook is called even inside an \f(CWeval()\fR. It was +never intended to happen this way, but an implementation glitch made +this possible. This used to be deprecated, as it allowed strange action +at a distance like rewriting a pending exception in \f(CW$@\fR. Plans to +rectify this have been scrapped, as users found that rewriting a +pending exception is actually a useful feature, and not a bug. +.Sp +The \f(CW$SIG{_\|_DIE_\|_}\fR doesn't support \f(CW\*(AqIGNORE\*(Aq\fR; it has the same +effect as \f(CW\*(AqDEFAULT\*(Aq\fR. +.Sp +\&\f(CW\*(C`_\|_DIE_\|_\*(C'\fR/\f(CW\*(C`_\|_WARN_\|_\*(C'\fR handlers are very special in one respect: they +may be called to report (probable) errors found by the parser. In such +a case the parser may be in inconsistent state, so any attempt to +evaluate Perl code from such a handler will probably result in a +segfault. This means that warnings or errors that result from parsing +Perl should be used with extreme caution, like this: +.Sp +.Vb 5 +\& require Carp if defined $^S; +\& Carp::confess("Something wrong") if defined &Carp::confess; +\& die "Something wrong, but could not load Carp to give " +\& . "backtrace...\en\et" +\& . "To see backtrace try starting Perl with \-MCarp switch"; +.Ve +.Sp +Here the first line will load \f(CW\*(C`Carp\*(C'\fR \fIunless\fR it is the parser who +called the handler. The second line will print backtrace and die if +\&\f(CW\*(C`Carp\*(C'\fR was available. The third line will be executed only if \f(CW\*(C`Carp\*(C'\fR was +not available. +.Sp +Having to even think about the \f(CW$^S\fR variable in your exception +handlers is simply wrong. \f(CW$SIG{_\|_DIE_\|_}\fR as currently implemented +invites grievous and difficult to track down errors. Avoid it +and use an \f(CW\*(C`END{}\*(C'\fR or CORE::GLOBAL::die override instead. +.Sp +See "die" in perlfunc, "warn" in perlfunc, "eval" in perlfunc, and +warnings for additional information. +.IP %{^HOOK} 8 +.IX Xref "%{^HOOK}" +.IX Item "%{^HOOK}" +This hash contains coderefs which are called when various perl keywords +which are hard or impossible to wrap are called. The keys of this hash +are named after the keyword that is being hooked, followed by two +underbars and then a phase term; either "before" or "after". +.Sp +Perl will throw an error if you attempt modify a key which is not +documented to exist, or if you attempt to store anything other than a +code reference or undef in the hash. If you wish to use an object to +implement a hook you can use currying to embed the object into an +anonymous code reference. +.Sp +Currently there is only one keyword which can be hooked, \f(CW\*(C`require\*(C'\fR, but +it is expected that in future releases there will be additional keywords +with hook support. +.RS 8 +.IP require_\|_before 4 +.IX Item "require__before" +The routine indicated by \f(CW\*(C`${^HOOK}{require_\|_before}\*(C'\fR is called by +\&\f(CW\*(C`require\*(C'\fR \fBbefore\fR it checks \f(CW%INC\fR, looks up \f(CW@INC\fR, calls INC +hooks, or compiles any code. It is called with a single argument, the +filename for the item being required (package names are converted to +paths). It may alter this filename to change what file is loaded. If +the hook dies during execution then it will block the require from executing. +.Sp +In order to make it easy to perform an action with shared state both +before and after the require keyword was executed the \f(CW\*(C`require_\|_before\*(C'\fR +hook may return a "post-action" coderef which will in turn be executed when +the \f(CW\*(C`require\*(C'\fR completes. This coderef will be executed regardless as to +whether the require completed succesfully or threw an exception. It will +be called with the filename that was required. You can check \f(CW%INC\fR to +determine if the require was successful. Any other return from the +\&\f(CW\*(C`require_\|_before\*(C'\fR hook will be silently ignored. +.Sp +\&\f(CW\*(C`require_\|_before\*(C'\fR hooks are called in FIFO order, and if the hook +returns a code reference those code references will be called in FILO +order. In other words if A requires B requires C, then +\&\f(CW\*(C`require_\|_before\*(C'\fR will be called first for A, then B and then C, and +the post-action code reference will executed first for C, then B and +then finally A. +.Sp +Well behaved code should ensure that when setting up a +\&\f(CW\*(C`require_\|_before\*(C'\fR hook that any prior installed hook will be called, +and that their return value, if a code reference, will be called as +well. See "require" in perlfunc for an example implementation. +.IP require_\|_after 4 +.IX Item "require__after" +The routine indicated by \f(CW\*(C`${^HOOK}{require_\|_after}\*(C'\fR is called by +\&\f(CW\*(C`require\*(C'\fR \fBafter\fR the require completes. It is called with a single +argument, the filename for the item being required (package names are +converted to paths). It is executed when the \f(CW\*(C`require\*(C'\fR completes, +either via exception or via completion of the require statement, and you +can check \f(CW%INC\fR to determine if the require was successful. +.Sp +The \f(CW\*(C`require_\|_after\*(C'\fR hook is called for each required file in FILO +order. In other words if A requires B requires C, then \f(CW\*(C`require_\|_after\*(C'\fR +will be called first for C, then B and then A. +.RE +.RS 8 +.RE +.ie n .IP $BASETIME 8 +.el .IP \f(CW$BASETIME\fR 8 +.IX Item "$BASETIME" +.PD 0 +.IP $^T 8 +.IX Xref "$^T $BASETIME" +.IX Item "$^T" +.PD +The time at which the program began running, in seconds since the +epoch (beginning of 1970). The values returned by the \fB\-M\fR, \fB\-A\fR, +and \fB\-C\fR filetests are based on this value. +.ie n .IP $PERL_VERSION 8 +.el .IP \f(CW$PERL_VERSION\fR 8 +.IX Item "$PERL_VERSION" +.PD 0 +.IP $^V 8 +.IX Xref "$^V $PERL_VERSION" +.IX Item "$^V" +.PD +The revision, version, and subversion of the Perl interpreter, +represented as a version object. +.Sp +This variable first appeared in perl v5.6.0; earlier versions of perl +will see an undefined value. Before perl v5.10.0 \f(CW$^V\fR was represented +as a v\-string rather than a version object. +.Sp +\&\f(CW$^V\fR can be used to determine whether the Perl interpreter executing +a script is in the right range of versions. For example: +.Sp +.Vb 1 +\& warn "Hashes not randomized!\en" if !$^V or $^V lt v5.8.1 +.Ve +.Sp +While version objects overload stringification, to portably convert +\&\f(CW$^V\fR into its string representation, use \f(CWsprintf()\fR's \f(CW"%vd"\fR +conversion, which works for both v\-strings or version objects: +.Sp +.Vb 1 +\& printf "version is v%vd\en", $^V; # Perl\*(Aqs version +.Ve +.Sp +See the documentation of \f(CW\*(C`use VERSION\*(C'\fR and \f(CW\*(C`require VERSION\*(C'\fR +for a convenient way to fail if the running Perl interpreter is too old. +.Sp +See also \f(CW"$]"\fR for a decimal representation of the Perl version. +.Sp +The main advantage of \f(CW$^V\fR over \f(CW$]\fR is that, for Perl v5.10.0 or +later, it overloads operators, allowing easy comparison against other +version representations (e.g. decimal, literal v\-string, "v1.2.3", or +objects). The disadvantage is that prior to v5.10.0, it was only a +literal v\-string, which can't be easily printed or compared, whereas +the behavior of \f(CW$]\fR is unchanged on all versions of Perl. +.Sp +Mnemonic: use ^V for a version object. +.ie n .IP $EXECUTABLE_NAME 8 +.el .IP \f(CW$EXECUTABLE_NAME\fR 8 +.IX Item "$EXECUTABLE_NAME" +.PD 0 +.IP $^X 8 +.IX Xref "$^X $EXECUTABLE_NAME" +.IX Item "$^X" +.PD +The name used to execute the current copy of Perl, from C's +\&\f(CW\*(C`argv[0]\*(C'\fR or (where supported) \fI/proc/self/exe\fR. +.Sp +Depending on the host operating system, the value of \f(CW$^X\fR may be +a relative or absolute pathname of the perl program file, or may +be the string used to invoke perl but not the pathname of the +perl program file. Also, most operating systems permit invoking +programs that are not in the PATH environment variable, so there +is no guarantee that the value of \f(CW$^X\fR is in PATH. For VMS, the +value may or may not include a version number. +.Sp +You usually can use the value of \f(CW$^X\fR to re-invoke an independent +copy of the same perl that is currently running, e.g., +.Sp +.Vb 1 +\& @first_run = \`$^X \-le "print int rand 100 for 1..100"\`; +.Ve +.Sp +But recall that not all operating systems support forking or +capturing of the output of commands, so this complex statement +may not be portable. +.Sp +It is not safe to use the value of \f(CW$^X\fR as a path name of a file, +as some operating systems that have a mandatory suffix on +executable files do not require use of the suffix when invoking +a command. To convert the value of \f(CW$^X\fR to a path name, use the +following statements: +.Sp +.Vb 7 +\& # Build up a set of file names (not command names). +\& use Config; +\& my $this_perl = $^X; +\& if ($^O ne \*(AqVMS\*(Aq) { +\& $this_perl .= $Config{_exe} +\& unless $this_perl =~ m/$Config{_exe}$/i; +\& } +.Ve +.Sp +Because many operating systems permit anyone with read access to +the Perl program file to make a copy of it, patch the copy, and +then execute the copy, the security-conscious Perl programmer +should take care to invoke the installed copy of perl, not the +copy referenced by \f(CW$^X\fR. The following statements accomplish +this goal, and produce a pathname that can be invoked as a +command or referenced as a file. +.Sp +.Vb 6 +\& use Config; +\& my $secure_perl_path = $Config{perlpath}; +\& if ($^O ne \*(AqVMS\*(Aq) { +\& $secure_perl_path .= $Config{_exe} +\& unless $secure_perl_path =~ m/$Config{_exe}$/i; +\& } +.Ve +.SS "Variables related to regular expressions" +.IX Subsection "Variables related to regular expressions" +Most of the special variables related to regular expressions are side +effects. Perl sets these variables when it has completed a match +successfully, so you should check the match result before using them. +For instance: +.PP +.Vb 3 +\& if( /P(A)TT(ER)N/ ) { +\& print "I found $1 and $2\en"; +\& } +.Ve +.PP +These variables are read-only and behave similarly to a dynamically +scoped variable, with only a few exceptions which are explicitly +documented as behaving otherwise. See the following section for more +details. +.PP +\fIScoping Rules of Regex Variables\fR +.IX Subsection "Scoping Rules of Regex Variables" +.PP +Regular expression variables allow the programmer to access the state of +the most recent \fIsuccessful\fR regex match in the current dynamic scope. +.PP +The variables themselves are global and unscoped, but the data they +access is scoped similarly to dynamically scoped variables, in that +every successful match behaves as though it localizes a global state +object to the current block or file scope. +(See "Compound Statements" in perlsyn for more details on dynamic +scoping and the \f(CW\*(C`local\*(C'\fR keyword.) +.PP +A \fIsuccessful match\fR includes any successful match performed by the +search and replace operator \f(CW\*(C`s///\*(C'\fR as well as those performed by the +\&\f(CW\*(C`m//\*(C'\fR operator. +.PP +Consider the following code: +.PP +.Vb 7 +\& my @state; +\& sub matchit { +\& push @state, $1; # pushes "baz" +\& my $str = shift; +\& $str =~ /(zat)/; # matches "zat" +\& push @state, $1; # pushes "zat" +\& } +\& +\& { +\& $str = "foo bar baz blorp zat"; +\& $str =~ /(foo)/; # matches "foo" +\& push @state, $1; # pushes "foo" +\& { +\& $str =~ /(pizza)/; # does NOT match +\& push @state, $1; # pushes "foo" +\& $str =~ /(bar)/; # matches "bar" +\& push @state, $1; # pushes "bar" +\& $str =~ /(baz)/; # matches "baz" +\& matchit($str); # see above +\& push @state, $1; # pushes "baz" +\& } +\& $str =~ s/noodles/rice/; # does NOT match +\& push @state, $1; # pushes "foo" +\& $str =~ s/(blorp)/zwoop/; # matches "blorp" +\& push @state, $1; # pushes "blorp" +\& } +\& # the following prints "foo, foo, bar, baz, zat, baz, foo, blorp" +\& print join ",", @state; +.Ve +.PP +Notice that each successful match in the exact same scope overrides the +match context of the previous successful match, but that unsuccessful +matches do not. Also note that in an inner nested scope the previous +state from an outer dynamic scope persists until it has been overriden +by another successful match, but that when the inner nested scope exits +whatever match context was in effect before the inner successful match +is restored when the scope concludes. +.PP +It is a known issue that \f(CW\*(C`goto LABEL\*(C'\fR may interact poorly with the +dynamically scoped match context. This may not be fixable, and is +considered to be one of many good reasons to avoid \f(CW\*(C`goto LABEL\*(C'\fR. +.PP +\fIPerformance issues\fR +.IX Subsection "Performance issues" +.PP +Traditionally in Perl, any use of any of the three variables \f(CW\*(C`$\`\*(C'\fR, \f(CW$&\fR +or \f(CW\*(C`$\*(Aq\*(C'\fR (or their \f(CW\*(C`use English\*(C'\fR equivalents) anywhere in the code, caused +all subsequent successful pattern matches to make a copy of the matched +string, in case the code might subsequently access one of those variables. +This imposed a considerable performance penalty across the whole program, +so generally the use of these variables has been discouraged. +.PP +In Perl 5.6.0 the \f(CW\*(C`@\-\*(C'\fR and \f(CW\*(C`@+\*(C'\fR dynamic arrays were introduced that +supply the indices of successful matches. So you could for example do +this: +.PP +.Vb 1 +\& $str =~ /pattern/; +\& +\& print $\`, $&, $\*(Aq; # bad: performance hit +\& +\& print # good: no performance hit +\& substr($str, 0, $\-[0]), +\& substr($str, $\-[0], $+[0]\-$\-[0]), +\& substr($str, $+[0]); +.Ve +.PP +In Perl 5.10.0 the \f(CW\*(C`/p\*(C'\fR match operator flag and the \f(CW\*(C`${^PREMATCH}\*(C'\fR, +\&\f(CW\*(C`${^MATCH}\*(C'\fR, and \f(CW\*(C`${^POSTMATCH}\*(C'\fR variables were introduced, that allowed +you to suffer the penalties only on patterns marked with \f(CW\*(C`/p\*(C'\fR. +.PP +In Perl 5.18.0 onwards, perl started noting the presence of each of the +three variables separately, and only copied that part of the string +required; so in +.PP +.Vb 1 +\& $\`; $&; "abcdefgh" =~ /d/ +.Ve +.PP +perl would only copy the "abcd" part of the string. That could make a big +difference in something like +.PP +.Vb 3 +\& $str = \*(Aqx\*(Aq x 1_000_000; +\& $&; # whoops +\& $str =~ /x/g # one char copied a million times, not a million chars +.Ve +.PP +In Perl 5.20.0 a new copy-on-write system was enabled by default, which +finally fixes most of the performance issues with these three variables, and +makes them safe to use anywhere. +.PP +The \f(CW\*(C`Devel::NYTProf\*(C'\fR and \f(CW\*(C`Devel::FindAmpersand\*(C'\fR modules can help you +find uses of these problematic match variables in your code. +.ie n .IP "$<\fIdigits\fR> ($1, $2, ...)" 8 +.el .IP "$<\fIdigits\fR> ($1, \f(CW$2\fR, ...)" 8 +.IX Xref "$1 $2 $3 $\\f(ISdigits\\f(IE" +.IX Item "$<digits> ($1, $2, ...)" +Contains the subpattern from the corresponding set of capturing +parentheses from the last successful pattern match in the current +dynamic scope. (See "Scoping Rules of Regex Variables".) +.Sp +Note there is a distinction between a capture buffer which matches +the empty string a capture buffer which is optional. Eg, \f(CW\*(C`(x?)\*(C'\fR and +\&\f(CW\*(C`(x)?\*(C'\fR The latter may be undef, the former not. +.Sp +These variables are read-only. +.Sp +Mnemonic: like \edigits. +.IP @{^CAPTURE} 8 +.IX Xref "@{^CAPTURE} @^CAPTURE" +.IX Item "@{^CAPTURE}" +An array which exposes the contents of the capture buffers, if any, of +the last successful pattern match, not counting patterns matched +in nested blocks that have been exited already. +.Sp +Note that the 0 index of @{^CAPTURE} is equivalent to \f(CW$1\fR, the 1 index +is equivalent to \f(CW$2\fR, etc. +.Sp +.Vb 3 +\& if ("foal"=~/(.)(.)(.)(.)/) { +\& print join "\-", @{^CAPTURE}; +\& } +.Ve +.Sp +should output "f\-o-a-l". +.Sp +See also "$<\fIdigits\fR> ($1, \f(CW$2\fR, ...)", "%{^CAPTURE}" and +"%{^CAPTURE_ALL}". +.Sp +Note that unlike most other regex magic variables there is no single +letter equivalent to \f(CW\*(C`@{^CAPTURE}\*(C'\fR. Also be aware that when +interpolating subscripts of this array you \fBmust\fR use the demarcated +variable form, for instance +.Sp +.Vb 1 +\& print "${^CAPTURE[0]}" +.Ve +.Sp +see "Demarcated variable names using braces" in perldata for more +information on this form and its uses. +.Sp +This variable was added in 5.25.7 +.ie n .IP $MATCH 8 +.el .IP \f(CW$MATCH\fR 8 +.IX Item "$MATCH" +.PD 0 +.IP $& 8 +.IX Xref "$& $MATCH" +.PD +The string matched by the last successful pattern match. +(See "Scoping Rules of Regex Variables".) +.Sp +See "Performance issues" above for the serious performance implications +of using this variable (even once) in your code. +.Sp +This variable is read-only, and its value is dynamically scoped. +.Sp +Mnemonic: like \f(CW\*(C`&\*(C'\fR in some editors. +.IP ${^MATCH} 8 +.IX Xref "${^MATCH}" +.IX Item "${^MATCH}" +It is only guaranteed to return a defined value when the pattern was +compiled or executed with the \f(CW\*(C`/p\*(C'\fR modifier. +.Sp +This is similar to \f(CW$&\fR (\f(CW$MATCH\fR) except that to use it you must +use the \f(CW\*(C`/p\*(C'\fR modifier when executing the pattern, and it does not incur +and performance penalty associated with that variable. +.Sp +See "Performance issues" above. +.Sp +This variable was added in Perl v5.10.0. +.Sp +This variable is read-only, and its value is dynamically scoped. +.ie n .IP $PREMATCH 8 +.el .IP \f(CW$PREMATCH\fR 8 +.IX Item "$PREMATCH" +.PD 0 +.IP $` 8 +.IX Xref "$` $PREMATCH" +.PD +The string preceding whatever was matched by the last successful +pattern match. (See "Scoping Rules of Regex Variables"). +.Sp +See "Performance issues" above for the serious performance implications +of using this variable (even once) in your code. +.Sp +This variable is read-only, and its value is dynamically scoped. +.Sp +Mnemonic: \f(CW\*(C`\`\*(C'\fR often precedes a quoted string. +.IP ${^PREMATCH} 8 +.IX Xref "${^PREMATCH}" +.IX Item "${^PREMATCH}" +It is only guaranteed to return a defined value when the pattern was +executed with the \f(CW\*(C`/p\*(C'\fR modifier. +.Sp +This is similar to \f(CW\*(C`$\`\*(C'\fR ($PREMATCH) except that to use it you must +use the \f(CW\*(C`/p\*(C'\fR modifier when executing the pattern, and it does not incur +and performance penalty associated with that variable. +.Sp +See "Performance issues" above. +.Sp +This variable was added in Perl v5.10.0. +.Sp +This variable is read-only, and its value is dynamically scoped. +.ie n .IP $POSTMATCH 8 +.el .IP \f(CW$POSTMATCH\fR 8 +.IX Item "$POSTMATCH" +.PD 0 +.IP $' 8 +.IX Xref "$' $POSTMATCH @-" +.PD +The string following whatever was matched by the last successful +pattern match. (See "Scoping Rules of Regex Variables"). Example: +.Sp +.Vb 3 +\& local $_ = \*(Aqabcdefghi\*(Aq; +\& /def/; +\& print "$\`:$&:$\*(Aq\en"; # prints abc:def:ghi +.Ve +.Sp +See "Performance issues" above for the serious performance implications +of using this variable (even once) in your code. +.Sp +This variable is read-only, and its value is dynamically scoped. +.Sp +Mnemonic: \f(CW\*(C`\*(Aq\*(C'\fR often follows a quoted string. +.IP ${^POSTMATCH} 8 +.IX Xref "${^POSTMATCH}" +.IX Item "${^POSTMATCH}" +It is only guaranteed to return a defined value when the pattern was +compiled or executed with the \f(CW\*(C`/p\*(C'\fR modifier. +.Sp +This is similar to \f(CW\*(C`$\*(Aq\*(C'\fR (\f(CW$POSTMATCH\fR) except that to use it you must +use the \f(CW\*(C`/p\*(C'\fR modifier when executing the pattern, and it does not incur +and performance penalty associated with that variable. +.Sp +See "Performance issues" above. +.Sp +This variable was added in Perl v5.10.0. +.Sp +This variable is read-only, and its value is dynamically scoped. +.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 +.IX Xref "$+ $LAST_PAREN_MATCH" +.PD +The text matched by the highest used capture group of the last +successful search pattern. (See "Scoping Rules of Regex Variables"). +It is logically equivalent to the highest +numbered capture variable (\f(CW$1\fR, \f(CW$2\fR, ...) which has a defined value. +.Sp +This is useful if you don't know which one of a set of alternative patterns +matched. For example: +.Sp +.Vb 1 +\& /Version: (.*)|Revision: (.*)/ && ($rev = $+); +.Ve +.Sp +This variable is read-only, and its value is dynamically scoped. +.Sp +Mnemonic: be positive and forward looking. +.ie n .IP $LAST_SUBMATCH_RESULT 8 +.el .IP \f(CW$LAST_SUBMATCH_RESULT\fR 8 +.IX Item "$LAST_SUBMATCH_RESULT" +.PD 0 +.IP $^N 8 +.IX Xref "$^N $LAST_SUBMATCH_RESULT" +.IX Item "$^N" +.PD +The text matched by the used group most-recently closed (i.e. the group +with the rightmost closing parenthesis) of the last successful match. +(See "Scoping Rules of Regex Variables"). +.Sp +This is subtly different from \f(CW$+\fR. For example in +.Sp +.Vb 1 +\& "ab" =~ /^((.)(.))$/ +.Ve +.Sp +we have +.Sp +.Vb 3 +\& $1,$^N have the value "ab" +\& $2 has the value "a" +\& $3,$+ have the value "b" +.Ve +.Sp +This is primarily used inside \f(CW\*(C`(?{...})\*(C'\fR blocks for examining text +recently matched. For example, to effectively capture text to a variable +(in addition to \f(CW$1\fR, \f(CW$2\fR, etc.), replace \f(CW\*(C`(...)\*(C'\fR with +.Sp +.Vb 1 +\& (?:(...)(?{ $var = $^N })) +.Ve +.Sp +By setting and then using \f(CW$var\fR in this way relieves you from having to +worry about exactly which numbered set of parentheses they are. +.Sp +This variable is read-only, and its value is dynamically scoped. +.Sp +This variable was added in Perl v5.8.0. +.Sp +Mnemonic: the (possibly) Nested parenthesis that most recently closed. +.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 +.IX Xref "@+ @LAST_MATCH_END" +.PD +This array holds the offsets of the ends of the last successful +match and any matching capture buffers that the pattern contains. +(See "Scoping Rules of Regex Variables") +.Sp +The number of elements it contains will be one more than the number +of capture buffers in the pattern, regardless of which capture buffers +actually matched. You can use this to determine how many capture +buffers there are in the pattern. (As opposed to \f(CW\*(C`@\-\*(C'\fR which may +have fewer elements.) +.Sp +\&\f(CW$+[0]\fR is the offset into the string of the end of the entire match. +This is the same value as what the \f(CW\*(C`pos\*(C'\fR function returns when called +on the variable that was matched against. The \fIn\fRth element of this +array holds the offset of the \fIn\fRth submatch, so \f(CW$+[1]\fR is the offset +past where \f(CW$1\fR ends, \f(CW$+[2]\fR the offset past where \f(CW$2\fR ends, and so +on. You can use \f(CW$#+\fR to determine how many subgroups were in the last +successful match. See the examples given for the \f(CW\*(C`@\-\*(C'\fR variable. +.Sp +This variable is read-only, and its value is dynamically scoped. +.Sp +This variable was added in Perl v5.6.0. +.IP %{^CAPTURE} 8 +.IX Item "%{^CAPTURE}" +.PD 0 +.ie n .IP %LAST_PAREN_MATCH 8 +.el .IP \f(CW%LAST_PAREN_MATCH\fR 8 +.IX Item "%LAST_PAREN_MATCH" +.IP %+ 8 +.IX Xref "%+ %LAST_PAREN_MATCH %{^CAPTURE}" +.PD +Similar to \f(CW\*(C`@+\*(C'\fR, the \f(CW\*(C`%+\*(C'\fR hash allows access to the named capture +buffers, should they exist, in the last successful match in the +currently active dynamic scope. (See "Scoping Rules of Regex Variables"). +.Sp +For example, \f(CW$+{foo}\fR is equivalent to \f(CW$1\fR after the following match: +.Sp +.Vb 1 +\& \*(Aqfoo\*(Aq =~ /(?<foo>foo)/; +.Ve +.Sp +The keys of the \f(CW\*(C`%+\*(C'\fR hash list only the names of buffers that have +captured (and that are thus associated to defined values). +.Sp +If multiple distinct capture groups have the same name, then +\&\f(CW$+{NAME}\fR will refer to the leftmost defined group in the match. +.Sp +The underlying behaviour of \f(CW\*(C`%+\*(C'\fR is provided by the +Tie::Hash::NamedCapture module. +.Sp +\&\fBNote:\fR \f(CW\*(C`%\-\*(C'\fR and \f(CW\*(C`%+\*(C'\fR are tied views into a common internal hash +associated with the last successful regular expression. Therefore mixing +iterative access to them via \f(CW\*(C`each\*(C'\fR may have unpredictable results. +Likewise, if the last successful match changes, then the results may be +surprising. +.Sp +This variable was added in Perl v5.10.0. The \f(CW\*(C`%{^CAPTURE}\*(C'\fR alias was +added in 5.25.7. +.Sp +This variable is read-only, and its value is dynamically scoped. +.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 +.IX Xref "@- @LAST_MATCH_START" +.PD +This array holds the offsets of the beginnings of the last successful +match and any capture buffers it contains. +(See "Scoping Rules of Regex Variables"). +.Sp +The number of elements it contains will be one more than the number of +the highest capture buffers (also called a subgroup) that actually +matched something. (As opposed to \f(CW\*(C`@+\*(C'\fR which may have fewer elements.) +.Sp +\&\f(CW\*(C`$\-[0]\*(C'\fR is the offset of the start of the last successful match. +\&\f(CW\*(C`$\-[\fR\f(CIn\fR\f(CW]\*(C'\fR is the offset of the start of the substring matched by +\&\fIn\fR\-th subpattern, or undef if the subpattern did not match. +.Sp +Thus, after a match against \f(CW$_\fR, \f(CW$&\fR coincides with +\&\f(CW\*(C`substr $_, $\-[0], $+[0] \- $\-[0]\*(C'\fR. Similarly, \f(CW\*(C`$\fR\f(CIn\fR\f(CW\*(C'\fR coincides +with \f(CW\*(C`substr $_, $\-[n], $+[n] \- $\-[n]\*(C'\fR if \f(CW\*(C`$\-[n]\*(C'\fR is defined, and +\&\f(CW$+\fR coincides with \f(CW\*(C`substr $_, $\-[$#\-], $+[$#\-] \- $\-[$#\-]\*(C'\fR. +One can use \f(CW\*(C`$#\-\*(C'\fR to find the last matched subgroup in the last +successful match. Contrast with \f(CW$#+\fR, the number of subgroups +in the regular expression. +.Sp +\&\f(CW\*(C`$\-[0]\*(C'\fR is the offset into the string of the beginning of the +entire match. The \fIn\fRth element of this array holds the offset +of the \fIn\fRth submatch, so \f(CW\*(C`$\-[1]\*(C'\fR is the offset where \f(CW$1\fR +begins, \f(CW\*(C`$\-[2]\*(C'\fR the offset where \f(CW$2\fR begins, and so on. +.Sp +After a match against some variable \f(CW$var\fR: +.RS 8 +.ie n .IP """$\`"" is the same as ""substr($var, 0, $\-[0])""" 5 +.el .IP "\f(CW$\`\fR is the same as \f(CWsubstr($var, 0, $\-[0])\fR" 5 +.IX Item "$ is the same as substr($var, 0, $-[0])" +.PD 0 +.ie n .IP "$& is the same as ""substr($var, $\-[0], $+[0] \- $\-[0])""" 5 +.el .IP "\f(CW$&\fR is the same as \f(CWsubstr($var, $\-[0], $+[0] \- $\-[0])\fR" 5 +.IX Item "$& is the same as substr($var, $-[0], $+[0] - $-[0])" +.ie n .IP """$\*(Aq"" is the same as ""substr($var, $+[0])""" 5 +.el .IP "\f(CW$\*(Aq\fR is the same as \f(CWsubstr($var, $+[0])\fR" 5 +.IX Item "$ is the same as substr($var, $+[0])" +.ie n .IP "$1 is the same as ""substr($var, $\-[1], $+[1] \- $\-[1])""" 5 +.el .IP "\f(CW$1\fR is the same as \f(CWsubstr($var, $\-[1], $+[1] \- $\-[1])\fR" 5 +.IX Item "$1 is the same as substr($var, $-[1], $+[1] - $-[1])" +.ie n .IP "$2 is the same as ""substr($var, $\-[2], $+[2] \- $\-[2])""" 5 +.el .IP "\f(CW$2\fR is the same as \f(CWsubstr($var, $\-[2], $+[2] \- $\-[2])\fR" 5 +.IX Item "$2 is the same as substr($var, $-[2], $+[2] - $-[2])" +.ie n .IP "$3 is the same as ""substr($var, $\-[3], $+[3] \- $\-[3])""" 5 +.el .IP "\f(CW$3\fR is the same as \f(CWsubstr($var, $\-[3], $+[3] \- $\-[3])\fR" 5 +.IX Item "$3 is the same as substr($var, $-[3], $+[3] - $-[3])" +.RE +.RS 8 +.PD +.Sp +This variable is read-only, and its value is dynamically scoped. +.Sp +This variable was added in Perl v5.6.0. +.RE +.IP %{^CAPTURE_ALL} 8 +.IX Xref "%{^CAPTURE_ALL}" +.IX Item "%{^CAPTURE_ALL}" +.PD 0 +.IP %\- 8 +.IX Xref "%-" +.PD +Similar to \f(CW\*(C`%+\*(C'\fR, this variable allows access to the named capture +groups in the last successful match in the currently active dynamic +scope. (See "Scoping Rules of Regex Variables"). To each capture group +name found in the regular expression, it associates a reference to an +array containing the list of values captured by all buffers with that +name (should there be several of them), in the order where they appear. +.Sp +Here's an example: +.Sp +.Vb 12 +\& if (\*(Aq1234\*(Aq =~ /(?<A>1)(?<B>2)(?<A>3)(?<B>4)/) { +\& foreach my $bufname (sort keys %\-) { +\& my $ary = $\-{$bufname}; +\& foreach my $idx (0..$#$ary) { +\& print "\e$\-{$bufname}[$idx] : ", +\& (defined($ary\->[$idx]) +\& ? "\*(Aq$ary\->[$idx]\*(Aq" +\& : "undef"), +\& "\en"; +\& } +\& } +\& } +.Ve +.Sp +would print out: +.Sp +.Vb 4 +\& $\-{A}[0] : \*(Aq1\*(Aq +\& $\-{A}[1] : \*(Aq3\*(Aq +\& $\-{B}[0] : \*(Aq2\*(Aq +\& $\-{B}[1] : \*(Aq4\*(Aq +.Ve +.Sp +The keys of the \f(CW\*(C`%\-\*(C'\fR hash correspond to all buffer names found in +the regular expression. +.Sp +The behaviour of \f(CW\*(C`%\-\*(C'\fR is implemented via the +Tie::Hash::NamedCapture module. +.Sp +\&\fBNote:\fR \f(CW\*(C`%\-\*(C'\fR and \f(CW\*(C`%+\*(C'\fR are tied views into a common internal hash +associated with the last successful regular expression. Therefore mixing +iterative access to them via \f(CW\*(C`each\*(C'\fR may have unpredictable results. +Likewise, if the last successful match changes, then the results may be +surprising. See "Scoping Rules of Regex Variables". +.Sp +This variable was added in Perl v5.10.0. The \f(CW\*(C`%{^CAPTURE_ALL}\*(C'\fR alias was +added in 5.25.7. +.Sp +This variable is read-only, and its value is dynamically scoped. +.IP ${^LAST_SUCCESSFUL_PATTERN} 8 +.IX Item "${^LAST_SUCCESSFUL_PATTERN}" +The last successful pattern that matched in the current scope. The empty +pattern defaults to matching to this. For instance: +.Sp +.Vb 3 +\& if (m/foo/ || m/bar/) { +\& s//BLAH/; +\& } +.Ve +.Sp +and +.Sp +.Vb 3 +\& if (m/foo/ || m/bar/) { +\& s/${^LAST_SUCCESSFUL_PATTERN}/BLAH/; +\& } +.Ve +.Sp +are equivalent. +.Sp +You can use this to debug which pattern matched last, or to match with it again. +.Sp +Added in Perl 5.37.10. +.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 Xref "$^R $LAST_REGEXP_CODE_RESULT" +.IX Item "$^R" +.PD +The result of evaluation of the last successful \f(CW\*(C`(?{ code })\*(C'\fR +regular expression assertion (see perlre). +.Sp +This variable may be written to, and its value is scoped normally, +unlike most other regex variables. +.Sp +This variable was added in Perl 5.005. +.IP ${^RE_COMPILE_RECURSION_LIMIT} 8 +.IX Xref "${^RE_COMPILE_RECURSION_LIMIT}" +.IX Item "${^RE_COMPILE_RECURSION_LIMIT}" +The current value giving the maximum number of open but unclosed +parenthetical groups there may be at any point during a regular +expression compilation. The default is currently 1000 nested groups. +You may adjust it depending on your needs and the amount of memory +available. +.Sp +This variable was added in Perl v5.30.0. +.IP ${^RE_DEBUG_FLAGS} 8 +.IX Xref "${^RE_DEBUG_FLAGS}" +.IX Item "${^RE_DEBUG_FLAGS}" +The current value of the regex debugging flags. Set to 0 for no debug output +even when the \f(CW\*(C`re \*(Aqdebug\*(Aq\*(C'\fR module is loaded. See re for details. +.Sp +This variable was added in Perl v5.10.0. +.IP ${^RE_TRIE_MAXBUF} 8 +.IX Xref "${^RE_TRIE_MAXBUF}" +.IX Item "${^RE_TRIE_MAXBUF}" +Controls how certain regex optimisations are applied and how much memory they +utilize. This value by default is 65536 which corresponds to a 512kB +temporary cache. Set this to a higher value to trade +memory for speed when matching large alternations. Set +it to a lower value if you want the optimisations to +be as conservative of memory as possible but still occur, and set it to a +negative value to prevent the optimisation and conserve the most memory. +Under normal situations this variable should be of no interest to you. +.Sp +This variable was added in Perl v5.10.0. +.SS "Variables related to filehandles" +.IX Subsection "Variables related to filehandles" +Variables that depend on the currently selected filehandle may be set +by calling an appropriate object method on the \f(CW\*(C`IO::Handle\*(C'\fR object, +although this is less efficient than using the regular built-in +variables. (Summary lines below for this contain the word HANDLE.) +First you must say +.PP +.Vb 1 +\& use IO::Handle; +.Ve +.PP +after which you may use either +.PP +.Vb 1 +\& method HANDLE EXPR +.Ve +.PP +or more safely, +.PP +.Vb 1 +\& HANDLE\->method(EXPR) +.Ve +.PP +Each method returns the old value of the \f(CW\*(C`IO::Handle\*(C'\fR attribute. The +methods each take an optional EXPR, which, if supplied, specifies the +new value for the \f(CW\*(C`IO::Handle\*(C'\fR attribute in question. If not +supplied, most methods do nothing to the current value\-\-except for +\&\f(CWautoflush()\fR, which will assume a 1 for you, just to be different. +.PP +Because loading in the \f(CW\*(C`IO::Handle\*(C'\fR class is an expensive operation, +you should learn how to use the regular built-in variables. +.PP +A few of these variables are considered "read-only". This means that +if you try to assign to this variable, either directly or indirectly +through a reference, you'll raise a run-time exception. +.PP +You should be very careful when modifying the default values of most +special variables described in this document. In most cases you want +to localize these variables before changing them, since if you don't, +the change may affect other modules which rely on the default values +of the special variables that you have changed. This is one of the +correct ways to read the whole file at once: +.PP +.Vb 4 +\& open my $fh, "<", "foo" or die $!; +\& local $/; # enable localized slurp mode +\& my $content = <$fh>; +\& close $fh; +.Ve +.PP +But the following code is quite bad: +.PP +.Vb 4 +\& open my $fh, "<", "foo" or die $!; +\& undef $/; # enable slurp mode +\& my $content = <$fh>; +\& close $fh; +.Ve +.PP +since some other module, may want to read data from some file in the +default "line mode", so if the code we have just presented has been +executed, the global value of \f(CW$/\fR is now changed for any other code +running inside the same Perl interpreter. +.PP +Usually when a variable is localized you want to make sure that this +change affects the shortest scope possible. So unless you are already +inside some short \f(CW\*(C`{}\*(C'\fR block, you should create one yourself. For +example: +.PP +.Vb 7 +\& my $content = \*(Aq\*(Aq; +\& open my $fh, "<", "foo" or die $!; +\& { +\& local $/; +\& $content = <$fh>; +\& } +\& close $fh; +.Ve +.PP +Here is an example of how your own code can go broken: +.PP +.Vb 5 +\& for ( 1..3 ){ +\& $\e = "\er\en"; +\& nasty_break(); +\& print "$_"; +\& } +\& +\& sub nasty_break { +\& $\e = "\ef"; +\& # do something with $_ +\& } +.Ve +.PP +You probably expect this code to print the equivalent of +.PP +.Vb 1 +\& "1\er\en2\er\en3\er\en" +.Ve +.PP +but instead you get: +.PP +.Vb 1 +\& "1\ef2\ef3\ef" +.Ve +.PP +Why? Because \f(CWnasty_break()\fR modifies \f(CW\*(C`$\e\*(C'\fR without localizing it +first. The value you set in \f(CWnasty_break()\fR is still there when you +return. The fix is to add \f(CWlocal()\fR so the value doesn't leak out of +\&\f(CWnasty_break()\fR: +.PP +.Vb 1 +\& local $\e = "\ef"; +.Ve +.PP +It's easy to notice the problem in such a short example, but in more +complicated code you are looking for trouble if you don't localize +changes to the special variables. +.ie n .IP $ARGV 8 +.el .IP \f(CW$ARGV\fR 8 +.IX Xref "$ARGV" +.IX Item "$ARGV" +Contains the name of the current file when reading from \f(CW\*(C`<>\*(C'\fR. +.ie n .IP @ARGV 8 +.el .IP \f(CW@ARGV\fR 8 +.IX Xref "@ARGV" +.IX Item "@ARGV" +The array \f(CW@ARGV\fR contains the command-line arguments intended for +the script. \f(CW$#ARGV\fR is generally the number of arguments minus +one, because \f(CW$ARGV[0]\fR is the first argument, \fInot\fR the program's +command name itself. See "$0" for the command name. +.IP ARGV 8 +.IX Xref "ARGV" +.IX Item "ARGV" +The special filehandle that iterates over command-line filenames in +\&\f(CW@ARGV\fR. Usually written as the null filehandle in the angle operator +\&\f(CW\*(C`<>\*(C'\fR. Note that currently \f(CW\*(C`ARGV\*(C'\fR only has its magical effect +within the \f(CW\*(C`<>\*(C'\fR operator; elsewhere it is just a plain filehandle +corresponding to the last file opened by \f(CW\*(C`<>\*(C'\fR. In particular, +passing \f(CW\*(C`\e*ARGV\*(C'\fR as a parameter to a function that expects a filehandle +may not cause your function to automatically read the contents of all the +files in \f(CW@ARGV\fR. +.IP ARGVOUT 8 +.IX Xref "ARGVOUT" +.IX Item "ARGVOUT" +The special filehandle that points to the currently open output file +when doing edit-in-place processing with \fB\-i\fR. Useful when you have +to do a lot of inserting and don't want to keep modifying \f(CW$_\fR. See +perlrun for the \fB\-i\fR switch. +.IP "IO::Handle\->output_field_separator( EXPR )" 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 +.IX Xref "$, $OFS $OUTPUT_FIELD_SEPARATOR" +.PD +The output field separator for the print operator. If defined, this +value is printed between each of print's arguments. Default is \f(CW\*(C`undef\*(C'\fR. +.Sp +You cannot call \f(CWoutput_field_separator()\fR on a handle, only as a +static method. See IO::Handle. +.Sp +Mnemonic: what is printed when there is a "," in your print statement. +.IP "HANDLE\->input_line_number( EXPR )" 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 +.IX Xref "$. $NR $INPUT_LINE_NUMBER line number" +.PD +Current line number for the last filehandle accessed. +.Sp +Each filehandle in Perl counts the number of lines that have been read +from it. (Depending on the value of \f(CW$/\fR, Perl's idea of what +constitutes a line may not match yours.) When a line is read from a +filehandle (via \f(CWreadline()\fR or \f(CW\*(C`<>\*(C'\fR), or when \f(CWtell()\fR or +\&\f(CWseek()\fR is called on it, \f(CW$.\fR becomes an alias to the line counter +for that filehandle. +.Sp +You can adjust the counter by assigning to \f(CW$.\fR, but this will not +actually move the seek pointer. \fILocalizing \fR\f(CI$.\fR\fI will not localize +the filehandle's line count\fR. Instead, it will localize perl's notion +of which filehandle \f(CW$.\fR is currently aliased to. +.Sp +\&\f(CW$.\fR is reset when the filehandle is closed, but \fBnot\fR when an open +filehandle is reopened without an intervening \f(CWclose()\fR. For more +details, see "I/O Operators" in perlop. Because \f(CW\*(C`<>\*(C'\fR never does +an explicit close, line numbers increase across \f(CW\*(C`ARGV\*(C'\fR files (but see +examples in "eof" in perlfunc). +.Sp +You can also use \f(CW\*(C`HANDLE\->input_line_number(EXPR)\*(C'\fR to access the +line counter for a given filehandle without having to worry about +which handle you last accessed. +.Sp +Mnemonic: many programs use "." to mean the current line number. +.IP "IO::Handle\->input_record_separator( EXPR )" 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 +.IX Xref "$ $RS $INPUT_RECORD_SEPARATOR" +.PD +The input record separator, newline by default. This influences Perl's +idea of what a "line" is. Works like \fBawk\fR's RS variable, including +treating empty lines as a terminator if set to the null string (an +empty line cannot contain any spaces or tabs). You may set it to a +multi-character string to match a multi-character terminator, or to +\&\f(CW\*(C`undef\*(C'\fR to read through the end of file. Setting it to \f(CW"\en\en"\fR +means something slightly different than setting to \f(CW""\fR, if the file +contains consecutive empty lines. Setting to \f(CW""\fR will treat two or +more consecutive empty lines as a single empty line. Setting to +\&\f(CW"\en\en"\fR will blindly assume that the next input character belongs to +the next paragraph, even if it's a newline. +.Sp +.Vb 3 +\& local $/; # enable "slurp" mode +\& local $_ = <FH>; # whole file now here +\& s/\en[ \et]+/ /g; +.Ve +.Sp +Remember: the value of \f(CW$/\fR is a string, not a regex. \fBawk\fR has to +be better for something. :\-) +.Sp +Setting \f(CW$/\fR to an empty string \-\- the so-called \fIparagraph mode\fR \-\- merits +special attention. When \f(CW$/\fR is set to \f(CW""\fR and the entire file is read in +with that setting, any sequence of one or more consecutive newlines at the +beginning of the file is discarded. With the exception of the final record in +the file, each sequence of characters ending in two or more newlines is +treated as one record and is read in to end in exactly two newlines. If the +last record in the file ends in zero or one consecutive newlines, that record +is read in with that number of newlines. If the last record ends in two or +more consecutive newlines, it is read in with two newlines like all preceding +records. +.Sp +Suppose we wrote the following string to a file: +.Sp +.Vb 4 +\& my $string = "\en\en\en"; +\& $string .= "alpha beta\engamma delta\en\en\en"; +\& $string .= "epsilon zeta eta\en\en"; +\& $string .= "theta\en"; +\& +\& my $file = \*(Aqsimple_file.txt\*(Aq; +\& open my $OUT, \*(Aq>\*(Aq, $file or die; +\& print $OUT $string; +\& close $OUT or die; +.Ve +.Sp +Now we read that file in paragraph mode: +.Sp +.Vb 4 +\& local $/ = ""; # paragraph mode +\& open my $IN, \*(Aq<\*(Aq, $file or die; +\& my @records = <$IN>; +\& close $IN or die; +.Ve +.Sp +\&\f(CW@records\fR will consist of these 3 strings: +.Sp +.Vb 5 +\& ( +\& "alpha beta\engamma delta\en\en", +\& "epsilon zeta eta\en\en", +\& "theta\en", +\& ) +.Ve +.Sp +Setting \f(CW$/\fR to a reference to an integer, scalar containing an +integer, or scalar that's convertible to an integer will attempt to +read records instead of lines, with the maximum record size being the +referenced integer number of characters. So this: +.Sp +.Vb 3 +\& local $/ = \e32768; # or \e"32768", or \e$var_containing_32768 +\& open my $fh, "<", $myfile or die $!; +\& local $_ = <$fh>; +.Ve +.Sp +will read a record of no more than 32768 characters from \f(CW$fh\fR. If you're +not reading from a record-oriented file (or your OS doesn't have +record-oriented files), then you'll likely get a full chunk of data +with every read. If a record is larger than the record size you've +set, you'll get the record back in pieces. Trying to set the record +size to zero or less is deprecated and will cause $/ to have the value +of "undef", which will cause reading in the (rest of the) whole file. +.Sp +As of 5.19.9 setting \f(CW$/\fR to any other form of reference will throw a +fatal exception. This is in preparation for supporting new ways to set +\&\f(CW$/\fR in the future. +.Sp +On VMS only, record reads bypass PerlIO layers and any associated +buffering, so you must not mix record and non-record reads on the +same filehandle. Record mode mixes with line mode only when the +same buffering layer is in use for both modes. +.Sp +You cannot call \f(CWinput_record_separator()\fR on a handle, only as a +static method. See IO::Handle. +.Sp +See also "Newlines" in perlport. Also see "$.". +.Sp +Mnemonic: / delimits line boundaries when quoting poetry. +.IP "IO::Handle\->output_record_separator( EXPR )" 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 Xref "$\\ $ORS $OUTPUT_RECORD_SEPARATOR" +.IX Item "$" +.PD +The output record separator for the print operator. If defined, this +value is printed after the last of print's arguments. Default is \f(CW\*(C`undef\*(C'\fR. +.Sp +You cannot call \f(CWoutput_record_separator()\fR on a handle, only as a +static method. See IO::Handle. +.Sp +Mnemonic: you set \f(CW\*(C`$\e\*(C'\fR instead of adding "\en" at the end of the print. +Also, it's just like \f(CW$/\fR, but it's what you get "back" from Perl. +.IP "HANDLE\->autoflush( EXPR )" 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 +.IX Xref "$| autoflush flush $OUTPUT_AUTOFLUSH" +.PD +If set to nonzero, forces a flush right away and after every write or +print on the currently selected output channel. Default is 0 +(regardless of whether the channel is really buffered by the system or +not; \f(CW$|\fR tells you only whether you've asked Perl explicitly to +flush after each write). STDOUT will typically be line buffered if +output is to the terminal and block buffered otherwise. Setting this +variable is useful primarily when you are outputting to a pipe or +socket, such as when you are running a Perl program under \fBrsh\fR and +want to see the output as it's happening. This has no effect on input +buffering. See "getc" in perlfunc for that. See "select" in perlfunc on +how to select the output channel. See also IO::Handle. +.Sp +Mnemonic: when you want your pipes to be piping hot. +.IP ${^LAST_FH} 8 +.IX Xref "${^LAST_FH}" +.IX Item "${^LAST_FH}" +This read-only variable contains a reference to the last-read filehandle. +This is set by \f(CW\*(C`<HANDLE>\*(C'\fR, \f(CW\*(C`readline\*(C'\fR, \f(CW\*(C`tell\*(C'\fR, \f(CW\*(C`eof\*(C'\fR and \f(CW\*(C`seek\*(C'\fR. +This is the same handle that \f(CW$.\fR and \f(CW\*(C`tell\*(C'\fR and \f(CW\*(C`eof\*(C'\fR without arguments +use. It is also the handle used when Perl appends ", <STDIN> line 1" to +an error or warning message. +.Sp +This variable was added in Perl v5.18.0. +.PP +\fIVariables related to formats\fR +.IX Subsection "Variables related to formats" +.PP +The special variables for formats are a subset of those for +filehandles. See perlform for more information about Perl's +formats. +.ie n .IP $ACCUMULATOR 8 +.el .IP \f(CW$ACCUMULATOR\fR 8 +.IX Item "$ACCUMULATOR" +.PD 0 +.IP $^A 8 +.IX Xref "$^A $ACCUMULATOR" +.IX Item "$^A" +.PD +The current value of the \f(CWwrite()\fR accumulator for \f(CWformat()\fR lines. +A format contains \f(CWformline()\fR calls that put their result into +\&\f(CW$^A\fR. After calling its format, \f(CWwrite()\fR prints out the contents +of \f(CW$^A\fR and empties. So you never really see the contents of \f(CW$^A\fR +unless you call \f(CWformline()\fR yourself and then look at it. See +perlform and "formline PICTURE,LIST" in perlfunc. +.IP IO::Handle\->format_formfeed(EXPR) 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 Xref "$^L $FORMAT_FORMFEED" +.IX Item "$^L" +.PD +What formats output as a form feed. The default is \f(CW\*(C`\ef\*(C'\fR. +.Sp +You cannot call \f(CWformat_formfeed()\fR on a handle, only as a static +method. See IO::Handle. +.IP HANDLE\->format_page_number(EXPR) 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 +.IX Xref "$% $FORMAT_PAGE_NUMBER" +.PD +The current page number of the currently selected output channel. +.Sp +Mnemonic: \f(CW\*(C`%\*(C'\fR is page number in \fBnroff\fR. +.IP HANDLE\->format_lines_left(EXPR) 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 +.IX Xref "$- $FORMAT_LINES_LEFT" +.PD +The number of lines left on the page of the currently selected output +channel. +.Sp +Mnemonic: lines_on_page \- lines_printed. +.IP "IO::Handle\->format_line_break_characters EXPR" 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 Xref "$: FORMAT_LINE_BREAK_CHARACTERS" +.IX Item "$:" +.PD +The current set of characters after which a string may be broken to +fill continuation fields (starting with \f(CW\*(C`^\*(C'\fR) in a format. The default is +"\ \en\-", to break on a space, newline, or a hyphen. +.Sp +You cannot call \f(CWformat_line_break_characters()\fR on a handle, only as +a static method. See IO::Handle. +.Sp +Mnemonic: a "colon" in poetry is a part of a line. +.IP HANDLE\->format_lines_per_page(EXPR) 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 +.IX Xref "$= $FORMAT_LINES_PER_PAGE" +.PD +The current page length (printable lines) of the currently selected +output channel. The default is 60. +.Sp +Mnemonic: = has horizontal lines. +.IP HANDLE\->format_top_name(EXPR) 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 +.IX Xref "$^ $FORMAT_TOP_NAME" +.PD +The name of the current top-of-page format for the currently selected +output channel. The default is the name of the filehandle with \f(CW\*(C`_TOP\*(C'\fR +appended. For example, the default format top name for the \f(CW\*(C`STDOUT\*(C'\fR +filehandle is \f(CW\*(C`STDOUT_TOP\*(C'\fR. +.Sp +Mnemonic: points to top of page. +.IP HANDLE\->format_name(EXPR) 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 +.IX Xref "$~ $FORMAT_NAME" +.PD +The name of the current report format for the currently selected +output channel. The default format name is the same as the filehandle +name. For example, the default format name for the \f(CW\*(C`STDOUT\*(C'\fR +filehandle is just \f(CW\*(C`STDOUT\*(C'\fR. +.Sp +Mnemonic: brother to \f(CW$^\fR. +.SS "Error Variables" +.IX Xref "error exception" +.IX Subsection "Error Variables" +The variables \f(CW$@\fR, \f(CW$!\fR, \f(CW$^E\fR, and \f(CW$?\fR contain information +about different types of error conditions that may appear during +execution of a Perl program. The variables are shown ordered by +the "distance" between the subsystem which reported the error and +the Perl process. They correspond to errors detected by the Perl +interpreter, C library, operating system, or an external program, +respectively. +.PP +To illustrate the differences between these variables, consider the +following Perl expression, which uses a single-quoted string. After +execution of this statement, perl may have set all four special error +variables: +.PP +.Vb 5 +\& eval q{ +\& open my $pipe, "/cdrom/install |" or die $!; +\& my @res = <$pipe>; +\& close $pipe or die "bad pipe: $?, $!"; +\& }; +.Ve +.PP +When perl executes the \f(CWeval()\fR expression, it translates the +\&\f(CWopen()\fR, \f(CW\*(C`<PIPE>\*(C'\fR, and \f(CW\*(C`close\*(C'\fR calls in the C run-time library +and thence to the operating system kernel. perl sets \f(CW$!\fR to +the C library's \f(CW\*(C`errno\*(C'\fR if one of these calls fails. +.PP +\&\f(CW$@\fR is set if the string to be \f(CW\*(C`eval\*(C'\fR\-ed did not compile (this may +happen if \f(CW\*(C`open\*(C'\fR or \f(CW\*(C`close\*(C'\fR were imported with bad prototypes), or +if Perl code executed during evaluation \f(CWdie()\fRd. In these cases the +value of \f(CW$@\fR is the compile error, or the argument to \f(CW\*(C`die\*(C'\fR (which +will interpolate \f(CW$!\fR and \f(CW$?\fR). (See also Fatal, though.) +.PP +Under a few operating systems, \f(CW$^E\fR may contain a more verbose error +indicator, such as in this case, "CDROM tray not closed." Systems that +do not support extended error messages leave \f(CW$^E\fR the same as \f(CW$!\fR. +.PP +Finally, \f(CW$?\fR may be set to a non\-0 value if the external program +\&\fI/cdrom/install\fR fails. The upper eight bits reflect specific error +conditions encountered by the program (the program's \f(CWexit()\fR value). +The lower eight bits reflect mode of failure, like signal death and +core dump information. See \fBwait\fR\|(2) for details. In contrast to +\&\f(CW$!\fR and \f(CW$^E\fR, which are set only if an error condition is detected, +the variable \f(CW$?\fR is set on each \f(CW\*(C`wait\*(C'\fR or pipe \f(CW\*(C`close\*(C'\fR, +overwriting the old value. This is more like \f(CW$@\fR, which on every +\&\f(CWeval()\fR is always set on failure and cleared on success. +.PP +For more details, see the individual descriptions at \f(CW$@\fR, \f(CW$!\fR, +\&\f(CW$^E\fR, and \f(CW$?\fR. +.IP ${^CHILD_ERROR_NATIVE} 8 +.IX Xref "$^CHILD_ERROR_NATIVE" +.IX Item "${^CHILD_ERROR_NATIVE}" +The native status returned by the last pipe close, backtick (\f(CW\`\`\fR) +command, successful call to \f(CWwait()\fR or \f(CWwaitpid()\fR, or from the +\&\f(CWsystem()\fR operator. On POSIX-like systems this value can be decoded +with the WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED, and +WSTOPSIG functions provided by the POSIX module. +.Sp +Under VMS this reflects the actual VMS exit status; i.e. it is the +same as \f(CW$?\fR when the pragma \f(CW\*(C`use vmsish \*(Aqstatus\*(Aq\*(C'\fR is in effect. +.Sp +This variable was added in Perl v5.10.0. +.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 Xref "$^E $EXTENDED_OS_ERROR" +.IX Item "$^E" +.PD +Error information specific to the current operating system. At the +moment, this differs from \f(CW"$!"\fR under only VMS, OS/2, and Win32 (and +for MacPerl). On all other platforms, \f(CW$^E\fR is always just the same +as \f(CW$!\fR. +.Sp +Under VMS, \f(CW$^E\fR provides the VMS status value from the last system +error. This is more specific information about the last system error +than that provided by \f(CW$!\fR. This is particularly important when \f(CW$!\fR +is set to \fBEVMSERR\fR. +.Sp +Under OS/2, \f(CW$^E\fR is set to the error code of the last call to OS/2 +API either via CRT, or directly from perl. +.Sp +Under Win32, \f(CW$^E\fR always returns the last error information reported +by the Win32 call \f(CWGetLastError()\fR which describes the last error +from within the Win32 API. Most Win32\-specific code will report errors +via \f(CW$^E\fR. ANSI C and Unix-like calls set \f(CW\*(C`errno\*(C'\fR and so most +portable Perl code will report errors via \f(CW$!\fR. +.Sp +Caveats mentioned in the description of \f(CW"$!"\fR generally apply to +\&\f(CW$^E\fR, also. +.Sp +This variable was added in Perl 5.003. +.Sp +Mnemonic: Extra error explanation. +.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 Xref "$^S $EXCEPTIONS_BEING_CAUGHT" +.IX Item "$^S" +.PD +Current state of the interpreter. +.Sp +.Vb 5 +\& $^S State +\& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- +\& undef Parsing module, eval, or main program +\& true (1) Executing an eval or try block +\& false (0) Otherwise +.Ve +.Sp +The first state may happen in \f(CW$SIG{_\|_DIE_\|_}\fR and \f(CW$SIG{_\|_WARN_\|_}\fR +handlers. +.Sp +The English name \f(CW$EXCEPTIONS_BEING_CAUGHT\fR is slightly misleading, because +the \f(CW\*(C`undef\*(C'\fR value does not indicate whether exceptions are being caught, +since compilation of the main program does not catch exceptions. +.Sp +This variable was added in Perl 5.004. +.ie n .IP $WARNING 8 +.el .IP \f(CW$WARNING\fR 8 +.IX Item "$WARNING" +.PD 0 +.IP $^W 8 +.IX Xref "$^W $WARNING" +.IX Item "$^W" +.PD +The current value of the warning switch, initially true if \fB\-w\fR was +used, false otherwise, but directly modifiable. +.Sp +See also warnings. +.Sp +Mnemonic: related to the \fB\-w\fR switch. +.IP ${^WARNING_BITS} 8 +.IX Xref "${^WARNING_BITS}" +.IX Item "${^WARNING_BITS}" +The current set of warning checks enabled by the \f(CW\*(C`use warnings\*(C'\fR pragma. +It has the same scoping as the \f(CW$^H\fR and \f(CW\*(C`%^H\*(C'\fR variables. The exact +values are considered internal to the warnings pragma and may change +between versions of Perl. +.Sp +Each time a statement completes being compiled, the current value of +\&\f(CW\*(C`${^WARNING_BITS}\*(C'\fR is stored with that statement, and can later be +retrieved via \f(CW\*(C`(caller($level))[9]\*(C'\fR. +.Sp +This variable was added in Perl v5.6.0. +.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 +.IX Xref "$! $ERRNO $OS_ERROR" +.PD +When referenced, \f(CW$!\fR retrieves the current value +of the C \f(CW\*(C`errno\*(C'\fR integer variable. +If \f(CW$!\fR is assigned a numerical value, that value is stored in \f(CW\*(C`errno\*(C'\fR. +When referenced as a string, \f(CW$!\fR yields the system error string +corresponding to \f(CW\*(C`errno\*(C'\fR. +.Sp +Many system or library calls set \f(CW\*(C`errno\*(C'\fR if they fail, +to indicate the cause of failure. They usually do \fBnot\fR +set \f(CW\*(C`errno\*(C'\fR to zero if they succeed and may set \f(CW\*(C`errno\*(C'\fR to a +non-zero value on success. This means \f(CW\*(C`errno\*(C'\fR, hence \f(CW$!\fR, is +meaningful only \fIimmediately\fR after a \fBfailure\fR: +.Sp +.Vb 11 +\& if (open my $fh, "<", $filename) { +\& # Here $! is meaningless. +\& ... +\& } +\& else { +\& # ONLY here is $! meaningful. +\& ... +\& # Already here $! might be meaningless. +\& } +\& # Since here we might have either success or failure, +\& # $! is meaningless. +.Ve +.Sp +Here, \fImeaningless\fR means that \f(CW$!\fR may be unrelated to the outcome +of the \f(CWopen()\fR operator. Assignment to \f(CW$!\fR is similarly ephemeral. +It can be used immediately before invoking the \f(CWdie()\fR operator, +to set the exit value, or to inspect the system error string +corresponding to error \fIn\fR, or to restore \f(CW$!\fR to a meaningful state. +.Sp +Perl itself may set \f(CW\*(C`errno\*(C'\fR to a non-zero on failure even if no +system call is performed. +.Sp +Mnemonic: What just went bang? +.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 +.IX Xref "%! %OS_ERROR %ERRNO" +.PD +Each element of \f(CW\*(C`%!\*(C'\fR has a true value only if \f(CW$!\fR is set to that +value. For example, \f(CW$!{ENOENT}\fR is true if and only if the current +value of \f(CW$!\fR is \f(CW\*(C`ENOENT\*(C'\fR; that is, if the most recent error was "No +such file or directory" (or its moral equivalent: not all operating +systems give that exact error, and certainly not all languages). The +specific true value is not guaranteed, but in the past has generally +been the numeric value of \f(CW$!\fR. To check if a particular key is +meaningful on your system, use \f(CW\*(C`exists $!{the_key}\*(C'\fR; for a list of legal +keys, use \f(CW\*(C`keys %!\*(C'\fR. See Errno for more information, and also see +"$!". +.Sp +This variable was added in Perl 5.005. +.ie n .IP $CHILD_ERROR 8 +.el .IP \f(CW$CHILD_ERROR\fR 8 +.IX Item "$CHILD_ERROR" +.PD 0 +.IP $? 8 +.IX Xref "$? $CHILD_ERROR" +.PD +The status returned by the last pipe close, backtick (\f(CW\`\`\fR) command, +successful call to \f(CWwait()\fR or \f(CWwaitpid()\fR, or from the \f(CWsystem()\fR +operator. This is just the 16\-bit status word returned by the +traditional Unix \f(CWwait()\fR system call (or else is made up to look +like it). Thus, the exit value of the subprocess is really (\f(CW$? >> +8\fR), and \f(CW\*(C`$? & 127\*(C'\fR gives which signal, if any, the process died +from, and \f(CW\*(C`$? & 128\*(C'\fR reports whether there was a core dump. +.Sp +Additionally, if the \f(CW\*(C`h_errno\*(C'\fR variable is supported in C, its value +is returned via \f(CW$?\fR if any \f(CW\*(C`gethost*()\*(C'\fR function fails. +.Sp +If you have installed a signal handler for \f(CW\*(C`SIGCHLD\*(C'\fR, the +value of \f(CW$?\fR will usually be wrong outside that handler. +.Sp +Inside an \f(CW\*(C`END\*(C'\fR subroutine \f(CW$?\fR contains the value that is going to be +given to \f(CWexit()\fR. You can modify \f(CW$?\fR in an \f(CW\*(C`END\*(C'\fR subroutine to +change the exit status of your program. For example: +.Sp +.Vb 3 +\& END { +\& $? = 1 if $? == 255; # die would make it 255 +\& } +.Ve +.Sp +Under VMS, the pragma \f(CW\*(C`use vmsish \*(Aqstatus\*(Aq\*(C'\fR makes \f(CW$?\fR reflect the +actual VMS exit status, instead of the default emulation of POSIX +status; see "$?" in perlvms for details. +.Sp +Mnemonic: similar to \fBsh\fR and \fBksh\fR. +.ie n .IP $EVAL_ERROR 8 +.el .IP \f(CW$EVAL_ERROR\fR 8 +.IX Item "$EVAL_ERROR" +.PD 0 +.IP $@ 8 +.IX Xref "$@ $EVAL_ERROR" +.PD +The Perl error from the last \f(CW\*(C`eval\*(C'\fR operator, i.e. the last exception that +was caught. For \f(CW\*(C`eval BLOCK\*(C'\fR, this is either a runtime error message or the +string or reference \f(CW\*(C`die\*(C'\fR was called with. The \f(CW\*(C`eval STRING\*(C'\fR form also +catches syntax errors and other compile time exceptions. +.Sp +If no error occurs, \f(CW\*(C`eval\*(C'\fR sets \f(CW$@\fR to the empty string. +.Sp +Warning messages are not collected in this variable. You can, however, +set up a routine to process warnings by setting \f(CW$SIG{_\|_WARN_\|_}\fR as +described in "%SIG". +.Sp +Mnemonic: Where was the error "at"? +.SS "Variables related to the interpreter state" +.IX Subsection "Variables related to the interpreter state" +These variables provide information about the current interpreter state. +.ie n .IP $COMPILING 8 +.el .IP \f(CW$COMPILING\fR 8 +.IX Item "$COMPILING" +.PD 0 +.IP $^C 8 +.IX Xref "$^C $COMPILING" +.IX Item "$^C" +.PD +The current value of the flag associated with the \fB\-c\fR switch. +Mainly of use with \fB\-MO=...\fR to allow code to alter its behavior +when being compiled, such as for example to \f(CW\*(C`AUTOLOAD\*(C'\fR at compile +time rather than normal, deferred loading. Setting +\&\f(CW\*(C`$^C = 1\*(C'\fR is similar to calling \f(CW\*(C`B::minus_c\*(C'\fR. +.Sp +This variable was added in Perl v5.6.0. +.ie n .IP $DEBUGGING 8 +.el .IP \f(CW$DEBUGGING\fR 8 +.IX Item "$DEBUGGING" +.PD 0 +.IP $^D 8 +.IX Xref "$^D $DEBUGGING" +.IX Item "$^D" +.PD +The current value of the debugging flags. May be read or set. Like its +command-line equivalent, you can use numeric +or symbolic values, e.g. \f(CW\*(C`$^D = 10\*(C'\fR or \f(CW\*(C`$^D = "st"\*(C'\fR. See +"\fB\-D\fR\fInumber\fR" in perlrun. The contents of this variable also affects the +debugger operation. See "Debugger Internals" in perldebguts. +.Sp +Mnemonic: value of \fB\-D\fR switch. +.IP ${^GLOBAL_PHASE} 8 +.IX Xref "${^GLOBAL_PHASE}" +.IX Item "${^GLOBAL_PHASE}" +The current phase of the perl interpreter. +.Sp +Possible values are: +.RS 8 +.IP CONSTRUCT 8 +.IX Item "CONSTRUCT" +The \f(CW\*(C`PerlInterpreter*\*(C'\fR is being constructed via \f(CW\*(C`perl_construct\*(C'\fR. This +value is mostly there for completeness and for use via the +underlying C variable \f(CW\*(C`PL_phase\*(C'\fR. It's not really possible for Perl +code to be executed unless construction of the interpreter is +finished. +.IP START 8 +.IX Item "START" +This is the global compile-time. That includes, basically, every +\&\f(CW\*(C`BEGIN\*(C'\fR block executed directly or indirectly from during the +compile-time of the top-level program. +.Sp +This phase is not called "BEGIN" to avoid confusion with +\&\f(CW\*(C`BEGIN\*(C'\fR\-blocks, as those are executed during compile-time of any +compilation unit, not just the top-level program. A new, localised +compile-time entered at run-time, for example by constructs as +\&\f(CW\*(C`eval "use SomeModule"\*(C'\fR are not global interpreter phases, and +therefore aren't reflected by \f(CW\*(C`${^GLOBAL_PHASE}\*(C'\fR. +.IP CHECK 8 +.IX Item "CHECK" +Execution of any \f(CW\*(C`CHECK\*(C'\fR blocks. +.IP INIT 8 +.IX Item "INIT" +Similar to "CHECK", but for \f(CW\*(C`INIT\*(C'\fR\-blocks, not \f(CW\*(C`CHECK\*(C'\fR blocks. +.IP RUN 8 +.IX Item "RUN" +The main run-time, i.e. the execution of \f(CW\*(C`PL_main_root\*(C'\fR. +.IP END 8 +.IX Item "END" +Execution of any \f(CW\*(C`END\*(C'\fR blocks. +.IP DESTRUCT 8 +.IX Item "DESTRUCT" +Global destruction. +.RE +.RS 8 +.Sp +Also note that there's no value for UNITCHECK-blocks. That's because +those are run for each compilation unit individually, and therefore is +not a global interpreter phase. +.Sp +Not every program has to go through each of the possible phases, but +transition from one phase to another can only happen in the order +described in the above list. +.Sp +An example of all of the phases Perl code can see: +.Sp +.Vb 1 +\& BEGIN { print "compile\-time: ${^GLOBAL_PHASE}\en" } +\& +\& INIT { print "init\-time: ${^GLOBAL_PHASE}\en" } +\& +\& CHECK { print "check\-time: ${^GLOBAL_PHASE}\en" } +\& +\& { +\& package Print::Phase; +\& +\& sub new { +\& my ($class, $time) = @_; +\& return bless \e$time, $class; +\& } +\& +\& sub DESTROY { +\& my $self = shift; +\& print "$$self: ${^GLOBAL_PHASE}\en"; +\& } +\& } +\& +\& print "run\-time: ${^GLOBAL_PHASE}\en"; +\& +\& my $runtime = Print::Phase\->new( +\& "lexical variables are garbage collected before END" +\& ); +\& +\& END { print "end\-time: ${^GLOBAL_PHASE}\en" } +\& +\& our $destruct = Print::Phase\->new( +\& "package variables are garbage collected after END" +\& ); +.Ve +.Sp +This will print out +.Sp +.Vb 7 +\& compile\-time: START +\& check\-time: CHECK +\& init\-time: INIT +\& run\-time: RUN +\& lexical variables are garbage collected before END: RUN +\& end\-time: END +\& package variables are garbage collected after END: DESTRUCT +.Ve +.Sp +This variable was added in Perl 5.14.0. +.RE +.IP $^H 8 +.IX Xref "$^H" +.IX Item "$^H" +WARNING: This variable is strictly for +internal use only. Its availability, +behavior, and contents are subject to change without notice. +.Sp +This variable contains compile-time hints for the Perl interpreter. At the +end of compilation of a BLOCK the value of this variable is restored to the +value when the interpreter started to compile the BLOCK. +.Sp +Each time a statement completes being compiled, the current value of +\&\f(CW$^H\fR is stored with that statement, and can later be retrieved via +\&\f(CW\*(C`(caller($level))[8]\*(C'\fR. See "caller EXPR" in perlfunc. +.Sp +When perl begins to parse any block construct that provides a lexical scope +(e.g., eval body, required file, subroutine body, loop body, or conditional +block), the existing value of \f(CW$^H\fR is saved, but its value is left unchanged. +When the compilation of the block is completed, it regains the saved value. +Between the points where its value is saved and restored, code that +executes within BEGIN blocks is free to change the value of \f(CW$^H\fR. +.Sp +This behavior provides the semantic of lexical scoping, and is used in, +for instance, the \f(CW\*(C`use strict\*(C'\fR pragma. +.Sp +The contents should be an integer; different bits of it are used for +different pragmatic flags. Here's an example: +.Sp +.Vb 1 +\& sub add_100 { $^H |= 0x100 } +\& +\& sub foo { +\& BEGIN { add_100() } +\& bar\->baz($boon); +\& } +.Ve +.Sp +Consider what happens during execution of the BEGIN block. At this point +the BEGIN block has already been compiled, but the body of \f(CWfoo()\fR is still +being compiled. The new value of \f(CW$^H\fR +will therefore be visible only while +the body of \f(CWfoo()\fR is being compiled. +.Sp +Substitution of \f(CW\*(C`BEGIN { add_100() }\*(C'\fR block with: +.Sp +.Vb 1 +\& BEGIN { require strict; strict\->import(\*(Aqvars\*(Aq) } +.Ve +.Sp +demonstrates how \f(CW\*(C`use strict \*(Aqvars\*(Aq\*(C'\fR is implemented. Here's a conditional +version of the same lexical pragma: +.Sp +.Vb 3 +\& BEGIN { +\& require strict; strict\->import(\*(Aqvars\*(Aq) if $condition +\& } +.Ve +.Sp +This variable was added in Perl 5.003. +.IP %^H 8 +.IX Xref "%^H" +.IX Item "%^H" +The \f(CW\*(C`%^H\*(C'\fR hash provides the same scoping semantics as \f(CW$^H\fR. This +makes it useful for implementing lexically scoped pragmas. See perlpragma. +All the entries are stringified when accessed at runtime, so only simple values +can be accommodated. This means no references to objects, for example. +.Sp +Each time a statement completes being compiled, the current value of +\&\f(CW\*(C`%^H\*(C'\fR is stored with that statement, and can later be retrieved via +\&\f(CW\*(C`(caller($level))[10]\*(C'\fR. See "caller EXPR" in perlfunc. +.Sp +When putting items into \f(CW\*(C`%^H\*(C'\fR, in order to avoid conflicting with other +users of the hash there is a convention regarding which keys to use. +A module should use only keys that begin with the module's name (the +name of its main package) and a "/" character. For example, a module +\&\f(CW\*(C`Foo::Bar\*(C'\fR should use keys such as \f(CW\*(C`Foo::Bar/baz\*(C'\fR. +.Sp +This variable was added in Perl v5.6.0. +.IP ${^OPEN} 8 +.IX Xref "${^OPEN}" +.IX Item "${^OPEN}" +An internal variable used by PerlIO. A string in two parts, separated +by a \f(CW\*(C`\e0\*(C'\fR byte, the first part describes the input layers, the second +part describes the output layers. +.Sp +This is the mechanism that applies the lexical effects of the open +pragma, and the main program scope effects of the \f(CW\*(C`io\*(C'\fR or \f(CW\*(C`D\*(C'\fR options +for the \-C command-line switch and +PERL_UNICODE environment variable. +.Sp +The functions \f(CWaccept()\fR, \f(CWopen()\fR, \f(CWpipe()\fR, \f(CWreadpipe()\fR (as well +as the related \f(CW\*(C`qx\*(C'\fR and \f(CW\`STRING\`\fR operators), \f(CWsocket()\fR, +\&\f(CWsocketpair()\fR, and \f(CWsysopen()\fR are affected by the lexical value of +this variable. The implicit "ARGV" handle opened by \f(CWreadline()\fR (or +the related \f(CW\*(C`<>\*(C'\fR and \f(CW\*(C`<<>>\*(C'\fR operators) on passed filenames is +also affected (but not if it opens \f(CW\*(C`STDIN\*(C'\fR). If this variable is not +set, these functions will set the default layers as described in +"Defaults and how to override them" in PerlIO. +.Sp +\&\f(CWopen()\fR ignores this variable (and the default layers) when called with +3 arguments and explicit layers are specified. Indirect calls to these +functions via modules like IO::Handle are not affected as they occur +in a different lexical scope. Directory handles such as opened by +\&\f(CWopendir()\fR are not currently affected. +.Sp +This variable was added in Perl v5.8.0. +.ie n .IP $PERLDB 8 +.el .IP \f(CW$PERLDB\fR 8 +.IX Item "$PERLDB" +.PD 0 +.IP $^P 8 +.IX Xref "$^P $PERLDB" +.IX Item "$^P" +.PD +The internal variable for debugging support. The meanings of the +various bits are subject to change, but currently indicate: +.RS 8 +.IP 0x01 6 +.IX Item "0x01" +Debug subroutine enter/exit. +.IP 0x02 6 +.IX Item "0x02" +Line-by-line debugging. Causes \f(CWDB::DB()\fR subroutine to be called for +each statement executed. Also causes saving source code lines (like +0x400). +.IP 0x04 6 +.IX Item "0x04" +Switch off optimizations. +.IP 0x08 6 +.IX Item "0x08" +Preserve more data for future interactive inspections. +.IP 0x10 6 +.IX Item "0x10" +Keep info about source lines on which a subroutine is defined. +.IP 0x20 6 +.IX Item "0x20" +Start with single-step on. +.IP 0x40 6 +.IX Item "0x40" +Use subroutine address instead of name when reporting. +.IP 0x80 6 +.IX Item "0x80" +Report \f(CW\*(C`goto &subroutine\*(C'\fR as well. +.IP 0x100 6 +.IX Item "0x100" +Provide informative "file" names for evals based on the place they were compiled. +.IP 0x200 6 +.IX Item "0x200" +Provide informative names to anonymous subroutines based on the place they +were compiled. +.IP 0x400 6 +.IX Item "0x400" +Save source code lines into \f(CW\*(C`@{"_<$filename"}\*(C'\fR. +.IP 0x800 6 +.IX Item "0x800" +When saving source, include evals that generate no subroutines. +.IP 0x1000 6 +.IX Item "0x1000" +When saving source, include source that did not compile. +.RE +.RS 8 +.Sp +Some bits may be relevant at compile-time only, some at +run-time only. This is a new mechanism and the details may change. +See also perldebguts. +.RE +.IP ${^TAINT} 8 +.IX Xref "${^TAINT}" +.IX Item "${^TAINT}" +Reflects if taint mode is on or off. 1 for on (the program was run with +\&\fB\-T\fR), 0 for off, \-1 when only taint warnings are enabled (i.e. with +\&\fB\-t\fR or \fB\-TU\fR). +.Sp +Note: if your perl was built without taint support (see perlsec), +then \f(CW\*(C`${^TAINT}\*(C'\fR will always be 0, even if the program was run with \fB\-T\fR). +.Sp +This variable is read-only. +.Sp +This variable was added in Perl v5.8.0. +.IP ${^SAFE_LOCALES} 8 +.IX Xref "${^SAFE_LOCALES}" +.IX Item "${^SAFE_LOCALES}" +Reflects if safe locale operations are available to this perl (when the +value is 1) or not (the value is 0). This variable is always 1 if the +perl has been compiled without threads. It is also 1 if this perl is +using thread-safe locale operations. Note that an individual thread may +choose to use the global locale (generally unsafe) by calling +"switch_to_global_locale" in perlapi. This variable currently is still +set to 1 in such threads. +.Sp +This variable is read-only. +.Sp +This variable was added in Perl v5.28.0. +.IP ${^UNICODE} 8 +.IX Xref "${^UNICODE}" +.IX Item "${^UNICODE}" +Reflects certain Unicode settings of Perl. See +perlrun documentation for the \f(CW\*(C`\-C\*(C'\fR +switch for more information about the possible values. +.Sp +This variable is set during Perl startup and is thereafter read-only. +.Sp +This variable was added in Perl v5.8.2. +.IP ${^UTF8CACHE} 8 +.IX Xref "${^UTF8CACHE}" +.IX Item "${^UTF8CACHE}" +This variable controls the state of the internal UTF\-8 offset caching code. +1 for on (the default), 0 for off, \-1 to debug the caching code by checking +all its results against linear scans, and panicking on any discrepancy. +.Sp +This variable was added in Perl v5.8.9. It is subject to change or +removal without notice, but is currently used to avoid recalculating the +boundaries of multi-byte UTF\-8\-encoded characters. +.IP ${^UTF8LOCALE} 8 +.IX Xref "${^UTF8LOCALE}" +.IX Item "${^UTF8LOCALE}" +This variable indicates whether a UTF\-8 locale was detected by perl at +startup. This information is used by perl when it's in +adjust\-utf8ness\-to\-locale mode (as when run with the \f(CW\*(C`\-CL\*(C'\fR command-line +switch); see perlrun for more info on +this. +.Sp +This variable was added in Perl v5.8.8. +.SS "Deprecated and removed variables" +.IX Subsection "Deprecated and removed variables" +Deprecating a variable announces the intent of the perl maintainers to +eventually remove the variable from the language. It may still be +available despite its status. Using a deprecated variable triggers +a warning. +.PP +Once a variable is removed, its use triggers an error telling you +the variable is unsupported. +.PP +See perldiag for details about error messages. +.IP $# 8 +.IX Xref "$#" +\&\f(CW$#\fR was a variable that could be used to format printed numbers. +After a deprecation cycle, its magic was removed in Perl v5.10.0 and +using it now triggers a warning: \f(CW\*(C`$# is no longer supported\*(C'\fR. +.Sp +This is not the sigil you use in front of an array name to get the +last index, like \f(CW$#array\fR. That's still how you get the last index +of an array in Perl. The two have nothing to do with each other. +.Sp +Deprecated in Perl 5. +.Sp +Removed in Perl v5.10.0. +.IP $* 8 +.IX Xref "$*" +\&\f(CW$*\fR was a variable that you could use to enable multiline matching. +After a deprecation cycle, its magic was removed in Perl v5.10.0. +Using it now triggers a warning: \f(CW\*(C`$* is no longer supported\*(C'\fR. +You should use the \f(CW\*(C`/s\*(C'\fR and \f(CW\*(C`/m\*(C'\fR regexp modifiers instead. +.Sp +Deprecated in Perl 5. +.Sp +Removed in Perl v5.10.0. +.IP $[ 8 +.IX Xref "$[" +This variable stores the index of the first element in an array, and +of the first character in a substring. The default is 0, but you could +theoretically set it to 1 to make Perl behave more like \fBawk\fR (or Fortran) +when subscripting and when evaluating the \fBindex()\fR and \fBsubstr()\fR functions. +.Sp +As of release 5 of Perl, assignment to \f(CW$[\fR is treated as a compiler +directive, and cannot influence the behavior of any other file. +(That's why you can only assign compile-time constants to it.) +Its use is highly discouraged. +.Sp +Prior to Perl v5.10.0, assignment to \f(CW$[\fR could be seen from outer lexical +scopes in the same file, unlike other compile-time directives (such as +strict). Using \fBlocal()\fR on it would bind its value strictly to a lexical +block. Now it is always lexically scoped. +.Sp +As of Perl v5.16.0, it is implemented by the arybase module. +.Sp +As of Perl v5.30.0, or under \f(CW\*(C`use v5.16\*(C'\fR, or \f(CW\*(C`no feature "array_base"\*(C'\fR, +\&\f(CW$[\fR no longer has any effect, and always contains 0. +Assigning 0 to it is permitted, but any other value will produce an error. +.Sp +Mnemonic: [ begins subscripts. +.Sp +Deprecated in Perl v5.12.0. +.IP ${^ENCODING} 8 +.IX Xref "${^ENCODING}" +.IX Item "${^ENCODING}" +This variable is no longer supported. +.Sp +It used to hold the \fIobject reference\fR to the \f(CW\*(C`Encode\*(C'\fR object that was +used to convert the source code to Unicode. +.Sp +Its purpose was to allow your non-ASCII Perl +scripts not to have to be written in UTF\-8; this was +useful before editors that worked on UTF\-8 encoded text were common, but +that was long ago. It caused problems, such as affecting the operation +of other modules that weren't expecting it, causing general mayhem. +.Sp +If you need something like this functionality, it is recommended that use +you a simple source filter, such as Filter::Encoding. +.Sp +If you are coming here because code of yours is being adversely affected +by someone's use of this variable, you can usually work around it by +doing this: +.Sp +.Vb 1 +\& local ${^ENCODING}; +.Ve +.Sp +near the beginning of the functions that are getting broken. This +undefines the variable during the scope of execution of the including +function. +.Sp +This variable was added in Perl 5.8.2 and removed in 5.26.0. +Setting it to anything other than \f(CW\*(C`undef\*(C'\fR was made fatal in Perl 5.28.0. +.IP ${^WIN32_SLOPPY_STAT} 8 +.IX Xref "${^WIN32_SLOPPY_STAT} sitecustomize sitecustomize.pl" +.IX Item "${^WIN32_SLOPPY_STAT}" +This variable no longer has any function. +.Sp +This variable was added in Perl v5.10.0 and removed in Perl v5.34.0. |