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

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

by Thilosophy (Curate)
on Dec 11, 2007 at 11:14 UTC ( #656376=note: print w/ replies, xml ) Need Help??


in reply to Re: Duh. 'my' scope in if else blocks.
in thread Duh. 'my' scope in if else blocks.

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


Comment on Re^2: Duh. 'my' scope in if else blocks.
Select or Download Code
Re^3: Duh. 'my' scope in if else blocks.
by doom (Deacon) on Dec 11, 2007 at 19:14 UTC

    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;

Re^3: Duh. 'my' scope in if else blocks.
by ikegami (Pope) on Dec 11, 2007 at 19:57 UTC

    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.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2014-08-23 12:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (173 votes), past polls