Contents / Previous / Next


Special Variables

The $_ Special Variable

Perl's most popular variable is $_ . It is the default variable, which is always used when no explicit assignment is given (otherwise $_ has the value of the last assigned variable).

The following pairs are equivalent:

while (<>) {...} # only equivalent in while!
while ($_ = <>) {...}

/^Subject:/
$_ =~ /^Subject:/

tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/

chop
chop($_)

It is useful to shorten loops, the following example prints the numbers from 1 to 10:

for(1..10) { print; }


List of Special Variables (for more detailed description see: I, II)

The following variables are global:
$_ The default input and pattern-searching space.
$. The current input line number of the last filehandle that was read.
$/ The input record separator, newline by default. May be multicharacter.
$, The output field separator for the print operator.
$" The separator that joins elements of arrays interpolated in strings.
$\ The output record separator for the print operator.
$? The status returned by the last `...` command, pipe close or system operator.
$] The perl version number, e.g., 5.001.
$; The subscript separator for multidimensional array emulation. Default is "\034".
$! If used in a numeric context, yields the current value of errno. If used in a string context, yields the corresponding error string.
$@ The Perl error message from the last eval or do EXPR command.
$: The set of characters after which a string may be broken to fill continuation fields (starting with ^) in a format.
$0 The name of the file containing the Perl script being executed. May be assigned to.
$$ The process ID of the currently executing Perl program. Altered (in the child process) by fork.
$< The real user ID of this process.
$> The effective user ID of this process.
$( The real group ID of this process.
$) The effective group ID of this process.
$^A The accumulator for formline and write operations.
$^D The debug flags as passed to perl using -D.
$^F The highest system file descriptor, ordinarily 2.
$^I In-place edit extension as passed to Perl using -i.
$^L Formfeed character used in formats.
$^P Internal debugging flag.
$^T The time (as delivered by time) when the program started. This value is used by the file test operators -M, -A and -C.
$^W The value of the -w option as passed to Perl.
$^X The name by which the currently executing program was invoked.
The following variables are context dependent and need not be localized:
$% The current page number of the currently selected output channel.
$= The page length of the current output channel. Default is 60 lines.
$- The number of lines remaining on the page.
$~ The name of the current report format.
$^ The name of the current top-of-page format.
$| If set to nonzero, forces a flush after every write or print on the currently selected output channel. Default is 0.
$ARGV The name of the current file when reading from <>.
The following variables are always local to the current block:
$& The string matched by the last successful pattern match.
$` The string preceding what was matched by the last successful match.
$' The string following what was matched by the last successful match.
$+ The last bracket matched by the last search pattern.
$1...$9... Contain the subpatterns from the corresponding sets of parentheses in the last pattern successfully matched. $10... and up are only available if the match contained that many subpatterns.


Special Arrays

@ARGV Contains the command-line arguments for the script (not including the command name).
@EXPORT Names the methods a package exports by default.
@EXPORT_OK Names the methods a package can export upon explicit request.
@INC Contains the list of places to look for Perl scripts to be evaluated by the do FILENAME and require commands.
@ISA List of base classes of a package.
@_ Parameter array for subroutines. Also used by split if not in array context.
%ENV Contains the current environment.
%INC List of files that have been included with require or do.
%OVERLOAD Can be used to overload operators in a package.
%SIG Used to set signal handlers for various signals.


Environment Variables

HOME Used if chdir has no argument.
LOGDIR Used if chdir has no argument and HOME is not set.
PATH Used in executing subprocesses, and in finding the Perl script if -S is used.
PERL5LIB A colon-separated list of directories to look in for Perl library files before looking in the standard library and the current directory.
PERL5DB The command to get the debugger code.
Defaults to BEGIN { require 'perl5db.pl' }.
PERLLIB Used instead of PERL5LIB if the latter is not defined.

Environment variables are stored in the hash %ENV, they can be accessed as $ENV{'varname'}, example:

print "$ENV{'HOME'}\n";