"Bryan C. Warnock" <[EMAIL PROTECTED]> wrote:
> On Thursday 06 September 2001 06:16 am, Dave Mitchell wrote:
> > One further worry of mine concerns the action of %MY:: on unintroduced
> > variables (especially the action of delete).
> >
> > my $x = 100;
> > {
> >     my $x = (%MY::{'$x'} = \200, $x+1);
> >     print "inner=$x, ";
> > }
> > print "outer=$x";
> >
> > I'm guessing this prints inner=201, outer=200
> 
> Perhaps I missed something, but %MY:: refers to my lexical scope, and not my 
> parents, correct?
> 
> Why isn't this inner=201, outer=100?

Because on the RHS of a 'my $x = ...' expression, $x is not yet in scope
(ie hasn't been "introduced"), so

    my $x = 100; { my $x = $x+1; print $x }

prints 101, not 1 - the $x in the '$x+1' expression refers to the $x in the
outer scope.

I was just trying to confirm whether similar semantics apply to the use of
%MY:: - ie when used where a lexical has been defined but not yet introduced,
does %MY{'$x'} pick up the inner or outer lex?

I especially wanted to confirm whether delete %MY{'$x'} will delete the outer
$x because the inner one isn't yet quite in scope.

Reply via email to