X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FScope%2FUpper.pm;h=3c641ac5c813f45a2d22530ec5db19dc828ed8f2;hb=02798a015a7fae0ff3d924b3270def3996e4210b;hp=1e5f75dbf63826e0def54c7e004fcb5ded560273;hpb=4a54085f1cdf66a64b73531e5cacced8ade613c9;p=perl%2Fmodules%2FScope-Upper.git
diff --git a/lib/Scope/Upper.pm b/lib/Scope/Upper.pm
index 1e5f75d..3c641ac 100644
--- a/lib/Scope/Upper.pm
+++ b/lib/Scope/Upper.pm
@@ -9,20 +9,20 @@ Scope::Upper - Act on upper scopes.
=head1 VERSION
-Version 0.01
+Version 0.03
=cut
our $VERSION;
BEGIN {
- $VERSION = '0.01';
+ $VERSION = '0.03';
}
=head1 SYNOPSIS
package X;
- use Scope::Upper qw/reap localize localize_elem/;
+ use Scope::Upper qw/reap localize localize_elem localize_delete/;
sub desc { shift->{desc} }
@@ -43,13 +43,15 @@ BEGIN {
my $x = do { no strict 'refs'; ${$pkg.'::x'} }; # Get the $x in the scope
CORE::warn($x->desc . ': ' . join('', @_));
} => 1;
+
+ localize_delete '@ARGV', $#ARGV => 1; # delete last @ARGV element
}
package Y;
{
X::set_tag('pie');
- # $x is now a X object
+ # $x is now a X object, and @ARGV has one element less
warn 'what'; # warns "pie: what at ..."
...
} # "pie: done" is printed
@@ -57,7 +59,7 @@ BEGIN {
=head1 DESCRIPTION
This module lets you defer actions that will take place when the control flow returns into an upper scope.
-Currently, you can hook an upper scope end, or localize variables and array/hash values in higher contexts.
+Currently, you can hook an upper scope end, or localize variables, array/hash values or deletions of elements in higher contexts.
=head1 FUNCTIONS
@@ -111,13 +113,62 @@ Similar to L but for array and hash elements.
If C<$what> is a glob, the slot to fill is determined from which type of reference C<$value> is ; otherwise it's inferred from the sigil.
C<$key> is either an array index or a hash key, depending of which kind of variable you localize.
-=head2 C
+=head2 C
+
+Similiar to L, but for deleting variables or array/hash elements.
+C<$what> can be:
+
+=over 4
+
+=item *
+
+A glob, in which case C<$key> is ignored and the call is equivalent to C.
+
+=item *
+
+A string beginning with C<'@'> or C<'%'>, for which the call is equivalent to respectiveley C and C.
+
+=item *
+
+A string beginning with C<'&'>, which more or less does C in the upper scope.
+It's actually more powerful, as C<&func> won't even C anymore.
+C<$key> is ignored.
+
+=back
+
+=head1 WORDS
+
+=head2 C
Returns the level that currently represents the highest scope.
+=head2 C
+
+The current level - i.e. C<0>.
+
+=head2 C
+
+The level of the scope just above C<$from>.
+
+=head2 C
+
+The level of the scope just below C<$from>.
+
+=head2 C
+
+The level of the closest subroutine context above C<$from>.
+
+=head2 C
+
+The level of the closest eval context above C<$from>.
+
+If C<$from> is omitted in any of those functions, the current level is used as the reference level.
+
=head1 EXPORT
-The functions L, L, L and L are only exported on request, either individually or by the tags C<':funcs'> and C<':all'>.
+The functions L, L, L and L are only exported on request, either individually or by the tags C<':funcs'> and C<':all'>.
+
+Same goes for the words L, L, L, L, L and L that are only exported on request, individually or by the tags C<':words'> and C<':all'>.
=cut
@@ -125,7 +176,8 @@ use base qw/Exporter/;
our @EXPORT = ();
our %EXPORT_TAGS = (
- funcs => [ qw/reap localize localize_elem TOPLEVEL/ ],
+ funcs => [ qw/reap localize localize_elem localize_delete/ ],
+ words => [ qw/TOP CURRENT UP DOWN SUB EVAL/ ],
);
our @EXPORT_OK = map { @$_ } values %EXPORT_TAGS;
$EXPORT_TAGS{'all'} = [ @EXPORT_OK ];
@@ -179,13 +231,15 @@ You can find documentation for this module with the perldoc command.
perldoc Scope::Upper
+Tests code coverage report is available at L.
+
=head1 ACKNOWLEDGEMENTS
Inspired by Ricardo Signes.
=head1 COPYRIGHT & LICENSE
-Copyright 2008 Vincent Pit, all rights reserved.
+Copyright 2008-2009 Vincent Pit, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.