X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FScope%2FUpper.pm;h=5fa9a519c9dc505f21fb48ada7b74fbbc4f2fe32;hb=44bf1ddcf3a97b602ae2c3ff267375989e5a4dfd;hp=6128a8f10dd0fb906ca2663fa89215acffbd584b;hpb=ded0c62307dd417bbd7390457692310aca67ea93;p=perl%2Fmodules%2FScope-Upper.git diff --git a/lib/Scope/Upper.pm b/lib/Scope/Upper.pm index 6128a8f..5fa9a51 100644 --- a/lib/Scope/Upper.pm +++ b/lib/Scope/Upper.pm @@ -9,13 +9,13 @@ Scope::Upper - Act on upper scopes. =head1 VERSION -Version 0.01 +Version 0.02 =cut our $VERSION; BEGIN { - $VERSION = '0.01'; + $VERSION = '0.02'; } =head1 SYNOPSIS @@ -111,13 +111,20 @@ 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 + +Similiar to L, but for deleting objects or elements. +If C<$what> is a glob, it's equivalent to C, and C<$key> is ignored. +If C<$what> is a string beginning with C<'@'> or C<'%'>, it's equivalent to respectiveley C or C. +If C<$what> is a string beginning with C<'&'>, it's more or less of equivalent to C, but actually more powerful as C<&func> won't even C anymore. + =head2 C Returns the level that currently represents the highest scope. =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, L and L are only exported on request, either individually or by the tags C<':funcs'> and C<':all'>. =cut @@ -125,11 +132,36 @@ use base qw/Exporter/; our @EXPORT = (); our %EXPORT_TAGS = ( - funcs => [ qw/reap localize localize_elem TOPLEVEL/ ], + funcs => [ qw/reap localize localize_elem localize_delete TOPLEVEL/ ], ); our @EXPORT_OK = map { @$_ } values %EXPORT_TAGS; $EXPORT_TAGS{'all'} = [ @EXPORT_OK ]; +=head1 CAVEATS + +Be careful that local variables are restored in the reverse order in which they were localized. +Consider those examples: + + local $x = 0; + { + reap sub { print $x } => 0; + local $x = 1; + ... + } + # prints '0' + ... + { + local $x = 1; + reap sub { $x = 2 } => 0; + ... + } + # $x is 0 + +The first case is "solved" by moving the C before the C, and the second by using L instead of L. + +L, L and L effects can't cross C blocks, hence calling those functions in C is deemed to be useless. +This is an hopeless case because C blocks are executed once while localizing constructs should do their job at each run. + =head1 DEPENDENCIES L (standard since perl 5.006). @@ -154,6 +186,8 @@ 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.