+WORDS
+ Constants
+ "TOP"
+ Returns the context that currently represents the highest scope.
+
+ "HERE"
+ The context of the current scope.
+
+ Getting a context from a context
+ For any of those functions, $from is expected to be a context. When
+ omitted, it defaults to the the current context.
+
+ "UP $from"
+ The context of the scope just above $from.
+
+ "SUB $from"
+ The context of the closest subroutine above $from. Note that $from is
+ returned if it is already a subroutine context ; hence "SUB SUB == SUB".
+
+ "EVAL $from"
+ The context of the closest eval above $from. Note that $from is returned
+ if it is already an eval context ; hence "EVAL EVAL == EVAL".
+
+ Getting a context from a level
+ Here, $level should denote a number of scopes above the current one.
+ When omitted, it defaults to 0 and those functions return the same
+ context as "HERE".
+
+ "SCOPE $level"
+ The $level-th upper context, regardless of its type.
+
+ "CALLER $level"
+ The context of the $level-th upper subroutine/eval/format. It kind of
+ corresponds to the context represented by "caller $level", but while
+ e.g. "caller 0" refers to the caller context, "CALLER 0" will refer to
+ the top scope in the current context.
+
+ Examples
+ Where "reap" fires depending on the $cxt :
+
+ sub {
+ eval {
+ sub {
+ {
+ reap \&cleanup => $cxt;
+ ...
+ } # $cxt = SCOPE(0), or HERE
+ ...
+ }->(); # $cxt = SCOPE(1), or UP, or SUB, or CALLER, or CALLER(0)
+ ...
+ }; # $cxt = SCOPE(2), or UP UP, or UP SUB, or EVAL, or CALLER(1)
+ ...
+ }->(); # $cxt = SCOPE(3), or SUB UP SUB, or SUB EVAL, or CALLER(2)
+ ...
+
+ Where "localize", "localize_elem" and "localize_delete" act depending on
+ the $cxt :
+
+ sub {
+ eval {
+ sub {
+ {
+ localize '$x' => 1 => $cxt;
+ # $cxt = SCOPE(0), or HERE
+ ...
+ }
+ # $cxt = SCOPE(1), or UP, or SUB, or CALLER, or CALLER(0)
+ ...
+ }->();
+ # $cxt = SCOPE(2), or UP UP, or UP SUB, or EVAL, or CALLER(1)
+ ...
+ };
+ # $cxt = SCOPE(3), or SUB UP SUB, or SUB EVAL, or CALLER(2)
+ ...
+ }->();
+ # $cxt = SCOPE(4), UP SUB UP SUB, or UP SUB EVAL, or UP CALLER(2), or TOP
+ ...
+
+ Where "unwind" and "want_at" point to depending on the $cxt:
+
+ sub {
+ eval {
+ sub {
+ {
+ unwind @things => $cxt;
+ ...
+ }
+ ...
+ }->(); # $cxt = SCOPE(0 .. 1), or HERE, or UP, or SUB, or CALLER(0)
+ ...
+ }; # $cxt = SCOPE(2), or UP UP, or UP SUB, or EVAL, or CALLER(1)
+ ...
+ }->(); # $cxt = SCOPE(3), or SUB UP SUB, or SUB EVAL, or CALLER(2)
+ ...