What happens in the interpreter when a statement such as "my $a=1;" is encountered?
I suppose the "binding" of the name "$a" to the value "1" is recorded in some data-structure (whatever that data-structure is called in the internals of Perl).
Then whenever $a is referenced this data-structure is examined.
When another statement "my $b=2" is encountered I suppose this new binding of the name "$b" to the value "2" is also recorded in a data-structure - and I would expect it to be the same data-structure - the data-structure that holds all lexial variables for a given lexial scope.
Now when a closure is created it needs to "remember" the lexial variables in scope and this could easily achieved by giving the data-structure that describes a closure simply a pointer (or a reference or whatever) to the data-strcuture that holds the variable-bindinds (and holding all of them).
This is what I had expected (from 10.000 feet) the Perl-interpreter to do.
But - as you pointed out it - that is not how it works.
So how does it actually work?
Can anyone explain at a very high level how lexical variables and closures are implemented in the Perl-internals?
In reply to Re^12: Accessing lexicals in other scopes dynamically by name
by morgon
in thread Accessing lexicals in other scopes dynamically by name
by LanX
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |