in reply to Re^11: Accessing lexicals in other scopes dynamically by name
in thread Accessing lexicals in other scopes dynamically by name
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?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^13: Accessing lexicals in other scopes dynamically by name
by ikegami (Patriarch) on Aug 01, 2010 at 06:34 UTC | |
by morgon (Priest) on Aug 02, 2010 at 00:54 UTC | |
by ikegami (Patriarch) on Aug 02, 2010 at 03:32 UTC |