4.4. Special Variables
Some variables have a predefined,
special meaning in Perl. They use punctuation characters after the
usual variable indicator ($, @,
or %), such as $_. The
explicit, long-form names are the variables'
equivalents when you use the English module by including use
English; at the top of your program.
4.4.1. Global Special Variables
The most common special variable is
$_, which contains the default input and
pattern-searching string. For example:
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 such as
ord and int, as well as the all
file tests (-f, -d), except for
-t, which defaults to STDIN.
-
Various list functions such as 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 does not
happen.
The following is a complete listing of global special variables:
- $_
- $ARG
-
The default input and pattern-searching space.
- $.
- $INPUT_LINE_NUMBER
- $NR
-
The current input line number of the
last filehandle that was read. An explicit close on the filehandle
resets the line number.
- $/
- $INPUT_RECORD_SEPARATOR
- $RS
-
The input record separator; newline by
default. If set to the null string, it treats blank lines as
delimiters.
- $,
- $OUTPUT_FIELD_SEPARATOR
- $OFS
-
The output field
separator for the print operator.
- $\
- $OUTPUT_RECORD_SEPARATOR
- $ORS
-
The output
record separator for the print operator.
- $
- $LIST_SEPARATOR
-
Like $, except that
it applies to list values interpolated into a double-quoted string
(or similar interpreted string). Default is a space.
- $;
- $SUBSCRIPT_SEPARATOR
- $SUBSEP
-
The subscript
separator for multidimensional array emulation. Default is
\034.
- $^L
- $FORMAT_FORMFEED
-
What a format outputs to perform a
formfeed. Default is \f.
- $:
- $FORMAT_LINE_BREAK_CHARACTERS
-
The current set of characters after
which a string may be broken to fill continuation fields (starting
with ^) in a format. Default is
\n".
- $^A
- $ACCUMULATOR
-
The current value of the
write accumulator for format
lines.
- $#
- $OFMT
-
Contains the
output format for printed numbers (deprecated).
- $?
- $CHILD_ERROR
-
The status returned by the last pipe
close, backtick ('') command, or
system operator.
- $!
- $OS_ERROR
- $ERRNO
-
If 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
-
The Perl syntax error message from the
last eval command.
- $$
- $PROCESS_ID
- $PID
-
The pid of the Perl
process running this script.
- $<
- $REAL_USER_ID
- $UID
-
The real user ID
(uid) of this process.
- $>
- $EFFECTIVE_USER_ID
- $EUID
-
The effective
uid of this process.
- $(
- $REAL_GROUP_ID
- $GID
-
The real group ID
(gid) of this process.
- $)
- $EFFECTIVE_GROUP_ID
- $EGID
-
The effective gid of
this process.
- $0
- $PROGRAM_NAME
-
Contains 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
-
Returns the version plus patch level
divided by 1,000.
- $^D
- $DEBUGGING
-
The current
value of the debugging flags.
- $^E
- $EXTENDED_OS_ERROR
-
Extended error message on some
platforms.
- $^F
- $SYSTEM_FD_MAX
-
The maximum system file descriptor,
ordinarily 2.
- $^H
-
Contains internal compiler hints
enabled by certain pragmatic modules.
- $^I
- $INPLACE_EDIT
-
The current value of the inplace-edit
extension. Use undef to disable inplace editing.
- $^M
-
The contents of $M
can be used as an emergency memory pool in case Perl
die s with an out-of-memory error. Use of
$M requires a special compilation of Perl. See the
INSTALL document for more information.
- $^O
- $OSNAME
-
Contains the
name of the operating system for which the current Perl binary was
compiled.
- $^P
- $PERLDB
-
The internal
flag that the debugger clears so that it doesn't
debug itself.
- $^T
- $BASETIME
-
The time at
which the script began running, in seconds since the epoch.
- $^W
- $WARNING
-
The current
value of the warning switch, either true or false.
- $^X
- $EXECUTABLE_NAME
-
The name that the Perl binary itself
was executed as. As of Perl 5.8, Perl asks the operating system
instead of using C's argv[0].
- $ARGV
-
Contains the name of the current file
when reading from <ARGV>.
4.4.2. Global Special Arrays and Hashes
- @ARGV
-
The array containing the command-line
arguments intended for the script.
- @INC
-
The array containing the list of places to
look for Perl scripts to be evaluated by the do,
require, or use constructs.
- @F
-
The array into which the input lines are
split when the -a command-line switch is given.
- %INC
-
The hash containing entries for the
filename of each file that has been included via
do or require.
- %ENV
-
The hash containing your current
environment.
- %SIG
-
The hash used to set signal handlers for
various signals.
4.4.3. Global Special Filehandles
- ARGV
-
The special
filehandle that iterates over command-line filenames in
@ARGV. Usually written as the null filehandle in
<>.
- STDERR
-
The
special filehandle for standard error in any package.
- STDIN
-
The special
filehandle for standard input in any package.
- STDOUT
-
The
special filehandle for standard output in any package.
- DATA
-
The 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.
4.4.4. Global Special Constants
- _ _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.
4.4.5. Regular Expression Special Variables
For more information on
regular expressions, see Section 4.6, "Regular Expressions" later in this chapter.
- $digit
-
Contains 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
-
The string
matched by the last successful pattern match.
- $'
- $PREMATCH
-
The string
preceding whatever was matched by the last successful pattern match.
- $'
- $POSTMATCH
-
The
string following whatever was matched by the last successful pattern
match.
- $+
- $LAST_PAREN_MATCH
-
The 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 = $+);
- $^N
-
The string matched by the most recently closed group. This is most
useful inside (?{ . . . })
blocks for examining matched text. If you have multiple matches
denoted by parentheses, $^N can be used in lieu of
$1, $2, $3,
etc., so you don't have to manually count the number
of sets of parentheses that denote your matches. For example:
#!/usr/local/bin/perl -w
$words = "person|here";
$words =~ /(\w+)\|(\w+)/;
print $^N; # Prints 'here'
4.4.6. Filehandle Special Variables
Most of these variables apply
only when using formats. See Section 4.11, "Unicode" later in this chapter.
- $|
- $OUTPUT_AUTOFLUSH
-
If set to nonzero, forces an
fflush(3) after every write or
print on the currently selected output channel.
- $%
- $FORMAT_PAGE_NUMBER
-
The current page number of the
currently selected output channel.
- $=
- $FORMAT_LINES_PER_PAGE
-
The current page length (printable
lines) of the currently selected output channel. Default is 60.
- $-
- $FORMAT_LINES_LEFT
-
The number of lines left on the page of
the currently selected output channel.
- $~
- $FORMAT_NAME
-
The name of the current report format
for the currently selected output channel. Default is the name of the
filehandle.
- $^
- $FORMAT_TOP_NAME
-
The name of the current top-of-page
format for the currently selected output channel. Default is the name
of the filehandle with _TOP appended.
| | |
4.3. Statements | | 4.5. Operators |
Copyright © 2002 O'Reilly & Associates. All rights reserved.