This chapter is about variables that have special meanings to Perl. Most of the punctuational names have reasonable mnemonics, or analogs in one of the shells (or both). But if you want to use long variable names as synonyms, just say:
use English;
at the top of your program. This aliases all the short names to long names in the current package. Some of these variables even have medium names, generally borrowed from awk. Most people eventually settle on using the short names, at least for the more commonly used variables. Throughout this book, we consistently refer to the short names, but also often mention the long names (in parentheses) so that you can look them up easily in this chapter.
The semantics of these variables can be quite magical. (To create your own magic, see Chapter 14.) A few of these variables are read-only. If you try to assign values to them, an exception will be raised.
In what follows, we'll first provide a concise listing of the variables and functions for which Perl assigns a special meaning, grouped by type, so you can look up variables that you're not sure of the proper name. Then we'll explain all of the variables alphabetically under their proper name (or their least improper name).
We used the word "type" loosely--the sections here actually group variables more by their scope, that is, where they're visible from.
The following special variables related to pattern matching
are visible throughout the dynamic scope in which the pattern match
occurred (except for $*
, which is deprecated). In
other words, they behave as though they were declared with
local
, so you needn't declare them that way
yourself. See Chapter 5.
$*
$digits
@+ (@LAST_MATCH_END)
@- (@LAST_MATCH_START)
$+ ($LAST_PAREN_MATCH)
$^R ($LAST_REGEXP_CODE_RESULT)
$& ($MATCH)
$' ($POSTMATCH)
$` ($PREMATCH)
These special variables never need to be mentioned in a
local
because they always refer to some value
pertaining to the currently selected output filehandle--each
filehandle keeps its own set of values. When you
select
another filehandle, the old filehandle
remembers the values it had for these variables, and the variables
now reflect the values of the new filehandle. See also the
FileHandle
module in Chapter 32.
$| ($AUTOFLUSH, $OUTPUT_AUTOFLUSH) $- ($FORMAT_LINES_LEFT) $= ($FORMAT_LINES_PER_PAGE) $~ ($FORMAT_NAME) $% ($FORMAT_PAGE_NUMBER) $^ ($FORMAT_TOP_NAME)
These special variables exist separately in each package.
There should be no need to localize them, since
sort
automatically does so on
$a
and $b
, and the rest are
probably best left alone (though you will need to declare them with
our
if you use strict
).
$a $b @EXPORT @EXPORT_OK %EXPORT_TAGS %FIELDS @ISA%OVERLOAD $VERSION
These variables are truly global in the fullest sense--they
mean the same thing in every package, because they're all forced
into package main
when unqualified (except for
@F
, which is special in main
,
but not forced). If you want a temporary copy of one of these, you
must localize it in the current dynamic scope.
%ENV %INC %SIG %! %^H @_ @ARGV @F @INC $_ ($ARG) $0 ($PROGRAM_NAME) $ARGV $! ($ERRNO, $OS_ERROR) $" ($LIST_SEPARATOR) $# $$ ($PID, $PROCESS_ID) $( ($GID, $REAL_GROUP_ID) $) ($EGID, $EFFECTIVE_GROUP_ID) $, ($OFS, $OUTPUT_FIELD_SEPARATOR) $. ($NR, $INPUT_LINE_NUMBER) $/ ($RS, $INPUT_RECORD_SEPARATOR) $: ($FORMAT_LINE_BREAK_CHARACTERS) $; ($SUBSEP, $SUBSCRIPT_SEPARATOR) | $< ($UID, $REAL_USER_ID) $> ($EUID, $EFFECTIVE_USER_ID) $? ($CHILD_ERROR) $@ ($EVAL_ERROR) $[ $ ($ORS, $OUTPUT_RECORD_SEPARATOR) $] ($OLD_PERL_VERSION) $^A ($ACCUMULATOR) $^C ($COMPILING) $^D ($DEBUGGING) $^E ($EXTENDED_OS_ERROR) $^F ($SYSTEM_FD_MAX) $^H $^I ($INPLACE_EDIT) $^L ($FORMAT_FORMFEED) $^M $^O ($OSNAME) $^P ($PERLDB) $^R ($LAST_REGEXP_CODE_RESULT) $^S (EXCEPTIONS_BEING_CAUGHT) $^T ($BASETIME) $^V ($PERL_VERSION) $^W ($WARNING) ${^WARNING_BITS} ${^WIDE_SYSTEM_CALLS} $^X ($EXECUTABLE_NAME) |
Except for DATA
, which is always
per-package, the following filehandles are always assumed to be in
main
when not fully qualified with another
package name:
_ (underline)
ARGV
ARGVOUT
DATA
STDIN
STDOUT
STDERR
The following subroutine names have a special meaning to Perl. They're always called implicitly because of some event, such as accessing a tied variable or trying to call an undefined function. We don't describe them in this chapter since they all receive heavy-duty coverage elsewhere in the book.
Undefined function call interceptor (see Chapter 10):
AUTOLOAD
Moribund objects' finalization (see Chapter 12):
DESTROY
Exception objects (see die
in the next
chapter):
PROPAGATE
Auto-init and auto-cleanup functions (see Chapter 18):
BEGIN, CHECK, INIT, END
Tie methods (see Chapter 14):
BINMODE, CLEAR, CLOSE, DELETE, EOF, EXISTS, EXTEND, FETCH, FETCHSIZE, FILENO, FIRSTKEY, GETC, NEXTKEY, OPEN, POP, PRINT, PRINTF, PUSH, READ, READLINE, SEEK, SHIFT, SPLICE, STORE, STORESIZE, TELL, TIEARRAY, TIEHANDLE, TIEHASH, TIESCALAR, UNSHIFT, WRITE