Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: A curious case of of my()

by kilocoder (Novice)
on Apr 05, 2011 at 16:42 UTC ( #897553=note: print w/ replies, xml ) Need Help??


in reply to A curious case of of my()

$href is empty, since it is not passed into foo. hence @array ends up being a package variable and not a lexical variable.
your code

sub foo{ my $var = shift; my $href = shift; my @array = $href->{pass_in} if defined $href and exists $href +->{pass_in}; push @array, $var; print "contents : @array\n"; } foo(1); foo(2);
This gives
contents : 1
contents : 1 2

However, commenting out the unused href code and declaring array as a lexical like:

sub foo{ my $var = shift; my @array; #my $href = shift; #my @array = $href->{pass_in} if defined $href and exists $hre +f->{pass_in}; push @array, $var; print "contents : @array\n"; } foo(1); foo(2);
gives

contents : 1
contents : 2

I hope for nothing. I fear nothing. I am free.


Comment on Re: A curious case of of my()
Select or Download Code
Replies are listed 'Best First'.
Re^2: A curious case of of my()
by shmem (Canon) on May 05, 2011 at 10:34 UTC
    $href is empty, since it is not passed into foo. hence @array ends up being a package variable and not a lexical variable.

    As others have pointed out, that's wrong. my creates lexicals at compile time. It doesn't have a our fallback. The 'if' modifier with a false condition inhibits the opcode which clears the lexical at runtime.

    our @array; # package vaiable @array = qw( foo bar ); sub foo{ my $var = shift; my $href = shift; my @array = $href->{pass_in} if defined $href and exists $href +->{pass_in}; push @array, $var; print "contents : @array\n"; } print "outer scope - contents : @array\n"; foo(1); foo(2); print "outer scope - contents : @array\n"; __END__ outer scope - contents : foo bar contents : 1 contents : 1 2 outer scope - contents : foo bar

    As you can see, the variable @array inside the sub is a lexical.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2015-07-29 01:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (260 votes), past polls