Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

What does it mean "$_." in PERL

by anakin30 (Acolyte)
on Aug 25, 2010 at 00:56 UTC ( [id://857049]=perlquestion: print w/replies, xml ) Need Help??

anakin30 has asked for the wisdom of the Perl Monks concerning the following question:

Hello everyone

I'm new to perl and i'm going through the lesson online

i'm now going through module 10 - Regular Expressions, and i saw the line below

m/PATTERN/ --> This operator returns true if PATTERN is found in $_.

I need someone explain to me what does it means "$_." and how does it work in the perl code?

Does it means "this" in perl?

Thank You Guys

Replies are listed 'Best First'.
Re: What does it mean "$_." in PERL
by ikegami (Patriarch) on Aug 25, 2010 at 01:09 UTC

    The variable "$_". (The dot is just the end of sentence period.)

    $_ = "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.

Re: What does it mean "$_." in PERL
by roboticus (Chancellor) on Aug 25, 2010 at 01:12 UTC

    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

Re: What does it mean "$_." in PERL
by planetscape (Chancellor) on Aug 25, 2010 at 03:02 UTC
Re: What does it mean "$_." in PERL
by Anonymous Monk on Aug 25, 2010 at 01:08 UTC
    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"

      Thanks for the reference :)

Re: What does it mean "$_." in PERL
by CountZero (Bishop) on Aug 25, 2010 at 15:47 UTC
    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

Re: What does it mean "$_." in PERL
by nvivek (Vicar) on Aug 25, 2010 at 05:51 UTC

    $_ 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.

      $_ is a special variable which contains the value of the last matched expression
      Interesting, where did you get that?

      Consider and meditate on the following:

      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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://857049]
Approved by ikegami
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (8)
As of 2024-04-23 12:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found