Avoid to load the *+ and *- globs too early.
Rafael Garcia-Suarez [Wed, 7 Mar 2007 10:33:38 +0000 (10:33 +0000)]
To silence spurious interpolation warnings, merely
create the stash entry for them. Ensure that the
re::Tie::Hash::NamedCapture module is always loaded
when we have created the tied hashes %+ and %-.
Revert change #30483, which is now unnecessary.
p4raw-link: @30483 on //depot/perl: 73f68b39467596f862aade4f4b46d6061aa98bd3

p4raw-id: //depot/perl@30490

gv.c
lib/dumpvar.pl
perl.c

diff --git a/gv.c b/gv.c
index 95ff938..a75203b 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -1211,8 +1211,8 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
            HV *const hv_tie = newHV();
             SV *tie = newRV_noinc((SV*)hv_tie);
 
-            sv_bless(tie, gv_stashsv(stashname,GV_ADD));
-            hv_magic(hv, (GV*)tie, PERL_MAGIC_tied);    
+           sv_bless(tie, gv_stashsv(stashname, GV_ADD));
+           hv_magic(hv, (GV*)tie, PERL_MAGIC_tied);
             sv_magic((SV*)av, (plus ? (SV*)av : NULL), PERL_MAGIC_regdata, NULL, 0);
             sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
 
@@ -1220,15 +1220,12 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
                 SvREADONLY_on(GvSVn(gv));
             else
                 Perl_hv_store(aTHX_ hv_tie, STR_WITH_LEN("all"), newSViv(1), 0);
-            
+
             SvREADONLY_on(hv);
             SvREADONLY_on(tie);
             SvREADONLY_on(av);
-                
-            if (sv_type == SVt_PVHV) 
-                require_tie_mod(gv, name, stashname, "FETCH", 0);
-           else
-               SvREFCNT_dec(stashname);
+
+           require_tie_mod(gv, name, stashname, "FETCH", 0);
 
            break;
        }
index d02ebb9..0268cea 100644 (file)
@@ -377,7 +377,6 @@ sub dumpglob {
       unwrap(\@entry,3+$off,$m) ;
       print( (' ' x $off) .  ")\n" );
     }
-    if ($key eq '-') { eval { require re::Tie::Hash::NamedCapture } }
     if ($key ne "main::" && $key ne "DB::" && %entry
        && ($dumpPackages or $key !~ /::$/)
        && ($key !~ /^_</ or $dumpDBFiles)
diff --git a/perl.c b/perl.c
index aac8181..7acf664 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -4722,8 +4722,10 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register
       (void) get_av("main::F", TRUE | GV_ADDMULTI);
     }
     /* touch @- and @+ arrays to prevent spurious warnings 20020415 MJD */
-    (void) get_av("main::-", TRUE | GV_ADDMULTI);
-    (void) get_av("main::+", TRUE | GV_ADDMULTI);
+    /* (but don't load the glob, since that requires loading
+     * re::Tie::Hash::NamedCapture, and miniperl can't do that */
+    (void) hv_fetch(PL_defstash, "-", 1, GV_ADDMULTI);
+    (void) hv_fetch(PL_defstash, "+", 1, GV_ADDMULTI);
 }
 
 STATIC void