+The upper context isn't coerced onto C<@values>, which is hence always evaluated in list context.
+This means that
+
+ my $num = sub {
+ my @a = ('a' .. 'z');
+ unwind @a => HERE;
+ # not reached
+ }->();
+
+will set C<$num> to C<'z'>.
+You can use L</want_at> to handle these cases.
+
+=head2 C<want_at $context>
+
+Like C<wantarray>, but for the subroutine/eval/format at or just above C<$context>.
+
+The previous example can then be "corrected" :
+
+ my $num = sub {
+ my @a = ('a' .. 'z');
+ unwind +(want_at(HERE) ? @a : scalar @a) => HERE;
+ # not reached
+ }->();
+
+will rightfully set C<$num> to C<26>.
+
+=head1 CONSTANTS
+
+=head2 C<SU_THREADSAFE>
+
+True iff the module could have been built when thread-safety features.
+
+=head1 WORDS
+
+=head2 Constants
+
+=head3 C<TOP>
+
+Returns the context that currently represents the highest scope.
+
+=head3 C<HERE>
+
+The context of the current scope.
+
+=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 $from>
+
+The context of the scope just above C<$from>.
+
+=head3 C<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 $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 $level>
+
+The C<$level>-th upper context, regardless of its type.
+
+=head3 C<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), 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 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), 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 L</unwind> and L</want_at> point to depending on the C<$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)
+ ...