One first hard step in implementing lexical scopes is to put together a lot of details that are spread over the specs. In this page we're going to sketch a model for the lexical scopes that support all the documented Perl 6 features.

Variable Lookup

The local variable lookup happens in the following order:

MY

OUTER recursive

Special cases

$_

$_ is always locally defined in any block. Routines start with an empty $_, other Code objects have a signature of:

-> $_ is rw = OUTER::<$_>

$! and $/

These variables are created empty in every new scope and marked as contextual, so their value can be set from the inner scopes and be seen from the caller. For instance, the regex code sets $+/ when the match succeeds, so that the calling code can see the match object.

Modelling

Data Structure

Accessing the Lexical Scope

The lexical scope is an attribute of the continuation, meaning that the "current continuation" points to the "current lexical scope". The Perl 6 specs doesn't specify a macro that return the current continuation, so we have one of the SMOP Specific Macros ___CURRENT_CONTINUATION___. This should provide access to the following API: