From: Vincent Pit Date: Sat, 27 Dec 2008 14:41:31 +0000 (+0100) Subject: This module has caveats, so explain them X-Git-Tag: v0.02~10 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FScope-Upper.git;a=commitdiff_plain;h=4a54085f1cdf66a64b73531e5cacced8ade613c9 This module has caveats, so explain them --- diff --git a/lib/Scope/Upper.pm b/lib/Scope/Upper.pm index 6128a8f..1e5f75d 100644 --- a/lib/Scope/Upper.pm +++ b/lib/Scope/Upper.pm @@ -130,6 +130,31 @@ our %EXPORT_TAGS = ( 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).