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 use $_
as a default argument:
abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, evalbytes, exp, fc, glob, hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print, printf, quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only), rmdir, say, sin, split (for 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 the next value or input record when a <FH>
, readline
, readdir
or each
operation's result is tested by itself as the sole criterion of a while
test. Outside a while
test, this will not happen.
$_
is a global variable.
However, between perl v5.10.0 and v5.24.0, it could be used lexically by writing my $_
. Making $_
refer to the global $_
in the same scope was then possible with our $_
. This experimental feature was removed and is now a fatal error, but you may encounter it in older code.
Mnemonic: underline is understood in certain operations.