Some variables have a predefined
and special meaning in Perl. They are the variables
that use punctuation characters
after the usual variable indicator ($, @, or
%), such as $_.
The explicit, long-form names shown are the variables' equivalents
when you use the English module by including
"use English;" at the top of your program.
The most commonly used special variable is $_, which contains
the default input and pattern-searching string.
For example, in the following lines:
foreach ('hickory','dickory','doc') {
print;
}
The first time the loop is executed, "hickory" is printed.
The second time around, "dickory" is printed, and the third time, "doc"
is printed. That's because in each iteration of the loop,
the current string is placed
in $_, and is used by default by print.
Here are the places where Perl will assume $_ even if you don't
specify it: Various unary functions, including functions like ord and
int, as well as the all file tests (-f, -d) except for
-t, which defaults to STDIN.
Various list functions like print and unlink.
The pattern-matching operations m//, s///, and tr///
when used without an =~ operator.
The default iterator variable in a foreach loop if no other
variable is supplied.
The implicit iterator variable in the grep and map
functions.
The default place to put an input record when a line-input operation's
result is tested by itself as the sole criterion of a
while test (i.e., <filehandle>).
Note that outside of a while test, this
will not happen.
The following is a complete listing of global special variables:
$_$ARGThe default input and pattern-searching space.
$.$INPUT_LINE_NUMBER$NRThe current input line number of the last filehandle that was read. An explicit close on the filehandle resets the line number.
$/$INPUT_RECORD_SEPARATOR$RSThe input record separator; newline by default. If set to the null string, it treats blank lines as delimiters.
$,$OUTPUT_FIELD_SEPARATOR$OFS$\$OUTPUT_RECORD_SEPARATOR$ORS$$LIST_SEPARATORLike "$," except that it applies to list values interpolated
into a double-quoted string (or similar interpreted string). Default
is a space.
$;$SUBSCRIPT_SEPARATOR$SUBSEPThe subscript separator for multidimensional array emulation.
Default is "\034".
$^L$FORMAT_FORMFEEDWhat a format outputs to perform a formfeed. Default is "\f".
$:$FORMAT_LINE_BREAK_CHARACTERSThe current set of characters after which a string may be broken to fill
continuation fields (starting with ^) in a format.
Default is "\n"".
$^A$ACCUMULATORThe current value of the write
accumulator for format lines.
$#$OFMTContains the output format for printed numbers (deprecated).
$?$CHILD_ERRORThe status returned by the last pipe close, backtick (``) command,
or system operator.
$!$OS_ERROR$ERRNOIf used in a numeric context, yields the current value of the
errno variable, identifying the last system call error.
If used in a string context,
yields the corresponding system error string.
$@$EVAL_ERROR$$$PROCESS_ID$PID$<$REAL_USER_ID$UID$>$EFFECTIVE_USER_ID$EUID$($REAL_GROUP_ID$GID$)$EFFECTIVE_GROUP_ID$EGID$0$PROGRAM_NAMEContains the name of the file containing the Perl script being executed.
$[The index of the first element in an array and of the first character in a substring. Default is 0.
$]$PERL_VERSION$^D$DEBUGGING$^E$EXTENDED_OS_ERROR$^F$SYSTEM_FD_MAX$^HContains internal compiler hints enabled by certain pragmatic modules.
$^I$INPLACE_EDITThe current value of the inplace-edit extension. Use undef to disable
inplace editing.
$^MThe contents of $M can be used as an emergency memory pool in
case Perl dies with an out-of-memory error. Use of $M
requires a special compilation of Perl. See the INSTALL document for
more information.
$^O$OSNAMEContains the name of the operating system that the current Perl binary was compiled for.
$^P$PERLDBThe internal flag that the debugger clears so that it doesn't debug itself.
$^T$BASETIMEThe time at which the script began running, in seconds since the epoch.
$^W$WARNINGThe current value of the warning switch, either true or false.
$^X$EXECUTABLE_NAME$ARGVContains the name of the current file when reading from <ARGV>.
@ARGVThe array containing the command-line arguments intended for the script.
@INCThe array containing the list of places to look for Perl scripts
to be evaluated by the do, require, or use
constructs.
@FThe array into which the input lines are split when the -a command-line switch is given.
%INCThe hash containing entries for the filename of each file that has been
included via do or require.
%ENV%SIGARGVThe special filehandle that iterates over command line filenames in
@ARGV. Usually written as the null filehandle in <>.
STDERRSTDINSTDOUTDATAThe special filehandle that refers to anything following the
__END__ token in the file
containing the script. Or, the special filehandle for anything
following the __DATA__ token in a required file, as long as
you're reading data in the same package __DATA__ was
found in.
_ (underscore)The special filehandle used to cache the information from the last stat,
lstat, or file test operator.
__END__Indicates the logical end of your program. Any following text is ignored,
but may be read via the DATA filehandle.
__FILE__Represents the filename at the point in your program where it's used. Not interpolated into strings.
__LINE__Represents the current line number. Not interpolated into strings.
__PACKAGE__Represents the current package name at compile time, or undefined if there is no current package. Not interpolated into strings.
For more information on regular expressions, see Section 4.6, "Regular Expressions" later in this chapter.
$digitContains the text matched by the corresponding set of parentheses in
the last pattern matched. For example, $1 matches whatever was contained
in the first set of parentheses in the previous regular expression.
$&$MATCH$`$PREMATCHThe string preceding whatever was matched by the last successful pattern match.
$'$POSTMATCHThe string following whatever was matched by the last successful pattern match.
$+$LAST_PAREN_MATCHThe last bracket matched by the last search pattern. This is useful if you don't know which of a set of alternative patterns was matched. For example:
/Version: (.*)|Revision: (.*)/ && ($rev = $+);
Most of these variables only apply when using formats. See Section 4.10, "Formats" later in this chapter.
$|$OUTPUT_AUTOFLUSHIf set to nonzero, forces an fflush(3) after every write or
print on the currently selected output channel.
$%$FORMAT_PAGE_NUMBERThe current page number of the currently selected output channel.
$=$FORMAT_LINES_PER_PAGEThe current page length (printable lines) of the currently selected output channel. Default is 60.
$-$FORMAT_LINES_LEFTThe number of lines left on the page of the currently selected output channel.
$~$FORMAT_NAMEThe name of the current report format for the currently selected output channel. Default is the name of the filehandle.
$^$FORMAT_TOP_NAMEThe name of the current top-of-page format for the currently selected
output channel. Default is the name of the filehandle
with _TOP appended.