Dan Sugalski wrote:
> On the other hand, if we put the address of the lexical's PMC into a
> register, it doesn't matter if someone messes with it, since they'll be
> messing with the same PMC, and thus every time we fetch its value we'll Do
> The Right Thing.

Hmm. Shouldn't re-binding affect only the *variable* and not
the value bound to the variable? Maybe I misunderstand a PMC, but
if the PMC represents a value, then re-binding a lexical should
create a new PMC and bind it to the variable.

I think we have a language question... What should the following
print?

  my $x = 1;
  my $y = \$x;
  my $z = 2;
  %MY::{'$x'} = \$z;
  $z = 3;
  print "$x, $$y, $z\n"

a. "2, 1, 3"
b. "2, 2, 3"
c. "3, 1, 3"
d. "3, 3, 3"
e. exception: not enough Gnomes

I think I would expect behavior (c), but it's not obvious to me.

Anyways, it looks like you just reached the same conclusion I have: we
can't shadow a named variable in a non-PMC register. This might have
a surprising effect on the speed of

  foreach (1..10)

vs.

  foreach my $i (1..10)

- Ken

Reply via email to