X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FScope%2FUpper.pm;h=920274050044846fa7f46002fbd66c40e290fddc;hb=refs%2Ftags%2Fv0.15;hp=67cc80f25cacee55a60cd57b2e0e1130985f9e82;hpb=6090555243b452a17460ab13510b8a15e0c62f5e;p=perl%2Fmodules%2FScope-Upper.git diff --git a/lib/Scope/Upper.pm b/lib/Scope/Upper.pm index 67cc80f..9202740 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.10 +Version 0.15 =cut our $VERSION; BEGIN { - $VERSION = '0.10'; + $VERSION = '0.15'; } =head1 SYNOPSIS @@ -24,7 +24,7 @@ L, L, L, L and L : package Scope; - use Scope::Upper qw/reap localize localize_elem localize_delete :words/; + use Scope::Upper qw; sub new { my ($class, $name) = @_; @@ -87,7 +87,7 @@ L and L : package Try; - use Scope::Upper qw/unwind want_at :words/; + use Scope::Upper qw; sub try (&) { my @result = shift->(); @@ -99,14 +99,14 @@ L and L : sub zap { try { - my @things = qw/a b c/; + my @things = qw; return @things; # returns to try() and then outside zap() # not reached }; # not reached } - my @stuff = zap(); # @stuff contains qw/a b c/ + my @stuff = zap(); # @stuff contains qw my $stuff = zap(); # $stuff contains 3 =head1 DESCRIPTION @@ -173,8 +173,8 @@ For example, will set C<$x> to a reference to the string C<'foo'>. Other sigils (C<'@'>, C<'%'>, C<'&'> and C<'*'>) require C<$value> to be a reference of the corresponding type. -When the symbol is given by a string, it is resolved when the actual localization takes place and not when C is called. -Thus, if the symbol name is not qualified, it will refer to the variable in the package where the localization actually takes place and not in the one where the C call was compiled. +When the symbol is given by a string, it is resolved when the actual localization takes place and not when L is called. +Thus, if the symbol name is not qualified, it will refer to the variable in the package where the localization actually takes place and not in the one where the L call was compiled. For example, { @@ -202,7 +202,8 @@ Although I believe it shouldn't be a problem as glob slots definedness is pretty =head2 C Introduces a C or C delayed to the time of first return into the upper scope denoted by C<$context>. -Just like for L, the type of localization is determined from which kind of reference C<$value> is when C<$what> is a glob, and from the sigil when it's a string. +Unlike L, C<$what> must be a string and the type of localization is inferred from its sigil. +The two only valid types are array and hash ; for anything besides those, L will throw an exception. C<$key> is either an array index or a hash key, depending of which kind of variable you localize. If C<$what> is a string pointing to an undeclared variable, the variable will be vivified as soon as the localization occurs and emptied when it ends, although it will still exist in its glob. @@ -379,13 +380,13 @@ Same goes for the words L, L, L, L, L, L =cut -use base qw/Exporter/; +use base qw; our @EXPORT = (); our %EXPORT_TAGS = ( - funcs => [ qw/reap localize localize_elem localize_delete unwind want_at/ ], - words => [ qw/TOP HERE UP SUB EVAL SCOPE CALLER/ ], - consts => [ qw/SU_THREADSAFE/ ], + funcs => [ qw ], + words => [ qw ], + consts => [ qw ], ); our @EXPORT_OK = map { @$_ } values %EXPORT_TAGS; $EXPORT_TAGS{'all'} = [ @EXPORT_OK ]; @@ -425,11 +426,15 @@ L (standard since perl 5.006). =head1 SEE ALSO +L, L. + L, L, L, L. L is a thin wrapper around L that gives you a continuation passing style interface to L. It's easier to use, but it requires you to have control over the scope where you want to return. +L. + =head1 AUTHOR Vincent Pit, C<< >>, L. @@ -457,7 +462,7 @@ Thanks to Shawn M. Moore for motivation. =head1 COPYRIGHT & LICENSE -Copyright 2008,2009,2010 Vincent Pit, all rights reserved. +Copyright 2008,2009,2010,2011 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.