You are viewing the version of this documentation from Perl 5.12.4. View the latest version

The default input and pattern-searching space. The following pairs are equivalent:

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

$_ =~ /^Subject:/

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


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.)