This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
sv.c:sv_reset: Remove %ENV handling; fix for VMS
authorFather Chrysostomos <sprout@cpan.org>
Sun, 11 Aug 2013 19:51:10 +0000 (12:51 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 11 Aug 2013 19:51:10 +0000 (12:51 -0700)
The special env handling (calling my_clearenv) in sv_reset is com-
pletely unnecessary, because
 • sv_reset calls hv_clear
 • hv_clear calls mg_clear for magical arrays
 • mg_clear calls magic_set_all_env for %ENV
 • magic_set_all_env calls my_clearenv
so it gets called twice (confirmed with gdb breakpoints).

The VMS handling in sv_reset was wrong, because it was not even inside
the if(gv==PL_envgv) condition.  It was croaking for any hash, not
just %ENV (the fault of commit b0269e46d).  (This was based on code
inspection; not actually tested.)

Handling %ENV specially in sv_reset has been unnecessary since ‘clear’
magic was added to %ENV in commit fb73857aa (inseparable changes from
patch to perl 5.004_04).

sv.c

diff --git a/sv.c b/sv.c
index 36a9908..8765397 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -9161,15 +9161,7 @@ Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
                    av_clear(GvAV(gv));
                }
                if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
                    av_clear(GvAV(gv));
                }
                if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
-#if defined(VMS)
-                   Perl_die(aTHX_ "Can't reset %%ENV on this system");
-#else /* ! VMS */
                    hv_clear(GvHV(gv));
                    hv_clear(GvHV(gv));
-#  if defined(USE_ENVIRON_ARRAY)
-                   if (gv == PL_envgv)
-                       my_clearenv();
-#  endif /* USE_ENVIRON_ARRAY */
-#endif /* VMS */
                }
            }
        }
                }
            }
        }