Changes for version 0.17 - 2011-10-03
- Fix : uplevel() will now use the correct pad when executing its callback. This fixes at least two issues :
- closures defined inside the uplevel callback can now correctly access lexicals from inside and outside the callback.
- state variables in the uplevel callback now work properly.
- Fix : It is now generally possible to call goto() in the uplevel'd code to replace the uplevel stack frame. There are two cases for which it is still not possible :
- if -D flags were set when running perl (as in "perl -Dt ...").
- if the perl runloop has been replaced with a custom one by another module. If uplevel() detects that the replacement code contains a goto statement, and is in one of those two cases, then it will refuse to execute the callback and throw an exception. Note that this fix implies a run-time overhead of uplevel() proportional to the size of the the callback in every case (with a small ratio), and proportional to the size of ALL the code executed as the result of the uplevel call (including subroutine calls inside the callback) when a goto statement is found in the uplevel callback.
- Fix : uplevel() has been taught how to handle XS callbacks properly.
- Fix : The cause of "Attempt to free unreferenced scalar" warnings when using uplevel() has been addressed.
- Fix : [RT #71212] : build failure on Windows. The module does no longer rely on calling Perl_cv_clone, which isn't exported. Thanks C.H. Kang for reporting.
Modules
Act on upper scopes.