From: Vincent Pit Date: Mon, 3 Aug 2015 19:22:15 +0000 (-0300) Subject: Document the new warnings and caveats X-Git-Tag: v0.28~6 X-Git-Url: http://git.vpit.fr/?a=commitdiff_plain;h=9896bce7b63667d13e00791014f63e7ce9838243;p=perl%2Fmodules%2FScope-Upper.git Document the new warnings and caveats --- diff --git a/lib/Scope/Upper.pm b/lib/Scope/Upper.pm index 6e05a03..ab3bd67 100644 --- a/lib/Scope/Upper.pm +++ b/lib/Scope/Upper.pm @@ -613,6 +613,7 @@ When omitted, it defaults to the current context. my $upper_context = UP $from; The context of the scope just above C<$from>. +If C<$from> points to the top-level scope in the current stack, then a warning is emitted and C<$from> is returned (see L for details). =head3 C @@ -620,7 +621,8 @@ The context of the scope just above C<$from>. 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. +If C<$from> already designates a subroutine context, then it is returned as-is ; hence C. +If no subroutine context is present in the call stack, then a warning is emitted and the current context is returned (see L for details). =head3 C @@ -628,7 +630,8 @@ Note that C<$from> is returned if it is already a subroutine context ; hence C. -Note that C<$from> is returned if it is already an eval context ; hence C. +If C<$from> already designates an eval context, then it is returned as-is ; hence C. +If no eval context is present in the call stack, then a warning is emitted and the current context is returned (see L for details). =head2 Getting a context from a level @@ -641,6 +644,7 @@ When omitted, it defaults to C<0> and those functions return the same context as my $context = SCOPE $level; The C<$level>-th upper context, regardless of its type. +If C<$level> points above the top-level scope in the current stack, then a warning is emitted and the top-level context is returned (see L for details). =head3 C @@ -649,6 +653,7 @@ The C<$level>-th upper context, regardless of its type. The context of the C<$level>-th upper subroutine/eval/format. It kind of corresponds to the context represented by C, but while e.g. C refers to the caller context, C will refer to the top scope in the current context. +If C<$level> points above the top-level scope in the current stack, then a warning is emitted and the top-level context is returned (see L for details). =head2 Examples @@ -712,6 +717,19 @@ Where L, L, L, L and L point # (*) Note that uplevel() will croak if you pass that scope frame, # because it cannot target eval scopes. +=head1 DIAGNOSTICS + +=head2 C + +This warning is emitted when L, L or L end up pointing to a context that is above the top-level context of the current stack. +It indicates that you tried to go higher than the main scope, or to point across a C method, a signal handler, an overloaded or tied method call, a C statement or a C callback. +In this case, the resulting context is the highest reachable one. + +=head2 C + +This warning is emitted when you ask for an L or L context and no such scope can be found in the call stack. +The resulting context is the current one. + =head1 EXPORT The functions L, L, L, L, L, L, L, L, L and L are only exported on request, either individually or by the tags C<':funcs'> and C<':all'>. @@ -742,6 +760,8 @@ $EXPORT_TAGS{'all'} = [ @EXPORT_OK ]; =head1 CAVEATS +It is not possible to act upon a scope that belongs to another perl 'stack', i.e. to target a scope across a C method, a signal handler, an overloaded or tied method call, a C statement or a C callback. + Be careful that local variables are restored in the reverse order in which they were localized. Consider those examples: