in reply to
Re: A curious case of of my()
in thread 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.
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.