Understanding Perl's Special Variables - In Default (
Page 2 of 11 )
One of the more important special variables you'll encounter in your Perl
forays is $_, which is used by many Perl functions and constructs as the
so-called "default variable" when none other exists. In order to demonstrate,
consider the following example:
#!/usr/bin/perl
# set array
%stuff = ("phone", "Nokia", "car", "BMW",
"gun", "Smith & Wesson");
# iterate over array
foreach $s (keys(%stuff))
{
print "$s\n";
}
Here's the output:
car
gun
phone
In this case, the foreach() loop iterates over the hash, assigning the
key
at each iteration to the $s instance variable; this variable is
then
printed with the print() function. If, however, you omit the
instance
variable in the foreach() loop, Perl will assume that you want it to
use
the default $_ variable as the instance variable.
The following example, which is equivalent to the one above,
demonstrates:
#!/usr/bin/perl
# set array
%stuff = ("phone", "Nokia", "car", "BMW",
"gun", "Smith & Wesson");
# iterate over array
foreach (keys(%stuff))
{
print "$_\n";
}
Here, every time the loop iterates over the hash, since no instance variable
is specified, Perl will assign the key to the default variable $_. This variable
can then be printed via a call to print().
The $_ variable also serves as the default for both chop() and print()
functions. Going back to the example above, you could also write it this
way,
#!/usr/bin/perl
# set array
%stuff = ("phone", "Nokia", "car", "BMW",
"gun", "Smith & Wesson");
# iterate over array
foreach (keys(%stuff))
{
print;
}
which would return
cargunphone
The $_ variable is also the default variable used by file and input handles.
For example, consider the following simple Perl script, which prints back
whatever input you give it:
#!/usr/bin/perl
# read from standard input
# print it back
while (<STDIN>)
{
print $_;
}
In this case, every line read by the standard input is assigned to the $_
variable, which is then printed back out with print().
Knowing what you now know about print() and $_, it's clear that you could
also write the above as
#!/usr/bin/perl
# read from standard input
# print it back
while (<STDIN>)
{
print;
}
The $_ default variable is used in a number of different places: it is the
default variable used for pattern-matching and substitution operations; the
default variable used by functions like print(), chop(), grep(), ord(),
etc; the default instance variable in foreach() loops; and the default used
for various file tests.