Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Duh. 'my' scope in if else blocks.

by doom (Deacon)
on Dec 11, 2007 at 01:50 UTC ( [id://656294]=note: print w/replies, xml ) Need Help??


in reply to Duh. 'my' scope in if else blocks.

It makes sense to me because the "my" is up outside of the curlies. This wouldn't work, for example:

if ( scalar( @_ ) ) { my $t = shift; $t =~ s/change_something/to_something_else/; } print "$t\n";
Parenthencies don't influence lexical scope.

Replies are listed 'Best First'.
Re^2: Duh. 'my' scope in if else blocks.
by Thilosophy (Curate) on Dec 11, 2007 at 11:14 UTC
    This won't work either, even though my $t is outside of the curlies (but inside the parens) now:
    if ( my $t = shift ) { $t =~ s/change_something/to_something_else/; } print "$t\n"; # out of scope here
    if behaves similar to for in this respect.

    Somewhat surprisingly then, this does not work:

    print $t if (my $t = shift);

      doom's explanation is wrong. It has nothing to do with order. Even if you fixed the order, it still wouldn't work.

      (my $t = shift) and print $t; # Fails.

      Variables cannot be used (by name) in the statement in which they are declared. This allows statements such as my $t = $t; to work.

      print $t if (my $t = shift); # Fails. my $t = shift; print $t if $t; # Ok. if (my $t = shift) { print $t; } # Ok.

      if behaves similar to for in this respect.

      Yes good point. I always forget about that, too... sometimes you'd like to have the loop counter defined after the loop is over, but you have to make a special effort to do that. This won't work, for example:

      my @list = qw( wuhn tew thuree foah DONE whateva you know); for my $i (0..10) { last if ($list[$i] eq 'DONE'); } print "final index: $i\n";

      Somewhat surprisingly then, this does not work:
      print $t if (my $t = shift);

      Well, I wouldn't say that that's exactly a surprise -- after all, it's a fairly odd thing to do, declaring it's a lexical after you use it... This doesn't work either:

      $t = shift; print $t; my $t;

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (2)
As of 2024-04-25 20:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found