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