$_ = "abc";
print /b/ ?1:0,"\n"; # 1
$_ = "def";
print /b/ ?1:0,"\n"; # 0
Does it means "this" in perl?
Yes and no.
There's nothing intrinsically special about $_. It's a global variable that happens to be used by default by many operators. Two common loop structures set it by default: it's for's default iterator, and while (<$fh>) is short for while (defined($_ = <$fh>)).
(Java's?) this cannot be set, and is only used by one operator (object dereference).
$self is usually used for this in Perl, but it's just an ordinary variable. It needs to be specified explicitly, so it can have any name.
| [reply] [d/l] [select] |
The "$_" variable is described in perlvar. It's the default variable for many operators and functions.
This bit of code uses a variable:
while (my $line = <INFILE>) {
print $line;
print "FOUND IT!\n" if $line =~ /foo/;
}
But if we wanted to use $_, we could rewrite the code as:
while (<INFILE>) {
print;
print "FOUND IT!\n" if /foo/;
}
It's a very handy variable, but I only tend to use it in very small areas. I often find using a variable name to be a bit more clear and simple (for me) to maintain.
...roboticus
| [reply] [d/l] [select] |
What lessons? Its seems like you skipped the very first lesson :)
Please read perlintro and |perlvar
$_ is not related to objects, so it is not the equivalent of "this" | [reply] |
| [reply] |
From the docs:
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
-
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.
CountZero A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James
| [reply] |
$_ is a special variable which contains the value of the last matched expression or the intermediate value in loops such as for, while, etc.,if you don't store that matched expression into explicit variables.
| [reply] |
use strict;
use warnings;
use 5.012;
my $string = 'This is a string';
my $match = $string =~ m/string/;
say $match;
say $_;
Wich outputs:1
And the following warning:Use of uninitialized value $_ in say at C:\Data\strawberry-perl\perl\s
+cript-chrome\Perl-1.pl line 9.
CountZero A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James
| [reply] [d/l] [select] |