$_
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 -
The pattern matching operations
m//
,s///
andtr///
(akay///
) 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()
andmap()
functions. -
The implicit variable of
given()
. -
The default place to put the next value or input record when a
<FH>
,readline
,readdir
oreach
operation's result is tested by itself as the sole criterion of awhile
test. Outside awhile
test, this will not happen.
$_
is by default a global variable. However, as of perl v5.10.0, you can 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. Though this seemed like a good idea at the time it was introduced, lexical $_
actually causes more problems than it solves. If you call a function that expects to be passed information via $_
, it may or may not work, depending on how the function is written, there not being any easy way to solve this. Just avoid lexical $_
, unless you are feeling particularly masochistic. For this reason lexical $_
is still experimental and will produce a warning unless warnings have been disabled. As with other experimental features, the behavior of lexical $_
is subject to change without notice, including change into a fatal error.
Mnemonic: underline is understood in certain operations.
Please login to continue.