The default input and pattern-searching space. The following pairs are equivalent:
while (<>) {...} # equivalent only in while!
while (defined($_ = <>)) {...}
/^Subject:/
$_ =~ /^Subject:/
tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/
chomp
chomp($_)
Here are the places where Perl will assume $_ even if you don't use it:
The following functions:
abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, exp, glob, hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print, quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only), rmdir, sin, split (on its second argument), sqrt, stat, study, uc, ucfirst, unlink, unpack.
All file tests (-f
, -d
) except for -t
, which defaults to STDIN. See "-X" in perlfunc
The pattern matching operations m//
, s///
and tr///
(aka y///
) 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 implicit variable of given().
The default place to put an input record when a <FH>
operation's result is tested by itself as the sole criterion of a while
test. Outside a while
test, this will not happen.
As $_
is a global variable, this may lead in some cases to unwanted side-effects. As of perl 5.9.1, you can now use a lexical version of $_
by declaring it in a file or in a block with my
. Moreover, declaring our $_
restores the global $_
in the current scope.
(Mnemonic: underline is understood in certain operations.)