PL_ prefix to all perlvars, part1
Nick Ing-Simmons [Sat, 18 Jul 1998 13:53:03 +0000 (13:53 +0000)]
   Builds and passes all tests at one limit i.e. -DPERL_GLOBAL_STRUCT

p4raw-id: //depot/ansiperl@1532

51 files changed:
XSUB.h
av.c
bytecode.h
byterun.c
byterun.h
cop.h
deb.c
doio.c
doop.c
dump.c
embed.pl
embedvar.h
ext/B/B.xs
ext/Data/Dumper/Dumper.xs
ext/DynaLoader/dl_next.xs
ext/ODBM_File/ODBM_File.xs
ext/Opcode/Opcode.xs
ext/POSIX/POSIX.xs
ext/Socket/Socket.xs
ext/attrs/attrs.xs
ext/re/re.xs
gv.c
hv.c
hv.h
lib/ExtUtils/typemap
lib/ExtUtils/xsubpp
mg.c
miniperlmain.c
op.c
perl.c
perl.h
perly.c
perly.y
pp.c
pp.h
pp_ctl.c
pp_hot.c
pp_sys.c
regcomp.c
regcomp.h
regexec.c
run.c
scope.c
scope.h
sv.c
sv.h
taint.c
thrdvar.h
toke.c
universal.c
util.c

diff --git a/XSUB.h b/XSUB.h
index cd8a732..8edefcf 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
@@ -1,4 +1,4 @@
-#define ST(off) stack_base[ax + (off)]
+#define ST(off) PL_stack_base[ax + (off)]
 
 #ifdef CAN_PROTOTYPE
 #ifdef PERL_OBJECT
 #define XS(name) void name(cv) CV* cv;
 #endif
 
+#define na             PL_na
+#define sv_undef       PL_sv_undef
+#define sv_yes         PL_sv_yes
+#define sv_no          PL_sv_no
+
 #define dXSARGS                                \
        dSP; dMARK;                     \
-       I32 ax = mark - stack_base + 1; \
+       I32 ax = mark - PL_stack_base + 1;      \
        I32 items = sp - mark
 
 #define XSANY CvXSUBANY(cv)
@@ -31,7 +36,7 @@
 
 #define XSRETURN(off)                                  \
     STMT_START {                                       \
-       stack_sp = stack_base + ax + ((off) - 1);       \
+       PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
        return;                                         \
     } STMT_END
 
@@ -40,9 +45,9 @@
 #define XST_mIV(i,v)  (ST(i) = sv_2mortal(newSViv(v))  )
 #define XST_mNV(i,v)  (ST(i) = sv_2mortal(newSVnv(v))  )
 #define XST_mPV(i,v)  (ST(i) = sv_2mortal(newSVpv(v,0)))
-#define XST_mNO(i)    (ST(i) = &sv_no   )
-#define XST_mYES(i)   (ST(i) = &sv_yes  )
-#define XST_mUNDEF(i) (ST(i) = &sv_undef)
+#define XST_mNO(i)    (ST(i) = &PL_sv_no   )
+#define XST_mYES(i)   (ST(i) = &PL_sv_yes  )
+#define XST_mUNDEF(i) (ST(i) = &PL_sv_undef)
  
 #define XSRETURN_IV(v) STMT_START { XST_mIV(0,v);  XSRETURN(1); } STMT_END
 #define XSRETURN_NV(v) STMT_START { XST_mNV(0,v);  XSRETURN(1); } STMT_END
@@ -57,6 +62,7 @@
 #ifdef XS_VERSION
 # define XS_VERSION_BOOTCHECK \
     STMT_START {                                                       \
+       SV *Sv;                                                         \
        char *vn = Nullch, *module = SvPV(ST(0),na);                    \
        if (items >= 2)  /* version supplied as bootstrap arg */        \
            Sv = ST(1);                                                 \
diff --git a/av.c b/av.c
index d683df9..2f9c617 100644 (file)
--- a/av.c
+++ b/av.c
@@ -29,18 +29,18 @@ av_reify(AV *av)
 #endif
     key = AvMAX(av) + 1;
     while (key > AvFILLp(av) + 1)
-       AvARRAY(av)[--key] = &sv_undef;
+       AvARRAY(av)[--key] = &PL_sv_undef;
     while (key) {
        sv = AvARRAY(av)[--key];
        assert(sv);
-       if (sv != &sv_undef) {
+       if (sv != &PL_sv_undef) {
            dTHR;
            (void)SvREFCNT_inc(sv);
        }
     }
     key = AvARRAY(av) - AvALLOC(av);
     while (key)
-       AvALLOC(av)[--key] = &sv_undef;
+       AvALLOC(av)[--key] = &PL_sv_undef;
     AvREAL_on(av);
 }
 
@@ -78,7 +78,7 @@ av_extend(AV *av, I32 key)
            SvPVX(av) = (char*)AvALLOC(av);
            if (AvREAL(av)) {
                while (tmp)
-                   ary[--tmp] = &sv_undef;
+                   ary[--tmp] = &PL_sv_undef;
            }
            
            if (key > AvMAX(av) - 10) {
@@ -123,10 +123,10 @@ av_extend(AV *av, I32 key)
              resized:
                ary = AvALLOC(av) + AvMAX(av) + 1;
                tmp = newmax - AvMAX(av);
-               if (av == curstack) {   /* Oops, grew stack (via av_store()?) */
-                   stack_sp = AvALLOC(av) + (stack_sp - stack_base);
-                   stack_base = AvALLOC(av);
-                   stack_max = stack_base + newmax;
+               if (av == PL_curstack) {        /* Oops, grew stack (via av_store()?) */
+                   PL_stack_sp = AvALLOC(av) + (PL_stack_sp - PL_stack_base);
+                   PL_stack_base = AvALLOC(av);
+                   PL_stack_max = PL_stack_base + newmax;
                }
            }
            else {
@@ -134,11 +134,11 @@ av_extend(AV *av, I32 key)
                New(2,AvALLOC(av), newmax+1, SV*);
                ary = AvALLOC(av) + 1;
                tmp = newmax;
-               AvALLOC(av)[0] = &sv_undef;     /* For the stacks */
+               AvALLOC(av)[0] = &PL_sv_undef;  /* For the stacks */
            }
            if (AvREAL(av)) {
                while (tmp)
-                   ary[--tmp] = &sv_undef;
+                   ary[--tmp] = &PL_sv_undef;
            }
            
            SvPVX(av) = (char*)AvALLOC(av);
@@ -166,8 +166,8 @@ av_fetch(register AV *av, I32 key, I32 lval)
            dTHR;
            sv = sv_newmortal();
            mg_copy((SV*)av, sv, 0, key);
-           av_fetch_sv = sv;
-           return &av_fetch_sv;
+           PL_av_fetch_sv = sv;
+           return &PL_av_fetch_sv;
        }
     }
 
@@ -180,7 +180,7 @@ av_fetch(register AV *av, I32 key, I32 lval)
            sv = sv_newmortal();
        return av_store(av,key,sv);
     }
-    if (AvARRAY(av)[key] == &sv_undef) {
+    if (AvARRAY(av)[key] == &PL_sv_undef) {
     emptyness:
        if (lval) {
            sv = NEWSV(6,0);
@@ -191,7 +191,7 @@ av_fetch(register AV *av, I32 key, I32 lval)
     else if (AvREIFY(av)
             && (!AvARRAY(av)[key]      /* eg. @_ could have freed elts */
                 || SvTYPE(AvARRAY(av)[key]) == SVTYPEMASK)) {
-       AvARRAY(av)[key] = &sv_undef;   /* 1/2 reify */
+       AvARRAY(av)[key] = &PL_sv_undef;        /* 1/2 reify */
        goto emptyness;
     }
     return &AvARRAY(av)[key];
@@ -207,7 +207,7 @@ av_store(register AV *av, I32 key, SV *val)
     if (!av)
        return 0;
     if (!val)
-       val = &sv_undef;
+       val = &PL_sv_undef;
 
     if (key < 0) {
        key += AvFILL(av) + 1;
@@ -220,7 +220,7 @@ av_store(register AV *av, I32 key, SV *val)
 
     if (SvRMAGICAL(av)) {
        if (mg_find((SV*)av,'P')) {
-           if (val != &sv_undef) {
+           if (val != &PL_sv_undef) {
                mg_copy((SV*)av, val, 0, key);
            }
            return 0;
@@ -235,10 +235,10 @@ av_store(register AV *av, I32 key, SV *val)
     if (AvFILLp(av) < key) {
        if (!AvREAL(av)) {
            dTHR;
-           if (av == curstack && key > stack_sp - stack_base)
-               stack_sp = stack_base + key;    /* XPUSH in disguise */
+           if (av == PL_curstack && key > PL_stack_sp - PL_stack_base)
+               PL_stack_sp = PL_stack_base + key;      /* XPUSH in disguise */
            do
-               ary[++AvFILLp(av)] = &sv_undef;
+               ary[++AvFILLp(av)] = &PL_sv_undef;
            while (AvFILLp(av) < key);
        }
        AvFILLp(av) = key;
@@ -247,7 +247,7 @@ av_store(register AV *av, I32 key, SV *val)
        SvREFCNT_dec(ary[key]);
     ary[key] = val;
     if (SvSMAGICAL(av)) {
-       if (val != &sv_undef) {
+       if (val != &PL_sv_undef) {
            MAGIC* mg = SvMAGIC(av);
            sv_magic(val, (SV*)av, toLOWER(mg->mg_type), 0, key);
        }
@@ -349,7 +349,7 @@ av_clear(register AV *av)
        key = AvFILLp(av) + 1;
        while (key) {
            SvREFCNT_dec(ary[--key]);
-           ary[key] = &sv_undef;
+           ary[key] = &PL_sv_undef;
        }
     }
     if (key = AvARRAY(av) - AvALLOC(av)) {
@@ -421,7 +421,7 @@ av_pop(register AV *av)
     MAGIC* mg;
 
     if (!av || AvFILL(av) < 0)
-       return &sv_undef;
+       return &PL_sv_undef;
     if (SvREADONLY(av))
        croak(no_modify);
     if (SvRMAGICAL(av) && (mg = mg_find((SV*)av,'P'))) {
@@ -432,16 +432,16 @@ av_pop(register AV *av)
        PUTBACK;
        ENTER;
        if (perl_call_method("POP", G_SCALAR)) {
-           retval = newSVsv(*stack_sp--);    
+           retval = newSVsv(*PL_stack_sp--);    
        } else {    
-           retval = &sv_undef;
+           retval = &PL_sv_undef;
        }
        LEAVE;
        POPSTACK;
        return retval;
     }
     retval = AvARRAY(av)[AvFILLp(av)];
-    AvARRAY(av)[AvFILLp(av)--] = &sv_undef;
+    AvARRAY(av)[AvFILLp(av)--] = &PL_sv_undef;
     if (SvSMAGICAL(av))
        mg_set((SV*)av);
     return retval;
@@ -466,7 +466,7 @@ av_unshift(register AV *av, register I32 num)
        EXTEND(SP,1+num);
        PUSHs(mg->mg_obj);
        while (num-- > 0) {
-           PUSHs(&sv_undef);
+           PUSHs(&PL_sv_undef);
        }
        PUTBACK;
        ENTER;
@@ -495,7 +495,7 @@ av_unshift(register AV *av, register I32 num)
        ary = AvARRAY(av);
        Move(ary, ary + num, i + 1, SV*);
        do {
-           ary[--num] = &sv_undef;
+           ary[--num] = &PL_sv_undef;
        } while (num);
     }
 }
@@ -507,7 +507,7 @@ av_shift(register AV *av)
     MAGIC* mg;
 
     if (!av || AvFILL(av) < 0)
-       return &sv_undef;
+       return &PL_sv_undef;
     if (SvREADONLY(av))
        croak(no_modify);
     if (SvRMAGICAL(av) && (mg = mg_find((SV*)av,'P'))) {
@@ -518,9 +518,9 @@ av_shift(register AV *av)
        PUTBACK;
        ENTER;
        if (perl_call_method("SHIFT", G_SCALAR)) {
-           retval = newSVsv(*stack_sp--);            
+           retval = newSVsv(*PL_stack_sp--);            
        } else {    
-           retval = &sv_undef;
+           retval = &PL_sv_undef;
        }     
        LEAVE;
        POPSTACK;
@@ -528,7 +528,7 @@ av_shift(register AV *av)
     }
     retval = *AvARRAY(av);
     if (AvREAL(av))
-       *AvARRAY(av) = &sv_undef;
+       *AvARRAY(av) = &PL_sv_undef;
     SvPVX(av) = (char*)(AvARRAY(av) + 1);
     AvMAX(av)--;
     AvFILLp(av)--;
@@ -574,12 +574,12 @@ av_fill(register AV *av, I32 fill)
        if (AvREAL(av)) {
            while (key > fill) {
                SvREFCNT_dec(ary[key]);
-               ary[key--] = &sv_undef;
+               ary[key--] = &PL_sv_undef;
            }
        }
        else {
            while (key < fill)
-               ary[++key] = &sv_undef;
+               ary[++key] = &PL_sv_undef;
        }
            
        AvFILLp(av) = fill;
@@ -587,7 +587,7 @@ av_fill(register AV *av, I32 fill)
            mg_set((SV*)av);
     }
     else
-       (void)av_store(av,fill,&sv_undef);
+       (void)av_store(av,fill,&PL_sv_undef);
 }
 
 
index 2041520..67f0819 100644 (file)
@@ -98,8 +98,8 @@ EXT I32 obj_list_fill INIT(-1);
 
 #define BGET_pvcontents(arg)   arg = pv.xpv_pv
 #define BGET_strconst(arg) STMT_START {        \
-       for (arg = tokenbuf; (*arg = BGET_FGETC()); arg++) /* nothing */; \
-       arg = tokenbuf;                 \
+       for (arg = PL_tokenbuf; (*arg = BGET_FGETC()); arg++) /* nothing */; \
+       arg = PL_tokenbuf;                      \
     } STMT_END
 
 #define BGET_double(arg) STMT_START {  \
@@ -116,7 +116,7 @@ EXT I32 obj_list_fill INIT(-1);
 #define BGET_svindex(arg) BGET_objindex(arg, svindex)
 #define BGET_opindex(arg) BGET_objindex(arg, opindex)
 
-#define BSET_ldspecsv(sv, arg) sv = specialsv_list[arg]
+#define BSET_ldspecsv(sv, arg) sv = PL_specialsv_list[arg]
                                    
 #define BSET_sv_refcnt_add(svrefcnt, arg)      svrefcnt += arg
 #define BSET_gp_refcnt_add(gprefcnt, arg)      gprefcnt += arg
index 26cb5ac..d14b4c0 100644 (file)
--- a/byterun.c
+++ b/byterun.c
@@ -842,21 +842,21 @@ void byterun(PerlIO *fp)
            {
                opindex arg;
                BGET_opindex(arg);
-               main_start = arg;
+               PL_main_start = arg;
                break;
            }
          case INSN_MAIN_ROOT:          /* 117 */
            {
                opindex arg;
                BGET_opindex(arg);
-               main_root = arg;
+               PL_main_root = arg;
                break;
            }
          case INSN_CURPAD:             /* 118 */
            {
                svindex arg;
                BGET_svindex(arg);
-               BSET_curpad(curpad, arg);
+               BSET_curpad(PL_curpad, arg);
                break;
            }
          default:
index e8f4cc1..bd54c76 100644 (file)
--- a/byterun.h
+++ b/byterun.h
@@ -177,8 +177,8 @@ EXT int optype_size[]
 ;
 
 #define INIT_SPECIALSV_LIST STMT_START { \
-       specialsv_list[0] = Nullsv; \
-       specialsv_list[1] = &sv_undef; \
-       specialsv_list[2] = &sv_yes; \
-       specialsv_list[3] = &sv_no; \
+       PL_specialsv_list[0] = Nullsv; \
+       PL_specialsv_list[1] = &PL_sv_undef; \
+       PL_specialsv_list[2] = &PL_sv_yes; \
+       PL_specialsv_list[3] = &PL_sv_no; \
     } STMT_END
diff --git a/cop.h b/cop.h
index 644f456..aaa5720 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -45,7 +45,7 @@ struct block_sub {
        cx->blk_sub.cv = cv;                                            \
        cx->blk_sub.gv = gv;                                            \
        cx->blk_sub.hasargs = 0;                                        \
-       cx->blk_sub.dfoutgv = defoutgv;                                 \
+       cx->blk_sub.dfoutgv = PL_defoutgv;                              \
        (void)SvREFCNT_inc(cx->blk_sub.dfoutgv)
 
 #define POPSUB(cx)                                                     \
@@ -61,8 +61,8 @@ struct block_sub {
 #else
 #define POPSAVEARRAY()                                                 \
     STMT_START {                                                       \
-       SvREFCNT_dec(GvAV(defgv));                                      \
-       GvAV(defgv) = cxsub.savearray;                                  \
+       SvREFCNT_dec(GvAV(PL_defgv));                                   \
+       GvAV(PL_defgv) = cxsub.savearray;                                       \
     } STMT_END
 #endif /* USE_THREADS */
 
@@ -92,16 +92,16 @@ struct block_eval {
 };
 
 #define PUSHEVAL(cx,n,fgv)                                             \
-       cx->blk_eval.old_in_eval = in_eval;                             \
+       cx->blk_eval.old_in_eval = PL_in_eval;                          \
        cx->blk_eval.old_op_type = op->op_type;                         \
        cx->blk_eval.old_name = n;                                      \
-       cx->blk_eval.old_eval_root = eval_root;                         \
-       cx->blk_eval.cur_text = linestr;
+       cx->blk_eval.old_eval_root = PL_eval_root;                              \
+       cx->blk_eval.cur_text = PL_linestr;
 
 #define POPEVAL(cx)                                                    \
-       in_eval = cx->blk_eval.old_in_eval;                             \
+       PL_in_eval = cx->blk_eval.old_in_eval;                          \
        optype = cx->blk_eval.old_op_type;                              \
-       eval_root = cx->blk_eval.old_eval_root;
+       PL_eval_root = cx->blk_eval.old_eval_root;
 
 /* loop context */
 struct block_loop {
@@ -119,8 +119,8 @@ struct block_loop {
 };
 
 #define PUSHLOOP(cx, ivar, s)                                          \
-       cx->blk_loop.label = curcop->cop_label;                         \
-       cx->blk_loop.resetsp = s - stack_base;                          \
+       cx->blk_loop.label = PL_curcop->cop_label;                              \
+       cx->blk_loop.resetsp = s - PL_stack_base;                               \
        cx->blk_loop.redo_op = cLOOP->op_redoop;                        \
        cx->blk_loop.next_op = cLOOP->op_nextop;                        \
        cx->blk_loop.last_op = cLOOP->op_lastop;                        \
@@ -137,7 +137,7 @@ struct block_loop {
 
 #define POPLOOP1(cx)                                                   \
        cxloop = cx->blk_loop;  /* because DESTROY may clobber *cx */   \
-       newsp = stack_base + cxloop.resetsp;
+       newsp = PL_stack_base + cxloop.resetsp;
 
 #define POPLOOP2()                                                     \
        SvREFCNT_dec(cxloop.iterlval);                                  \
@@ -145,7 +145,7 @@ struct block_loop {
            SvREFCNT_dec(*cxloop.itervar);                              \
            *cxloop.itervar = cxloop.itersave;                          \
        }                                                               \
-       if (cxloop.iterary && cxloop.iterary != curstack)               \
+       if (cxloop.iterary && cxloop.iterary != PL_curstack)            \
            SvREFCNT_dec(cxloop.iterary);
 
 /* context common to subroutines, evals and loops */
@@ -178,34 +178,34 @@ struct block {
 /* Enter a block. */
 #define PUSHBLOCK(cx,t,sp) CXINC, cx = &cxstack[cxstack_ix],           \
        cx->cx_type             = t,                                    \
-       cx->blk_oldsp           = sp - stack_base,                      \
-       cx->blk_oldcop          = curcop,                               \
-       cx->blk_oldmarksp       = markstack_ptr - markstack,            \
-       cx->blk_oldscopesp      = scopestack_ix,                        \
-       cx->blk_oldretsp        = retstack_ix,                          \
-       cx->blk_oldpm           = curpm,                                \
+       cx->blk_oldsp           = sp - PL_stack_base,                   \
+       cx->blk_oldcop          = PL_curcop,                            \
+       cx->blk_oldmarksp       = PL_markstack_ptr - PL_markstack,              \
+       cx->blk_oldscopesp      = PL_scopestack_ix,                     \
+       cx->blk_oldretsp        = PL_retstack_ix,                               \
+       cx->blk_oldpm           = PL_curpm,                             \
        cx->blk_gimme           = gimme;                                \
        DEBUG_l( PerlIO_printf(PerlIO_stderr(), "Entering block %ld, type %s\n",        \
                    (long)cxstack_ix, block_type[t]); )
 
 /* Exit a block (RETURN and LAST). */
 #define POPBLOCK(cx,pm) cx = &cxstack[cxstack_ix--],                   \
-       newsp           = stack_base + cx->blk_oldsp,                   \
-       curcop          = cx->blk_oldcop,                               \
-       markstack_ptr   = markstack + cx->blk_oldmarksp,                \
-       scopestack_ix   = cx->blk_oldscopesp,                           \
-       retstack_ix     = cx->blk_oldretsp,                             \
-       pm              = cx->blk_oldpm,                                \
-       gimme           = cx->blk_gimme;                                \
+       newsp            = PL_stack_base + cx->blk_oldsp,                       \
+       PL_curcop        = cx->blk_oldcop,                              \
+       PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp,            \
+       PL_scopestack_ix = cx->blk_oldscopesp,                          \
+       PL_retstack_ix   = cx->blk_oldretsp,                            \
+       pm               = cx->blk_oldpm,                               \
+       gimme            = cx->blk_gimme;                               \
        DEBUG_l( PerlIO_printf(PerlIO_stderr(), "Leaving block %ld, type %s\n",         \
                    (long)cxstack_ix+1,block_type[cx->cx_type]); )
 
 /* Continue a block elsewhere (NEXT and REDO). */
-#define TOPBLOCK(cx) cx = &cxstack[cxstack_ix],                                \
-       stack_sp        = stack_base + cx->blk_oldsp,                   \
-       markstack_ptr   = markstack + cx->blk_oldmarksp,                \
-       scopestack_ix   = cx->blk_oldscopesp,                           \
-       retstack_ix     = cx->blk_oldretsp
+#define TOPBLOCK(cx) cx  = &cxstack[cxstack_ix],                       \
+       PL_stack_sp      = PL_stack_base + cx->blk_oldsp,                       \
+       PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp,            \
+       PL_scopestack_ix = cx->blk_oldscopesp,                          \
+       PL_retstack_ix   = cx->blk_oldretsp
 
 /* substitution context */
 struct subst {
@@ -319,29 +319,29 @@ struct stackinfo {
 
 typedef struct stackinfo PERL_SI;
 
-#define cxstack                (curstackinfo->si_cxstack)
-#define cxstack_ix     (curstackinfo->si_cxix)
-#define cxstack_max    (curstackinfo->si_cxmax)
+#define cxstack                (PL_curstackinfo->si_cxstack)
+#define cxstack_ix     (PL_curstackinfo->si_cxix)
+#define cxstack_max    (PL_curstackinfo->si_cxmax)
 
 #ifdef DEBUGGING
-#  define      SET_MARKBASE curstackinfo->si_markbase = markstack_ptr
+#  define      SET_MARKBASE PL_curstackinfo->si_markbase = PL_markstack_ptr
 #else
 #  define      SET_MARKBASE NOOP
 #endif
 
 #define PUSHSTACKi(type) \
     STMT_START {                                                       \
-       PERL_SI *next = curstackinfo->si_next;                          \
+       PERL_SI *next = PL_curstackinfo->si_next;                       \
        if (!next) {                                                    \
            next = new_stackinfo(32, 2048/sizeof(PERL_CONTEXT) - 1);    \
-           next->si_prev = curstackinfo;                               \
-           curstackinfo->si_next = next;                               \
+           next->si_prev = PL_curstackinfo;                            \
+           PL_curstackinfo->si_next = next;                            \
        }                                                               \
        next->si_type = type;                                           \
        next->si_cxix = -1;                                             \
        AvFILLp(next->si_stack) = 0;                                    \
-       SWITCHSTACK(curstack,next->si_stack);                           \
-       curstackinfo = next;                                            \
+       SWITCHSTACK(PL_curstack,next->si_stack);                        \
+       PL_curstackinfo = next;                                         \
        SET_MARKBASE;                                                   \
     } STMT_END
 
@@ -349,19 +349,19 @@ typedef struct stackinfo PERL_SI;
 
 #define POPSTACK \
     STMT_START {                                                       \
-       PERL_SI *prev = curstackinfo->si_prev;                          \
+       PERL_SI *prev = PL_curstackinfo->si_prev;                       \
        if (!prev) {                                                    \
            PerlIO_printf(PerlIO_stderr(), "panic: POPSTACK\n");        \
            my_exit(1);                                                 \
        }                                                               \
-       SWITCHSTACK(curstack,prev->si_stack);                           \
+       SWITCHSTACK(PL_curstack,prev->si_stack);                        \
        /* don't free prev here, free them all at the END{} */          \
-       curstackinfo = prev;                                            \
+       PL_curstackinfo = prev;                                         \
     } STMT_END
 
 #define POPSTACK_TO(s) \
     STMT_START {                                                       \
-       while (curstack != s) {                                         \
+       while (PL_curstack != s) {                                      \
            dounwind(-1);                                               \
            POPSTACK;                                                   \
        }                                                               \
diff --git a/deb.c b/deb.c
index af86540..052cd06 100644 (file)
--- a/deb.c
+++ b/deb.c
@@ -22,7 +22,7 @@ deb(const char *pat, ...)
     dTHR;
     va_list args;
     register I32 i;
-    GV* gv = curcop->cop_filegv;
+    GV* gv = PL_curcop->cop_filegv;
 
 #ifdef USE_THREADS
     PerlIO_printf(Perl_debug_log, "0x%lx (%s:%ld)\t",
@@ -32,10 +32,10 @@ deb(const char *pat, ...)
 #else
     PerlIO_printf(Perl_debug_log, "(%s:%ld)\t",
        SvTYPE(gv) == SVt_PVGV ? SvPVX(GvSV(gv)) : "<free>",
-       (long)curcop->cop_line);
+       (long)PL_curcop->cop_line);
 #endif /* USE_THREADS */
-    for (i=0; i<dlevel; i++)
-       PerlIO_printf(Perl_debug_log, "%c%c ",debname[i],debdelim[i]);
+    for (i=0; i<PL_dlevel; i++)
+       PerlIO_printf(Perl_debug_log, "%c%c ",PL_debname[i],PL_debdelim[i]);
 
     va_start(args, pat);
     (void) PerlIO_vprintf(Perl_debug_log,pat,args);
@@ -47,9 +47,9 @@ void
 deb_growlevel(void)
 {
 #ifdef DEBUGGING
-    dlmax += 128;
-    Renew(debname, dlmax, char);
-    Renew(debdelim, dlmax, char);
+    PL_dlmax += 128;
+    Renew(PL_debname, PL_dlmax, char);
+    Renew(PL_debdelim, PL_dlmax, char);
 #endif /* DEBUGGING */
 }
 
@@ -59,12 +59,12 @@ debstackptrs(void)
 #ifdef DEBUGGING
     dTHR;
     PerlIO_printf(Perl_debug_log, "%8lx %8lx %8ld %8ld %8ld\n",
-       (unsigned long)curstack, (unsigned long)stack_base,
-       (long)*markstack_ptr, (long)(stack_sp-stack_base),
-       (long)(stack_max-stack_base));
+       (unsigned long)PL_curstack, (unsigned long)PL_stack_base,
+       (long)*PL_markstack_ptr, (long)(PL_stack_sp-PL_stack_base),
+       (long)(PL_stack_max-PL_stack_base));
     PerlIO_printf(Perl_debug_log, "%8lx %8lx %8ld %8ld %8ld\n",
-       (unsigned long)mainstack, (unsigned long)AvARRAY(curstack),
-       (long)mainstack, (long)AvFILLp(curstack), (long)AvMAX(curstack));
+       (unsigned long)PL_mainstack, (unsigned long)AvARRAY(PL_curstack),
+       (long)PL_mainstack, (long)AvFILLp(PL_curstack), (long)AvMAX(PL_curstack));
 #endif /* DEBUGGING */
     return 0;
 }
@@ -74,14 +74,14 @@ debstack(void)
 {
 #ifdef DEBUGGING
     dTHR;
-    I32 top = stack_sp - stack_base;
+    I32 top = PL_stack_sp - PL_stack_base;
     register I32 i = top - 30;
-    I32 *markscan = curstackinfo->si_markbase;
+    I32 *markscan = PL_curstackinfo->si_markbase;
 
     if (i < 0)
        i = 0;
     
-    while (++markscan <= markstack_ptr)
+    while (++markscan <= PL_markstack_ptr)
        if (*markscan >= i)
            break;
 
@@ -91,21 +91,21 @@ debstack(void)
 #else
     PerlIO_printf(Perl_debug_log, i ? "    =>  ...  " : "    =>  ");
 #endif /* USE_THREADS */
-    if (stack_base[0] != &sv_undef || stack_sp < stack_base)
+    if (PL_stack_base[0] != &PL_sv_undef || PL_stack_sp < PL_stack_base)
        PerlIO_printf(Perl_debug_log, " [STACK UNDERFLOW!!!]\n");
     do {
        ++i;
-       if (markscan <= markstack_ptr && *markscan < i) {
+       if (markscan <= PL_markstack_ptr && *markscan < i) {
            do {
                ++markscan;
                PerlIO_putc(Perl_debug_log, '*');
            }
-           while (markscan <= markstack_ptr && *markscan < i);
+           while (markscan <= PL_markstack_ptr && *markscan < i);
            PerlIO_printf(Perl_debug_log, "  ");
        }
        if (i > top)
            break;
-       PerlIO_printf(Perl_debug_log, "%-4s  ", SvPEEK(stack_base[i]));
+       PerlIO_printf(Perl_debug_log, "%-4s  ", SvPEEK(PL_stack_base[i]));
     }
     while (1);
     PerlIO_printf(Perl_debug_log, "\n");
diff --git a/doio.c b/doio.c
index 3a365bf..886add2 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -94,13 +94,13 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe
     int result;
     bool was_fdopen = FALSE;
 
-    forkprocess = 1;           /* assume true if no fork */
+    PL_forkprocess = 1;                /* assume true if no fork */
 
     if (IoIFP(io)) {
        fd = PerlIO_fileno(IoIFP(io));
        if (IoTYPE(io) == '-')
            result = 0;
-       else if (fd <= maxsysfd) {
+       else if (fd <= PL_maxsysfd) {
            saveifp = IoIFP(io);
            saveofp = IoOFP(io);
            savetype = IoTYPE(io);
@@ -118,7 +118,7 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe
        }
        else
            result = PerlIO_close(IoIFP(io));
-       if (result == EOF && fd > maxsysfd)
+       if (result == EOF && fd > PL_maxsysfd)
            PerlIO_printf(PerlIO_stderr(), "Warning: unable to close filehandle %s properly.\n",
              GvENAME(gv));
        IoOFP(io) = IoIFP(io) = Nullfp;
@@ -173,7 +173,7 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe
            TAINT_PROPER("piped open");
            if (name[strlen(name)-1] == '|') {
                name[strlen(name)-1] = '\0' ;
-               if (dowarn)
+               if (PL_dowarn)
                    warn("Can't do bidirectional pipe");
            }
            fp = PerlProc_popen(name,"w");
@@ -283,23 +283,23 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe
        }
     }
     if (!fp) {
-       if (dowarn && IoTYPE(io) == '<' && strchr(name, '\n'))
+       if (PL_dowarn && IoTYPE(io) == '<' && strchr(name, '\n'))
            warn(warn_nl, "open");
        goto say_false;
     }
     if (IoTYPE(io) &&
       IoTYPE(io) != '|' && IoTYPE(io) != '-') {
        dTHR;
-       if (PerlLIO_fstat(PerlIO_fileno(fp),&statbuf) < 0) {
+       if (PerlLIO_fstat(PerlIO_fileno(fp),&PL_statbuf) < 0) {
            (void)PerlIO_close(fp);
            goto say_false;
        }
-       if (S_ISSOCK(statbuf.st_mode))
+       if (S_ISSOCK(PL_statbuf.st_mode))
            IoTYPE(io) = 's';   /* in case a socket was passed in to us */
 #ifdef HAS_SOCKET
        else if (
 #ifdef S_IFMT
-           !(statbuf.st_mode & S_IFMT)
+           !(PL_statbuf.st_mode & S_IFMT)
 #else
            !statbuf.st_mode
 #endif
@@ -329,11 +329,11 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe
            SV *sv;
 
            PerlLIO_dup2(PerlIO_fileno(fp), fd);
-           sv = *av_fetch(fdpid,PerlIO_fileno(fp),TRUE);
+           sv = *av_fetch(PL_fdpid,PerlIO_fileno(fp),TRUE);
            (void)SvUPGRADE(sv, SVt_IV);
            pid = SvIVX(sv);
            SvIVX(sv) = 0;
-           sv = *av_fetch(fdpid,fd,TRUE);
+           sv = *av_fetch(PL_fdpid,fd,TRUE);
            (void)SvUPGRADE(sv, SVt_IV);
            SvIVX(sv) = pid;
            if (!was_fdopen)
@@ -345,13 +345,13 @@ do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawpe
     }
 #if defined(HAS_FCNTL) && defined(F_SETFD)
     fd = PerlIO_fileno(fp);
-    fcntl(fd,F_SETFD,fd > maxsysfd);
+    fcntl(fd,F_SETFD,fd > PL_maxsysfd);
 #endif
     IoIFP(io) = fp;
     if (writing) {
        dTHR;
        if (IoTYPE(io) == 's'
-         || (IoTYPE(io) == '>' && S_ISCHR(statbuf.st_mode)) ) {
+         || (IoTYPE(io) == '>' && S_ISCHR(PL_statbuf.st_mode)) ) {
            if (!(IoOFP(io) = PerlIO_fdopen(PerlIO_fileno(fp),"w"))) {
                PerlIO_close(fp);
                IoIFP(io) = Nullfp;
@@ -381,17 +381,17 @@ nextargv(register GV *gv)
     int fileuid;
     int filegid;
 
-    if (!argvoutgv)
-       argvoutgv = gv_fetchpv("ARGVOUT",TRUE,SVt_PVIO);
-    if (filemode & (S_ISUID|S_ISGID)) {
-       PerlIO_flush(IoIFP(GvIOn(argvoutgv)));  /* chmod must follow last write */
+    if (!PL_argvoutgv)
+       PL_argvoutgv = gv_fetchpv("ARGVOUT",TRUE,SVt_PVIO);
+    if (PL_filemode & (S_ISUID|S_ISGID)) {
+       PerlIO_flush(IoIFP(GvIOn(PL_argvoutgv)));  /* chmod must follow last write */
 #ifdef HAS_FCHMOD
-       (void)fchmod(lastfd,filemode);
+       (void)fchmod(PL_lastfd,PL_filemode);
 #else
        (void)PerlLIO_chmod(oldname,filemode);
 #endif
     }
-    filemode = 0;
+    PL_filemode = 0;
     while (av_len(GvAV(gv)) >= 0) {
        dTHR;
        STRLEN oldlen;
@@ -399,11 +399,11 @@ nextargv(register GV *gv)
        SAVEFREESV(sv);
        sv_setsv(GvSV(gv),sv);
        SvSETMAGIC(GvSV(gv));
-       oldname = SvPVx(GvSV(gv), oldlen);
-       if (do_open(gv,oldname,oldlen,inplace!=0,0,0,Nullfp)) {
-           if (inplace) {
+       PL_oldname = SvPVx(GvSV(gv), oldlen);
+       if (do_open(gv,PL_oldname,oldlen,PL_inplace!=0,0,0,Nullfp)) {
+           if (PL_inplace) {
                TAINT_PROPER("inplace open");
-               if (oldlen == 1 && *oldname == '-') {
+               if (oldlen == 1 && *PL_oldname == '-') {
                    setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO));
                    return IoIFP(GvIOp(gv));
                }
@@ -411,30 +411,30 @@ nextargv(register GV *gv)
                filedev = statbuf.st_dev;
                fileino = statbuf.st_ino;
 #endif
-               filemode = statbuf.st_mode;
-               fileuid = statbuf.st_uid;
-               filegid = statbuf.st_gid;
-               if (!S_ISREG(filemode)) {
+               PL_filemode = PL_statbuf.st_mode;
+               fileuid = PL_statbuf.st_uid;
+               filegid = PL_statbuf.st_gid;
+               if (!S_ISREG(PL_filemode)) {
                    warn("Can't do inplace edit: %s is not a regular file",
-                     oldname );
+                     PL_oldname );
                    do_close(gv,FALSE);
                    continue;
                }
-               if (*inplace) {
-                   char *star = strchr(inplace, '*');
+               if (*PL_inplace) {
+                   char *star = strchr(PL_inplace, '*');
                    if (star) {
-                       char *begin = inplace;
+                       char *begin = PL_inplace;
                        sv_setpvn(sv, "", 0);
                        do {
                            sv_catpvn(sv, begin, star - begin);
-                           sv_catpvn(sv, oldname, oldlen);
+                           sv_catpvn(sv, PL_oldname, oldlen);
                            begin = ++star;
                        } while ((star = strchr(begin, '*')));
                        if (*begin)
                            sv_catpv(sv,begin);
                    }
                    else {
-                       sv_catpv(sv,inplace);
+                       sv_catpv(sv,PL_inplace);
                    }
 #ifndef FLEXFILENAMES
                    if (PerlLIO_stat(SvPVX(sv),&statbuf) >= 0
@@ -452,9 +452,9 @@ nextargv(register GV *gv)
 #endif
 #ifdef HAS_RENAME
 #ifndef DOSISH
-                   if (PerlLIO_rename(oldname,SvPVX(sv)) < 0) {
+                   if (PerlLIO_rename(PL_oldname,SvPVX(sv)) < 0) {
                        warn("Can't rename %s to %s: %s, skipping file",
-                         oldname, SvPVX(sv), Strerror(errno) );
+                         PL_oldname, SvPVX(sv), Strerror(errno) );
                        do_close(gv,FALSE);
                        continue;
                    }
@@ -478,9 +478,9 @@ nextargv(register GV *gv)
                else {
 #if !defined(DOSISH) && !defined(AMIGAOS)
 #  ifndef VMS  /* Don't delete; use automatic file versioning */
-                   if (UNLINK(oldname) < 0) {
+                   if (UNLINK(PL_oldname) < 0) {
                        warn("Can't remove %s: %s, skipping file",
-                         oldname, Strerror(errno) );
+                         PL_oldname, Strerror(errno) );
                        do_close(gv,FALSE);
                        continue;
                    }
@@ -490,30 +490,30 @@ nextargv(register GV *gv)
 #endif
                }
 
-               sv_setpvn(sv,">",!inplace);
-               sv_catpvn(sv,oldname,oldlen);
+               sv_setpvn(sv,">",!PL_inplace);
+               sv_catpvn(sv,PL_oldname,oldlen);
                SETERRNO(0,0);          /* in case sprintf set errno */
-               if (!do_open(argvoutgv,SvPVX(sv),SvCUR(sv),inplace!=0,
+               if (!do_open(PL_argvoutgv,SvPVX(sv),SvCUR(sv),PL_inplace!=0,
                             O_WRONLY|O_CREAT|OPEN_EXCL,0666,Nullfp)) {
                    warn("Can't do inplace edit on %s: %s",
-                     oldname, Strerror(errno) );
+                     PL_oldname, Strerror(errno) );
                    do_close(gv,FALSE);
                    continue;
                }
-               setdefout(argvoutgv);
-               lastfd = PerlIO_fileno(IoIFP(GvIOp(argvoutgv)));
-               (void)PerlLIO_fstat(lastfd,&statbuf);
+               setdefout(PL_argvoutgv);
+               PL_lastfd = PerlIO_fileno(IoIFP(GvIOp(PL_argvoutgv)));
+               (void)PerlLIO_fstat(PL_lastfd,&PL_statbuf);
 #ifdef HAS_FCHMOD
-               (void)fchmod(lastfd,filemode);
+               (void)fchmod(PL_lastfd,PL_filemode);
 #else
 #  if !(defined(WIN32) && defined(__BORLANDC__))
                /* Borland runtime creates a readonly file! */
                (void)PerlLIO_chmod(oldname,filemode);
 #  endif
 #endif
-               if (fileuid != statbuf.st_uid || filegid != statbuf.st_gid) {
+               if (fileuid != PL_statbuf.st_uid || filegid != PL_statbuf.st_gid) {
 #ifdef HAS_FCHOWN
-                   (void)fchown(lastfd,fileuid,filegid);
+                   (void)fchown(PL_lastfd,fileuid,filegid);
 #else
 #ifdef HAS_CHOWN
                    (void)PerlLIO_chown(oldname,fileuid,filegid);
@@ -525,10 +525,10 @@ nextargv(register GV *gv)
        }
        else
            PerlIO_printf(PerlIO_stderr(), "Can't open %s: %s\n",
-             SvPV(sv, na), Strerror(errno));
+             SvPV(sv, PL_na), Strerror(errno));
     }
-    if (inplace) {
-       (void)do_close(argvoutgv,FALSE);
+    if (PL_inplace) {
+       (void)do_close(PL_argvoutgv,FALSE);
        setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO));
     }
     return Nullfp;
@@ -570,11 +570,11 @@ do_pipe(SV *sv, GV *rgv, GV *wgv)
        goto badexit;
     }
 
-    sv_setsv(sv,&sv_yes);
+    sv_setsv(sv,&PL_sv_yes);
     return;
 
 badexit:
-    sv_setsv(sv,&sv_undef);
+    sv_setsv(sv,&PL_sv_undef);
     return;
 }
 #endif
@@ -587,7 +587,7 @@ do_close(GV *gv, bool not_implicit)
     IO *io;
 
     if (!gv)
-       gv = argvgv;
+       gv = PL_argvgv;
     if (!gv || SvTYPE(gv) != SVt_PVGV) {
        if (not_implicit)
            SETERRNO(EBADF,SS$_IVCHAN);
@@ -596,7 +596,7 @@ do_close(GV *gv, bool not_implicit)
     io = GvIO(gv);
     if (!io) {         /* never opened */
        if (not_implicit) {
-           if (dowarn)
+           if (PL_dowarn)
                warn("Close on unopened file <%s>",GvENAME(gv));
            SETERRNO(EBADF,SS$_IVCHAN);
        }
@@ -672,7 +672,7 @@ do_eof(GV *gv)
                PerlIO_set_cnt(IoIFP(io),-1);
        }
        if (op->op_flags & OPf_SPECIAL) { /* not necessarily a real EOF yet? */
-           if (!nextargv(argvgv))      /* get another fp handy */
+           if (!nextargv(PL_argvgv))   /* get another fp handy */
                return TRUE;
        }
        else
@@ -694,7 +694,7 @@ do_tell(GV *gv)
 #endif
        return PerlIO_tell(fp);
     }
-    if (dowarn)
+    if (PL_dowarn)
        warn("tell() on unopened file");
     SETERRNO(EBADF,RMS$_IFI);
     return -1L;
@@ -713,7 +713,7 @@ do_seek(GV *gv, long int pos, int whence)
 #endif
        return PerlIO_seek(fp, pos, whence) >= 0;
     }
-    if (dowarn)
+    if (PL_dowarn)
        warn("seek() on unopened file");
     SETERRNO(EBADF,RMS$_IFI);
     return FALSE;
@@ -727,7 +727,7 @@ do_sysseek(GV *gv, long int pos, int whence)
 
     if (gv && (io = GvIO(gv)) && (fp = IoIFP(io)))
        return PerlLIO_lseek(PerlIO_fileno(fp), pos, whence);
-    if (dowarn)
+    if (PL_dowarn)
        warn("sysseek() on unopened file");
     SETERRNO(EBADF,RMS$_IFI);
     return -1L;
@@ -833,22 +833,22 @@ do_print(register SV *sv, PerlIO *fp)
     /* assuming fp is checked earlier */
     if (!sv)
        return TRUE;
-    if (ofmt) {
+    if (PL_ofmt) {
        if (SvGMAGICAL(sv))
            mg_get(sv);
         if (SvIOK(sv) && SvIVX(sv) != 0) {
-           PerlIO_printf(fp, ofmt, (double)SvIVX(sv));
+           PerlIO_printf(fp, PL_ofmt, (double)SvIVX(sv));
            return !PerlIO_error(fp);
        }
        if (  (SvNOK(sv) && SvNVX(sv) != 0.0)
           || (looks_like_number(sv) && sv_2nv(sv) != 0.0) ) {
-           PerlIO_printf(fp, ofmt, SvNVX(sv));
+           PerlIO_printf(fp, PL_ofmt, SvNVX(sv));
            return !PerlIO_error(fp);
        }
     }
     switch (SvTYPE(sv)) {
     case SVt_NULL:
-       if (dowarn)
+       if (PL_dowarn)
            warn(warn_uninit);
        return TRUE;
     case SVt_IV:
@@ -881,20 +881,20 @@ my_stat(ARGSproto)
       do_fstat:
        io = GvIO(tmpgv);
        if (io && IoIFP(io)) {
-           statgv = tmpgv;
-           sv_setpv(statname,"");
-           laststype = OP_STAT;
-           return (laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &statcache));
+           PL_statgv = tmpgv;
+           sv_setpv(PL_statname,"");
+           PL_laststype = OP_STAT;
+           return (PL_laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &PL_statcache));
        }
        else {
-           if (tmpgv == defgv)
-               return laststatval;
-           if (dowarn)
+           if (tmpgv == PL_defgv)
+               return PL_laststatval;
+           if (PL_dowarn)
                warn("Stat on unopened file <%s>",
                  GvENAME(tmpgv));
-           statgv = Nullgv;
-           sv_setpv(statname,"");
-           return (laststatval = -1);
+           PL_statgv = Nullgv;
+           sv_setpv(PL_statname,"");
+           return (PL_laststatval = -1);
        }
     }
     else {
@@ -910,14 +910,14 @@ my_stat(ARGSproto)
            goto do_fstat;
        }
 
-       s = SvPV(sv, na);
-       statgv = Nullgv;
-       sv_setpv(statname, s);
-       laststype = OP_STAT;
-       laststatval = PerlLIO_stat(s, &statcache);
-       if (laststatval < 0 && dowarn && strchr(s, '\n'))
+       s = SvPV(sv, PL_na);
+       PL_statgv = Nullgv;
+       sv_setpv(PL_statname, s);
+       PL_laststype = OP_STAT;
+       PL_laststatval = PerlLIO_stat(s, &PL_statcache);
+       if (PL_laststatval < 0 && PL_dowarn && strchr(s, '\n'))
            warn(warn_nl, "stat");
-       return laststatval;
+       return PL_laststatval;
     }
 }
 
@@ -928,27 +928,27 @@ my_lstat(ARGSproto)
     SV *sv;
     if (op->op_flags & OPf_REF) {
        EXTEND(SP,1);
-       if (cGVOP->op_gv == defgv) {
-           if (laststype != OP_LSTAT)
+       if (cGVOP->op_gv == PL_defgv) {
+           if (PL_laststype != OP_LSTAT)
                croak("The stat preceding -l _ wasn't an lstat");
-           return laststatval;
+           return PL_laststatval;
        }
        croak("You can't use -l on a filehandle");
     }
 
-    laststype = OP_LSTAT;
-    statgv = Nullgv;
+    PL_laststype = OP_LSTAT;
+    PL_statgv = Nullgv;
     sv = POPs;
     PUTBACK;
-    sv_setpv(statname,SvPV(sv, na));
+    sv_setpv(PL_statname,SvPV(sv, PL_na));
 #ifdef HAS_LSTAT
-    laststatval = PerlLIO_lstat(SvPV(sv, na),&statcache);
+    PL_laststatval = PerlLIO_lstat(SvPV(sv, PL_na),&PL_statcache);
 #else
     laststatval = PerlLIO_stat(SvPV(sv, na),&statcache);
 #endif
-    if (laststatval < 0 && dowarn && strchr(SvPV(sv, na), '\n'))
+    if (PL_laststatval < 0 && PL_dowarn && strchr(SvPV(sv, PL_na), '\n'))
        warn(warn_nl, "lstat");
-    return laststatval;
+    return PL_laststatval;
 }
 
 bool
@@ -959,23 +959,23 @@ do_aexec(SV *really, register SV **mark, register SV **sp)
 
     if (sp > mark) {
        dTHR;
-       New(401,Argv, sp - mark + 1, char*);
-       a = Argv;
+       New(401,PL_Argv, sp - mark + 1, char*);
+       a = PL_Argv;
        while (++mark <= sp) {
            if (*mark)
-               *a++ = SvPVx(*mark, na);
+               *a++ = SvPVx(*mark, PL_na);
            else
                *a++ = "";
        }
        *a = Nullch;
-       if (*Argv[0] != '/')    /* will execvp use PATH? */
+       if (*PL_Argv[0] != '/') /* will execvp use PATH? */
            TAINT_ENV();                /* testing IFS here is overkill, probably */
-       if (really && *(tmps = SvPV(really, na)))
-           PerlProc_execvp(tmps,Argv);
+       if (really && *(tmps = SvPV(really, PL_na)))
+           PerlProc_execvp(tmps,PL_Argv);
        else
-           PerlProc_execvp(Argv[0],Argv);
-       if (dowarn)
-           warn("Can't exec \"%s\": %s", Argv[0], Strerror(errno));
+           PerlProc_execvp(PL_Argv[0],PL_Argv);
+       if (PL_dowarn)
+           warn("Can't exec \"%s\": %s", PL_Argv[0], Strerror(errno));
     }
     do_execfree();
     return FALSE;
@@ -984,13 +984,13 @@ do_aexec(SV *really, register SV **mark, register SV **sp)
 void
 do_execfree(void)
 {
-    if (Argv) {
-       Safefree(Argv);
-       Argv = Null(char **);
+    if (PL_Argv) {
+       Safefree(PL_Argv);
+       PL_Argv = Null(char **);
     }
-    if (Cmd) {
-       Safefree(Cmd);
-       Cmd = Nullch;
+    if (PL_Cmd) {
+       Safefree(PL_Cmd);
+       PL_Cmd = Nullch;
     }
 }
 
@@ -1009,9 +1009,9 @@ do_exec(char *cmd)
     /* save an extra exec if possible */
 
 #ifdef CSH
-    if (strnEQ(cmd,cshname,cshlen) && strnEQ(cmd+cshlen," -c",3)) {
+    if (strnEQ(cmd,PL_cshname,PL_cshlen) && strnEQ(cmd+PL_cshlen," -c",3)) {
        strcpy(flags,"-c");
-       s = cmd+cshlen+3;
+       s = cmd+PL_cshlen+3;
        if (*s == 'f') {
            s++;
            strcat(flags,"f");
@@ -1027,7 +1027,7 @@ do_exec(char *cmd)
                *--s = '\0';
            if (s[-1] == '\'') {
                *--s = '\0';
-               PerlProc_execl(cshname,"csh", flags,ncmd,(char*)0);
+               PerlProc_execl(PL_cshname,"csh", flags,ncmd,(char*)0);
                *s = '\'';
                return FALSE;
            }
@@ -1054,15 +1054,15 @@ do_exec(char *cmd)
                break;
            }
          doshell:
-           PerlProc_execl(sh_path, "sh", "-c", cmd, (char*)0);
+           PerlProc_execl(PL_sh_path, "sh", "-c", cmd, (char*)0);
            return FALSE;
        }
     }
 
-    New(402,Argv, (s - cmd) / 2 + 2, char*);
-    Cmd = savepvn(cmd, s-cmd);
-    a = Argv;
-    for (s = Cmd; *s;) {
+    New(402,PL_Argv, (s - cmd) / 2 + 2, char*);
+    PL_Cmd = savepvn(cmd, s-cmd);
+    a = PL_Argv;
+    for (s = PL_Cmd; *s;) {
        while (*s && isSPACE(*s)) s++;
        if (*s)
            *(a++) = s;
@@ -1071,14 +1071,14 @@ do_exec(char *cmd)
            *s++ = '\0';
     }
     *a = Nullch;
-    if (Argv[0]) {
-       PerlProc_execvp(Argv[0],Argv);
+    if (PL_Argv[0]) {
+       PerlProc_execvp(PL_Argv[0],PL_Argv);
        if (errno == ENOEXEC) {         /* for system V NIH syndrome */
            do_execfree();
            goto doshell;
        }
-       if (dowarn)
-           warn("Can't exec \"%s\": %s", Argv[0], Strerror(errno));
+       if (PL_dowarn)
+           warn("Can't exec \"%s\": %s", PL_Argv[0], Strerror(errno));
     }
     do_execfree();
     return FALSE;
@@ -1098,12 +1098,12 @@ apply(I32 type, register SV **mark, register SV **sp)
     SV **oldmark = mark;
 
 #define APPLY_TAINT_PROPER() \
-    STMT_START {                                               \
-       if (tainting && tainted) { goto taint_proper_label; }   \
+    STMT_START {                                                       \
+       if (PL_tainting && PL_tainted) { goto taint_proper_label; }     \
     } STMT_END
 
     /* This is a first heuristic; it doesn't catch tainting magic. */
-    if (tainting) {
+    if (PL_tainting) {
        while (++mark <= sp) {
            if (SvTAINTED(*mark)) {
                TAINT;
@@ -1121,7 +1121,7 @@ apply(I32 type, register SV **mark, register SV **sp)
            APPLY_TAINT_PROPER();
            tot = sp - mark;
            while (++mark <= sp) {
-               char *name = SvPVx(*mark, na);
+               char *name = SvPVx(*mark, PL_na);
                APPLY_TAINT_PROPER();
                if (PerlLIO_chmod(name, val))
                    tot--;
@@ -1138,7 +1138,7 @@ apply(I32 type, register SV **mark, register SV **sp)
            APPLY_TAINT_PROPER();
            tot = sp - mark;
            while (++mark <= sp) {
-               char *name = SvPVx(*mark, na);
+               char *name = SvPVx(*mark, PL_na);
                APPLY_TAINT_PROPER();
                if (PerlLIO_chown(name, val, val2))
                    tot--;
@@ -1158,7 +1158,7 @@ nothing in the core.
        APPLY_TAINT_PROPER();
        if (mark == sp)
            break;
-       s = SvPVx(*++mark, na);
+       s = SvPVx(*++mark, PL_na);
        if (isUPPER(*s)) {
            if (*s == 'S' && s[1] == 'I' && s[2] == 'G')
                s += 3;
@@ -1228,15 +1228,15 @@ nothing in the core.
        APPLY_TAINT_PROPER();
        tot = sp - mark;
        while (++mark <= sp) {
-           s = SvPVx(*mark, na);
+           s = SvPVx(*mark, PL_na);
            APPLY_TAINT_PROPER();
-           if (euid || unsafe) {
+           if (PL_euid || PL_unsafe) {
                if (UNLINK(s))
                    tot--;
            }
            else {      /* don't let root wipe out directories without -U */
 #ifdef HAS_LSTAT
-               if (PerlLIO_lstat(s,&statbuf) < 0 || S_ISDIR(statbuf.st_mode))
+               if (PerlLIO_lstat(s,&PL_statbuf) < 0 || S_ISDIR(PL_statbuf.st_mode))
 #else
                if (PerlLIO_stat(s,&statbuf) < 0 || S_ISDIR(statbuf.st_mode))
 #endif
@@ -1273,7 +1273,7 @@ nothing in the core.
            APPLY_TAINT_PROPER();
            tot = sp - mark;
            while (++mark <= sp) {
-               char *name = SvPVx(*mark, na);
+               char *name = SvPVx(*mark, PL_na);
                APPLY_TAINT_PROPER();
                if (PerlLIO_utime(name, &utbuf))
                    tot--;
@@ -1323,7 +1323,7 @@ cando(I32 bit, I32 effective, register struct stat *statbufp)
      return (bit & statbufp->st_mode) ? TRUE : FALSE;
 
 #else /* ! DOSISH */
-    if ((effective ? euid : uid) == 0) {       /* root is special */
+    if ((effective ? PL_euid : PL_uid) == 0) { /* root is special */
        if (bit == S_IXUSR) {
            if (statbufp->st_mode & 0111 || S_ISDIR(statbufp->st_mode))
                return TRUE;
@@ -1332,7 +1332,7 @@ cando(I32 bit, I32 effective, register struct stat *statbufp)
            return TRUE;                /* root reads and writes anything */
        return FALSE;
     }
-    if (statbufp->st_uid == (effective ? euid : uid) ) {
+    if (statbufp->st_uid == (effective ? PL_euid : PL_uid) ) {
        if (statbufp->st_mode & bit)
            return TRUE;        /* ok as "user" */
     }
@@ -1350,7 +1350,7 @@ cando(I32 bit, I32 effective, register struct stat *statbufp)
 I32
 ingroup(I32 testgid, I32 effective)
 {
-    if (testgid == (effective ? egid : gid))
+    if (testgid == (effective ? PL_egid : PL_gid))
        return TRUE;
 #ifdef HAS_GETGROUPS
 #ifndef NGROUPS
diff --git a/doop.c b/doop.c
index 702aaf8..67082db 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -223,7 +223,7 @@ do_chop(register SV *astr, register SV *sv)
         max = AvFILL(av);
         for (i = 0; i <= max; i++) {
            sv = (SV*)av_fetch(av, i, FALSE);
-           if (sv && ((sv = *(SV**)sv), sv != &sv_undef))
+           if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
                do_chop(astr, sv);
        }
         return;
@@ -260,7 +260,7 @@ do_chomp(register SV *sv)
     STRLEN len;
     char *s;
 
-    if (RsSNARF(rs))
+    if (RsSNARF(PL_rs))
        return 0;
     count = 0;
     if (SvTYPE(sv) == SVt_PVAV) {
@@ -270,7 +270,7 @@ do_chomp(register SV *sv)
         max = AvFILL(av);
         for (i = 0; i <= max; i++) {
            sv = (SV*)av_fetch(av, i, FALSE);
-           if (sv && ((sv = *(SV**)sv), sv != &sv_undef))
+           if (sv && ((sv = *(SV**)sv), sv != &PL_sv_undef))
                count += do_chomp(sv);
        }
         return count;
@@ -289,7 +289,7 @@ do_chomp(register SV *sv)
        s = SvPV_force(sv, len);
     if (s && len) {
        s += --len;
-       if (RsPARA(rs)) {
+       if (RsPARA(PL_rs)) {
            if (*s != '\n')
                goto nope;
            ++count;
@@ -301,7 +301,7 @@ do_chomp(register SV *sv)
        }
        else {
            STRLEN rslen;
-           char *rsptr = SvPV(rs, rslen);
+           char *rsptr = SvPV(PL_rs, rslen);
            if (rslen == 1) {
                if (*s != *rsptr)
                    goto nope;
@@ -352,7 +352,7 @@ do_vop(I32 optype, SV *sv, SV *left, SV *right)
     len = leftlen < rightlen ? leftlen : rightlen;
     lensave = len;
     if (SvOK(sv) || SvTYPE(sv) > SVt_PVMG) {
-       dc = SvPV_force(sv, na);
+       dc = SvPV_force(sv, PL_na);
        if (SvCUR(sv) < len) {
            dc = SvGROW(sv, len + 1);
            (void)memzero(dc + SvCUR(sv), len - SvCUR(sv) + 1);
diff --git a/dump.c b/dump.c
index 06273e5..b1e984b 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -25,9 +25,9 @@ dump_all(void)
 #ifdef DEBUGGING
     dTHR;
     PerlIO_setlinebuf(Perl_debug_log);
-    if (main_root)
-       dump_op(main_root);
-    dump_packsubs(defstash);
+    if (PL_main_root)
+       dump_op(PL_main_root);
+    dump_packsubs(PL_defstash);
 #endif /* DEBUGGING */
 }
 
@@ -52,7 +52,7 @@ dump_packsubs(HV *stash)
            if (GvFORM(gv))
                dump_form(gv);
            if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
-             (hv = GvHV(gv)) && HvNAME(hv) && hv != defstash)
+             (hv = GvHV(gv)) && HvNAME(hv) && hv != PL_defstash)
                dump_packsubs(hv);              /* nested package */
        }
     }
@@ -97,7 +97,7 @@ void
 dump_eval(void)
 {
 #ifdef DEBUGGING
-    dump_op(eval_root);
+    dump_op(PL_eval_root);
 #endif /* DEBUGGING */
 }
 
@@ -119,7 +119,7 @@ dump_op(OP *o)
     }
     else
        PerlIO_printf(Perl_debug_log, "DONE\n");
-    dumplvl++;
+    PL_dumplvl++;
     if (o->op_targ) {
        if (o->op_type == OP_NULL)
            dump("  (was %s)\n", op_name[o->op_targ]);
@@ -243,7 +243,7 @@ dump_op(OP *o)
            ENTER;
            SAVEFREESV(tmpsv);
            gv_fullname3(tmpsv, cGVOPo->op_gv, Nullch);
-           dump("GV = %s\n", SvPV(tmpsv, na));
+           dump("GV = %s\n", SvPV(tmpsv, PL_na));
            LEAVE;
        }
        else
@@ -312,7 +312,7 @@ dump_op(OP *o)
        for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling)
            dump_op(kid);
     }
-    dumplvl--;
+    PL_dumplvl--;
     dump("}\n");
 #endif /* DEBUGGING */
 }
@@ -328,7 +328,7 @@ dump_gv(GV *gv)
        return;
     }
     sv = sv_newmortal();
-    dumplvl++;
+    PL_dumplvl++;
     PerlIO_printf(Perl_debug_log, "{\n");
     gv_fullname3(sv, gv, Nullch);
     dump("GV_NAME = %s", SvPVX(sv));
@@ -337,7 +337,7 @@ dump_gv(GV *gv)
        dump("-> %s", SvPVX(sv));
     }
     dump("\n");
-    dumplvl--;
+    PL_dumplvl--;
     dump("}\n");
 #endif /* DEBUGGING */
 }
@@ -353,7 +353,7 @@ dump_pm(PMOP *pm)
        return;
     }
     dump("{\n");
-    dumplvl++;
+    PL_dumplvl++;
     if (pm->op_pmflags & PMf_ONCE)
        ch = '?';
     else
@@ -400,7 +400,7 @@ dump_pm(PMOP *pm)
        SvREFCNT_dec(tmpsv);
     }
 
-    dumplvl--;
+    PL_dumplvl--;
     dump("}\n");
 #endif /* DEBUGGING */
 }
@@ -414,7 +414,7 @@ dump(char *pat,...)
     va_list args;
 
     va_start(args, pat);
-    for (i = dumplvl*4; i; i--)
+    for (i = PL_dumplvl*4; i; i--)
        (void)PerlIO_putc(Perl_debug_log,' ');
     PerlIO_vprintf(Perl_debug_log,pat,args);
     va_end(args);
index 6c4177d..836e816 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -86,13 +86,19 @@ sub embed ($) {
     my ($sym) = @_;
     hide($sym, "Perl_$sym");
 }
+sub embedvar ($) {
+    my ($sym) = @_;
+#   hide($sym, "Perl_$sym");
+    return '';
+}
+
 sub multon ($$$) {
     my ($sym,$pre,$ptr) = @_;
-    hide($sym, "($ptr$pre$sym)");
+    hide("PL_$sym", "($ptr$pre$sym)");
 }
 sub multoff ($$) {
     my ($sym,$pre) = @_;
-    hide("$pre$sym", $sym);
+    hide("$pre$sym", "PL_$sym");
 }
 
 unlink 'embed.h';
@@ -211,7 +217,7 @@ print EM <<'END';
 END
 
 for $sym (sort keys %intrp) {
-    print EM embed($sym);
+    print EM embedvar($sym);
 }
 
 print EM <<'END';
@@ -221,7 +227,7 @@ print EM <<'END';
 END
 
 for $sym (sort keys %thread) {
-    print EM embed($sym);
+    print EM embedvar($sym);
 }
 
 print EM <<'END';
@@ -269,7 +275,7 @@ print EM <<'END';
 END
 
 for $sym (sort keys %globvar) {
-    print EM embed($sym);
+    print EM embedvar($sym);
 }
 
 print EM <<'END';
index 6d2dbe4..ae37202 100644 (file)
 #ifndef USE_THREADS
 /* If we do not have threads then per-thread vars are per-interpreter */
 
-#define Sv                     (curinterp->TSv)
-#define Xpv                    (curinterp->TXpv)
-#define av_fetch_sv            (curinterp->Tav_fetch_sv)
-#define bodytarget             (curinterp->Tbodytarget)
-#define bostr                  (curinterp->Tbostr)
-#define chopset                        (curinterp->Tchopset)
-#define colors                 (curinterp->Tcolors)
-#define colorset               (curinterp->Tcolorset)
-#define curcop                 (curinterp->Tcurcop)
-#define curpad                 (curinterp->Tcurpad)
-#define curpm                  (curinterp->Tcurpm)
-#define curstack               (curinterp->Tcurstack)
-#define curstackinfo           (curinterp->Tcurstackinfo)
-#define curstash               (curinterp->Tcurstash)
-#define defoutgv               (curinterp->Tdefoutgv)
-#define defstash               (curinterp->Tdefstash)
-#define delaymagic             (curinterp->Tdelaymagic)
-#define dirty                  (curinterp->Tdirty)
-#define extralen               (curinterp->Textralen)
-#define firstgv                        (curinterp->Tfirstgv)
-#define formtarget             (curinterp->Tformtarget)
-#define hv_fetch_ent_mh                (curinterp->Thv_fetch_ent_mh)
-#define hv_fetch_sv            (curinterp->Thv_fetch_sv)
-#define in_eval                        (curinterp->Tin_eval)
-#define last_in_gv             (curinterp->Tlast_in_gv)
-#define lastgotoprobe          (curinterp->Tlastgotoprobe)
-#define lastscream             (curinterp->Tlastscream)
-#define localizing             (curinterp->Tlocalizing)
-#define mainstack              (curinterp->Tmainstack)
-#define markstack              (curinterp->Tmarkstack)
-#define markstack_max          (curinterp->Tmarkstack_max)
-#define markstack_ptr          (curinterp->Tmarkstack_ptr)
-#define maxscream              (curinterp->Tmaxscream)
-#define modcount               (curinterp->Tmodcount)
-#define nrs                    (curinterp->Tnrs)
-#define ofs                    (curinterp->Tofs)
-#define ofslen                 (curinterp->Tofslen)
-#define op                     (curinterp->Top)
-#define opsave                 (curinterp->Topsave)
-#define reg_eval_set           (curinterp->Treg_eval_set)
-#define reg_flags              (curinterp->Treg_flags)
-#define reg_start_tmp          (curinterp->Treg_start_tmp)
-#define reg_start_tmpl         (curinterp->Treg_start_tmpl)
-#define regbol                 (curinterp->Tregbol)
-#define regcc                  (curinterp->Tregcc)
-#define regcode                        (curinterp->Tregcode)
-#define regcomp_parse          (curinterp->Tregcomp_parse)
-#define regcomp_rx             (curinterp->Tregcomp_rx)
-#define regcompp               (curinterp->Tregcompp)
-#define regdata                        (curinterp->Tregdata)
-#define regdummy               (curinterp->Tregdummy)
-#define regendp                        (curinterp->Tregendp)
-#define regeol                 (curinterp->Tregeol)
-#define regexecp               (curinterp->Tregexecp)
-#define regflags               (curinterp->Tregflags)
-#define regindent              (curinterp->Tregindent)
-#define reginput               (curinterp->Treginput)
-#define reginterp_cnt          (curinterp->Treginterp_cnt)
-#define reglastparen           (curinterp->Treglastparen)
-#define regnarrate             (curinterp->Tregnarrate)
-#define regnaughty             (curinterp->Tregnaughty)
-#define regnpar                        (curinterp->Tregnpar)
-#define regprecomp             (curinterp->Tregprecomp)
-#define regprev                        (curinterp->Tregprev)
-#define regprogram             (curinterp->Tregprogram)
-#define regsawback             (curinterp->Tregsawback)
-#define regseen                        (curinterp->Tregseen)
-#define regsize                        (curinterp->Tregsize)
-#define regstartp              (curinterp->Tregstartp)
-#define regtill                        (curinterp->Tregtill)
-#define regxend                        (curinterp->Tregxend)
-#define restartop              (curinterp->Trestartop)
-#define retstack               (curinterp->Tretstack)
-#define retstack_ix            (curinterp->Tretstack_ix)
-#define retstack_max           (curinterp->Tretstack_max)
-#define rs                     (curinterp->Trs)
-#define savestack              (curinterp->Tsavestack)
-#define savestack_ix           (curinterp->Tsavestack_ix)
-#define savestack_max          (curinterp->Tsavestack_max)
-#define scopestack             (curinterp->Tscopestack)
-#define scopestack_ix          (curinterp->Tscopestack_ix)
-#define scopestack_max         (curinterp->Tscopestack_max)
-#define screamfirst            (curinterp->Tscreamfirst)
-#define screamnext             (curinterp->Tscreamnext)
-#define secondgv               (curinterp->Tsecondgv)
-#define seen_evals             (curinterp->Tseen_evals)
-#define seen_zerolen           (curinterp->Tseen_zerolen)
-#define sortcop                        (curinterp->Tsortcop)
-#define sortcxix               (curinterp->Tsortcxix)
-#define sortstash              (curinterp->Tsortstash)
-#define stack_base             (curinterp->Tstack_base)
-#define stack_max              (curinterp->Tstack_max)
-#define stack_sp               (curinterp->Tstack_sp)
-#define start_env              (curinterp->Tstart_env)
-#define statbuf                        (curinterp->Tstatbuf)
-#define statcache              (curinterp->Tstatcache)
-#define statgv                 (curinterp->Tstatgv)
-#define statname               (curinterp->Tstatname)
-#define tainted                        (curinterp->Ttainted)
-#define timesbuf               (curinterp->Ttimesbuf)
-#define tmps_floor             (curinterp->Ttmps_floor)
-#define tmps_ix                        (curinterp->Ttmps_ix)
-#define tmps_max               (curinterp->Ttmps_max)
-#define tmps_stack             (curinterp->Ttmps_stack)
-#define top_env                        (curinterp->Ttop_env)
-#define toptarget              (curinterp->Ttoptarget)
+#define PL_Sv                  (curinterp->TSv)
+#define PL_Xpv                 (curinterp->TXpv)
+#define PL_av_fetch_sv         (curinterp->Tav_fetch_sv)
+#define PL_bodytarget          (curinterp->Tbodytarget)
+#define PL_bostr               (curinterp->Tbostr)
+#define PL_chopset             (curinterp->Tchopset)
+#define PL_colors              (curinterp->Tcolors)
+#define PL_colorset            (curinterp->Tcolorset)
+#define PL_curcop              (curinterp->Tcurcop)
+#define PL_curpad              (curinterp->Tcurpad)
+#define PL_curpm               (curinterp->Tcurpm)
+#define PL_curstack            (curinterp->Tcurstack)
+#define PL_curstackinfo                (curinterp->Tcurstackinfo)
+#define PL_curstash            (curinterp->Tcurstash)
+#define PL_defoutgv            (curinterp->Tdefoutgv)
+#define PL_defstash            (curinterp->Tdefstash)
+#define PL_delaymagic          (curinterp->Tdelaymagic)
+#define PL_dirty               (curinterp->Tdirty)
+#define PL_extralen            (curinterp->Textralen)
+#define PL_firstgv             (curinterp->Tfirstgv)
+#define PL_formtarget          (curinterp->Tformtarget)
+#define PL_hv_fetch_ent_mh     (curinterp->Thv_fetch_ent_mh)
+#define PL_hv_fetch_sv         (curinterp->Thv_fetch_sv)
+#define PL_in_eval             (curinterp->Tin_eval)
+#define PL_last_in_gv          (curinterp->Tlast_in_gv)
+#define PL_lastgotoprobe       (curinterp->Tlastgotoprobe)
+#define PL_lastscream          (curinterp->Tlastscream)
+#define PL_localizing          (curinterp->Tlocalizing)
+#define PL_mainstack           (curinterp->Tmainstack)
+#define PL_markstack           (curinterp->Tmarkstack)
+#define PL_markstack_max       (curinterp->Tmarkstack_max)
+#define PL_markstack_ptr       (curinterp->Tmarkstack_ptr)
+#define PL_maxscream           (curinterp->Tmaxscream)
+#define PL_modcount            (curinterp->Tmodcount)
+#define PL_nrs                 (curinterp->Tnrs)
+#define PL_ofs                 (curinterp->Tofs)
+#define PL_ofslen              (curinterp->Tofslen)
+#define PL_op                  (curinterp->Top)
+#define PL_opsave              (curinterp->Topsave)
+#define PL_reg_eval_set                (curinterp->Treg_eval_set)
+#define PL_reg_flags           (curinterp->Treg_flags)
+#define PL_reg_start_tmp       (curinterp->Treg_start_tmp)
+#define PL_reg_start_tmpl      (curinterp->Treg_start_tmpl)
+#define PL_regbol              (curinterp->Tregbol)
+#define PL_regcc               (curinterp->Tregcc)
+#define PL_regcode             (curinterp->Tregcode)
+#define PL_regcomp_parse       (curinterp->Tregcomp_parse)
+#define PL_regcomp_rx          (curinterp->Tregcomp_rx)
+#define PL_regcompp            (curinterp->Tregcompp)
+#define PL_regdata             (curinterp->Tregdata)
+#define PL_regdummy            (curinterp->Tregdummy)
+#define PL_regendp             (curinterp->Tregendp)
+#define PL_regeol              (curinterp->Tregeol)
+#define PL_regexecp            (curinterp->Tregexecp)
+#define PL_regflags            (curinterp->Tregflags)
+#define PL_regindent           (curinterp->Tregindent)
+#define PL_reginput            (curinterp->Treginput)
+#define PL_reginterp_cnt       (curinterp->Treginterp_cnt)
+#define PL_reglastparen                (curinterp->Treglastparen)
+#define PL_regnarrate          (curinterp->Tregnarrate)
+#define PL_regnaughty          (curinterp->Tregnaughty)
+#define PL_regnpar             (curinterp->Tregnpar)
+#define PL_regprecomp          (curinterp->Tregprecomp)
+#define PL_regprev             (curinterp->Tregprev)
+#define PL_regprogram          (curinterp->Tregprogram)
+#define PL_regsawback          (curinterp->Tregsawback)
+#define PL_regseen             (curinterp->Tregseen)
+#define PL_regsize             (curinterp->Tregsize)
+#define PL_regstartp           (curinterp->Tregstartp)
+#define PL_regtill             (curinterp->Tregtill)
+#define PL_regxend             (curinterp->Tregxend)
+#define PL_restartop           (curinterp->Trestartop)
+#define PL_retstack            (curinterp->Tretstack)
+#define PL_retstack_ix         (curinterp->Tretstack_ix)
+#define PL_retstack_max                (curinterp->Tretstack_max)
+#define PL_rs                  (curinterp->Trs)
+#define PL_savestack           (curinterp->Tsavestack)
+#define PL_savestack_ix                (curinterp->Tsavestack_ix)
+#define PL_savestack_max       (curinterp->Tsavestack_max)
+#define PL_scopestack          (curinterp->Tscopestack)
+#define PL_scopestack_ix       (curinterp->Tscopestack_ix)
+#define PL_scopestack_max      (curinterp->Tscopestack_max)
+#define PL_screamfirst         (curinterp->Tscreamfirst)
+#define PL_screamnext          (curinterp->Tscreamnext)
+#define PL_secondgv            (curinterp->Tsecondgv)
+#define PL_seen_evals          (curinterp->Tseen_evals)
+#define PL_seen_zerolen                (curinterp->Tseen_zerolen)
+#define PL_sortcop             (curinterp->Tsortcop)
+#define PL_sortcxix            (curinterp->Tsortcxix)
+#define PL_sortstash           (curinterp->Tsortstash)
+#define PL_stack_base          (curinterp->Tstack_base)
+#define PL_stack_max           (curinterp->Tstack_max)
+#define PL_stack_sp            (curinterp->Tstack_sp)
+#define PL_start_env           (curinterp->Tstart_env)
+#define PL_statbuf             (curinterp->Tstatbuf)
+#define PL_statcache           (curinterp->Tstatcache)
+#define PL_statgv              (curinterp->Tstatgv)
+#define PL_statname            (curinterp->Tstatname)
+#define PL_tainted             (curinterp->Ttainted)
+#define PL_timesbuf            (curinterp->Ttimesbuf)
+#define PL_tmps_floor          (curinterp->Ttmps_floor)
+#define PL_tmps_ix             (curinterp->Ttmps_ix)
+#define PL_tmps_max            (curinterp->Ttmps_max)
+#define PL_tmps_stack          (curinterp->Ttmps_stack)
+#define PL_top_env             (curinterp->Ttop_env)
+#define PL_toptarget           (curinterp->Ttoptarget)
 
 #endif /* !USE_THREADS */
 
 /* These are always per-interpreter if there is more than one */
 
-#define Argv                   (curinterp->IArgv)
-#define Cmd                    (curinterp->ICmd)
-#define DBcv                   (curinterp->IDBcv)
-#define DBgv                   (curinterp->IDBgv)
-#define DBline                 (curinterp->IDBline)
-#define DBsignal               (curinterp->IDBsignal)
-#define DBsingle               (curinterp->IDBsingle)
-#define DBsub                  (curinterp->IDBsub)
-#define DBtrace                        (curinterp->IDBtrace)
-#define ampergv                        (curinterp->Iampergv)
-#define archpat_auto           (curinterp->Iarchpat_auto)
-#define argvgv                 (curinterp->Iargvgv)
-#define argvoutgv              (curinterp->Iargvoutgv)
-#define basetime               (curinterp->Ibasetime)
-#define beginav                        (curinterp->Ibeginav)
-#define cddir                  (curinterp->Icddir)
-#define compcv                 (curinterp->Icompcv)
-#define compiling              (curinterp->Icompiling)
-#define comppad                        (curinterp->Icomppad)
-#define comppad_name           (curinterp->Icomppad_name)
-#define comppad_name_fill      (curinterp->Icomppad_name_fill)
-#define comppad_name_floor     (curinterp->Icomppad_name_floor)
-#define copline                        (curinterp->Icopline)
-#define curcopdb               (curinterp->Icurcopdb)
-#define curstname              (curinterp->Icurstname)
-#define dbargs                 (curinterp->Idbargs)
-#define debdelim               (curinterp->Idebdelim)
-#define debname                        (curinterp->Idebname)
-#define debstash               (curinterp->Idebstash)
-#define defgv                  (curinterp->Idefgv)
-#define diehook                        (curinterp->Idiehook)
-#define dlevel                 (curinterp->Idlevel)
-#define dlmax                  (curinterp->Idlmax)
-#define doextract              (curinterp->Idoextract)
-#define doswitches             (curinterp->Idoswitches)
-#define dowarn                 (curinterp->Idowarn)
-#define dumplvl                        (curinterp->Idumplvl)
-#define e_script               (curinterp->Ie_script)
-#define endav                  (curinterp->Iendav)
-#define envgv                  (curinterp->Ienvgv)
-#define errgv                  (curinterp->Ierrgv)
-#define eval_root              (curinterp->Ieval_root)
-#define eval_start             (curinterp->Ieval_start)
-#define exitlist               (curinterp->Iexitlist)
-#define exitlistlen            (curinterp->Iexitlistlen)
-#define fdpid                  (curinterp->Ifdpid)
-#define filemode               (curinterp->Ifilemode)
-#define forkprocess            (curinterp->Iforkprocess)
-#define formfeed               (curinterp->Iformfeed)
-#define generation             (curinterp->Igeneration)
-#define gensym                 (curinterp->Igensym)
-#define globalstash            (curinterp->Iglobalstash)
-#define hintgv                 (curinterp->Ihintgv)
-#define in_clean_all           (curinterp->Iin_clean_all)
-#define in_clean_objs          (curinterp->Iin_clean_objs)
-#define incgv                  (curinterp->Iincgv)
-#define initav                 (curinterp->Iinitav)
-#define inplace                        (curinterp->Iinplace)
-#define last_proto             (curinterp->Ilast_proto)
-#define lastfd                 (curinterp->Ilastfd)
-#define lastsize               (curinterp->Ilastsize)
-#define lastspbase             (curinterp->Ilastspbase)
-#define laststatval            (curinterp->Ilaststatval)
-#define laststype              (curinterp->Ilaststype)
-#define leftgv                 (curinterp->Ileftgv)
-#define lineary                        (curinterp->Ilineary)
-#define linestart              (curinterp->Ilinestart)
-#define localpatches           (curinterp->Ilocalpatches)
-#define main_cv                        (curinterp->Imain_cv)
-#define main_root              (curinterp->Imain_root)
-#define main_start             (curinterp->Imain_start)
-#define maxsysfd               (curinterp->Imaxsysfd)
-#define mess_sv                        (curinterp->Imess_sv)
-#define minus_F                        (curinterp->Iminus_F)
-#define minus_a                        (curinterp->Iminus_a)
-#define minus_c                        (curinterp->Iminus_c)
-#define minus_l                        (curinterp->Iminus_l)
-#define minus_n                        (curinterp->Iminus_n)
-#define minus_p                        (curinterp->Iminus_p)
-#define modglobal              (curinterp->Imodglobal)
-#define multiline              (curinterp->Imultiline)
-#define mystrk                 (curinterp->Imystrk)
-#define ofmt                   (curinterp->Iofmt)
-#define oldlastpm              (curinterp->Ioldlastpm)
-#define oldname                        (curinterp->Ioldname)
-#define op_mask                        (curinterp->Iop_mask)
-#define origargc               (curinterp->Iorigargc)
-#define origargv               (curinterp->Iorigargv)
-#define origfilename           (curinterp->Iorigfilename)
-#define ors                    (curinterp->Iors)
-#define orslen                 (curinterp->Iorslen)
-#define parsehook              (curinterp->Iparsehook)
-#define patchlevel             (curinterp->Ipatchlevel)
-#define pending_ident          (curinterp->Ipending_ident)
-#define perl_destruct_level    (curinterp->Iperl_destruct_level)
-#define perldb                 (curinterp->Iperldb)
-#define preambleav             (curinterp->Ipreambleav)
-#define preambled              (curinterp->Ipreambled)
-#define preprocess             (curinterp->Ipreprocess)
-#define profiledata            (curinterp->Iprofiledata)
-#define replgv                 (curinterp->Ireplgv)
-#define rightgv                        (curinterp->Irightgv)
-#define rsfp                   (curinterp->Irsfp)
-#define rsfp_filters           (curinterp->Irsfp_filters)
-#define sawampersand           (curinterp->Isawampersand)
-#define sawstudy               (curinterp->Isawstudy)
-#define sawvec                 (curinterp->Isawvec)
-#define siggv                  (curinterp->Isiggv)
-#define splitstr               (curinterp->Isplitstr)
-#define statusvalue            (curinterp->Istatusvalue)
-#define statusvalue_vms                (curinterp->Istatusvalue_vms)
-#define stdingv                        (curinterp->Istdingv)
-#define strchop                        (curinterp->Istrchop)
-#define strtab                 (curinterp->Istrtab)
-#define sub_generation         (curinterp->Isub_generation)
-#define sublex_info            (curinterp->Isublex_info)
-#define sv_arenaroot           (curinterp->Isv_arenaroot)
-#define sv_count               (curinterp->Isv_count)
-#define sv_objcount            (curinterp->Isv_objcount)
-#define sv_root                        (curinterp->Isv_root)
-#define sys_intern             (curinterp->Isys_intern)
-#define tainting               (curinterp->Itainting)
-#define threadnum              (curinterp->Ithreadnum)
-#define thrsv                  (curinterp->Ithrsv)
-#define unsafe                 (curinterp->Iunsafe)
-#define warnhook               (curinterp->Iwarnhook)
+#define PL_Argv                        (curinterp->IArgv)
+#define PL_Cmd                 (curinterp->ICmd)
+#define PL_DBcv                        (curinterp->IDBcv)
+#define PL_DBgv                        (curinterp->IDBgv)
+#define PL_DBline              (curinterp->IDBline)
+#define PL_DBsignal            (curinterp->IDBsignal)
+#define PL_DBsingle            (curinterp->IDBsingle)
+#define PL_DBsub               (curinterp->IDBsub)
+#define PL_DBtrace             (curinterp->IDBtrace)
+#define PL_ampergv             (curinterp->Iampergv)
+#define PL_archpat_auto                (curinterp->Iarchpat_auto)
+#define PL_argvgv              (curinterp->Iargvgv)
+#define PL_argvoutgv           (curinterp->Iargvoutgv)
+#define PL_basetime            (curinterp->Ibasetime)
+#define PL_beginav             (curinterp->Ibeginav)
+#define PL_cddir               (curinterp->Icddir)
+#define PL_compcv              (curinterp->Icompcv)
+#define PL_compiling           (curinterp->Icompiling)
+#define PL_comppad             (curinterp->Icomppad)
+#define PL_comppad_name                (curinterp->Icomppad_name)
+#define PL_comppad_name_fill   (curinterp->Icomppad_name_fill)
+#define PL_comppad_name_floor  (curinterp->Icomppad_name_floor)
+#define PL_copline             (curinterp->Icopline)
+#define PL_curcopdb            (curinterp->Icurcopdb)
+#define PL_curstname           (curinterp->Icurstname)
+#define PL_dbargs              (curinterp->Idbargs)
+#define PL_debdelim            (curinterp->Idebdelim)
+#define PL_debname             (curinterp->Idebname)
+#define PL_debstash            (curinterp->Idebstash)
+#define PL_defgv               (curinterp->Idefgv)
+#define PL_diehook             (curinterp->Idiehook)
+#define PL_dlevel              (curinterp->Idlevel)
+#define PL_dlmax               (curinterp->Idlmax)
+#define PL_doextract           (curinterp->Idoextract)
+#define PL_doswitches          (curinterp->Idoswitches)
+#define PL_dowarn              (curinterp->Idowarn)
+#define PL_dumplvl             (curinterp->Idumplvl)
+#define PL_e_script            (curinterp->Ie_script)
+#define PL_endav               (curinterp->Iendav)
+#define PL_envgv               (curinterp->Ienvgv)
+#define PL_errgv               (curinterp->Ierrgv)
+#define PL_eval_root           (curinterp->Ieval_root)
+#define PL_eval_start          (curinterp->Ieval_start)
+#define PL_exitlist            (curinterp->Iexitlist)
+#define PL_exitlistlen         (curinterp->Iexitlistlen)
+#define PL_fdpid               (curinterp->Ifdpid)
+#define PL_filemode            (curinterp->Ifilemode)
+#define PL_forkprocess         (curinterp->Iforkprocess)
+#define PL_formfeed            (curinterp->Iformfeed)
+#define PL_generation          (curinterp->Igeneration)
+#define PL_gensym              (curinterp->Igensym)
+#define PL_globalstash         (curinterp->Iglobalstash)
+#define PL_hintgv              (curinterp->Ihintgv)
+#define PL_in_clean_all                (curinterp->Iin_clean_all)
+#define PL_in_clean_objs       (curinterp->Iin_clean_objs)
+#define PL_incgv               (curinterp->Iincgv)
+#define PL_initav              (curinterp->Iinitav)
+#define PL_inplace             (curinterp->Iinplace)
+#define PL_last_proto          (curinterp->Ilast_proto)
+#define PL_lastfd              (curinterp->Ilastfd)
+#define PL_lastsize            (curinterp->Ilastsize)
+#define PL_lastspbase          (curinterp->Ilastspbase)
+#define PL_laststatval         (curinterp->Ilaststatval)
+#define PL_laststype           (curinterp->Ilaststype)
+#define PL_leftgv              (curinterp->Ileftgv)
+#define PL_lineary             (curinterp->Ilineary)
+#define PL_linestart           (curinterp->Ilinestart)
+#define PL_localpatches                (curinterp->Ilocalpatches)
+#define PL_main_cv             (curinterp->Imain_cv)
+#define PL_main_root           (curinterp->Imain_root)
+#define PL_main_start          (curinterp->Imain_start)
+#define PL_maxsysfd            (curinterp->Imaxsysfd)
+#define PL_mess_sv             (curinterp->Imess_sv)
+#define PL_minus_F             (curinterp->Iminus_F)
+#define PL_minus_a             (curinterp->Iminus_a)
+#define PL_minus_c             (curinterp->Iminus_c)
+#define PL_minus_l             (curinterp->Iminus_l)
+#define PL_minus_n             (curinterp->Iminus_n)
+#define PL_minus_p             (curinterp->Iminus_p)
+#define PL_modglobal           (curinterp->Imodglobal)
+#define PL_multiline           (curinterp->Imultiline)
+#define PL_mystrk              (curinterp->Imystrk)
+#define PL_ofmt                        (curinterp->Iofmt)
+#define PL_oldlastpm           (curinterp->Ioldlastpm)
+#define PL_oldname             (curinterp->Ioldname)
+#define PL_op_mask             (curinterp->Iop_mask)
+#define PL_origargc            (curinterp->Iorigargc)
+#define PL_origargv            (curinterp->Iorigargv)
+#define PL_origfilename                (curinterp->Iorigfilename)
+#define PL_ors                 (curinterp->Iors)
+#define PL_orslen              (curinterp->Iorslen)
+#define PL_parsehook           (curinterp->Iparsehook)
+#define PL_patchlevel          (curinterp->Ipatchlevel)
+#define PL_pending_ident       (curinterp->Ipending_ident)
+#define PL_perl_destruct_level (curinterp->Iperl_destruct_level)
+#define PL_perldb              (curinterp->Iperldb)
+#define PL_preambleav          (curinterp->Ipreambleav)
+#define PL_preambled           (curinterp->Ipreambled)
+#define PL_preprocess          (curinterp->Ipreprocess)
+#define PL_profiledata         (curinterp->Iprofiledata)
+#define PL_replgv              (curinterp->Ireplgv)
+#define PL_rightgv             (curinterp->Irightgv)
+#define PL_rsfp                        (curinterp->Irsfp)
+#define PL_rsfp_filters                (curinterp->Irsfp_filters)
+#define PL_sawampersand                (curinterp->Isawampersand)
+#define PL_sawstudy            (curinterp->Isawstudy)
+#define PL_sawvec              (curinterp->Isawvec)
+#define PL_siggv               (curinterp->Isiggv)
+#define PL_splitstr            (curinterp->Isplitstr)
+#define PL_statusvalue         (curinterp->Istatusvalue)
+#define PL_statusvalue_vms     (curinterp->Istatusvalue_vms)
+#define PL_stdingv             (curinterp->Istdingv)
+#define PL_strchop             (curinterp->Istrchop)
+#define PL_strtab              (curinterp->Istrtab)
+#define PL_sub_generation      (curinterp->Isub_generation)
+#define PL_sublex_info         (curinterp->Isublex_info)
+#define PL_sv_arenaroot                (curinterp->Isv_arenaroot)
+#define PL_sv_count            (curinterp->Isv_count)
+#define PL_sv_objcount         (curinterp->Isv_objcount)
+#define PL_sv_root             (curinterp->Isv_root)
+#define PL_sys_intern          (curinterp->Isys_intern)
+#define PL_tainting            (curinterp->Itainting)
+#define PL_threadnum           (curinterp->Ithreadnum)
+#define PL_thrsv               (curinterp->Ithrsv)
+#define PL_unsafe              (curinterp->Iunsafe)
+#define PL_warnhook            (curinterp->Iwarnhook)
 
 #else  /* !MULTIPLICITY */
 
-#define IArgv                  Argv
-#define ICmd                   Cmd
-#define IDBcv                  DBcv
-#define IDBgv                  DBgv
-#define IDBline                        DBline
-#define IDBsignal              DBsignal
-#define IDBsingle              DBsingle
-#define IDBsub                 DBsub
-#define IDBtrace               DBtrace
-#define Iampergv               ampergv
-#define Iarchpat_auto          archpat_auto
-#define Iargvgv                        argvgv
-#define Iargvoutgv             argvoutgv
-#define Ibasetime              basetime
-#define Ibeginav               beginav
-#define Icddir                 cddir
-#define Icompcv                        compcv
-#define Icompiling             compiling
-#define Icomppad               comppad
-#define Icomppad_name          comppad_name
-#define Icomppad_name_fill     comppad_name_fill
-#define Icomppad_name_floor    comppad_name_floor
-#define Icopline               copline
-#define Icurcopdb              curcopdb
-#define Icurstname             curstname
-#define Idbargs                        dbargs
-#define Idebdelim              debdelim
-#define Idebname               debname
-#define Idebstash              debstash
-#define Idefgv                 defgv
-#define Idiehook               diehook
-#define Idlevel                        dlevel
-#define Idlmax                 dlmax
-#define Idoextract             doextract
-#define Idoswitches            doswitches
-#define Idowarn                        dowarn
-#define Idumplvl               dumplvl
-#define Ie_script              e_script
-#define Iendav                 endav
-#define Ienvgv                 envgv
-#define Ierrgv                 errgv
-#define Ieval_root             eval_root
-#define Ieval_start            eval_start
-#define Iexitlist              exitlist
-#define Iexitlistlen           exitlistlen
-#define Ifdpid                 fdpid
-#define Ifilemode              filemode
-#define Iforkprocess           forkprocess
-#define Iformfeed              formfeed
-#define Igeneration            generation
-#define Igensym                        gensym
-#define Iglobalstash           globalstash
-#define Ihintgv                        hintgv
-#define Iin_clean_all          in_clean_all
-#define Iin_clean_objs         in_clean_objs
-#define Iincgv                 incgv
-#define Iinitav                        initav
-#define Iinplace               inplace
-#define Ilast_proto            last_proto
-#define Ilastfd                        lastfd
-#define Ilastsize              lastsize
-#define Ilastspbase            lastspbase
-#define Ilaststatval           laststatval
-#define Ilaststype             laststype
-#define Ileftgv                        leftgv
-#define Ilineary               lineary
-#define Ilinestart             linestart
-#define Ilocalpatches          localpatches
-#define Imain_cv               main_cv
-#define Imain_root             main_root
-#define Imain_start            main_start
-#define Imaxsysfd              maxsysfd
-#define Imess_sv               mess_sv
-#define Iminus_F               minus_F
-#define Iminus_a               minus_a
-#define Iminus_c               minus_c
-#define Iminus_l               minus_l
-#define Iminus_n               minus_n
-#define Iminus_p               minus_p
-#define Imodglobal             modglobal
-#define Imultiline             multiline
-#define Imystrk                        mystrk
-#define Iofmt                  ofmt
-#define Ioldlastpm             oldlastpm
-#define Ioldname               oldname
-#define Iop_mask               op_mask
-#define Iorigargc              origargc
-#define Iorigargv              origargv
-#define Iorigfilename          origfilename
-#define Iors                   ors
-#define Iorslen                        orslen
-#define Iparsehook             parsehook
-#define Ipatchlevel            patchlevel
-#define Ipending_ident         pending_ident
-#define Iperl_destruct_level   perl_destruct_level
-#define Iperldb                        perldb
-#define Ipreambleav            preambleav
-#define Ipreambled             preambled
-#define Ipreprocess            preprocess
-#define Iprofiledata           profiledata
-#define Ireplgv                        replgv
-#define Irightgv               rightgv
-#define Irsfp                  rsfp
-#define Irsfp_filters          rsfp_filters
-#define Isawampersand          sawampersand
-#define Isawstudy              sawstudy
-#define Isawvec                        sawvec
-#define Isiggv                 siggv
-#define Isplitstr              splitstr
-#define Istatusvalue           statusvalue
-#define Istatusvalue_vms       statusvalue_vms
-#define Istdingv               stdingv
-#define Istrchop               strchop
-#define Istrtab                        strtab
-#define Isub_generation                sub_generation
-#define Isublex_info           sublex_info
-#define Isv_arenaroot          sv_arenaroot
-#define Isv_count              sv_count
-#define Isv_objcount           sv_objcount
-#define Isv_root               sv_root
-#define Isys_intern            sys_intern
-#define Itainting              tainting
-#define Ithreadnum             threadnum
-#define Ithrsv                 thrsv
-#define Iunsafe                        unsafe
-#define Iwarnhook              warnhook
+#define IArgv                  PL_Argv
+#define ICmd                   PL_Cmd
+#define IDBcv                  PL_DBcv
+#define IDBgv                  PL_DBgv
+#define IDBline                        PL_DBline
+#define IDBsignal              PL_DBsignal
+#define IDBsingle              PL_DBsingle
+#define IDBsub                 PL_DBsub
+#define IDBtrace               PL_DBtrace
+#define Iampergv               PL_ampergv
+#define Iarchpat_auto          PL_archpat_auto
+#define Iargvgv                        PL_argvgv
+#define Iargvoutgv             PL_argvoutgv
+#define Ibasetime              PL_basetime
+#define Ibeginav               PL_beginav
+#define Icddir                 PL_cddir
+#define Icompcv                        PL_compcv
+#define Icompiling             PL_compiling
+#define Icomppad               PL_comppad
+#define Icomppad_name          PL_comppad_name
+#define Icomppad_name_fill     PL_comppad_name_fill
+#define Icomppad_name_floor    PL_comppad_name_floor
+#define Icopline               PL_copline
+#define Icurcopdb              PL_curcopdb
+#define Icurstname             PL_curstname
+#define Idbargs                        PL_dbargs
+#define Idebdelim              PL_debdelim
+#define Idebname               PL_debname
+#define Idebstash              PL_debstash
+#define Idefgv                 PL_defgv
+#define Idiehook               PL_diehook
+#define Idlevel                        PL_dlevel
+#define Idlmax                 PL_dlmax
+#define Idoextract             PL_doextract
+#define Idoswitches            PL_doswitches
+#define Idowarn                        PL_dowarn
+#define Idumplvl               PL_dumplvl
+#define Ie_script              PL_e_script
+#define Iendav                 PL_endav
+#define Ienvgv                 PL_envgv
+#define Ierrgv                 PL_errgv
+#define Ieval_root             PL_eval_root
+#define Ieval_start            PL_eval_start
+#define Iexitlist              PL_exitlist
+#define Iexitlistlen           PL_exitlistlen
+#define Ifdpid                 PL_fdpid
+#define Ifilemode              PL_filemode
+#define Iforkprocess           PL_forkprocess
+#define Iformfeed              PL_formfeed
+#define Igeneration            PL_generation
+#define Igensym                        PL_gensym
+#define Iglobalstash           PL_globalstash
+#define Ihintgv                        PL_hintgv
+#define Iin_clean_all          PL_in_clean_all
+#define Iin_clean_objs         PL_in_clean_objs
+#define Iincgv                 PL_incgv
+#define Iinitav                        PL_initav
+#define Iinplace               PL_inplace
+#define Ilast_proto            PL_last_proto
+#define Ilastfd                        PL_lastfd
+#define Ilastsize              PL_lastsize
+#define Ilastspbase            PL_lastspbase
+#define Ilaststatval           PL_laststatval
+#define Ilaststype             PL_laststype
+#define Ileftgv                        PL_leftgv
+#define Ilineary               PL_lineary
+#define Ilinestart             PL_linestart
+#define Ilocalpatches          PL_localpatches
+#define Imain_cv               PL_main_cv
+#define Imain_root             PL_main_root
+#define Imain_start            PL_main_start
+#define Imaxsysfd              PL_maxsysfd
+#define Imess_sv               PL_mess_sv
+#define Iminus_F               PL_minus_F
+#define Iminus_a               PL_minus_a
+#define Iminus_c               PL_minus_c
+#define Iminus_l               PL_minus_l
+#define Iminus_n               PL_minus_n
+#define Iminus_p               PL_minus_p
+#define Imodglobal             PL_modglobal
+#define Imultiline             PL_multiline
+#define Imystrk                        PL_mystrk
+#define Iofmt                  PL_ofmt
+#define Ioldlastpm             PL_oldlastpm
+#define Ioldname               PL_oldname
+#define Iop_mask               PL_op_mask
+#define Iorigargc              PL_origargc
+#define Iorigargv              PL_origargv
+#define Iorigfilename          PL_origfilename
+#define Iors                   PL_ors
+#define Iorslen                        PL_orslen
+#define Iparsehook             PL_parsehook
+#define Ipatchlevel            PL_patchlevel
+#define Ipending_ident         PL_pending_ident
+#define Iperl_destruct_level   PL_perl_destruct_level
+#define Iperldb                        PL_perldb
+#define Ipreambleav            PL_preambleav
+#define Ipreambled             PL_preambled
+#define Ipreprocess            PL_preprocess
+#define Iprofiledata           PL_profiledata
+#define Ireplgv                        PL_replgv
+#define Irightgv               PL_rightgv
+#define Irsfp                  PL_rsfp
+#define Irsfp_filters          PL_rsfp_filters
+#define Isawampersand          PL_sawampersand
+#define Isawstudy              PL_sawstudy
+#define Isawvec                        PL_sawvec
+#define Isiggv                 PL_siggv
+#define Isplitstr              PL_splitstr
+#define Istatusvalue           PL_statusvalue
+#define Istatusvalue_vms       PL_statusvalue_vms
+#define Istdingv               PL_stdingv
+#define Istrchop               PL_strchop
+#define Istrtab                        PL_strtab
+#define Isub_generation                PL_sub_generation
+#define Isublex_info           PL_sublex_info
+#define Isv_arenaroot          PL_sv_arenaroot
+#define Isv_count              PL_sv_count
+#define Isv_objcount           PL_sv_objcount
+#define Isv_root               PL_sv_root
+#define Isys_intern            PL_sys_intern
+#define Itainting              PL_tainting
+#define Ithreadnum             PL_threadnum
+#define Ithrsv                 PL_thrsv
+#define Iunsafe                        PL_unsafe
+#define Iwarnhook              PL_warnhook
 
 #ifndef USE_THREADS
 
-#define TSv                    Sv
-#define TXpv                   Xpv
-#define Tav_fetch_sv           av_fetch_sv
-#define Tbodytarget            bodytarget
-#define Tbostr                 bostr
-#define Tchopset               chopset
-#define Tcolors                        colors
-#define Tcolorset              colorset
-#define Tcurcop                        curcop
-#define Tcurpad                        curpad
-#define Tcurpm                 curpm
-#define Tcurstack              curstack
-#define Tcurstackinfo          curstackinfo
-#define Tcurstash              curstash
-#define Tdefoutgv              defoutgv
-#define Tdefstash              defstash
-#define Tdelaymagic            delaymagic
-#define Tdirty                 dirty
-#define Textralen              extralen
-#define Tfirstgv               firstgv
-#define Tformtarget            formtarget
-#define Thv_fetch_ent_mh       hv_fetch_ent_mh
-#define Thv_fetch_sv           hv_fetch_sv
-#define Tin_eval               in_eval
-#define Tlast_in_gv            last_in_gv
-#define Tlastgotoprobe         lastgotoprobe
-#define Tlastscream            lastscream
-#define Tlocalizing            localizing
-#define Tmainstack             mainstack
-#define Tmarkstack             markstack
-#define Tmarkstack_max         markstack_max
-#define Tmarkstack_ptr         markstack_ptr
-#define Tmaxscream             maxscream
-#define Tmodcount              modcount
-#define Tnrs                   nrs
-#define Tofs                   ofs
-#define Tofslen                        ofslen
-#define Top                    op
-#define Topsave                        opsave
-#define Treg_eval_set          reg_eval_set
-#define Treg_flags             reg_flags
-#define Treg_start_tmp         reg_start_tmp
-#define Treg_start_tmpl                reg_start_tmpl
-#define Tregbol                        regbol
-#define Tregcc                 regcc
-#define Tregcode               regcode
-#define Tregcomp_parse         regcomp_parse
-#define Tregcomp_rx            regcomp_rx
-#define Tregcompp              regcompp
-#define Tregdata               regdata
-#define Tregdummy              regdummy
-#define Tregendp               regendp
-#define Tregeol                        regeol
-#define Tregexecp              regexecp
-#define Tregflags              regflags
-#define Tregindent             regindent
-#define Treginput              reginput
-#define Treginterp_cnt         reginterp_cnt
-#define Treglastparen          reglastparen
-#define Tregnarrate            regnarrate
-#define Tregnaughty            regnaughty
-#define Tregnpar               regnpar
-#define Tregprecomp            regprecomp
-#define Tregprev               regprev
-#define Tregprogram            regprogram
-#define Tregsawback            regsawback
-#define Tregseen               regseen
-#define Tregsize               regsize
-#define Tregstartp             regstartp
-#define Tregtill               regtill
-#define Tregxend               regxend
-#define Trestartop             restartop
-#define Tretstack              retstack
-#define Tretstack_ix           retstack_ix
-#define Tretstack_max          retstack_max
-#define Trs                    rs
-#define Tsavestack             savestack
-#define Tsavestack_ix          savestack_ix
-#define Tsavestack_max         savestack_max
-#define Tscopestack            scopestack
-#define Tscopestack_ix         scopestack_ix
-#define Tscopestack_max                scopestack_max
-#define Tscreamfirst           screamfirst
-#define Tscreamnext            screamnext
-#define Tsecondgv              secondgv
-#define Tseen_evals            seen_evals
-#define Tseen_zerolen          seen_zerolen
-#define Tsortcop               sortcop
-#define Tsortcxix              sortcxix
-#define Tsortstash             sortstash
-#define Tstack_base            stack_base
-#define Tstack_max             stack_max
-#define Tstack_sp              stack_sp
-#define Tstart_env             start_env
-#define Tstatbuf               statbuf
-#define Tstatcache             statcache
-#define Tstatgv                        statgv
-#define Tstatname              statname
-#define Ttainted               tainted
-#define Ttimesbuf              timesbuf
-#define Ttmps_floor            tmps_floor
-#define Ttmps_ix               tmps_ix
-#define Ttmps_max              tmps_max
-#define Ttmps_stack            tmps_stack
-#define Ttop_env               top_env
-#define Ttoptarget             toptarget
+#define TSv                    PL_Sv
+#define TXpv                   PL_Xpv
+#define Tav_fetch_sv           PL_av_fetch_sv
+#define Tbodytarget            PL_bodytarget
+#define Tbostr                 PL_bostr
+#define Tchopset               PL_chopset
+#define Tcolors                        PL_colors
+#define Tcolorset              PL_colorset
+#define Tcurcop                        PL_curcop
+#define Tcurpad                        PL_curpad
+#define Tcurpm                 PL_curpm
+#define Tcurstack              PL_curstack
+#define Tcurstackinfo          PL_curstackinfo
+#define Tcurstash              PL_curstash
+#define Tdefoutgv              PL_defoutgv
+#define Tdefstash              PL_defstash
+#define Tdelaymagic            PL_delaymagic
+#define Tdirty                 PL_dirty
+#define Textralen              PL_extralen
+#define Tfirstgv               PL_firstgv
+#define Tformtarget            PL_formtarget
+#define Thv_fetch_ent_mh       PL_hv_fetch_ent_mh
+#define Thv_fetch_sv           PL_hv_fetch_sv
+#define Tin_eval               PL_in_eval
+#define Tlast_in_gv            PL_last_in_gv
+#define Tlastgotoprobe         PL_lastgotoprobe
+#define Tlastscream            PL_lastscream
+#define Tlocalizing            PL_localizing
+#define Tmainstack             PL_mainstack
+#define Tmarkstack             PL_markstack
+#define Tmarkstack_max         PL_markstack_max
+#define Tmarkstack_ptr         PL_markstack_ptr
+#define Tmaxscream             PL_maxscream
+#define Tmodcount              PL_modcount
+#define Tnrs                   PL_nrs
+#define Tofs                   PL_ofs
+#define Tofslen                        PL_ofslen
+#define Top                    PL_op
+#define Topsave                        PL_opsave
+#define Treg_eval_set          PL_reg_eval_set
+#define Treg_flags             PL_reg_flags
+#define Treg_start_tmp         PL_reg_start_tmp
+#define Treg_start_tmpl                PL_reg_start_tmpl
+#define Tregbol                        PL_regbol
+#define Tregcc                 PL_regcc
+#define Tregcode               PL_regcode
+#define Tregcomp_parse         PL_regcomp_parse
+#define Tregcomp_rx            PL_regcomp_rx
+#define Tregcompp              PL_regcompp
+#define Tregdata               PL_regdata
+#define Tregdummy              PL_regdummy
+#define Tregendp               PL_regendp
+#define Tregeol                        PL_regeol
+#define Tregexecp              PL_regexecp
+#define Tregflags              PL_regflags
+#define Tregindent             PL_regindent
+#define Treginput              PL_reginput
+#define Treginterp_cnt         PL_reginterp_cnt
+#define Treglastparen          PL_reglastparen
+#define Tregnarrate            PL_regnarrate
+#define Tregnaughty            PL_regnaughty
+#define Tregnpar               PL_regnpar
+#define Tregprecomp            PL_regprecomp
+#define Tregprev               PL_regprev
+#define Tregprogram            PL_regprogram
+#define Tregsawback            PL_regsawback
+#define Tregseen               PL_regseen
+#define Tregsize               PL_regsize
+#define Tregstartp             PL_regstartp
+#define Tregtill               PL_regtill
+#define Tregxend               PL_regxend
+#define Trestartop             PL_restartop
+#define Tretstack              PL_retstack
+#define Tretstack_ix           PL_retstack_ix
+#define Tretstack_max          PL_retstack_max
+#define Trs                    PL_rs
+#define Tsavestack             PL_savestack
+#define Tsavestack_ix          PL_savestack_ix
+#define Tsavestack_max         PL_savestack_max
+#define Tscopestack            PL_scopestack
+#define Tscopestack_ix         PL_scopestack_ix
+#define Tscopestack_max                PL_scopestack_max
+#define Tscreamfirst           PL_screamfirst
+#define Tscreamnext            PL_screamnext
+#define Tsecondgv              PL_secondgv
+#define Tseen_evals            PL_seen_evals
+#define Tseen_zerolen          PL_seen_zerolen
+#define Tsortcop               PL_sortcop
+#define Tsortcxix              PL_sortcxix
+#define Tsortstash             PL_sortstash
+#define Tstack_base            PL_stack_base
+#define Tstack_max             PL_stack_max
+#define Tstack_sp              PL_stack_sp
+#define Tstart_env             PL_start_env
+#define Tstatbuf               PL_statbuf
+#define Tstatcache             PL_statcache
+#define Tstatgv                        PL_statgv
+#define Tstatname              PL_statname
+#define Ttainted               PL_tainted
+#define Ttimesbuf              PL_timesbuf
+#define Ttmps_floor            PL_tmps_floor
+#define Ttmps_ix               PL_tmps_ix
+#define Ttmps_max              PL_tmps_max
+#define Ttmps_stack            PL_tmps_stack
+#define Ttop_env               PL_top_env
+#define Ttoptarget             PL_toptarget
 
 #endif /* USE_THREADS */
 
 
 #ifdef EMBED
 
-#define Argv                   Perl_Argv
-#define Cmd                    Perl_Cmd
-#define DBcv                   Perl_DBcv
-#define DBgv                   Perl_DBgv
-#define DBline                 Perl_DBline
-#define DBsignal               Perl_DBsignal
-#define DBsingle               Perl_DBsingle
-#define DBsub                  Perl_DBsub
-#define DBtrace                        Perl_DBtrace
-#define ampergv                        Perl_ampergv
-#define archpat_auto           Perl_archpat_auto
-#define argvgv                 Perl_argvgv
-#define argvoutgv              Perl_argvoutgv
-#define basetime               Perl_basetime
-#define beginav                        Perl_beginav
-#define cddir                  Perl_cddir
-#define compcv                 Perl_compcv
-#define compiling              Perl_compiling
-#define comppad                        Perl_comppad
-#define comppad_name           Perl_comppad_name
-#define comppad_name_fill      Perl_comppad_name_fill
-#define comppad_name_floor     Perl_comppad_name_floor
-#define copline                        Perl_copline
-#define curcopdb               Perl_curcopdb
-#define curstname              Perl_curstname
-#define dbargs                 Perl_dbargs
-#define debdelim               Perl_debdelim
-#define debname                        Perl_debname
-#define debstash               Perl_debstash
-#define defgv                  Perl_defgv
-#define diehook                        Perl_diehook
-#define dlevel                 Perl_dlevel
-#define dlmax                  Perl_dlmax
-#define doextract              Perl_doextract
-#define doswitches             Perl_doswitches
-#define dowarn                 Perl_dowarn
-#define dumplvl                        Perl_dumplvl
-#define e_script               Perl_e_script
-#define endav                  Perl_endav
-#define envgv                  Perl_envgv
-#define errgv                  Perl_errgv
-#define eval_root              Perl_eval_root
-#define eval_start             Perl_eval_start
-#define exitlist               Perl_exitlist
-#define exitlistlen            Perl_exitlistlen
-#define fdpid                  Perl_fdpid
-#define filemode               Perl_filemode
-#define forkprocess            Perl_forkprocess
-#define formfeed               Perl_formfeed
-#define generation             Perl_generation
-#define gensym                 Perl_gensym
-#define globalstash            Perl_globalstash
-#define hintgv                 Perl_hintgv
-#define in_clean_all           Perl_in_clean_all
-#define in_clean_objs          Perl_in_clean_objs
-#define incgv                  Perl_incgv
-#define initav                 Perl_initav
-#define inplace                        Perl_inplace
-#define last_proto             Perl_last_proto
-#define lastfd                 Perl_lastfd
-#define lastsize               Perl_lastsize
-#define lastspbase             Perl_lastspbase
-#define laststatval            Perl_laststatval
-#define laststype              Perl_laststype
-#define leftgv                 Perl_leftgv
-#define lineary                        Perl_lineary
-#define linestart              Perl_linestart
-#define localpatches           Perl_localpatches
-#define main_cv                        Perl_main_cv
-#define main_root              Perl_main_root
-#define main_start             Perl_main_start
-#define maxsysfd               Perl_maxsysfd
-#define mess_sv                        Perl_mess_sv
-#define minus_F                        Perl_minus_F
-#define minus_a                        Perl_minus_a
-#define minus_c                        Perl_minus_c
-#define minus_l                        Perl_minus_l
-#define minus_n                        Perl_minus_n
-#define minus_p                        Perl_minus_p
-#define modglobal              Perl_modglobal
-#define multiline              Perl_multiline
-#define mystrk                 Perl_mystrk
-#define ofmt                   Perl_ofmt
-#define oldlastpm              Perl_oldlastpm
-#define oldname                        Perl_oldname
-#define op_mask                        Perl_op_mask
-#define origargc               Perl_origargc
-#define origargv               Perl_origargv
-#define origfilename           Perl_origfilename
-#define ors                    Perl_ors
-#define orslen                 Perl_orslen
-#define parsehook              Perl_parsehook
-#define patchlevel             Perl_patchlevel
-#define pending_ident          Perl_pending_ident
-#define perl_destruct_level    Perl_perl_destruct_level
-#define perldb                 Perl_perldb
-#define preambleav             Perl_preambleav
-#define preambled              Perl_preambled
-#define preprocess             Perl_preprocess
-#define profiledata            Perl_profiledata
-#define replgv                 Perl_replgv
-#define rightgv                        Perl_rightgv
-#define rsfp                   Perl_rsfp
-#define rsfp_filters           Perl_rsfp_filters
-#define sawampersand           Perl_sawampersand
-#define sawstudy               Perl_sawstudy
-#define sawvec                 Perl_sawvec
-#define siggv                  Perl_siggv
-#define splitstr               Perl_splitstr
-#define statusvalue            Perl_statusvalue
-#define statusvalue_vms                Perl_statusvalue_vms
-#define stdingv                        Perl_stdingv
-#define strchop                        Perl_strchop
-#define strtab                 Perl_strtab
-#define sub_generation         Perl_sub_generation
-#define sublex_info            Perl_sublex_info
-#define sv_arenaroot           Perl_sv_arenaroot
-#define sv_count               Perl_sv_count
-#define sv_objcount            Perl_sv_objcount
-#define sv_root                        Perl_sv_root
-#define sys_intern             Perl_sys_intern
-#define tainting               Perl_tainting
-#define threadnum              Perl_threadnum
-#define thrsv                  Perl_thrsv
-#define unsafe                 Perl_unsafe
-#define warnhook               Perl_warnhook
 
 #ifndef USE_THREADS
 
-#define Sv                     Perl_Sv
-#define Xpv                    Perl_Xpv
-#define av_fetch_sv            Perl_av_fetch_sv
-#define bodytarget             Perl_bodytarget
-#define bostr                  Perl_bostr
-#define chopset                        Perl_chopset
-#define colors                 Perl_colors
-#define colorset               Perl_colorset
-#define curcop                 Perl_curcop
-#define curpad                 Perl_curpad
-#define curpm                  Perl_curpm
-#define curstack               Perl_curstack
-#define curstackinfo           Perl_curstackinfo
-#define curstash               Perl_curstash
-#define defoutgv               Perl_defoutgv
-#define defstash               Perl_defstash
-#define delaymagic             Perl_delaymagic
-#define dirty                  Perl_dirty
-#define extralen               Perl_extralen
-#define firstgv                        Perl_firstgv
-#define formtarget             Perl_formtarget
-#define hv_fetch_ent_mh                Perl_hv_fetch_ent_mh
-#define hv_fetch_sv            Perl_hv_fetch_sv
-#define in_eval                        Perl_in_eval
-#define last_in_gv             Perl_last_in_gv
-#define lastgotoprobe          Perl_lastgotoprobe
-#define lastscream             Perl_lastscream
-#define localizing             Perl_localizing
-#define mainstack              Perl_mainstack
-#define markstack              Perl_markstack
-#define markstack_max          Perl_markstack_max
-#define markstack_ptr          Perl_markstack_ptr
-#define maxscream              Perl_maxscream
-#define modcount               Perl_modcount
-#define nrs                    Perl_nrs
-#define ofs                    Perl_ofs
-#define ofslen                 Perl_ofslen
-#define op                     Perl_op
-#define opsave                 Perl_opsave
-#define reg_eval_set           Perl_reg_eval_set
-#define reg_flags              Perl_reg_flags
-#define reg_start_tmp          Perl_reg_start_tmp
-#define reg_start_tmpl         Perl_reg_start_tmpl
-#define regbol                 Perl_regbol
-#define regcc                  Perl_regcc
-#define regcode                        Perl_regcode
-#define regcomp_parse          Perl_regcomp_parse
-#define regcomp_rx             Perl_regcomp_rx
-#define regcompp               Perl_regcompp
-#define regdata                        Perl_regdata
-#define regdummy               Perl_regdummy
-#define regendp                        Perl_regendp
-#define regeol                 Perl_regeol
-#define regexecp               Perl_regexecp
-#define regflags               Perl_regflags
-#define regindent              Perl_regindent
-#define reginput               Perl_reginput
-#define reginterp_cnt          Perl_reginterp_cnt
-#define reglastparen           Perl_reglastparen
-#define regnarrate             Perl_regnarrate
-#define regnaughty             Perl_regnaughty
-#define regnpar                        Perl_regnpar
-#define regprecomp             Perl_regprecomp
-#define regprev                        Perl_regprev
-#define regprogram             Perl_regprogram
-#define regsawback             Perl_regsawback
-#define regseen                        Perl_regseen
-#define regsize                        Perl_regsize
-#define regstartp              Perl_regstartp
-#define regtill                        Perl_regtill
-#define regxend                        Perl_regxend
-#define restartop              Perl_restartop
-#define retstack               Perl_retstack
-#define retstack_ix            Perl_retstack_ix
-#define retstack_max           Perl_retstack_max
-#define rs                     Perl_rs
-#define savestack              Perl_savestack
-#define savestack_ix           Perl_savestack_ix
-#define savestack_max          Perl_savestack_max
-#define scopestack             Perl_scopestack
-#define scopestack_ix          Perl_scopestack_ix
-#define scopestack_max         Perl_scopestack_max
-#define screamfirst            Perl_screamfirst
-#define screamnext             Perl_screamnext
-#define secondgv               Perl_secondgv
-#define seen_evals             Perl_seen_evals
-#define seen_zerolen           Perl_seen_zerolen
-#define sortcop                        Perl_sortcop
-#define sortcxix               Perl_sortcxix
-#define sortstash              Perl_sortstash
-#define stack_base             Perl_stack_base
-#define stack_max              Perl_stack_max
-#define stack_sp               Perl_stack_sp
-#define start_env              Perl_start_env
-#define statbuf                        Perl_statbuf
-#define statcache              Perl_statcache
-#define statgv                 Perl_statgv
-#define statname               Perl_statname
-#define tainted                        Perl_tainted
-#define timesbuf               Perl_timesbuf
-#define tmps_floor             Perl_tmps_floor
-#define tmps_ix                        Perl_tmps_ix
-#define tmps_max               Perl_tmps_max
-#define tmps_stack             Perl_tmps_stack
-#define top_env                        Perl_top_env
-#define toptarget              Perl_toptarget
 
 #endif /* USE_THREADS */
 #endif /* EMBED */
 
 #ifdef USE_THREADS
 
-#define Sv                     (thr->TSv)
-#define Xpv                    (thr->TXpv)
-#define av_fetch_sv            (thr->Tav_fetch_sv)
-#define bodytarget             (thr->Tbodytarget)
-#define bostr                  (thr->Tbostr)
-#define chopset                        (thr->Tchopset)
-#define colors                 (thr->Tcolors)
-#define colorset               (thr->Tcolorset)
-#define curcop                 (thr->Tcurcop)
-#define curpad                 (thr->Tcurpad)
-#define curpm                  (thr->Tcurpm)
-#define curstack               (thr->Tcurstack)
-#define curstackinfo           (thr->Tcurstackinfo)
-#define curstash               (thr->Tcurstash)
-#define defoutgv               (thr->Tdefoutgv)
-#define defstash               (thr->Tdefstash)
-#define delaymagic             (thr->Tdelaymagic)
-#define dirty                  (thr->Tdirty)
-#define extralen               (thr->Textralen)
-#define firstgv                        (thr->Tfirstgv)
-#define formtarget             (thr->Tformtarget)
-#define hv_fetch_ent_mh                (thr->Thv_fetch_ent_mh)
-#define hv_fetch_sv            (thr->Thv_fetch_sv)
-#define in_eval                        (thr->Tin_eval)
-#define last_in_gv             (thr->Tlast_in_gv)
-#define lastgotoprobe          (thr->Tlastgotoprobe)
-#define lastscream             (thr->Tlastscream)
-#define localizing             (thr->Tlocalizing)
-#define mainstack              (thr->Tmainstack)
-#define markstack              (thr->Tmarkstack)
-#define markstack_max          (thr->Tmarkstack_max)
-#define markstack_ptr          (thr->Tmarkstack_ptr)
-#define maxscream              (thr->Tmaxscream)
-#define modcount               (thr->Tmodcount)
-#define nrs                    (thr->Tnrs)
-#define ofs                    (thr->Tofs)
-#define ofslen                 (thr->Tofslen)
-#define op                     (thr->Top)
-#define opsave                 (thr->Topsave)
-#define reg_eval_set           (thr->Treg_eval_set)
-#define reg_flags              (thr->Treg_flags)
-#define reg_start_tmp          (thr->Treg_start_tmp)
-#define reg_start_tmpl         (thr->Treg_start_tmpl)
-#define regbol                 (thr->Tregbol)
-#define regcc                  (thr->Tregcc)
-#define regcode                        (thr->Tregcode)
-#define regcomp_parse          (thr->Tregcomp_parse)
-#define regcomp_rx             (thr->Tregcomp_rx)
-#define regcompp               (thr->Tregcompp)
-#define regdata                        (thr->Tregdata)
-#define regdummy               (thr->Tregdummy)
-#define regendp                        (thr->Tregendp)
-#define regeol                 (thr->Tregeol)
-#define regexecp               (thr->Tregexecp)
-#define regflags               (thr->Tregflags)
-#define regindent              (thr->Tregindent)
-#define reginput               (thr->Treginput)
-#define reginterp_cnt          (thr->Treginterp_cnt)
-#define reglastparen           (thr->Treglastparen)
-#define regnarrate             (thr->Tregnarrate)
-#define regnaughty             (thr->Tregnaughty)
-#define regnpar                        (thr->Tregnpar)
-#define regprecomp             (thr->Tregprecomp)
-#define regprev                        (thr->Tregprev)
-#define regprogram             (thr->Tregprogram)
-#define regsawback             (thr->Tregsawback)
-#define regseen                        (thr->Tregseen)
-#define regsize                        (thr->Tregsize)
-#define regstartp              (thr->Tregstartp)
-#define regtill                        (thr->Tregtill)
-#define regxend                        (thr->Tregxend)
-#define restartop              (thr->Trestartop)
-#define retstack               (thr->Tretstack)
-#define retstack_ix            (thr->Tretstack_ix)
-#define retstack_max           (thr->Tretstack_max)
-#define rs                     (thr->Trs)
-#define savestack              (thr->Tsavestack)
-#define savestack_ix           (thr->Tsavestack_ix)
-#define savestack_max          (thr->Tsavestack_max)
-#define scopestack             (thr->Tscopestack)
-#define scopestack_ix          (thr->Tscopestack_ix)
-#define scopestack_max         (thr->Tscopestack_max)
-#define screamfirst            (thr->Tscreamfirst)
-#define screamnext             (thr->Tscreamnext)
-#define secondgv               (thr->Tsecondgv)
-#define seen_evals             (thr->Tseen_evals)
-#define seen_zerolen           (thr->Tseen_zerolen)
-#define sortcop                        (thr->Tsortcop)
-#define sortcxix               (thr->Tsortcxix)
-#define sortstash              (thr->Tsortstash)
-#define stack_base             (thr->Tstack_base)
-#define stack_max              (thr->Tstack_max)
-#define stack_sp               (thr->Tstack_sp)
-#define start_env              (thr->Tstart_env)
-#define statbuf                        (thr->Tstatbuf)
-#define statcache              (thr->Tstatcache)
-#define statgv                 (thr->Tstatgv)
-#define statname               (thr->Tstatname)
-#define tainted                        (thr->Ttainted)
-#define timesbuf               (thr->Ttimesbuf)
-#define tmps_floor             (thr->Ttmps_floor)
-#define tmps_ix                        (thr->Ttmps_ix)
-#define tmps_max               (thr->Ttmps_max)
-#define tmps_stack             (thr->Ttmps_stack)
-#define top_env                        (thr->Ttop_env)
-#define toptarget              (thr->Ttoptarget)
+#define PL_Sv                  (thr->TSv)
+#define PL_Xpv                 (thr->TXpv)
+#define PL_av_fetch_sv         (thr->Tav_fetch_sv)
+#define PL_bodytarget          (thr->Tbodytarget)
+#define PL_bostr               (thr->Tbostr)
+#define PL_chopset             (thr->Tchopset)
+#define PL_colors              (thr->Tcolors)
+#define PL_colorset            (thr->Tcolorset)
+#define PL_curcop              (thr->Tcurcop)
+#define PL_curpad              (thr->Tcurpad)
+#define PL_curpm               (thr->Tcurpm)
+#define PL_curstack            (thr->Tcurstack)
+#define PL_curstackinfo                (thr->Tcurstackinfo)
+#define PL_curstash            (thr->Tcurstash)
+#define PL_defoutgv            (thr->Tdefoutgv)
+#define PL_defstash            (thr->Tdefstash)
+#define PL_delaymagic          (thr->Tdelaymagic)
+#define PL_dirty               (thr->Tdirty)
+#define PL_extralen            (thr->Textralen)
+#define PL_firstgv             (thr->Tfirstgv)
+#define PL_formtarget          (thr->Tformtarget)
+#define PL_hv_fetch_ent_mh     (thr->Thv_fetch_ent_mh)
+#define PL_hv_fetch_sv         (thr->Thv_fetch_sv)
+#define PL_in_eval             (thr->Tin_eval)
+#define PL_last_in_gv          (thr->Tlast_in_gv)
+#define PL_lastgotoprobe       (thr->Tlastgotoprobe)
+#define PL_lastscream          (thr->Tlastscream)
+#define PL_localizing          (thr->Tlocalizing)
+#define PL_mainstack           (thr->Tmainstack)
+#define PL_markstack           (thr->Tmarkstack)
+#define PL_markstack_max       (thr->Tmarkstack_max)
+#define PL_markstack_ptr       (thr->Tmarkstack_ptr)
+#define PL_maxscream           (thr->Tmaxscream)
+#define PL_modcount            (thr->Tmodcount)
+#define PL_nrs                 (thr->Tnrs)
+#define PL_ofs                 (thr->Tofs)
+#define PL_ofslen              (thr->Tofslen)
+#define PL_op                  (thr->Top)
+#define PL_opsave              (thr->Topsave)
+#define PL_reg_eval_set                (thr->Treg_eval_set)
+#define PL_reg_flags           (thr->Treg_flags)
+#define PL_reg_start_tmp       (thr->Treg_start_tmp)
+#define PL_reg_start_tmpl      (thr->Treg_start_tmpl)
+#define PL_regbol              (thr->Tregbol)
+#define PL_regcc               (thr->Tregcc)
+#define PL_regcode             (thr->Tregcode)
+#define PL_regcomp_parse       (thr->Tregcomp_parse)
+#define PL_regcomp_rx          (thr->Tregcomp_rx)
+#define PL_regcompp            (thr->Tregcompp)
+#define PL_regdata             (thr->Tregdata)
+#define PL_regdummy            (thr->Tregdummy)
+#define PL_regendp             (thr->Tregendp)
+#define PL_regeol              (thr->Tregeol)
+#define PL_regexecp            (thr->Tregexecp)
+#define PL_regflags            (thr->Tregflags)
+#define PL_regindent           (thr->Tregindent)
+#define PL_reginput            (thr->Treginput)
+#define PL_reginterp_cnt       (thr->Treginterp_cnt)
+#define PL_reglastparen                (thr->Treglastparen)
+#define PL_regnarrate          (thr->Tregnarrate)
+#define PL_regnaughty          (thr->Tregnaughty)
+#define PL_regnpar             (thr->Tregnpar)
+#define PL_regprecomp          (thr->Tregprecomp)
+#define PL_regprev             (thr->Tregprev)
+#define PL_regprogram          (thr->Tregprogram)
+#define PL_regsawback          (thr->Tregsawback)
+#define PL_regseen             (thr->Tregseen)
+#define PL_regsize             (thr->Tregsize)
+#define PL_regstartp           (thr->Tregstartp)
+#define PL_regtill             (thr->Tregtill)
+#define PL_regxend             (thr->Tregxend)
+#define PL_restartop           (thr->Trestartop)
+#define PL_retstack            (thr->Tretstack)
+#define PL_retstack_ix         (thr->Tretstack_ix)
+#define PL_retstack_max                (thr->Tretstack_max)
+#define PL_rs                  (thr->Trs)
+#define PL_savestack           (thr->Tsavestack)
+#define PL_savestack_ix                (thr->Tsavestack_ix)
+#define PL_savestack_max       (thr->Tsavestack_max)
+#define PL_scopestack          (thr->Tscopestack)
+#define PL_scopestack_ix       (thr->Tscopestack_ix)
+#define PL_scopestack_max      (thr->Tscopestack_max)
+#define PL_screamfirst         (thr->Tscreamfirst)
+#define PL_screamnext          (thr->Tscreamnext)
+#define PL_secondgv            (thr->Tsecondgv)
+#define PL_seen_evals          (thr->Tseen_evals)
+#define PL_seen_zerolen                (thr->Tseen_zerolen)
+#define PL_sortcop             (thr->Tsortcop)
+#define PL_sortcxix            (thr->Tsortcxix)
+#define PL_sortstash           (thr->Tsortstash)
+#define PL_stack_base          (thr->Tstack_base)
+#define PL_stack_max           (thr->Tstack_max)
+#define PL_stack_sp            (thr->Tstack_sp)
+#define PL_start_env           (thr->Tstart_env)
+#define PL_statbuf             (thr->Tstatbuf)
+#define PL_statcache           (thr->Tstatcache)
+#define PL_statgv              (thr->Tstatgv)
+#define PL_statname            (thr->Tstatname)
+#define PL_tainted             (thr->Ttainted)
+#define PL_timesbuf            (thr->Ttimesbuf)
+#define PL_tmps_floor          (thr->Ttmps_floor)
+#define PL_tmps_ix             (thr->Ttmps_ix)
+#define PL_tmps_max            (thr->Ttmps_max)
+#define PL_tmps_stack          (thr->Ttmps_stack)
+#define PL_top_env             (thr->Ttop_env)
+#define PL_toptarget           (thr->Ttoptarget)
 
 #endif /* USE_THREADS */
 
 #ifdef PERL_GLOBAL_STRUCT
 
-#define No                     (Perl_Vars.GNo)
-#define Yes                    (Perl_Vars.GYes)
-#define amagic_generation      (Perl_Vars.Gamagic_generation)
-#define an                     (Perl_Vars.Gan)
-#define bufend                 (Perl_Vars.Gbufend)
-#define bufptr                 (Perl_Vars.Gbufptr)
-#define collation_ix           (Perl_Vars.Gcollation_ix)
-#define collation_name         (Perl_Vars.Gcollation_name)
-#define collation_standard     (Perl_Vars.Gcollation_standard)
-#define collxfrm_base          (Perl_Vars.Gcollxfrm_base)
-#define collxfrm_mult          (Perl_Vars.Gcollxfrm_mult)
-#define cop_seqmax             (Perl_Vars.Gcop_seqmax)
-#define cryptseen              (Perl_Vars.Gcryptseen)
-#define cshlen                 (Perl_Vars.Gcshlen)
-#define cshname                        (Perl_Vars.Gcshname)
-#define curinterp              (Perl_Vars.Gcurinterp)
-#define curthr                 (Perl_Vars.Gcurthr)
-#define debug                  (Perl_Vars.Gdebug)
-#define do_undump              (Perl_Vars.Gdo_undump)
-#define egid                   (Perl_Vars.Gegid)
-#define error_count            (Perl_Vars.Gerror_count)
-#define euid                   (Perl_Vars.Geuid)
-#define eval_cond              (Perl_Vars.Geval_cond)
-#define eval_mutex             (Perl_Vars.Geval_mutex)
-#define eval_owner             (Perl_Vars.Geval_owner)
-#define evalseq                        (Perl_Vars.Gevalseq)
-#define expect                 (Perl_Vars.Gexpect)
-#define gid                    (Perl_Vars.Ggid)
-#define he_root                        (Perl_Vars.Ghe_root)
-#define hexdigit               (Perl_Vars.Ghexdigit)
-#define hints                  (Perl_Vars.Ghints)
-#define in_my                  (Perl_Vars.Gin_my)
-#define in_my_stash            (Perl_Vars.Gin_my_stash)
-#define last_lop               (Perl_Vars.Glast_lop)
-#define last_lop_op            (Perl_Vars.Glast_lop_op)
-#define last_uni               (Perl_Vars.Glast_uni)
-#define lex_brackets           (Perl_Vars.Glex_brackets)
-#define lex_brackstack         (Perl_Vars.Glex_brackstack)
-#define lex_casemods           (Perl_Vars.Glex_casemods)
-#define lex_casestack          (Perl_Vars.Glex_casestack)
-#define lex_defer              (Perl_Vars.Glex_defer)
-#define lex_dojoin             (Perl_Vars.Glex_dojoin)
-#define lex_expect             (Perl_Vars.Glex_expect)
-#define lex_fakebrack          (Perl_Vars.Glex_fakebrack)
-#define lex_formbrack          (Perl_Vars.Glex_formbrack)
-#define lex_inpat              (Perl_Vars.Glex_inpat)
-#define lex_inwhat             (Perl_Vars.Glex_inwhat)
-#define lex_op                 (Perl_Vars.Glex_op)
-#define lex_repl               (Perl_Vars.Glex_repl)
-#define lex_starts             (Perl_Vars.Glex_starts)
-#define lex_state              (Perl_Vars.Glex_state)
-#define lex_stuff              (Perl_Vars.Glex_stuff)
-#define linestr                        (Perl_Vars.Glinestr)
-#define malloc_mutex           (Perl_Vars.Gmalloc_mutex)
-#define max_intro_pending      (Perl_Vars.Gmax_intro_pending)
-#define maxo                   (Perl_Vars.Gmaxo)
-#define min_intro_pending      (Perl_Vars.Gmin_intro_pending)
-#define multi_close            (Perl_Vars.Gmulti_close)
-#define multi_end              (Perl_Vars.Gmulti_end)
-#define multi_open             (Perl_Vars.Gmulti_open)
-#define multi_start            (Perl_Vars.Gmulti_start)
-#define na                     (Perl_Vars.Gna)
-#define nexttoke               (Perl_Vars.Gnexttoke)
-#define nexttype               (Perl_Vars.Gnexttype)
-#define nextval                        (Perl_Vars.Gnextval)
-#define nice_chunk             (Perl_Vars.Gnice_chunk)
-#define nice_chunk_size                (Perl_Vars.Gnice_chunk_size)
-#define ninterps               (Perl_Vars.Gninterps)
-#define nomemok                        (Perl_Vars.Gnomemok)
-#define nthreads               (Perl_Vars.Gnthreads)
-#define nthreads_cond          (Perl_Vars.Gnthreads_cond)
-#define numeric_local          (Perl_Vars.Gnumeric_local)
-#define numeric_name           (Perl_Vars.Gnumeric_name)
-#define numeric_standard       (Perl_Vars.Gnumeric_standard)
-#define oldbufptr              (Perl_Vars.Goldbufptr)
-#define oldoldbufptr           (Perl_Vars.Goldoldbufptr)
-#define op_seqmax              (Perl_Vars.Gop_seqmax)
-#define origalen               (Perl_Vars.Gorigalen)
-#define origenviron            (Perl_Vars.Gorigenviron)
-#define osname                 (Perl_Vars.Gosname)
-#define pad_reset_pending      (Perl_Vars.Gpad_reset_pending)
-#define padix                  (Perl_Vars.Gpadix)
-#define padix_floor            (Perl_Vars.Gpadix_floor)
-#define patleave               (Perl_Vars.Gpatleave)
-#define pidstatus              (Perl_Vars.Gpidstatus)
-#define runops                 (Perl_Vars.Grunops)
-#define sh_path                        (Perl_Vars.Gsh_path)
-#define sighandlerp            (Perl_Vars.Gsighandlerp)
-#define specialsv_list         (Perl_Vars.Gspecialsv_list)
-#define subline                        (Perl_Vars.Gsubline)
-#define subname                        (Perl_Vars.Gsubname)
-#define sv_mutex               (Perl_Vars.Gsv_mutex)
-#define sv_no                  (Perl_Vars.Gsv_no)
-#define sv_undef               (Perl_Vars.Gsv_undef)
-#define sv_yes                 (Perl_Vars.Gsv_yes)
-#define svref_mutex            (Perl_Vars.Gsvref_mutex)
-#define thisexpr               (Perl_Vars.Gthisexpr)
-#define thr_key                        (Perl_Vars.Gthr_key)
-#define threads_mutex          (Perl_Vars.Gthreads_mutex)
-#define threadsv_names         (Perl_Vars.Gthreadsv_names)
-#define tokenbuf               (Perl_Vars.Gtokenbuf)
-#define uid                    (Perl_Vars.Guid)
-#define xiv_arenaroot          (Perl_Vars.Gxiv_arenaroot)
-#define xiv_root               (Perl_Vars.Gxiv_root)
-#define xnv_root               (Perl_Vars.Gxnv_root)
-#define xpv_root               (Perl_Vars.Gxpv_root)
-#define xrv_root               (Perl_Vars.Gxrv_root)
+#define PL_No                  (Perl_Vars.GNo)
+#define PL_Yes                 (Perl_Vars.GYes)
+#define PL_amagic_generation   (Perl_Vars.Gamagic_generation)
+#define PL_an                  (Perl_Vars.Gan)
+#define PL_bufend              (Perl_Vars.Gbufend)
+#define PL_bufptr              (Perl_Vars.Gbufptr)
+#define PL_collation_ix                (Perl_Vars.Gcollation_ix)
+#define PL_collation_name      (Perl_Vars.Gcollation_name)
+#define PL_collation_standard  (Perl_Vars.Gcollation_standard)
+#define PL_collxfrm_base       (Perl_Vars.Gcollxfrm_base)
+#define PL_collxfrm_mult       (Perl_Vars.Gcollxfrm_mult)
+#define PL_cop_seqmax          (Perl_Vars.Gcop_seqmax)
+#define PL_cryptseen           (Perl_Vars.Gcryptseen)
+#define PL_cshlen              (Perl_Vars.Gcshlen)
+#define PL_cshname             (Perl_Vars.Gcshname)
+#define PL_curinterp           (Perl_Vars.Gcurinterp)
+#define PL_curthr              (Perl_Vars.Gcurthr)
+#define PL_debug               (Perl_Vars.Gdebug)
+#define PL_do_undump           (Perl_Vars.Gdo_undump)
+#define PL_egid                        (Perl_Vars.Gegid)
+#define PL_error_count         (Perl_Vars.Gerror_count)
+#define PL_euid                        (Perl_Vars.Geuid)
+#define PL_eval_cond           (Perl_Vars.Geval_cond)
+#define PL_eval_mutex          (Perl_Vars.Geval_mutex)
+#define PL_eval_owner          (Perl_Vars.Geval_owner)
+#define PL_evalseq             (Perl_Vars.Gevalseq)
+#define PL_expect              (Perl_Vars.Gexpect)
+#define PL_gid                 (Perl_Vars.Ggid)
+#define PL_he_root             (Perl_Vars.Ghe_root)
+#define PL_hexdigit            (Perl_Vars.Ghexdigit)
+#define PL_hints               (Perl_Vars.Ghints)
+#define PL_in_my               (Perl_Vars.Gin_my)
+#define PL_in_my_stash         (Perl_Vars.Gin_my_stash)
+#define PL_last_lop            (Perl_Vars.Glast_lop)
+#define PL_last_lop_op         (Perl_Vars.Glast_lop_op)
+#define PL_last_uni            (Perl_Vars.Glast_uni)
+#define PL_lex_brackets                (Perl_Vars.Glex_brackets)
+#define PL_lex_brackstack      (Perl_Vars.Glex_brackstack)
+#define PL_lex_casemods                (Perl_Vars.Glex_casemods)
+#define PL_lex_casestack       (Perl_Vars.Glex_casestack)
+#define PL_lex_defer           (Perl_Vars.Glex_defer)
+#define PL_lex_dojoin          (Perl_Vars.Glex_dojoin)
+#define PL_lex_expect          (Perl_Vars.Glex_expect)
+#define PL_lex_fakebrack       (Perl_Vars.Glex_fakebrack)
+#define PL_lex_formbrack       (Perl_Vars.Glex_formbrack)
+#define PL_lex_inpat           (Perl_Vars.Glex_inpat)
+#define PL_lex_inwhat          (Perl_Vars.Glex_inwhat)
+#define PL_lex_op              (Perl_Vars.Glex_op)
+#define PL_lex_repl            (Perl_Vars.Glex_repl)
+#define PL_lex_starts          (Perl_Vars.Glex_starts)
+#define PL_lex_state           (Perl_Vars.Glex_state)
+#define PL_lex_stuff           (Perl_Vars.Glex_stuff)
+#define PL_linestr             (Perl_Vars.Glinestr)
+#define PL_malloc_mutex                (Perl_Vars.Gmalloc_mutex)
+#define PL_max_intro_pending   (Perl_Vars.Gmax_intro_pending)
+#define PL_maxo                        (Perl_Vars.Gmaxo)
+#define PL_min_intro_pending   (Perl_Vars.Gmin_intro_pending)
+#define PL_multi_close         (Perl_Vars.Gmulti_close)
+#define PL_multi_end           (Perl_Vars.Gmulti_end)
+#define PL_multi_open          (Perl_Vars.Gmulti_open)
+#define PL_multi_start         (Perl_Vars.Gmulti_start)
+#define PL_na                  (Perl_Vars.Gna)
+#define PL_nexttoke            (Perl_Vars.Gnexttoke)
+#define PL_nexttype            (Perl_Vars.Gnexttype)
+#define PL_nextval             (Perl_Vars.Gnextval)
+#define PL_nice_chunk          (Perl_Vars.Gnice_chunk)
+#define PL_nice_chunk_size     (Perl_Vars.Gnice_chunk_size)
+#define PL_ninterps            (Perl_Vars.Gninterps)
+#define PL_nomemok             (Perl_Vars.Gnomemok)
+#define PL_nthreads            (Perl_Vars.Gnthreads)
+#define PL_nthreads_cond       (Perl_Vars.Gnthreads_cond)
+#define PL_numeric_local       (Perl_Vars.Gnumeric_local)
+#define PL_numeric_name                (Perl_Vars.Gnumeric_name)
+#define PL_numeric_standard    (Perl_Vars.Gnumeric_standard)
+#define PL_oldbufptr           (Perl_Vars.Goldbufptr)
+#define PL_oldoldbufptr                (Perl_Vars.Goldoldbufptr)
+#define PL_op_seqmax           (Perl_Vars.Gop_seqmax)
+#define PL_origalen            (Perl_Vars.Gorigalen)
+#define PL_origenviron         (Perl_Vars.Gorigenviron)
+#define PL_osname              (Perl_Vars.Gosname)
+#define PL_pad_reset_pending   (Perl_Vars.Gpad_reset_pending)
+#define PL_padix               (Perl_Vars.Gpadix)
+#define PL_padix_floor         (Perl_Vars.Gpadix_floor)
+#define PL_patleave            (Perl_Vars.Gpatleave)
+#define PL_pidstatus           (Perl_Vars.Gpidstatus)
+#define PL_runops              (Perl_Vars.Grunops)
+#define PL_sh_path             (Perl_Vars.Gsh_path)
+#define PL_sighandlerp         (Perl_Vars.Gsighandlerp)
+#define PL_specialsv_list      (Perl_Vars.Gspecialsv_list)
+#define PL_subline             (Perl_Vars.Gsubline)
+#define PL_subname             (Perl_Vars.Gsubname)
+#define PL_sv_mutex            (Perl_Vars.Gsv_mutex)
+#define PL_sv_no               (Perl_Vars.Gsv_no)
+#define PL_sv_undef            (Perl_Vars.Gsv_undef)
+#define PL_sv_yes              (Perl_Vars.Gsv_yes)
+#define PL_svref_mutex         (Perl_Vars.Gsvref_mutex)
+#define PL_thisexpr            (Perl_Vars.Gthisexpr)
+#define PL_thr_key             (Perl_Vars.Gthr_key)
+#define PL_threads_mutex       (Perl_Vars.Gthreads_mutex)
+#define PL_threadsv_names      (Perl_Vars.Gthreadsv_names)
+#define PL_tokenbuf            (Perl_Vars.Gtokenbuf)
+#define PL_uid                 (Perl_Vars.Guid)
+#define PL_xiv_arenaroot       (Perl_Vars.Gxiv_arenaroot)
+#define PL_xiv_root            (Perl_Vars.Gxiv_root)
+#define PL_xnv_root            (Perl_Vars.Gxnv_root)
+#define PL_xpv_root            (Perl_Vars.Gxpv_root)
+#define PL_xrv_root            (Perl_Vars.Gxrv_root)
 
 #else /* !PERL_GLOBAL_STRUCT */
 
-#define GNo                    No
-#define GYes                   Yes
-#define Gamagic_generation     amagic_generation
-#define Gan                    an
-#define Gbufend                        bufend
-#define Gbufptr                        bufptr
-#define Gcollation_ix          collation_ix
-#define Gcollation_name                collation_name
-#define Gcollation_standard    collation_standard
-#define Gcollxfrm_base         collxfrm_base
-#define Gcollxfrm_mult         collxfrm_mult
-#define Gcop_seqmax            cop_seqmax
-#define Gcryptseen             cryptseen
-#define Gcshlen                        cshlen
-#define Gcshname               cshname
-#define Gcurinterp             curinterp
-#define Gcurthr                        curthr
-#define Gdebug                 debug
-#define Gdo_undump             do_undump
-#define Gegid                  egid
-#define Gerror_count           error_count
-#define Geuid                  euid
-#define Geval_cond             eval_cond
-#define Geval_mutex            eval_mutex
-#define Geval_owner            eval_owner
-#define Gevalseq               evalseq
-#define Gexpect                        expect
-#define Ggid                   gid
-#define Ghe_root               he_root
-#define Ghexdigit              hexdigit
-#define Ghints                 hints
-#define Gin_my                 in_my
-#define Gin_my_stash           in_my_stash
-#define Glast_lop              last_lop
-#define Glast_lop_op           last_lop_op
-#define Glast_uni              last_uni
-#define Glex_brackets          lex_brackets
-#define Glex_brackstack                lex_brackstack
-#define Glex_casemods          lex_casemods
-#define Glex_casestack         lex_casestack
-#define Glex_defer             lex_defer
-#define Glex_dojoin            lex_dojoin
-#define Glex_expect            lex_expect
-#define Glex_fakebrack         lex_fakebrack
-#define Glex_formbrack         lex_formbrack
-#define Glex_inpat             lex_inpat
-#define Glex_inwhat            lex_inwhat
-#define Glex_op                        lex_op
-#define Glex_repl              lex_repl
-#define Glex_starts            lex_starts
-#define Glex_state             lex_state
-#define Glex_stuff             lex_stuff
-#define Glinestr               linestr
-#define Gmalloc_mutex          malloc_mutex
-#define Gmax_intro_pending     max_intro_pending
-#define Gmaxo                  maxo
-#define Gmin_intro_pending     min_intro_pending
-#define Gmulti_close           multi_close
-#define Gmulti_end             multi_end
-#define Gmulti_open            multi_open
-#define Gmulti_start           multi_start
-#define Gna                    na
-#define Gnexttoke              nexttoke
-#define Gnexttype              nexttype
-#define Gnextval               nextval
-#define Gnice_chunk            nice_chunk
-#define Gnice_chunk_size       nice_chunk_size
-#define Gninterps              ninterps
-#define Gnomemok               nomemok
-#define Gnthreads              nthreads
-#define Gnthreads_cond         nthreads_cond
-#define Gnumeric_local         numeric_local
-#define Gnumeric_name          numeric_name
-#define Gnumeric_standard      numeric_standard
-#define Goldbufptr             oldbufptr
-#define Goldoldbufptr          oldoldbufptr
-#define Gop_seqmax             op_seqmax
-#define Gorigalen              origalen
-#define Gorigenviron           origenviron
-#define Gosname                        osname
-#define Gpad_reset_pending     pad_reset_pending
-#define Gpadix                 padix
-#define Gpadix_floor           padix_floor
-#define Gpatleave              patleave
-#define Gpidstatus             pidstatus
-#define Grunops                        runops
-#define Gsh_path               sh_path
-#define Gsighandlerp           sighandlerp
-#define Gspecialsv_list                specialsv_list
-#define Gsubline               subline
-#define Gsubname               subname
-#define Gsv_mutex              sv_mutex
-#define Gsv_no                 sv_no
-#define Gsv_undef              sv_undef
-#define Gsv_yes                        sv_yes
-#define Gsvref_mutex           svref_mutex
-#define Gthisexpr              thisexpr
-#define Gthr_key               thr_key
-#define Gthreads_mutex         threads_mutex
-#define Gthreadsv_names                threadsv_names
-#define Gtokenbuf              tokenbuf
-#define Guid                   uid
-#define Gxiv_arenaroot         xiv_arenaroot
-#define Gxiv_root              xiv_root
-#define Gxnv_root              xnv_root
-#define Gxpv_root              xpv_root
-#define Gxrv_root              xrv_root
+#define GNo                    PL_No
+#define GYes                   PL_Yes
+#define Gamagic_generation     PL_amagic_generation
+#define Gan                    PL_an
+#define Gbufend                        PL_bufend
+#define Gbufptr                        PL_bufptr
+#define Gcollation_ix          PL_collation_ix
+#define Gcollation_name                PL_collation_name
+#define Gcollation_standard    PL_collation_standard
+#define Gcollxfrm_base         PL_collxfrm_base
+#define Gcollxfrm_mult         PL_collxfrm_mult
+#define Gcop_seqmax            PL_cop_seqmax
+#define Gcryptseen             PL_cryptseen
+#define Gcshlen                        PL_cshlen
+#define Gcshname               PL_cshname
+#define Gcurinterp             PL_curinterp
+#define Gcurthr                        PL_curthr
+#define Gdebug                 PL_debug
+#define Gdo_undump             PL_do_undump
+#define Gegid                  PL_egid
+#define Gerror_count           PL_error_count
+#define Geuid                  PL_euid
+#define Geval_cond             PL_eval_cond
+#define Geval_mutex            PL_eval_mutex
+#define Geval_owner            PL_eval_owner
+#define Gevalseq               PL_evalseq
+#define Gexpect                        PL_expect
+#define Ggid                   PL_gid
+#define Ghe_root               PL_he_root
+#define Ghexdigit              PL_hexdigit
+#define Ghints                 PL_hints
+#define Gin_my                 PL_in_my
+#define Gin_my_stash           PL_in_my_stash
+#define Glast_lop              PL_last_lop
+#define Glast_lop_op           PL_last_lop_op
+#define Glast_uni              PL_last_uni
+#define Glex_brackets          PL_lex_brackets
+#define Glex_brackstack                PL_lex_brackstack
+#define Glex_casemods          PL_lex_casemods
+#define Glex_casestack         PL_lex_casestack
+#define Glex_defer             PL_lex_defer
+#define Glex_dojoin            PL_lex_dojoin
+#define Glex_expect            PL_lex_expect
+#define Glex_fakebrack         PL_lex_fakebrack
+#define Glex_formbrack         PL_lex_formbrack
+#define Glex_inpat             PL_lex_inpat
+#define Glex_inwhat            PL_lex_inwhat
+#define Glex_op                        PL_lex_op
+#define Glex_repl              PL_lex_repl
+#define Glex_starts            PL_lex_starts
+#define Glex_state             PL_lex_state
+#define Glex_stuff             PL_lex_stuff
+#define Glinestr               PL_linestr
+#define Gmalloc_mutex          PL_malloc_mutex
+#define Gmax_intro_pending     PL_max_intro_pending
+#define Gmaxo                  PL_maxo
+#define Gmin_intro_pending     PL_min_intro_pending
+#define Gmulti_close           PL_multi_close
+#define Gmulti_end             PL_multi_end
+#define Gmulti_open            PL_multi_open
+#define Gmulti_start           PL_multi_start
+#define Gna                    PL_na
+#define Gnexttoke              PL_nexttoke
+#define Gnexttype              PL_nexttype
+#define Gnextval               PL_nextval
+#define Gnice_chunk            PL_nice_chunk
+#define Gnice_chunk_size       PL_nice_chunk_size
+#define Gninterps              PL_ninterps
+#define Gnomemok               PL_nomemok
+#define Gnthreads              PL_nthreads
+#define Gnthreads_cond         PL_nthreads_cond
+#define Gnumeric_local         PL_numeric_local
+#define Gnumeric_name          PL_numeric_name
+#define Gnumeric_standard      PL_numeric_standard
+#define Goldbufptr             PL_oldbufptr
+#define Goldoldbufptr          PL_oldoldbufptr
+#define Gop_seqmax             PL_op_seqmax
+#define Gorigalen              PL_origalen
+#define Gorigenviron           PL_origenviron
+#define Gosname                        PL_osname
+#define Gpad_reset_pending     PL_pad_reset_pending
+#define Gpadix                 PL_padix
+#define Gpadix_floor           PL_padix_floor
+#define Gpatleave              PL_patleave
+#define Gpidstatus             PL_pidstatus
+#define Grunops                        PL_runops
+#define Gsh_path               PL_sh_path
+#define Gsighandlerp           PL_sighandlerp
+#define Gspecialsv_list                PL_specialsv_list
+#define Gsubline               PL_subline
+#define Gsubname               PL_subname
+#define Gsv_mutex              PL_sv_mutex
+#define Gsv_no                 PL_sv_no
+#define Gsv_undef              PL_sv_undef
+#define Gsv_yes                        PL_sv_yes
+#define Gsvref_mutex           PL_svref_mutex
+#define Gthisexpr              PL_thisexpr
+#define Gthr_key               PL_thr_key
+#define Gthreads_mutex         PL_threads_mutex
+#define Gthreadsv_names                PL_threadsv_names
+#define Gtokenbuf              PL_tokenbuf
+#define Guid                   PL_uid
+#define Gxiv_arenaroot         PL_xiv_arenaroot
+#define Gxiv_root              PL_xiv_root
+#define Gxnv_root              PL_xnv_root
+#define Gxpv_root              PL_xpv_root
+#define Gxrv_root              PL_xrv_root
 
 #ifdef EMBED
 
-#define No                     Perl_No
-#define Yes                    Perl_Yes
-#define amagic_generation      Perl_amagic_generation
-#define an                     Perl_an
-#define bufend                 Perl_bufend
-#define bufptr                 Perl_bufptr
-#define collation_ix           Perl_collation_ix
-#define collation_name         Perl_collation_name
-#define collation_standard     Perl_collation_standard
-#define collxfrm_base          Perl_collxfrm_base
-#define collxfrm_mult          Perl_collxfrm_mult
-#define cop_seqmax             Perl_cop_seqmax
-#define cryptseen              Perl_cryptseen
-#define cshlen                 Perl_cshlen
-#define cshname                        Perl_cshname
-#define curinterp              Perl_curinterp
-#define curthr                 Perl_curthr
-#define debug                  Perl_debug
-#define do_undump              Perl_do_undump
-#define egid                   Perl_egid
-#define error_count            Perl_error_count
-#define euid                   Perl_euid
-#define eval_cond              Perl_eval_cond
-#define eval_mutex             Perl_eval_mutex
-#define eval_owner             Perl_eval_owner
-#define evalseq                        Perl_evalseq
-#define expect                 Perl_expect
-#define gid                    Perl_gid
-#define he_root                        Perl_he_root
-#define hexdigit               Perl_hexdigit
-#define hints                  Perl_hints
-#define in_my                  Perl_in_my
-#define in_my_stash            Perl_in_my_stash
-#define last_lop               Perl_last_lop
-#define last_lop_op            Perl_last_lop_op
-#define last_uni               Perl_last_uni
-#define lex_brackets           Perl_lex_brackets
-#define lex_brackstack         Perl_lex_brackstack
-#define lex_casemods           Perl_lex_casemods
-#define lex_casestack          Perl_lex_casestack
-#define lex_defer              Perl_lex_defer
-#define lex_dojoin             Perl_lex_dojoin
-#define lex_expect             Perl_lex_expect
-#define lex_fakebrack          Perl_lex_fakebrack
-#define lex_formbrack          Perl_lex_formbrack
-#define lex_inpat              Perl_lex_inpat
-#define lex_inwhat             Perl_lex_inwhat
-#define lex_op                 Perl_lex_op
-#define lex_repl               Perl_lex_repl
-#define lex_starts             Perl_lex_starts
-#define lex_state              Perl_lex_state
-#define lex_stuff              Perl_lex_stuff
-#define linestr                        Perl_linestr
-#define malloc_mutex           Perl_malloc_mutex
-#define max_intro_pending      Perl_max_intro_pending
-#define maxo                   Perl_maxo
-#define min_intro_pending      Perl_min_intro_pending
-#define multi_close            Perl_multi_close
-#define multi_end              Perl_multi_end
-#define multi_open             Perl_multi_open
-#define multi_start            Perl_multi_start
-#define na                     Perl_na
-#define nexttoke               Perl_nexttoke
-#define nexttype               Perl_nexttype
-#define nextval                        Perl_nextval
-#define nice_chunk             Perl_nice_chunk
-#define nice_chunk_size                Perl_nice_chunk_size
-#define ninterps               Perl_ninterps
-#define nomemok                        Perl_nomemok
-#define nthreads               Perl_nthreads
-#define nthreads_cond          Perl_nthreads_cond
-#define numeric_local          Perl_numeric_local
-#define numeric_name           Perl_numeric_name
-#define numeric_standard       Perl_numeric_standard
-#define oldbufptr              Perl_oldbufptr
-#define oldoldbufptr           Perl_oldoldbufptr
-#define op_seqmax              Perl_op_seqmax
-#define origalen               Perl_origalen
-#define origenviron            Perl_origenviron
-#define osname                 Perl_osname
-#define pad_reset_pending      Perl_pad_reset_pending
-#define padix                  Perl_padix
-#define padix_floor            Perl_padix_floor
-#define patleave               Perl_patleave
-#define pidstatus              Perl_pidstatus
-#define runops                 Perl_runops
-#define sh_path                        Perl_sh_path
-#define sighandlerp            Perl_sighandlerp
-#define specialsv_list         Perl_specialsv_list
-#define subline                        Perl_subline
-#define subname                        Perl_subname
-#define sv_mutex               Perl_sv_mutex
-#define sv_no                  Perl_sv_no
-#define sv_undef               Perl_sv_undef
-#define sv_yes                 Perl_sv_yes
-#define svref_mutex            Perl_svref_mutex
-#define thisexpr               Perl_thisexpr
-#define thr_key                        Perl_thr_key
-#define threads_mutex          Perl_threads_mutex
-#define threadsv_names         Perl_threadsv_names
-#define tokenbuf               Perl_tokenbuf
-#define uid                    Perl_uid
-#define xiv_arenaroot          Perl_xiv_arenaroot
-#define xiv_root               Perl_xiv_root
-#define xnv_root               Perl_xnv_root
-#define xpv_root               Perl_xpv_root
-#define xrv_root               Perl_xrv_root
 
 #endif /* EMBED */
 #endif /* PERL_GLOBAL_STRUCT */
index f9a0645..9dfcf46 100644 (file)
@@ -189,8 +189,8 @@ make_sv_object(SV *arg, SV *sv)
     char *type = 0;
     IV iv;
     
-    for (iv = 0; iv < sizeof(specialsv_list)/sizeof(SV*); iv++) {
-       if (sv == specialsv_list[iv]) {
+    for (iv = 0; iv < sizeof(PL_specialsv_list)/sizeof(SV*); iv++) {
+       if (sv == PL_specialsv_list[iv]) {
            type = "B::SPECIAL";
            break;
        }
@@ -436,13 +436,13 @@ PROTOTYPES: DISABLE
 BOOT:
     INIT_SPECIALSV_LIST;
 
-#define B_main_cv()    main_cv
-#define B_main_root()  main_root
-#define B_main_start() main_start
-#define B_comppadlist()        (main_cv ? CvPADLIST(main_cv) : CvPADLIST(compcv))
-#define B_sv_undef()   &sv_undef
-#define B_sv_yes()     &sv_yes
-#define B_sv_no()      &sv_no
+#define B_main_cv()    PL_main_cv
+#define B_main_root()  PL_main_root
+#define B_main_start() PL_main_start
+#define B_comppadlist()        (PL_main_cv ? CvPADLIST(PL_main_cv) : CvPADLIST(PL_compcv))
+#define B_sv_undef()   &PL_sv_undef
+#define B_sv_yes()     &PL_sv_yes
+#define B_sv_no()      &PL_sv_no
 
 B::CV
 B_main_cv()
@@ -516,7 +516,7 @@ ppname(opnum)
        int     opnum
     CODE:
        ST(0) = sv_newmortal();
-       if (opnum >= 0 && opnum < maxo) {
+       if (opnum >= 0 && opnum < PL_maxo) {
            sv_setpvn(ST(0), "pp_", 3);
            sv_catpv(ST(0), op_name[opnum]);
        }
@@ -543,7 +543,7 @@ cast_I32(i)
 void
 minus_c()
     CODE:
-       minus_c = TRUE;
+       PL_minus_c = TRUE;
 
 SV *
 cstring(sv)
index 07e82d5..6add52f 100644 (file)
@@ -138,7 +138,7 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
     
     if (SvGMAGICAL(val))
         mg_get(val);
-    if (val == &sv_undef || !SvOK(val)) {
+    if (val == &PL_sv_undef || !SvOK(val)) {
        sv_catpvn(retval, "undef", 5);
        return 1;
     }
@@ -151,9 +151,9 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
            XPUSHs(val); PUTBACK;
            i = perl_call_method(SvPVX(freezer), G_EVAL|G_SCALAR);
            SPAGAIN;
-           if (SvTRUE(GvSV(errgv)))
+           if (SvTRUE(GvSV(PL_errgv)))
                warn("WARNING(Freezer method call failed): %s",
-                    SvPVX(GvSV(errgv)));
+                    SvPVX(GvSV(PL_errgv)));
            else if (i)
                val = newSVsv(POPs);
            PUTBACK; FREETMPS; LEAVE;
@@ -302,7 +302,7 @@ DD_dump(SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
                if (svp)
                    elem = *svp;
                else
-                   elem = &sv_undef;
+                   elem = &PL_sv_undef;
                
                ilen = inamelen;
                sv_setiv(ixsv, ix);
@@ -640,7 +640,7 @@ Data_Dumper_Dumpxs(href, ...)
            todumpav = namesav = Nullav;
            seenhv = Nullhv;
            val = pad = xpad = apad = sep = tmp = varname
-               = freezer = toaster = bless = &sv_undef;
+               = freezer = toaster = bless = &PL_sv_undef;
            name = sv_newmortal();
            indent = 2;
            terse = useqq = purity = deepcopy = 0;
@@ -699,7 +699,7 @@ Data_Dumper_Dumpxs(href, ...)
                    if ((svp = av_fetch(todumpav, i, FALSE)))
                        val = *svp;
                    else
-                       val = &sv_undef;
+                       val = &PL_sv_undef;
                    if ((svp = av_fetch(namesav, i, TRUE)))
                        sv_setsv(name, *svp);
                    else
index e35c251..48ec49c 100644 (file)
@@ -191,7 +191,7 @@ static char *dlopen(char *path, int mode /* mode is ignored */)
     if (rld_success) {
        result = path;
        /* prevent multiple loads of same file into same process */
-       hv_store(dl_loaded_files, path, strlen(path), &sv_yes, 0);
+       hv_store(dl_loaded_files, path, strlen(path), &PL_sv_yes, 0);
     } else {
        TransferError(nxerr);
        result = (char*) 0;
index 53d1930..5127ea5 100644 (file)
@@ -64,7 +64,7 @@ odbm_TIEHASH(dbtype, filename, flags, mode)
            New(0, tmpbuf, strlen(filename) + 5, char);
            SAVEFREEPV(tmpbuf);
            sprintf(tmpbuf,"%s.dir",filename);
-           if (stat(tmpbuf, &statbuf) < 0) {
+           if (stat(tmpbuf, &PL_statbuf) < 0) {
                if (flags & O_CREAT) {
                    if (mode < 0 || close(creat(tmpbuf,mode)) < 0)
                        croak("ODBM_File: Can't create %s", filename);
index a9fea04..63743a5 100644 (file)
@@ -2,7 +2,7 @@
 #include "perl.h"
 #include "XSUB.h"
 
-/* maxo shouldn't differ from MAXO but leave room anyway (see BOOT:)   */
+/* PL_maxo shouldn't differ from MAXO but leave room anyway (see BOOT:)        */
 #define OP_MASK_BUF_SIZE (MAXO + 100)
 
 /* XXX op_named_bits and opset_all are never freed */
@@ -36,7 +36,7 @@ op_names_init(void)
 
     op_named_bits = newHV();
     op_names = get_op_names();
-    for(i=0; i < maxo; ++i) {
+    for(i=0; i < PL_maxo; ++i) {
        SV *sv;
        sv = newSViv(i);
        SvREADONLY_on(sv);
@@ -51,7 +51,7 @@ op_names_init(void)
     while(i-- > 0)
        bitmap[i] = 0xFF;
     /* Take care to set the right number of bits in the last byte */
-    bitmap[len-1] = (maxo & 0x07) ? ~(0xFF << (maxo & 0x07)) : 0xFF;
+    bitmap[len-1] = (PL_maxo & 0x07) ? ~(0xFF << (PL_maxo & 0x07)) : 0xFF;
     put_op_bitspec(":all",0, opset_all); /* don't mortalise */
 }
 
@@ -145,7 +145,7 @@ set_opset_bits(char *bitmap, SV *bitspec, int on, char *opname)
        int myopcode = SvIV(bitspec);
        int offset = myopcode >> 3;
        int bit    = myopcode & 0x07;
-       if (myopcode >= maxo || myopcode < 0)
+       if (myopcode >= PL_maxo || myopcode < 0)
            croak("panic: opcode \"%s\" value %d is invalid", opname, myopcode);
        if (opcode_debug >= 2)
            warn("set_opset_bits bit %2d (off=%d, bit=%d) %s %s\n",
@@ -173,7 +173,7 @@ set_opset_bits(char *bitmap, SV *bitspec, int on, char *opname)
 
 
 static void
-opmask_add(SV *opset)  /* THE ONLY FUNCTION TO EDIT op_mask ITSELF     */
+opmask_add(SV *opset)  /* THE ONLY FUNCTION TO EDIT PL_op_mask ITSELF  */
 {
     int i,j;
     char *bitmask;
@@ -182,8 +182,8 @@ opmask_add(SV *opset)       /* THE ONLY FUNCTION TO EDIT op_mask ITSELF     */
 
     verify_opset(opset,1);                     /* croaks on bad opset  */
 
-    if (!op_mask)              /* caller must ensure op_mask exists    */
-       croak("Can't add to uninitialised op_mask");
+    if (!PL_op_mask)           /* caller must ensure PL_op_mask exists */
+       croak("Can't add to uninitialised PL_op_mask");
 
     /* OPCODES ALREADY MASKED ARE NEVER UNMASKED. See opmask_addlocal()        */
 
@@ -194,28 +194,28 @@ opmask_add(SV *opset)     /* THE ONLY FUNCTION TO EDIT op_mask ITSELF     */
            myopcode += 8;
            continue;
        }
-       for (j=0; j < 8 && myopcode < maxo; )
-           op_mask[myopcode++] |= bits & (1 << j++);
+       for (j=0; j < 8 && myopcode < PL_maxo; )
+           PL_op_mask[myopcode++] |= bits & (1 << j++);
     }
 }
 
 static void
-opmask_addlocal(SV *opset, char *op_mask_buf) /* Localise op_mask then opmask_add() */
+opmask_addlocal(SV *opset, char *op_mask_buf) /* Localise PL_op_mask then opmask_add() */
 {
-    char *orig_op_mask = op_mask;
-    SAVEPPTR(op_mask);
+    char *orig_op_mask = PL_op_mask;
+    SAVEPPTR(PL_op_mask);
 #if !(defined(PERL_OBJECT) && defined(__BORLANDC__))
     /* XXX casting to an ordinary function ptr from a member function ptr
      * is disallowed by Borland
      */
     if (opcode_debug >= 2)
-       SAVEDESTRUCTOR((void(CPERLscope(*))_((void*)))warn,"op_mask restored");
+       SAVEDESTRUCTOR((void(CPERLscope(*))_((void*)))warn,"PL_op_mask restored");
 #endif
-    op_mask = &op_mask_buf[0];
+    PL_op_mask = &op_mask_buf[0];
     if (orig_op_mask)
-       Copy(orig_op_mask, op_mask, maxo, char);
+       Copy(orig_op_mask, PL_op_mask, PL_maxo, char);
     else
-       Zero(op_mask, maxo, char);
+       Zero(PL_op_mask, PL_maxo, char);
     opmask_add(opset);
 }
 
@@ -226,8 +226,8 @@ MODULE = Opcode     PACKAGE = Opcode
 PROTOTYPES: ENABLE
 
 BOOT:
-    assert(maxo < OP_MASK_BUF_SIZE);
-    opset_len = (maxo + 7) / 8;
+    assert(PL_maxo < OP_MASK_BUF_SIZE);
+    opset_len = (PL_maxo + 7) / 8;
     if (opcode_debug >= 1)
        warn("opset_len %ld\n", (long)opset_len);
     op_names_init();
@@ -246,19 +246,19 @@ PPCODE:
 
     opmask_addlocal(mask, op_mask_buf);
 
-    save_aptr(&endav);
-    endav = (AV*)sv_2mortal((SV*)newAV()); /* ignore END blocks for now        */
+    save_aptr(&PL_endav);
+    PL_endav = (AV*)sv_2mortal((SV*)newAV()); /* ignore END blocks for now     */
 
-    save_hptr(&defstash);              /* save current default stack   */
+    save_hptr(&PL_defstash);           /* save current default stack   */
     /* the assignment to global defstash changes our sense of 'main'   */
-    defstash = gv_stashpv(Package, GV_ADDWARN); /* should exist already        */
+    PL_defstash = gv_stashpv(Package, GV_ADDWARN); /* should exist already     */
 
     /* defstash must itself contain a main:: so we'll add that now     */
     /* take care with the ref counts (was cause of long standing bug)  */
     /* XXX I'm still not sure if this is right, GV_ADDWARN should warn!        */
     gv = gv_fetchpv("main::", GV_ADDWARN, SVt_PVHV);
     sv_free((SV*)GvHV(gv));
-    GvHV(gv) = (HV*)SvREFCNT_inc(defstash);
+    GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
 
     PUSHMARK(SP);
     perl_call_sv(codesv, GIMME|G_EVAL|G_KEEPERR); /* use callers context */
@@ -283,9 +283,9 @@ CODE:
     bitmap = SvPVX(opset);
     while(len-- > 0)
        bitmap[len] = ~bitmap[len];
-    /* take care of extra bits beyond maxo in last byte        */
-    if (maxo & 07)
-       bitmap[opset_len-1] &= ~(0xFF << (maxo & 0x07));
+    /* take care of extra bits beyond PL_maxo in last byte     */
+    if (PL_maxo & 07)
+       bitmap[opset_len-1] &= ~(0xFF << (PL_maxo & 0x07));
     }
     ST(0) = opset;
 
@@ -303,7 +303,7 @@ PPCODE:
     verify_opset(opset,1);
     for (myopcode=0, i=0; i < opset_len; i++) {
        U16 bits = bitmap[i];
-       for (j=0; j < 8 && myopcode < maxo; j++, myopcode++) {
+       for (j=0; j < 8 && myopcode < PL_maxo; j++, myopcode++) {
            if ( bits & (1 << j) )
                XPUSHs(sv_2mortal(newSVpv(names[myopcode], 0)));
        }
@@ -394,7 +394,7 @@ PPCODE:
        SV *bitspec = get_op_bitspec(opname, len, 1);
        if (SvIOK(bitspec)) {
            myopcode = SvIV(bitspec);
-           if (myopcode < 0 || myopcode >= maxo)
+           if (myopcode < 0 || myopcode >= PL_maxo)
                croak("panic: opcode %d (%s) out of range",myopcode,opname);
            XPUSHs(sv_2mortal(newSVpv(op_desc[myopcode], 0)));
        }
@@ -404,7 +404,7 @@ PPCODE:
            myopcode = 0;
            for (b=0; b < opset_len; b++) {
                U16 bits = bitmap[b];
-               for (j=0; j < 8 && myopcode < maxo; j++, myopcode++)
+               for (j=0; j < 8 && myopcode < PL_maxo; j++, myopcode++)
                    if (bits & (1 << j))
                        XPUSHs(sv_2mortal(newSVpv(op_desc[myopcode], 0)));
            }
@@ -440,8 +440,8 @@ void
 opmask_add(opset)
     SV *opset
 PREINIT:
-    if (!op_mask)
-       Newz(0, op_mask, maxo, char);
+    if (!PL_op_mask)
+       Newz(0, PL_op_mask, PL_maxo, char);
 
 void
 opcodes()
@@ -450,18 +450,18 @@ PPCODE:
        croak("opcodes in list context not yet implemented"); /* XXX */
     }
     else {
-       XPUSHs(sv_2mortal(newSViv(maxo)));
+       XPUSHs(sv_2mortal(newSViv(PL_maxo)));
     }
 
 void
 opmask()
 CODE:
     ST(0) = sv_2mortal(new_opset(Nullsv));
-    if (op_mask) {
+    if (PL_op_mask) {
        char *bitmap = SvPVX(ST(0));
        int myopcode;
-       for(myopcode=0; myopcode < maxo; ++myopcode) {
-           if (op_mask[myopcode])
+       for(myopcode=0; myopcode < PL_maxo; ++myopcode) {
+           if (PL_op_mask[myopcode])
                bitmap[myopcode >> 3] |= 1 << (myopcode & 0x07);
        }
     }
index 88aac25..0a5212d 100644 (file)
@@ -3167,7 +3167,7 @@ sigaction(sig, action, oldaction = 0)
 # This code is really grody because we're trying to make the signal
 # interface look beautiful, which is hard.
 
-       if (!siggv)
+       if (!PL_siggv)
            gv_fetchpv("SIG", TRUE, SVt_PVHV);
 
        {
@@ -3175,7 +3175,7 @@ sigaction(sig, action, oldaction = 0)
            struct sigaction oact;
            POSIX__SigSet sigset;
            SV** svp;
-           SV** sigsvp = hv_fetch(GvHVn(siggv),
+           SV** sigsvp = hv_fetch(GvHVn(PL_siggv),
                                 sig_name[sig],
                                 strlen(sig_name[sig]),
                                 TRUE);
index 9c80c3d..de0217b 100644 (file)
@@ -85,9 +85,9 @@ my_inet_aton(register const char *cp, struct in_addr *addr)
                                cp++;
                                continue;
                        }
-                       if (base == 16 && (s=strchr(hexdigit,c))) {
+                       if (base == 16 && (s=strchr(PL_hexdigit,c))) {
                                val = (val << 4) + 
-                                       ((s - hexdigit) & 15);
+                                       ((s - PL_hexdigit) & 15);
                                cp++;
                                continue;
                        }
index dae612a..bc0df70 100644 (file)
@@ -24,7 +24,7 @@ char *        Class
        int i;
        CV *cv;
     PPCODE:
-       if (!compcv || !(cv = CvOUTSIDE(compcv)))
+       if (!PL_compcv || !(cv = CvOUTSIDE(PL_compcv)))
            croak("can't set attributes outside a subroutine scope");
        for (i = 1; i < items; i++) {
            char *attr = SvPV(ST(i), na);
index 5e68226..27c92b9 100644 (file)
@@ -20,20 +20,20 @@ static void
 deinstall(void)
 {
     dTHR;
-    regexecp = &regexec_flags;
-    regcompp = &pregcomp;
+    PL_regexecp = &regexec_flags;
+    PL_regcompp = &pregcomp;
     if (!oldfl)
-       debug &= ~R_DB;
+       PL_debug &= ~R_DB;
 }
 
 static void
 install(void)
 {
     dTHR;
-    regexecp = &my_regexec;
-    regcompp = &my_regcomp;
-    oldfl = debug & R_DB;
-    debug |= R_DB;
+    PL_regexecp = &my_regexec;
+    PL_regcompp = &my_regcomp;
+    oldfl = PL_debug & R_DB;
+    PL_debug |= R_DB;
 }
 
 MODULE = re    PACKAGE = re
diff --git a/gv.c b/gv.c
index 4adce49..e50bfbc 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -68,9 +68,9 @@ gv_fetchfile(char *name)
     tmpbuf[0] = '_';
     tmpbuf[1] = '<';
     strcpy(tmpbuf + 2, name);
-    gv = *(GV**)hv_fetch(defstash, tmpbuf, tmplen, TRUE);
+    gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
     if (!isGV(gv))
-       gv_init(gv, defstash, tmpbuf, tmplen, FALSE);
+       gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
     if (tmpbuf != smallbuf)
        Safefree(tmpbuf);
     sv_setpv(GvSV(gv), name);
@@ -101,8 +101,8 @@ gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi)
     Newz(602, gp, 1, GP);
     GvGP(gv) = gp_ref(gp);
     GvSV(gv) = NEWSV(72,0);
-    GvLINE(gv) = curcop->cop_line;
-    GvFILEGV(gv) = curcop->cop_filegv;
+    GvLINE(gv) = PL_curcop->cop_line;
+    GvFILEGV(gv) = PL_curcop->cop_filegv;
     GvCVGEN(gv) = 0;
     GvEGV(gv) = gv;
     sv_magic((SV*)gv, (SV*)gv, '*', name, len);
@@ -115,13 +115,13 @@ gv_init(GV *gv, HV *stash, char *name, STRLEN len, int multi)
        SvIOK_off(gv);
        ENTER;
        start_subparse(0,0);            /* Create CV in compcv. */
-       GvCV(gv) = compcv;
+       GvCV(gv) = PL_compcv;
        LEAVE;
 
-       sub_generation++;
+       PL_sub_generation++;
        CvGV(GvCV(gv)) = (GV*)SvREFCNT_inc(gv);
-       CvFILEGV(GvCV(gv)) = curcop->cop_filegv;
-       CvSTASH(GvCV(gv)) = curstash;
+       CvFILEGV(GvCV(gv)) = PL_curcop->cop_filegv;
+       CvSTASH(GvCV(gv)) = PL_curstash;
 #ifdef USE_THREADS
        CvOWNER(GvCV(gv)) = 0;
        if (!CvMUTEXP(GvCV(gv)))
@@ -177,19 +177,19 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
            gv_init(topgv, stash, name, len, TRUE);
        if (cv = GvCV(topgv)) {
            /* If genuine method or valid cache entry, use it */
-           if (!GvCVGEN(topgv) || GvCVGEN(topgv) == sub_generation)
+           if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
                return topgv;
            /* Stale cached entry: junk it */
            SvREFCNT_dec(cv);
            GvCV(topgv) = cv = Nullcv;
            GvCVGEN(topgv) = 0;
        }
-       else if (GvCVGEN(topgv) == sub_generation)
+       else if (GvCVGEN(topgv) == PL_sub_generation)
            return 0;  /* cache indicates sub doesn't exist */
     }
 
     gvp = (GV**)hv_fetch(stash, "ISA", 3, FALSE);
-    av = (gvp && (gv = *gvp) && gv != (GV*)&sv_undef) ? GvAV(gv) : Nullav;
+    av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : Nullav;
 
     /* create and re-create @.*::SUPER::ISA on demand */
     if (!av || !SvMAGIC(av)) {
@@ -202,7 +202,7 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
            packlen -= 7;
            basestash = gv_stashpvn(packname, packlen, TRUE);
            gvp = (GV**)hv_fetch(basestash, "ISA", 3, FALSE);
-           if (gvp && (gv = *gvp) != (GV*)&sv_undef && (av = GvAV(gv))) {
+           if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
                dTHR;           /* just for SvREFCNT_dec */
                gvp = (GV**)hv_fetch(stash, "ISA", 3, TRUE);
                if (!gvp || !(gv = *gvp))
@@ -223,7 +223,7 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
            SV* sv = *svp++;
            HV* basestash = gv_stashsv(sv, FALSE);
            if (!basestash) {
-               if (dowarn)
+               if (PL_dowarn)
                    warn("Can't locate package %s for @%s::ISA",
                        SvPVX(sv), HvNAME(stash));
                continue;
@@ -257,13 +257,13 @@ gv_fetchmeth(HV *stash, char *name, STRLEN len, I32 level)
                    if (cv = GvCV(topgv))
                        SvREFCNT_dec(cv);
                    GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
-                   GvCVGEN(topgv) = sub_generation;
+                   GvCVGEN(topgv) = PL_sub_generation;
                }
                return gv;
            }
            else if (topgv && GvREFCNT(topgv) == 1) {
                /* cache the fact that the method is not defined */
-               GvCVGEN(topgv) = sub_generation;
+               GvCVGEN(topgv) = PL_sub_generation;
            }
        }
     }
@@ -299,7 +299,7 @@ gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload)
        if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
            /* ->SUPER::method should really be looked up in original stash */
            SV *tmpstr = sv_2mortal(newSVpvf("%s::SUPER",
-                                            HvNAME(curcop->cop_stash)));
+                                            HvNAME(PL_curcop->cop_stash)));
            stash = gv_stashpvn(SvPVX(tmpstr), SvCUR(tmpstr), TRUE);
            DEBUG_o( deb("Treating %s as %s::%s\n",
                         origname, HvNAME(stash), name) );
@@ -311,7 +311,7 @@ gv_fetchmethod_autoload(HV *stash, char *name, I32 autoload)
     gv = gv_fetchmeth(stash, name, nend - name, 0);
     if (!gv) {
        if (strEQ(name,"import"))
-           gv = (GV*)&sv_yes;
+           gv = (GV*)&PL_sv_yes;
        else if (autoload)
            gv = gv_autoload4(stash, name, nend - name, TRUE);
     }
@@ -358,7 +358,7 @@ gv_autoload4(HV *stash, char *name, STRLEN len, I32 method)
     /*
      * Inheriting AUTOLOAD for non-methods works ... for now.
      */
-    if (dowarn && !method && (GvCVGEN(gv) || GvSTASH(gv) != stash))
+    if (PL_dowarn && !method && (GvCVGEN(gv) || GvSTASH(gv) != stash))
        warn(
          "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
             HvNAME(stash), (int)len, name);
@@ -446,7 +446,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
            (*namend == ':' && namend[1] == ':'))
        {
            if (!stash)
-               stash = defstash;
+               stash = PL_defstash;
            if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
                return Nullgv;
 
@@ -465,7 +465,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                tmpbuf[len] = '\0';
                gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
                gv = gvp ? *gvp : Nullgv;
-               if (gv && gv != (GV*)&sv_undef) {
+               if (gv && gv != (GV*)&PL_sv_undef) {
                    if (SvTYPE(gv) != SVt_PVGV)
                        gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
                    else
@@ -473,7 +473,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                }
                if (tmpbuf != smallbuf)
                    Safefree(tmpbuf);
-               if (!gv || gv == (GV*)&sv_undef)
+               if (!gv || gv == (GV*)&PL_sv_undef)
                    return Nullgv;
 
                if (!(stash = GvHV(gv)))
@@ -488,7 +488,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
            namend++;
            name = namend;
            if (!*name)
-               return gv ? gv : (GV*)*hv_fetch(defstash, "main::", 6, TRUE);
+               return gv ? gv : (GV*)*hv_fetch(PL_defstash, "main::", 6, TRUE);
        }
     }
     len = namend - name;
@@ -527,10 +527,10 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                global = TRUE;
 
            if (global)
-               stash = defstash;
-           else if ((COP*)curcop == &compiling) {
-               stash = curstash;
-               if (add && (hints & HINT_STRICT_VARS) &&
+               stash = PL_defstash;
+           else if ((COP*)PL_curcop == &PL_compiling) {
+               stash = PL_curstash;
+               if (add && (PL_hints & HINT_STRICT_VARS) &&
                    sv_type != SVt_PVCV &&
                    sv_type != SVt_PVGV &&
                    sv_type != SVt_PVFM &&
@@ -539,7 +539,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                {
                    gvp = (GV**)hv_fetch(stash,name,len,0);
                    if (!gvp ||
-                       *gvp == (GV*)&sv_undef ||
+                       *gvp == (GV*)&PL_sv_undef ||
                        SvTYPE(*gvp) != SVt_PVGV)
                    {
                        stash = 0;
@@ -559,10 +559,10 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                }
            }
            else
-               stash = curcop->cop_stash;
+               stash = PL_curcop->cop_stash;
        }
        else
-           stash = defstash;
+           stash = PL_defstash;
     }
 
     /* By this point we should have a stash and a name */
@@ -582,8 +582,8 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
                warn("Global symbol \"%s\" requires explicit package name",
                     name);
        }
-       ++error_count;
-       stash = curstash ? curstash : defstash; /* avoid core dumps */
+       ++PL_error_count;
+       stash = PL_curstash ? PL_curstash : PL_defstash;        /* avoid core dumps */
        add_gvflags = ((sv_type == SVt_PV) ? GVf_IMPORTED_SV
                       : (sv_type == SVt_PVAV) ? GVf_IMPORTED_AV
                       : (sv_type == SVt_PVHV) ? GVf_IMPORTED_HV
@@ -594,7 +594,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
        return Nullgv;
 
     gvp = (GV**)hv_fetch(stash,name,len,add);
-    if (!gvp || *gvp == (GV*)&sv_undef)
+    if (!gvp || *gvp == (GV*)&PL_sv_undef)
        return Nullgv;
     gv = *gvp;
     if (SvTYPE(gv) == SVt_PVGV) {
@@ -668,15 +668,15 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
        if (strEQ(name, "SIG")) {
            HV *hv;
            I32 i;
-           siggv = gv;
-           GvMULTI_on(siggv);
-           hv = GvHVn(siggv);
-           hv_magic(hv, siggv, 'S');
+           PL_siggv = gv;
+           GvMULTI_on(PL_siggv);
+           hv = GvHVn(PL_siggv);
+           hv_magic(hv, PL_siggv, 'S');
            for(i=1;sig_name[i];i++) {
                SV ** init;
                init=hv_fetch(hv,sig_name[i],strlen(sig_name[i]),1);
                if(init)
-                       sv_setsv(*init,&sv_undef);
+                       sv_setsv(*init,&PL_sv_undef);
                psig_ptr[i] = 0;
                psig_name[i] = 0;
            }
@@ -686,28 +686,28 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
     case '&':
        if (len > 1)
            break;
-       ampergv = gv;
-       sawampersand = TRUE;
+       PL_ampergv = gv;
+       PL_sawampersand = TRUE;
        goto ro_magicalize;
 
     case '`':
        if (len > 1)
            break;
-       leftgv = gv;
-       sawampersand = TRUE;
+       PL_leftgv = gv;
+       PL_sawampersand = TRUE;
        goto ro_magicalize;
 
     case '\'':
        if (len > 1)
            break;
-       rightgv = gv;
-       sawampersand = TRUE;
+       PL_rightgv = gv;
+       PL_sawampersand = TRUE;
        goto ro_magicalize;
 
     case ':':
        if (len > 1)
            break;
-       sv_setpv(GvSV(gv),chopset);
+       sv_setpv(GvSV(gv),PL_chopset);
        goto magicalize;
 
     case '?':
@@ -721,7 +721,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
     case '!':
        if (len > 1)
            break;
-       if (sv_type > SVt_PV && curcop != &compiling) {
+       if (sv_type > SVt_PV && PL_curcop != &PL_compiling) {
            HV* stash = gv_stashpvn("Errno",5,FALSE);
            if(!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
                dSP;
@@ -736,7 +736,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
        goto magicalize;
     case '#':
     case '*':
-       if (dowarn && len == 1 && sv_type == SVt_PV)
+       if (PL_dowarn && len == 1 && sv_type == SVt_PV)
            warn("Use of $%s is deprecated", name);
        /* FALL THROUGH */
     case '[':
@@ -789,7 +789,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
        if (len > 1)
            break;
        sv_setpv(GvSV(gv),"\f");
-       formfeed = GvSV(gv);
+       PL_formfeed = GvSV(gv);
        break;
     case ';':
        if (len > 1)
@@ -800,7 +800,7 @@ gv_fetchpv(char *nambeg, I32 add, I32 sv_type)
        if (len == 1) {
            SV *sv = GvSV(gv);
            sv_upgrade(sv, SVt_PVNV);
-           sv_setpv(sv, patchlevel);
+           sv_setpv(sv, PL_patchlevel);
            (void)sv_2nv(sv);
            SvREADONLY_on(sv);
        }
@@ -881,16 +881,16 @@ gv_check(HV *stash)
            if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
                (gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv)) && HvNAME(hv))
            {
-               if (hv != defstash)
+               if (hv != PL_defstash)
                     gv_check(hv);              /* nested package */
            }
            else if (isALPHA(*HeKEY(entry))) {
                gv = (GV*)HeVAL(entry);
                if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
                    continue;
-               curcop->cop_line = GvLINE(gv);
+               PL_curcop->cop_line = GvLINE(gv);
                filegv = GvFILEGV(gv);
-               curcop->cop_filegv = filegv;
+               PL_curcop->cop_filegv = filegv;
                if (filegv && GvMULTI(filegv))  /* Filename began with slash */
                    continue;
                warn("Name \"%s::%s\" used only once: possible typo",
@@ -903,7 +903,7 @@ gv_check(HV *stash)
 GV *
 newGVgen(char *pack)
 {
-    return gv_fetchpv(form("%s::_GEN_%ld", pack, (long)gensym++),
+    return gv_fetchpv(form("%s::_GEN_%ld", pack, (long)PL_gensym++),
                      TRUE, SVt_PVGV);
 }
 
@@ -922,7 +922,7 @@ gp_ref(GP *gp)
        }
        else {
            /* Adding a new name to a subroutine invalidates method cache */
-           sub_generation++;
+           PL_sub_generation++;
        }
     }
     return gp;
@@ -942,7 +942,7 @@ gp_free(GV *gv)
     }
     if (gp->gp_cv) {
        /* Deleting the name of a subroutine invalidates method cache */
-       sub_generation++;
+       PL_sub_generation++;
     }
     if (--gp->gp_refcnt > 0) {
        if (gp->gp_egv == gv)
@@ -1000,8 +1000,8 @@ Gv_AMupdate(HV *stash)
   AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
   AMT amt;
 
-  if (mg && amtp->was_ok_am == amagic_generation
-      && amtp->was_ok_sub == sub_generation)
+  if (mg && amtp->was_ok_am == PL_amagic_generation
+      && amtp->was_ok_sub == PL_sub_generation)
       return AMT_AMAGIC(amtp);
   if (amtp && AMT_AMAGIC(amtp)) {      /* Have table. */
     int i;
@@ -1015,14 +1015,14 @@ Gv_AMupdate(HV *stash)
 
   DEBUG_o( deb("Recalcing overload magic in package %s\n",HvNAME(stash)) );
 
-  amt.was_ok_am = amagic_generation;
-  amt.was_ok_sub = sub_generation;
+  amt.was_ok_am = PL_amagic_generation;
+  amt.was_ok_sub = PL_sub_generation;
   amt.fallback = AMGfallNO;
   amt.flags = 0;
 
 #ifdef OVERLOAD_VIA_HASH
   gvp=(GV**)hv_fetch(stash,"OVERLOAD",8,FALSE);        /* A shortcut */
-  if (gvp && ((gv = *gvp) != (GV*)&sv_undef && (hv = GvHV(gv)))) {
+  if (gvp && ((gv = *gvp) != (GV*)&PL_sv_undef && (hv = GvHV(gv)))) {
     int filled=0;
     int i;
     char *cp;
@@ -1041,7 +1041,7 @@ Gv_AMupdate(HV *stash)
       cp = (char *)AMG_names[i];
       
         svp = (SV**)hv_fetch(hv, cp, strlen(cp), FALSE);
-        if (svp && ((sv = *svp) != &sv_undef)) {
+        if (svp && ((sv = *svp) != &PL_sv_undef)) {
           switch (SvTYPE(sv)) {
             default:
               if (!SvROK(sv)) {
@@ -1107,7 +1107,7 @@ Gv_AMupdate(HV *stash)
                GV *ngv;
                
                DEBUG_o( deb("Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n", 
-                            SvPV(GvSV(gv), na), cp, HvNAME(stash)) );
+                            SvPV(GvSV(gv), PL_na), cp, HvNAME(stash)) );
                if (!SvPOK(GvSV(gv)) 
                    || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
                                                       FALSE)))
@@ -1175,13 +1175,13 @@ amagic_call(SV *left, SV *right, int method, int flags)
         case inc_amg:
           if (((cv = cvp[off=add_ass_amg]) && (inc_dec_ass=1))
               || ((cv = cvp[off=add_amg]) && (postpr=1))) {
-            right = &sv_yes; lr = -1; assign = 1;
+            right = &PL_sv_yes; lr = -1; assign = 1;
           }
           break;
         case dec_amg:
           if (((cv = cvp[off=subtr_ass_amg])  && (inc_dec_ass=1))
               || ((cv = cvp[off=subtr_amg]) && (postpr=1))) {
-            right = &sv_yes; lr = -1; assign = 1;
+            right = &PL_sv_yes; lr = -1; assign = 1;
           }
           break;
         case bool__amg:
@@ -1367,7 +1367,7 @@ amagic_call(SV *left, SV *right, int method, int flags)
     ENTER;
     SAVEOP();
     op = (OP *) &myop;
-    if (PERLDB_SUB && curstash != debstash)
+    if (PERLDB_SUB && PL_curstash != PL_debstash)
        op->op_private |= OPpENTERSUB_DB;
     PUTBACK;
     pp_pushmark(ARGS);
@@ -1375,7 +1375,7 @@ amagic_call(SV *left, SV *right, int method, int flags)
     EXTEND(SP, notfound + 5);
     PUSHs(lr>0? right: left);
     PUSHs(lr>0? left: right);
-    PUSHs( lr > 0 ? &sv_yes : ( assign ? &sv_undef : &sv_no ));
+    PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
     if (notfound) {
       PUSHs( sv_2mortal(newSVpv((char *)AMG_names[method + assignshift],0)) );
     }
diff --git a/hv.c b/hv.c
index 784aadf..41ca298 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -32,9 +32,9 @@ STATIC HE*
 new_he(void)
 {
     HE* he;
-    if (he_root) {
-        he = he_root;
-        he_root = HeNEXT(he);
+    if (PL_he_root) {
+        he = PL_he_root;
+        PL_he_root = HeNEXT(he);
         return he;
     }
     return more_he();
@@ -43,8 +43,8 @@ new_he(void)
 STATIC void
 del_he(HE *p)
 {
-    HeNEXT(p) = (HE*)he_root;
-    he_root = p;
+    HeNEXT(p) = (HE*)PL_he_root;
+    PL_he_root = p;
 }
 
 STATIC HE*
@@ -52,8 +52,8 @@ more_he(void)
 {
     register HE* he;
     register HE* heend;
-    New(54, he_root, 1008/sizeof(HE), HE);
-    he = he_root;
+    New(54, PL_he_root, 1008/sizeof(HE), HE);
+    he = PL_he_root;
     heend = &he[1008 / sizeof(HE) - 1];
     while (he < heend) {
         HeNEXT(he) = (HE*)(he + 1);
@@ -103,8 +103,8 @@ hv_fetch(HV *hv, char *key, U32 klen, I32 lval)
            dTHR;
            sv = sv_newmortal();
            mg_copy((SV*)hv, sv, key, klen);
-           hv_fetch_sv = sv;
-           return &hv_fetch_sv;
+           PL_hv_fetch_sv = sv;
+           return &PL_hv_fetch_sv;
        }
 #ifdef ENV_IS_CASELESS
        else if (mg_find((SV*)hv,'E')) {
@@ -183,14 +183,14 @@ hv_fetch_ent(HV *hv, SV *keysv, I32 lval, register U32 hash)
            sv = sv_newmortal();
            keysv = sv_2mortal(newSVsv(keysv));
            mg_copy((SV*)hv, sv, (char*)keysv, HEf_SVKEY);
-           if (!HeKEY_hek(&hv_fetch_ent_mh)) {
+           if (!HeKEY_hek(&PL_hv_fetch_ent_mh)) {
                char *k;
                New(54, k, HEK_BASESIZE + sizeof(SV*), char);
-               HeKEY_hek(&hv_fetch_ent_mh) = (HEK*)k;
+               HeKEY_hek(&PL_hv_fetch_ent_mh) = (HEK*)k;
            }
-           HeSVKEY_set(&hv_fetch_ent_mh, keysv);
-           HeVAL(&hv_fetch_ent_mh) = sv;
-           return &hv_fetch_ent_mh;
+           HeSVKEY_set(&PL_hv_fetch_ent_mh, keysv);
+           HeVAL(&PL_hv_fetch_ent_mh) = sv;
+           return &PL_hv_fetch_ent_mh;
        }
 #ifdef ENV_IS_CASELESS
        else if (mg_find((SV*)hv,'E')) {
@@ -362,9 +362,9 @@ hv_store_ent(HV *hv, SV *keysv, SV *val, register U32 hash)
        bool needs_store;
        hv_magic_check (hv, &needs_copy, &needs_store);
        if (needs_copy) {
-           bool save_taint = tainted;
-           if (tainting)
-               tainted = SvTAINTED(keysv);
+           bool save_taint = PL_tainted;
+           if (PL_tainting)
+               PL_tainted = SvTAINTED(keysv);
            keysv = sv_2mortal(newSVsv(keysv));
            mg_copy((SV*)hv, val, (char*)keysv, HEf_SVKEY);
            TAINT_IF(save_taint);
@@ -678,7 +678,7 @@ hsplit(HV *hv)
     register HE *entry;
     register HE **oentry;
 
-    nomemok = TRUE;
+    PL_nomemok = TRUE;
 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
     Renew(a, ARRAY_ALLOC_BYTES(newsize), char);
     if (!a) {
@@ -689,7 +689,7 @@ hsplit(HV *hv)
 #define MALLOC_OVERHEAD 16
     New(2, a, ARRAY_ALLOC_BYTES(newsize), char);
     if (!a) {
-      nomemok = FALSE;
+      PL_nomemok = FALSE;
       return;
     }
     Copy(xhv->xhv_array, a, oldsize * sizeof(HE*), char);
@@ -700,7 +700,7 @@ hsplit(HV *hv)
        Safefree(xhv->xhv_array);
 #endif
 
-    nomemok = FALSE;
+    PL_nomemok = FALSE;
     Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char);    /* zero 2nd half*/
     xhv->xhv_max = --newsize;
     xhv->xhv_array = a;
@@ -753,7 +753,7 @@ hv_ksplit(HV *hv, IV newmax)
 
     a = xhv->xhv_array;
     if (a) {
-       nomemok = TRUE;
+       PL_nomemok = TRUE;
 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
        Renew(a, ARRAY_ALLOC_BYTES(newsize), char);
         if (!a) {
@@ -763,7 +763,7 @@ hv_ksplit(HV *hv, IV newmax)
 #else
        New(2, a, ARRAY_ALLOC_BYTES(newsize), char);
         if (!a) {
-         nomemok = FALSE;
+         PL_nomemok = FALSE;
          return;
        }
        Copy(xhv->xhv_array, a, oldsize * sizeof(HE*), char);
@@ -773,7 +773,7 @@ hv_ksplit(HV *hv, IV newmax)
        else
            Safefree(xhv->xhv_array);
 #endif
-       nomemok = FALSE;
+       PL_nomemok = FALSE;
        Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
     }
     else {
@@ -874,7 +874,7 @@ hv_free_ent(HV *hv, register HE *entry)
        return;
     val = HeVAL(entry);
     if (val && isGV(val) && GvCVu(val) && HvNAME(hv))
-       sub_generation++;       /* may be deletion of method from stash */
+       PL_sub_generation++;    /* may be deletion of method from stash */
     SvREFCNT_dec(val);
     if (HeKLEN(entry) == HEf_SVKEY) {
        SvREFCNT_dec(HeKEY_sv(entry));
@@ -893,7 +893,7 @@ hv_delayfree_ent(HV *hv, register HE *entry)
     if (!entry)
        return;
     if (isGV(HeVAL(entry)) && GvCVu(HeVAL(entry)) && HvNAME(hv))
-       sub_generation++;       /* may be deletion of method from stash */
+       PL_sub_generation++;    /* may be deletion of method from stash */
     sv_2mortal(HeVAL(entry));  /* free between statements */
     if (HeKLEN(entry) == HEf_SVKEY) {
        sv_2mortal(HeKEY_sv(entry));
@@ -1147,7 +1147,7 @@ unsharepvn(char *str, I32 len, U32 hash)
        if (--*Svp == Nullsv)
            hv_delete(strtab, str, len, G_DISCARD, hash);
     } */
-    xhv = (XPVHV*)SvANY(strtab);
+    xhv = (XPVHV*)SvANY(PL_strtab);
     /* assert(xhv_array != 0) */
     oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
     for (entry = *oentry; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
@@ -1191,7 +1191,7 @@ share_hek(char *str, I32 len, register U32 hash)
     if (!(Svp = hv_fetch(strtab, str, len, FALSE)))
        hv_store(strtab, str, len, Nullsv, hash);
     */
-    xhv = (XPVHV*)SvANY(strtab);
+    xhv = (XPVHV*)SvANY(PL_strtab);
     /* assert(xhv_array != 0) */
     oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
     for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
@@ -1214,7 +1214,7 @@ share_hek(char *str, I32 len, register U32 hash)
        if (i) {                                /* initial entry? */
            ++xhv->xhv_fill;
            if (xhv->xhv_keys > xhv->xhv_max)
-               hsplit(strtab);
+               hsplit(PL_strtab);
        }
     }
 
diff --git a/hv.h b/hv.h
index 91b6fec..19694ac 100644 (file)
--- a/hv.h
+++ b/hv.h
@@ -110,7 +110,7 @@ struct xpvhv {
                                  HeKEY_sv(he) :                        \
                                  sv_2mortal(newSVpv(HeKEY(he),         \
                                                     HeKLEN(he)))) :    \
-                                &sv_undef)
+                                &PL_sv_undef)
 #define HeSVKEY_set(he,sv)     ((HeKLEN(he) = HEf_SVKEY), (HeKEY_sv(he) = sv))
 
 #define Nullhek Null(HEK*)
index 03ba050..01e6e83 100644 (file)
@@ -92,7 +92,7 @@ T_LONG
 T_U_LONG
        $var = (unsigned long)SvIV($arg)
 T_CHAR
-       $var = (char)*SvPV($arg,na)
+       $var = (char)*SvPV($arg,PL_na)
 T_U_CHAR
        $var = (unsigned char)SvIV($arg)
 T_FLOAT
@@ -102,7 +102,7 @@ T_NV
 T_DOUBLE
        $var = (double)SvNV($arg)
 T_PV
-       $var = ($type)SvPV($arg,na)
+       $var = ($type)SvPV($arg,PL_na)
 T_PTR
        $var = ($type)SvIV($arg)
 T_PTRREF
@@ -158,7 +158,7 @@ T_REFOBJ
 T_OPAQUE
        $var NOT IMPLEMENTED
 T_OPAQUEPTR
-       $var = ($type)SvPV($arg,na)
+       $var = ($type)SvPV($arg,PL_na)
 T_PACKED
        $var = XS_unpack_$ntype($arg)
 T_PACKEDARRAY
index 484b577..523dabc 100755 (executable)
@@ -1305,8 +1305,7 @@ if (@BootCode)
 }
 
 print Q<<"EOF";;
-#    ST(0) = &sv_yes;
-#    XSRETURN(1);
+#    XSRETURN_YES;
 #]]
 #
 EOF
diff --git a/mg.c b/mg.c
index faceff4..59c867b 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -295,7 +295,7 @@ magic_len(SV *sv, MAGIC *mg)
     switch (*mg->mg_ptr) {
     case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9': case '&':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            paren = atoi(mg->mg_ptr);
          getparen:
            if (paren <= rx->nparens &&
@@ -309,14 +309,14 @@ magic_len(SV *sv, MAGIC *mg)
        }
        return 0;
     case '+':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            paren = rx->lastparen;
            if (paren)
                goto getparen;
        }
        return 0;
     case '`':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            if ((s = rx->subbeg) && rx->startp[0]) {
                i = rx->startp[0] - s;
                if (i >= 0)
@@ -325,7 +325,7 @@ magic_len(SV *sv, MAGIC *mg)
        }
        return 0;
     case '\'':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            if (rx->subend && (s = rx->endp[0])) {
                i = rx->subend - s;
                if (i >= 0)
@@ -334,13 +334,13 @@ magic_len(SV *sv, MAGIC *mg)
        }
        return 0;
     case ',':
-       return (STRLEN)ofslen;
+       return (STRLEN)PL_ofslen;
     case '\\':
-       return (STRLEN)orslen;
+       return (STRLEN)PL_orslen;
     }
     magic_get(sv,mg);
     if (!SvPOK(sv) && SvNIOK(sv))
-       sv_2pv(sv, &na);
+       sv_2pv(sv, &PL_na);
     if (SvPOK(sv))
        return SvCUR(sv);
     return 0;
@@ -358,10 +358,10 @@ magic_get(SV *sv, MAGIC *mg)
 
     switch (*mg->mg_ptr) {
     case '\001':               /* ^A */
-       sv_setsv(sv, bodytarget);
+       sv_setsv(sv, PL_bodytarget);
        break;
     case '\004':               /* ^D */
-       sv_setiv(sv, (IV)(debug & 32767));
+       sv_setiv(sv, (IV)(PL_debug & 32767));
        break;
     case '\005':  /* ^E */
 #ifdef VMS
@@ -417,29 +417,29 @@ magic_get(SV *sv, MAGIC *mg)
        SvNOK_on(sv);   /* what a wonderful hack! */
        break;
     case '\006':               /* ^F */
-       sv_setiv(sv, (IV)maxsysfd);
+       sv_setiv(sv, (IV)PL_maxsysfd);
        break;
     case '\010':               /* ^H */
-       sv_setiv(sv, (IV)hints);
+       sv_setiv(sv, (IV)PL_hints);
        break;
     case '\t':                 /* ^I */
-       if (inplace)
-           sv_setpv(sv, inplace);
+       if (PL_inplace)
+           sv_setpv(sv, PL_inplace);
        else
-           sv_setsv(sv, &sv_undef);
+           sv_setsv(sv, &PL_sv_undef);
        break;
     case '\017':               /* ^O */
-       sv_setpv(sv, osname);
+       sv_setpv(sv, PL_osname);
        break;
     case '\020':               /* ^P */
-       sv_setiv(sv, (IV)perldb);
+       sv_setiv(sv, (IV)PL_perldb);
        break;
     case '\023':               /* ^S */
        {
            dTHR;
-           if (lex_state != LEX_NOTPARSING)
+           if (PL_lex_state != LEX_NOTPARSING)
                SvOK_off(sv);
-           else if (in_eval)
+           else if (PL_in_eval)
                sv_setiv(sv, 1);
            else
                sv_setiv(sv, 0);
@@ -449,15 +449,15 @@ magic_get(SV *sv, MAGIC *mg)
 #ifdef BIG_TIME
        sv_setnv(sv, basetime);
 #else
-       sv_setiv(sv, (IV)basetime);
+       sv_setiv(sv, (IV)PL_basetime);
 #endif
        break;
     case '\027':               /* ^W */
-       sv_setiv(sv, (IV)dowarn);
+       sv_setiv(sv, (IV)PL_dowarn);
        break;
     case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9': case '&':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            /*
             * Pre-threads, this was paren = atoi(GvENAME((GV*)mg->mg_obj));
             * XXX Does the new way break anything?
@@ -472,49 +472,49 @@ magic_get(SV *sv, MAGIC *mg)
              getrx:
                if (i >= 0) {
                    bool was_tainted;
-                   if (tainting) {
-                       was_tainted = tainted;
-                       tainted = FALSE;
+                   if (PL_tainting) {
+                       was_tainted = PL_tainted;
+                       PL_tainted = FALSE;
                    }
                    sv_setpvn(sv,s,i);
-                   if (tainting)
-                       tainted = (was_tainted || RX_MATCH_TAINTED(rx));
+                   if (PL_tainting)
+                       PL_tainted = (was_tainted || RX_MATCH_TAINTED(rx));
                    break;
                }
            }
        }
-       sv_setsv(sv,&sv_undef);
+       sv_setsv(sv,&PL_sv_undef);
        break;
     case '+':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            paren = rx->lastparen;
            if (paren)
                goto getparen;
        }
-       sv_setsv(sv,&sv_undef);
+       sv_setsv(sv,&PL_sv_undef);
        break;
     case '`':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            if ((s = rx->subbeg) && rx->startp[0]) {
                i = rx->startp[0] - s;
                goto getrx;
            }
        }
-       sv_setsv(sv,&sv_undef);
+       sv_setsv(sv,&PL_sv_undef);
        break;
     case '\'':
-       if (curpm && (rx = curpm->op_pmregexp)) {
+       if (PL_curpm && (rx = PL_curpm->op_pmregexp)) {
            if (rx->subend && (s = rx->endp[0])) {
                i = rx->subend - s;
                goto getrx;
            }
        }
-       sv_setsv(sv,&sv_undef);
+       sv_setsv(sv,&PL_sv_undef);
        break;
     case '.':
 #ifndef lint
-       if (GvIO(last_in_gv)) {
-           sv_setiv(sv, (IV)IoLINES(GvIO(last_in_gv)));
+       if (GvIO(PL_last_in_gv)) {
+           sv_setiv(sv, (IV)IoLINES(GvIO(PL_last_in_gv)));
        }
 #endif
        break;
@@ -529,29 +529,29 @@ magic_get(SV *sv, MAGIC *mg)
        }
        break;
     case '^':
-       s = IoTOP_NAME(GvIOp(defoutgv));
+       s = IoTOP_NAME(GvIOp(PL_defoutgv));
        if (s)
            sv_setpv(sv,s);
        else {
-           sv_setpv(sv,GvENAME(defoutgv));
+           sv_setpv(sv,GvENAME(PL_defoutgv));
            sv_catpv(sv,"_TOP");
        }
        break;
     case '~':
-       s = IoFMT_NAME(GvIOp(defoutgv));
+       s = IoFMT_NAME(GvIOp(PL_defoutgv));
        if (!s)
-           s = GvENAME(defoutgv);
+           s = GvENAME(PL_defoutgv);
        sv_setpv(sv,s);
        break;
 #ifndef lint
     case '=':
-       sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(defoutgv)));
+       sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
        break;
     case '-':
-       sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(defoutgv)));
+       sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
        break;
     case '%':
-       sv_setiv(sv, (IV)IoPAGE(GvIOp(defoutgv)));
+       sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
        break;
 #endif
     case ':':
@@ -559,19 +559,19 @@ magic_get(SV *sv, MAGIC *mg)
     case '/':
        break;
     case '[':
-       WITH_THR(sv_setiv(sv, (IV)curcop->cop_arybase));
+       WITH_THR(sv_setiv(sv, (IV)PL_curcop->cop_arybase));
        break;
     case '|':
-       sv_setiv(sv, (IV)(IoFLAGS(GvIOp(defoutgv)) & IOf_FLUSH) != 0 );
+       sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
        break;
     case ',':
-       sv_setpvn(sv,ofs,ofslen);
+       sv_setpvn(sv,PL_ofs,PL_ofslen);
        break;
     case '\\':
-       sv_setpvn(sv,ors,orslen);
+       sv_setpvn(sv,PL_ors,PL_orslen);
        break;
     case '#':
-       sv_setpv(sv,ofmt);
+       sv_setpv(sv,PL_ofmt);
        break;
     case '!':
 #ifdef VMS
@@ -592,18 +592,18 @@ magic_get(SV *sv, MAGIC *mg)
        SvNOK_on(sv);   /* what a wonderful hack! */
        break;
     case '<':
-       sv_setiv(sv, (IV)uid);
+       sv_setiv(sv, (IV)PL_uid);
        break;
     case '>':
-       sv_setiv(sv, (IV)euid);
+       sv_setiv(sv, (IV)PL_euid);
        break;
     case '(':
-       sv_setiv(sv, (IV)gid);
-       sv_setpvf(sv, "%Vd", (IV)gid);
+       sv_setiv(sv, (IV)PL_gid);
+       sv_setpvf(sv, "%Vd", (IV)PL_gid);
        goto add_groups;
     case ')':
-       sv_setiv(sv, (IV)egid);
-       sv_setpvf(sv, "%Vd", (IV)egid);
+       sv_setiv(sv, (IV)PL_egid);
+       sv_setpvf(sv, "%Vd", (IV)PL_egid);
       add_groups:
 #ifdef HAS_GETGROUPS
        {
@@ -663,7 +663,7 @@ magic_setenv(SV *sv, MAGIC *mg)
 #if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
                            /* And you'll never guess what the dog had */
                            /*   in its mouth... */
-    if (tainting) {
+    if (PL_tainting) {
        MgTAINTEDDIR_off(mg);
 #ifdef VMS
        if (s && klen == 8 && strEQ(ptr, "DCL$PATH")) {
@@ -717,7 +717,7 @@ magic_setenv(SV *sv, MAGIC *mg)
 int
 magic_clearenv(SV *sv, MAGIC *mg)
 {
-    my_setenv(MgPV(mg,na),Nullch);
+    my_setenv(MgPV(mg,PL_na),Nullch);
     return 0;
 }
 
@@ -728,14 +728,14 @@ magic_set_all_env(SV *sv, MAGIC *mg)
     die("Can't make list assignment to %%ENV on this system");
 #else
     dTHR;
-    if (localizing) {
+    if (PL_localizing) {
        HE* entry;
        magic_clear_all_env(sv,mg);
        hv_iterinit((HV*)sv);
        while (entry = hv_iternext((HV*)sv)) {
            I32 keylen;
            my_setenv(hv_iterkey(entry, &keylen),
-                     SvPV(hv_iterval((HV*)sv, entry), na));
+                     SvPV(hv_iterval((HV*)sv, entry), PL_na));
        }
     }
 #endif
@@ -767,7 +767,7 @@ magic_clear_all_env(SV *sv, MAGIC *mg)
 #else
     I32 i;
 
-    if (environ == origenviron)
+    if (environ == PL_origenviron)
        New(901, environ, 1, char*);
     else
        for (i = 0; environ[i]; i++)
@@ -784,7 +784,7 @@ magic_getsig(SV *sv, MAGIC *mg)
 {
     I32 i;
     /* Are we fetching a signal entry? */
-    i = whichsig(MgPV(mg,na));
+    i = whichsig(MgPV(mg,PL_na));
     if (i) {
        if(psig_ptr[i])
            sv_setsv(sv,psig_ptr[i]);
@@ -795,7 +795,7 @@ magic_getsig(SV *sv, MAGIC *mg)
            if(sigstate == SIG_IGN)
                sv_setpv(sv,"IGNORE");
            else
-               sv_setsv(sv,&sv_undef);
+               sv_setsv(sv,&PL_sv_undef);
            psig_ptr[i] = SvREFCNT_inc(sv);
            SvTEMP_off(sv);
        }
@@ -807,7 +807,7 @@ magic_clearsig(SV *sv, MAGIC *mg)
 {
     I32 i;
     /* Are we clearing a signal entry? */
-    i = whichsig(MgPV(mg,na));
+    i = whichsig(MgPV(mg,PL_na));
     if (i) {
        if(psig_ptr[i]) {
            SvREFCNT_dec(psig_ptr[i]);
@@ -829,14 +829,14 @@ magic_setsig(SV *sv, MAGIC *mg)
     I32 i;
     SV** svp;
 
-    s = MgPV(mg,na);
+    s = MgPV(mg,PL_na);
     if (*s == '_') {
        if (strEQ(s,"__DIE__"))
-           svp = &diehook;
+           svp = &PL_diehook;
        else if (strEQ(s,"__WARN__"))
-           svp = &warnhook;
+           svp = &PL_warnhook;
        else if (strEQ(s,"__PARSE__"))
-           svp = &parsehook;
+           svp = &PL_parsehook;
        else
            croak("No such hook: %s", s);
        i = 0;
@@ -848,7 +848,7 @@ magic_setsig(SV *sv, MAGIC *mg)
     else {
        i = whichsig(s);        /* ...no, a brick */
        if (!i) {
-           if (dowarn || strEQ(s,"ALARM"))
+           if (PL_dowarn || strEQ(s,"ALARM"))
                warn("No such signal: SIG%s", s);
            return 0;
        }
@@ -861,12 +861,12 @@ magic_setsig(SV *sv, MAGIC *mg)
     }
     if (SvTYPE(sv) == SVt_PVGV || SvROK(sv)) {
        if (i)
-           (void)rsignal(i, sighandlerp);
+           (void)rsignal(i, PL_sighandlerp);
        else
            *svp = SvREFCNT_inc(sv);
        return 0;
     }
-    s = SvPV_force(sv,na);
+    s = SvPV_force(sv,PL_na);
     if (strEQ(s,"IGNORE")) {
        if (i)
            (void)rsignal(i, SIG_IGN);
@@ -888,7 +888,7 @@ magic_setsig(SV *sv, MAGIC *mg)
        if (!strchr(s,':') && !strchr(s,'\''))
            sv_setpv(sv, form("main::%s", s));
        if (i)
-           (void)rsignal(i, sighandlerp);
+           (void)rsignal(i, PL_sighandlerp);
        else
            *svp = SvREFCNT_inc(sv);
     }
@@ -898,7 +898,7 @@ magic_setsig(SV *sv, MAGIC *mg)
 int
 magic_setisa(SV *sv, MAGIC *mg)
 {
-    sub_generation++;
+    PL_sub_generation++;
     return 0;
 }
 
@@ -908,7 +908,7 @@ int
 magic_setamagic(SV *sv, MAGIC *mg)
 {
     /* HV_badAMAGIC_on(Sv_STASH(sv)); */
-    amagic_generation++;
+    PL_amagic_generation++;
 
     return 0;
 }
@@ -984,7 +984,7 @@ magic_methpack(SV *sv, MAGIC *mg, char *meth)
     PUSHSTACKi(PERLSI_MAGIC);
 
     if (magic_methcall(mg, meth, G_SCALAR, 2, NULL)) {
-       sv_setsv(sv, *stack_sp--);
+       sv_setsv(sv, *PL_stack_sp--);
     }
 
     POPSTACK;
@@ -1031,7 +1031,7 @@ magic_sizepack(SV *sv, MAGIC *mg)
     SAVETMPS;
     PUSHSTACKi(PERLSI_MAGIC);
     if (magic_methcall(mg, "FETCHSIZE", G_SCALAR, 2, NULL)) {
-       sv = *stack_sp--;
+       sv = *PL_stack_sp--;
        retval = (U32) SvIV(sv)-1;
     }
     POPSTACK;
@@ -1072,7 +1072,7 @@ magic_nextpack(SV *sv, MAGIC *mg, SV *key)
     PUTBACK;
 
     if (perl_call_method(meth, G_SCALAR))
-       sv_setsv(key, *stack_sp--);
+       sv_setsv(key, *PL_stack_sp--);
 
     POPSTACK;
     FREETMPS;
@@ -1095,10 +1095,10 @@ magic_setdbline(SV *sv, MAGIC *mg)
     GV* gv;
     SV** svp;
 
-    gv = DBline;
+    gv = PL_DBline;
     i = SvTRUE(sv);
     svp = av_fetch(GvAV(gv),
-                    atoi(MgPV(mg,na)), FALSE);
+                    atoi(MgPV(mg,PL_na)), FALSE);
     if (svp && SvIOKp(*svp) && (o = (OP*)SvSTASH(*svp)))
        o->op_private = i;
     else
@@ -1110,7 +1110,7 @@ int
 magic_getarylen(SV *sv, MAGIC *mg)
 {
     dTHR;
-    sv_setiv(sv, AvFILL((AV*)mg->mg_obj) + curcop->cop_arybase);
+    sv_setiv(sv, AvFILL((AV*)mg->mg_obj) + PL_curcop->cop_arybase);
     return 0;
 }
 
@@ -1118,7 +1118,7 @@ int
 magic_setarylen(SV *sv, MAGIC *mg)
 {
     dTHR;
-    av_fill((AV*)mg->mg_obj, SvIV(sv) - curcop->cop_arybase);
+    av_fill((AV*)mg->mg_obj, SvIV(sv) - PL_curcop->cop_arybase);
     return 0;
 }
 
@@ -1131,7 +1131,7 @@ magic_getpos(SV *sv, MAGIC *mg)
        mg = mg_find(lsv, 'g');
        if (mg && mg->mg_len >= 0) {
            dTHR;
-           sv_setiv(sv, mg->mg_len + curcop->cop_arybase);
+           sv_setiv(sv, mg->mg_len + PL_curcop->cop_arybase);
            return 0;
        }
     }
@@ -1162,7 +1162,7 @@ magic_setpos(SV *sv, MAGIC *mg)
     }
     len = SvPOK(lsv) ? SvCUR(lsv) : sv_len(lsv);
 
-    WITH_THR(pos = SvIV(sv) - curcop->cop_arybase);
+    WITH_THR(pos = SvIV(sv) - PL_curcop->cop_arybase);
     if (pos < 0) {
        pos += len;
        if (pos < 0)
@@ -1197,7 +1197,7 @@ magic_setglob(SV *sv, MAGIC *mg)
 
     if (!SvOK(sv))
        return 0;
-    s = SvPV(sv, na);
+    s = SvPV(sv, PL_na);
     if (*s == '*' && s[1])
        s++;
     gv = gv_fetchpv(s,TRUE, SVt_PVGV);
@@ -1248,13 +1248,13 @@ int
 magic_settaint(SV *sv, MAGIC *mg)
 {
     dTHR;
-    if (localizing) {
-       if (localizing == 1)
+    if (PL_localizing) {
+       if (PL_localizing == 1)
            mg->mg_len <<= 1;
        else
            mg->mg_len >>= 1;
     }
-    else if (tainted)
+    else if (PL_tainted)
        mg->mg_len |= 1;
     else
        mg->mg_len &= ~1;
@@ -1357,7 +1357,7 @@ magic_getdefelem(SV *sv, MAGIC *mg)
            if ((I32)LvTARGOFF(sv) <= AvFILL(av))
                targ = AvARRAY(av)[LvTARGOFF(sv)];
        }
-       if (targ && targ != &sv_undef) {
+       if (targ && targ != &PL_sv_undef) {
            dTHR;               /* just for SvREFCNT_dec */
            /* somebody else defined it for us */
            SvREFCNT_dec(LvTARG(sv));
@@ -1370,7 +1370,7 @@ magic_getdefelem(SV *sv, MAGIC *mg)
     }
     else
        targ = LvTARG(sv);
-    sv_setsv(sv, targ ? targ : &sv_undef);
+    sv_setsv(sv, targ ? targ : &PL_sv_undef);
     return 0;
 }
 
@@ -1407,8 +1407,8 @@ vivify_defelem(SV *sv)
            if (svp)
                value = *svp;
        }
-       if (!value || value == &sv_undef)
-           croak(no_helem, SvPV(mg->mg_obj, na));
+       if (!value || value == &PL_sv_undef)
+           croak(no_helem, SvPV(mg->mg_obj, PL_na));
     }
     else {
        AV* av = (AV*)LvTARG(sv);
@@ -1416,7 +1416,7 @@ vivify_defelem(SV *sv)
            LvTARG(sv) = Nullsv;        /* array can't be extended */
        else {
            SV** svp = av_fetch(av, LvTARGOFF(sv), TRUE);
-           if (!svp || (value = *svp) == &sv_undef)
+           if (!svp || (value = *svp) == &PL_sv_undef)
                croak(no_aelem, (I32)LvTARGOFF(sv));
        }
     }
@@ -1497,10 +1497,10 @@ magic_set(SV *sv, MAGIC *mg)
     STRLEN len;
     switch (*mg->mg_ptr) {
     case '\001':       /* ^A */
-       sv_setsv(bodytarget, sv);
+       sv_setsv(PL_bodytarget, sv);
        break;
     case '\004':       /* ^D */
-       debug = (SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)) | 0x80000000;
+       PL_debug = (SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)) | 0x80000000;
        DEBUG_x(dump_all());
        break;
     case '\005':  /* ^E */
@@ -1516,72 +1516,72 @@ magic_set(SV *sv, MAGIC *mg)
 #endif
        break;
     case '\006':       /* ^F */
-       maxsysfd = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
+       PL_maxsysfd = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
        break;
     case '\010':       /* ^H */
-       hints = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
+       PL_hints = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
        break;
     case '\t': /* ^I */
-       if (inplace)
-           Safefree(inplace);
+       if (PL_inplace)
+           Safefree(PL_inplace);
        if (SvOK(sv))
-           inplace = savepv(SvPV(sv,na));
+           PL_inplace = savepv(SvPV(sv,PL_na));
        else
-           inplace = Nullch;
+           PL_inplace = Nullch;
        break;
     case '\017':       /* ^O */
-       if (osname)
-           Safefree(osname);
+       if (PL_osname)
+           Safefree(PL_osname);
        if (SvOK(sv))
-           osname = savepv(SvPV(sv,na));
+           PL_osname = savepv(SvPV(sv,PL_na));
        else
-           osname = Nullch;
+           PL_osname = Nullch;
        break;
     case '\020':       /* ^P */
-       perldb = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
+       PL_perldb = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
        break;
     case '\024':       /* ^T */
 #ifdef BIG_TIME
        basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
 #else
-       basetime = (Time_t)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
+       PL_basetime = (Time_t)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
 #endif
        break;
     case '\027':       /* ^W */
-       dowarn = (bool)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
+       PL_dowarn = (bool)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
        break;
     case '.':
-       if (localizing) {
-           if (localizing == 1)
-               save_sptr((SV**)&last_in_gv);
+       if (PL_localizing) {
+           if (PL_localizing == 1)
+               save_sptr((SV**)&PL_last_in_gv);
        }
-       else if (SvOK(sv) && GvIO(last_in_gv))
-           IoLINES(GvIOp(last_in_gv)) = (long)SvIV(sv);
+       else if (SvOK(sv) && GvIO(PL_last_in_gv))
+           IoLINES(GvIOp(PL_last_in_gv)) = (long)SvIV(sv);
        break;
     case '^':
-       Safefree(IoTOP_NAME(GvIOp(defoutgv)));
-       IoTOP_NAME(GvIOp(defoutgv)) = s = savepv(SvPV(sv,na));
-       IoTOP_GV(GvIOp(defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
+       Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
+       IoTOP_NAME(GvIOp(PL_defoutgv)) = s = savepv(SvPV(sv,PL_na));
+       IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
        break;
     case '~':
-       Safefree(IoFMT_NAME(GvIOp(defoutgv)));
-       IoFMT_NAME(GvIOp(defoutgv)) = s = savepv(SvPV(sv,na));
-       IoFMT_GV(GvIOp(defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
+       Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
+       IoFMT_NAME(GvIOp(PL_defoutgv)) = s = savepv(SvPV(sv,PL_na));
+       IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchpv(s,TRUE, SVt_PVIO);
        break;
     case '=':
-       IoPAGE_LEN(GvIOp(defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
+       IoPAGE_LEN(GvIOp(PL_defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
        break;
     case '-':
-       IoLINES_LEFT(GvIOp(defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
-       if (IoLINES_LEFT(GvIOp(defoutgv)) < 0L)
-           IoLINES_LEFT(GvIOp(defoutgv)) = 0L;
+       IoLINES_LEFT(GvIOp(PL_defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
+       if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
+           IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
        break;
     case '%':
-       IoPAGE(GvIOp(defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
+       IoPAGE(GvIOp(PL_defoutgv)) = (long)(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
        break;
     case '|':
        {
-           IO *io = GvIOp(defoutgv);
+           IO *io = GvIOp(PL_defoutgv);
            if ((SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)) == 0)
                IoFLAGS(io) &= ~IOf_FLUSH;
            else {
@@ -1596,36 +1596,36 @@ magic_set(SV *sv, MAGIC *mg)
        break;
     case '*':
        i = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
-       multiline = (i != 0);
+       PL_multiline = (i != 0);
        break;
     case '/':
-       SvREFCNT_dec(nrs);
-       nrs = newSVsv(sv);
-       SvREFCNT_dec(rs);
-       rs = SvREFCNT_inc(nrs);
+       SvREFCNT_dec(PL_nrs);
+       PL_nrs = newSVsv(sv);
+       SvREFCNT_dec(PL_rs);
+       PL_rs = SvREFCNT_inc(PL_nrs);
        break;
     case '\\':
-       if (ors)
-           Safefree(ors);
+       if (PL_ors)
+           Safefree(PL_ors);
        if (SvOK(sv) || SvGMAGICAL(sv))
-           ors = savepv(SvPV(sv,orslen));
+           PL_ors = savepv(SvPV(sv,PL_orslen));
        else {
-           ors = Nullch;
-           orslen = 0;
+           PL_ors = Nullch;
+           PL_orslen = 0;
        }
        break;
     case ',':
-       if (ofs)
-           Safefree(ofs);
-       ofs = savepv(SvPV(sv, ofslen));
+       if (PL_ofs)
+           Safefree(PL_ofs);
+       PL_ofs = savepv(SvPV(sv, PL_ofslen));
        break;
     case '#':
-       if (ofmt)
-           Safefree(ofmt);
-       ofmt = savepv(SvPV(sv,na));
+       if (PL_ofmt)
+           Safefree(PL_ofmt);
+       PL_ofmt = savepv(SvPV(sv,PL_na));
        break;
     case '[':
-       compiling.cop_arybase = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
+       PL_compiling.cop_arybase = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
        break;
     case '?':
 #ifdef COMPLEX_STATUS
@@ -1647,16 +1647,16 @@ magic_set(SV *sv, MAGIC *mg)
                 (SvIV(sv) == EVMSERR) ? 4 : vaxc$errno);
        break;
     case '<':
-       uid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
-       if (delaymagic) {
-           delaymagic |= DM_RUID;
+       PL_uid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
+       if (PL_delaymagic) {
+           PL_delaymagic |= DM_RUID;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETRUID
        (void)setruid((Uid_t)uid);
 #else
 #ifdef HAS_SETREUID
-       (void)setreuid((Uid_t)uid, (Uid_t)-1);
+       (void)setreuid((Uid_t)PL_uid, (Uid_t)-1);
 #else
 #ifdef HAS_SETRESUID
       (void)setresuid((Uid_t)uid, (Uid_t)-1, (Uid_t)-1);
@@ -1670,17 +1670,17 @@ magic_set(SV *sv, MAGIC *mg)
 #endif
 #endif
 #endif
-       uid = (I32)PerlProc_getuid();
-       tainting |= (uid && (euid != uid || egid != gid));
+       PL_uid = (I32)PerlProc_getuid();
+       PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
        break;
     case '>':
-       euid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
-       if (delaymagic) {
-           delaymagic |= DM_EUID;
+       PL_euid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
+       if (PL_delaymagic) {
+           PL_delaymagic |= DM_EUID;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETEUID
-       (void)seteuid((Uid_t)euid);
+       (void)seteuid((Uid_t)PL_euid);
 #else
 #ifdef HAS_SETREUID
        (void)setreuid((Uid_t)-1, (Uid_t)euid);
@@ -1697,20 +1697,20 @@ magic_set(SV *sv, MAGIC *mg)
 #endif
 #endif
 #endif
-       euid = (I32)PerlProc_geteuid();
-       tainting |= (uid && (euid != uid || egid != gid));
+       PL_euid = (I32)PerlProc_geteuid();
+       PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
        break;
     case '(':
-       gid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
-       if (delaymagic) {
-           delaymagic |= DM_RGID;
+       PL_gid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
+       if (PL_delaymagic) {
+           PL_delaymagic |= DM_RGID;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETRGID
        (void)setrgid((Gid_t)gid);
 #else
 #ifdef HAS_SETREGID
-       (void)setregid((Gid_t)gid, (Gid_t)-1);
+       (void)setregid((Gid_t)PL_gid, (Gid_t)-1);
 #else
 #ifdef HAS_SETRESGID
       (void)setresgid((Gid_t)gid, (Gid_t)-1, (Gid_t) 1);
@@ -1724,19 +1724,19 @@ magic_set(SV *sv, MAGIC *mg)
 #endif
 #endif
 #endif
-       gid = (I32)PerlProc_getgid();
-       tainting |= (uid && (euid != uid || egid != gid));
+       PL_gid = (I32)PerlProc_getgid();
+       PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
        break;
     case ')':
 #ifdef HAS_SETGROUPS
        {
-           char *p = SvPV(sv, na);
+           char *p = SvPV(sv, PL_na);
            Groups_t gary[NGROUPS];
 
            SET_NUMERIC_STANDARD();
            while (isSPACE(*p))
                ++p;
-           egid = I_V(atof(p));
+           PL_egid = I_V(atof(p));
            for (i = 0; i < NGROUPS; ++i) {
                while (*p && !isSPACE(*p))
                    ++p;
@@ -1752,12 +1752,12 @@ magic_set(SV *sv, MAGIC *mg)
 #else  /* HAS_SETGROUPS */
        egid = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
 #endif /* HAS_SETGROUPS */
-       if (delaymagic) {
-           delaymagic |= DM_EGID;
+       if (PL_delaymagic) {
+           PL_delaymagic |= DM_EGID;
            break;                              /* don't do magic till later */
        }
 #ifdef HAS_SETEGID
-       (void)setegid((Gid_t)egid);
+       (void)setegid((Gid_t)PL_egid);
 #else
 #ifdef HAS_SETREGID
        (void)setregid((Gid_t)-1, (Gid_t)egid);
@@ -1774,19 +1774,19 @@ magic_set(SV *sv, MAGIC *mg)
 #endif
 #endif
 #endif
-       egid = (I32)PerlProc_getegid();
-       tainting |= (uid && (euid != uid || egid != gid));
+       PL_egid = (I32)PerlProc_getegid();
+       PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
        break;
     case ':':
-       chopset = SvPV_force(sv,na);
+       PL_chopset = SvPV_force(sv,PL_na);
        break;
     case '0':
-       if (!origalen) {
-           s = origargv[0];
+       if (!PL_origalen) {
+           s = PL_origargv[0];
            s += strlen(s);
            /* See if all the arguments are contiguous in memory */
-           for (i = 1; i < origargc; i++) {
-               if (origargv[i] == s + 1
+           for (i = 1; i < PL_origargc; i++) {
+               if (PL_origargv[i] == s + 1
 #ifdef OS2
                    || origargv[i] == s + 2
 #endif 
@@ -1796,40 +1796,40 @@ magic_set(SV *sv, MAGIC *mg)
                    break;
            }
            /* can grab env area too? */
-           if (origenviron && (origenviron[0] == s + 1
+           if (PL_origenviron && (PL_origenviron[0] == s + 1
 #ifdef OS2
                                || (origenviron[0] == s + 9 && (s += 8))
 #endif 
               )) {
                my_setenv("NoNe  SuCh", Nullch);
                                            /* force copy of environment */
-               for (i = 0; origenviron[i]; i++)
-                   if (origenviron[i] == s + 1)
+               for (i = 0; PL_origenviron[i]; i++)
+                   if (PL_origenviron[i] == s + 1)
                        s += strlen(++s);
                    else
                        break;
            }
-           origalen = s - origargv[0];
+           PL_origalen = s - PL_origargv[0];
        }
        s = SvPV_force(sv,len);
        i = len;
-       if (i >= origalen) {
-           i = origalen;
+       if (i >= PL_origalen) {
+           i = PL_origalen;
            /* don't allow system to limit $0 seen by script */
            /* SvCUR_set(sv, i); *SvEND(sv) = '\0'; */
-           Copy(s, origargv[0], i, char);
-           s = origargv[0]+i;
+           Copy(s, PL_origargv[0], i, char);
+           s = PL_origargv[0]+i;
            *s = '\0';
        }
        else {
-           Copy(s, origargv[0], i, char);
-           s = origargv[0]+i;
+           Copy(s, PL_origargv[0], i, char);
+           s = PL_origargv[0]+i;
            *s++ = '\0';
-           while (++i < origalen)
+           while (++i < PL_origalen)
                *s++ = ' ';
-           s = origargv[0]+i;
-           for (i = 1; i < origargc; i++)
-               origargv[i] = Nullch;
+           s = PL_origargv[0]+i;
+           for (i = 1; i < PL_origargc; i++)
+               PL_origargv[i] = Nullch;
        }
        break;
 #ifdef USE_THREADS
@@ -1885,7 +1885,7 @@ unwind_handler_stack(void *p)
     U32 flags = *(U32*)p;
 
     if (flags & 1)
-       savestack_ix -= 5; /* Unprotect save in progress. */
+       PL_savestack_ix -= 5; /* Unprotect save in progress. */
     /* cxstack_ix-- Not needed, die already unwound it. */
     if (flags & 64)
        SvREFCNT_dec(sig_sv);
@@ -1897,20 +1897,20 @@ sighandler(int sig)
     dSP;
     GV *gv = Nullgv;
     HV *st;
-    SV *sv, *tSv = Sv;
+    SV *sv, *tSv = PL_Sv;
     CV *cv = Nullcv;
     OP *myop = op;
     U32 flags = 0;
-    I32 o_save_i = savestack_ix, type;
-    XPV *tXpv = Xpv;
+    I32 o_save_i = PL_savestack_ix, type;
+    XPV *tXpv = PL_Xpv;
     
-    if (savestack_ix + 15 <= savestack_max)
+    if (PL_savestack_ix + 15 <= PL_savestack_max)
        flags |= 1;
-    if (markstack_ptr < markstack_max - 2)
+    if (PL_markstack_ptr < PL_markstack_max - 2)
        flags |= 4;
-    if (retstack_ix < retstack_max - 2)
+    if (PL_retstack_ix < PL_retstack_max - 2)
        flags |= 8;
-    if (scopestack_ix < scopestack_max - 3)
+    if (PL_scopestack_ix < PL_scopestack_max - 3)
        flags |= 16;
 
     if (!psig_ptr[sig])
@@ -1920,25 +1920,25 @@ sighandler(int sig)
     /* Max number of items pushed there is 3*n or 4. We cannot fix
        infinity, so we fix 4 (in fact 5): */
     if (flags & 1) {
-       savestack_ix += 5;              /* Protect save in progress. */
-       o_save_i = savestack_ix;
+       PL_savestack_ix += 5;           /* Protect save in progress. */
+       o_save_i = PL_savestack_ix;
        SAVEDESTRUCTOR(unwind_handler_stack, (void*)&flags);
     }
     if (flags & 4) 
-       markstack_ptr++;                /* Protect mark. */
+       PL_markstack_ptr++;             /* Protect mark. */
     if (flags & 8) {
-       retstack_ix++;
-       retstack[retstack_ix] = NULL;
+       PL_retstack_ix++;
+       PL_retstack[PL_retstack_ix] = NULL;
     }
     if (flags & 16)
-       scopestack_ix += 1;
+       PL_scopestack_ix += 1;
     /* sv_2cv is too complicated, try a simpler variant first: */
     if (!SvROK(psig_ptr[sig]) || !(cv = (CV*)SvRV(psig_ptr[sig])) 
        || SvTYPE(cv) != SVt_PVCV)
        cv = sv_2cv(psig_ptr[sig],&st,&gv,TRUE);
 
     if (!cv || !CvROOT(cv)) {
-       if (dowarn)
+       if (PL_dowarn)
            warn("SIG%s handler \"%s\" not defined.\n",
                sig_name[sig], (gv ? GvENAME(gv)
                                : ((cv && CvGV(cv))
@@ -1966,19 +1966,19 @@ sighandler(int sig)
     POPSTACK;
 cleanup:
     if (flags & 1)
-       savestack_ix -= 8; /* Unprotect save in progress. */
+       PL_savestack_ix -= 8; /* Unprotect save in progress. */
     if (flags & 4) 
-       markstack_ptr--;
+       PL_markstack_ptr--;
     if (flags & 8) 
-       retstack_ix--;
+       PL_retstack_ix--;
     if (flags & 16)
-       scopestack_ix -= 1;
+       PL_scopestack_ix -= 1;
     if (flags & 64)
        SvREFCNT_dec(sv);
     op = myop;                 /* Apparently not needed... */
     
-    Sv = tSv;                  /* Restore global temporaries. */
-    Xpv = tXpv;
+    PL_Sv = tSv;                       /* Restore global temporaries. */
+    PL_Xpv = tXpv;
     return;
 }
 
index 5b075a5..b41c6ee 100644 (file)
@@ -32,12 +32,12 @@ main(int argc, char **argv, char **env)
 
     perl_init_i18nl10n(1);
 
-    if (!do_undump) {
+    if (!PL_do_undump) {
        my_perl = perl_alloc();
        if (!my_perl)
            exit(1);
        perl_construct( my_perl );
-       perl_destruct_level = 0;
+       PL_perl_destruct_level = 0;
     }
 
     exitstatus = perl_parse( my_perl, xs_init, argc, argv, (char **) NULL );
diff --git a/op.c b/op.c
index a123b58..473d340 100644 (file)
--- a/op.c
+++ b/op.c
@@ -29,7 +29,7 @@
  * think the expression is of the right type: croak actually does a Siglongjmp.
  */
 #define CHECKOP(type,o) \
-    ((op_mask && op_mask[type])                                        \
+    ((PL_op_mask && PL_op_mask[type])                                  \
      ? ( op_free((OP*)o),                                      \
         croak("%s trapped by operation mask", op_desc[type]),  \
         Nullop )                                               \
@@ -56,7 +56,7 @@ gv_ename(GV *gv)
 {
     SV* tmpsv = sv_newmortal();
     gv_efullname3(tmpsv, gv, Nullch);
-    return SvPV(tmpsv,na);
+    return SvPV(tmpsv,PL_na);
 }
 
 STATIC OP *
@@ -99,10 +99,10 @@ assertref(OP *o)
            SV *msg = sv_2mortal(
                        newSVpvf("(Did you mean $ or @ instead of %c?)\n",
                                 type == OP_ENTERSUB ? '&' : '%'));
-           if (in_eval & 2)
+           if (PL_in_eval & 2)
                warn("%_", msg);
-           else if (in_eval)
-               sv_catsv(GvSV(errgv), msg);
+           else if (PL_in_eval)
+               sv_catsv(GvSV(PL_errgv), msg);
            else
                PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
        }
@@ -126,11 +126,11 @@ pad_allocmy(char *name)
        }
        croak("Can't use global %s in \"my\"",name);
     }
-    if (dowarn && AvFILLp(comppad_name) >= 0) {
-       SV **svp = AvARRAY(comppad_name);
-       for (off = AvFILLp(comppad_name); off > comppad_name_floor; off--) {
+    if (PL_dowarn && AvFILLp(PL_comppad_name) >= 0) {
+       SV **svp = AvARRAY(PL_comppad_name);
+       for (off = AvFILLp(PL_comppad_name); off > PL_comppad_name_floor; off--) {
            if ((sv = svp[off])
-               && sv != &sv_undef
+               && sv != &PL_sv_undef
                && SvIVX(sv) == 999999999       /* var is in open scope */
                && strEQ(name, SvPVX(sv)))
            {
@@ -143,25 +143,25 @@ pad_allocmy(char *name)
     sv = NEWSV(1102,0);
     sv_upgrade(sv, SVt_PVNV);
     sv_setpv(sv, name);
-    if (in_my_stash) {
+    if (PL_in_my_stash) {
        if (*name != '$')
            croak("Can't declare class for non-scalar %s in \"my\"",name);
        SvOBJECT_on(sv);
        (void)SvUPGRADE(sv, SVt_PVMG);
-       SvSTASH(sv) = (HV*)SvREFCNT_inc(in_my_stash);
-       sv_objcount++;
+       SvSTASH(sv) = (HV*)SvREFCNT_inc(PL_in_my_stash);
+       PL_sv_objcount++;
     }
-    av_store(comppad_name, off, sv);
+    av_store(PL_comppad_name, off, sv);
     SvNVX(sv) = (double)999999999;
     SvIVX(sv) = 0;                     /* Not yet introduced--see newSTATEOP */
-    if (!min_intro_pending)
-       min_intro_pending = off;
-    max_intro_pending = off;
+    if (!PL_min_intro_pending)
+       PL_min_intro_pending = off;
+    PL_max_intro_pending = off;
     if (*name == '@')
-       av_store(comppad, off, (SV*)newAV());
+       av_store(PL_comppad, off, (SV*)newAV());
     else if (*name == '%')
-       av_store(comppad, off, (SV*)newHV());
-    SvPADMY_on(curpad[off]);
+       av_store(PL_comppad, off, (SV*)newHV());
+    SvPADMY_on(PL_curpad[off]);
     return off;
 }
 
@@ -181,13 +181,13 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
        SV **svp = av_fetch(curlist, 0, FALSE);
        AV *curname;
 
-       if (!svp || *svp == &sv_undef)
+       if (!svp || *svp == &PL_sv_undef)
            continue;
        curname = (AV*)*svp;
        svp = AvARRAY(curname);
        for (off = AvFILLp(curname); off > 0; off--) {
            if ((sv = svp[off]) &&
-               sv != &sv_undef &&
+               sv != &PL_sv_undef &&
                seq <= SvIVX(sv) &&
                seq > I_32(SvNVX(sv)) &&
                strEQ(SvPVX(sv), name))
@@ -212,15 +212,15 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
                    newoff = pad_alloc(OP_PADSV, SVs_PADMY);
                    sv_upgrade(namesv, SVt_PVNV);
                    sv_setpv(namesv, name);
-                   av_store(comppad_name, newoff, namesv);
-                   SvNVX(namesv) = (double)curcop->cop_seq;
+                   av_store(PL_comppad_name, newoff, namesv);
+                   SvNVX(namesv) = (double)PL_curcop->cop_seq;
                    SvIVX(namesv) = 999999999;  /* A ref, intro immediately */
                    SvFAKE_on(namesv);          /* A ref, not a real var */
-                   if (CvANON(compcv) || SvTYPE(compcv) == SVt_PVFM) {
+                   if (CvANON(PL_compcv) || SvTYPE(PL_compcv) == SVt_PVFM) {
                        /* "It's closures all the way down." */
-                       CvCLONE_on(compcv);
+                       CvCLONE_on(PL_compcv);
                        if (cv == startcv) {
-                           if (CvANON(compcv))
+                           if (CvANON(PL_compcv))
                                oldsv = Nullsv; /* no need to keep ref */
                        }
                        else {
@@ -231,7 +231,7 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
                                if (CvANON(bcv))
                                    CvCLONE_on(bcv);
                                else {
-                                   if (dowarn && !CvUNIQUE(cv))
+                                   if (PL_dowarn && !CvUNIQUE(cv))
                                        warn(
                                          "Variable \"%s\" may be unavailable",
                                             name);
@@ -240,12 +240,12 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
                            }
                        }
                    }
-                   else if (!CvUNIQUE(compcv)) {
-                       if (dowarn && !SvFAKE(sv) && !CvUNIQUE(cv))
+                   else if (!CvUNIQUE(PL_compcv)) {
+                       if (PL_dowarn && !SvFAKE(sv) && !CvUNIQUE(cv))
                            warn("Variable \"%s\" will not stay shared", name);
                    }
                }
-               av_store(comppad, newoff, SvREFCNT_inc(oldsv));
+               av_store(PL_comppad, newoff, SvREFCNT_inc(oldsv));
                return newoff;
            }
        }
@@ -263,7 +263,7 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
        default:
            if (i == 0 && saweval) {
                seq = cxstack[saweval].blk_oldcop->cop_seq;
-               return pad_findlex(name, newoff, seq, main_cv, 0);
+               return pad_findlex(name, newoff, seq, PL_main_cv, 0);
            }
            break;
        case CXt_EVAL:
@@ -280,7 +280,7 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
            if (!saweval)
                return 0;
            cv = cx->blk_sub.cv;
-           if (debstash && CvSTASH(cv) == debstash) {  /* ignore DB'* scope */
+           if (PL_debstash && CvSTASH(cv) == PL_debstash) {    /* ignore DB'* scope */
                saweval = i;    /* so we know where we were called from */
                continue;
            }
@@ -299,8 +299,8 @@ pad_findmy(char *name)
     I32 off;
     I32 pendoff = 0;
     SV *sv;
-    SV **svp = AvARRAY(comppad_name);
-    U32 seq = cop_seqmax;
+    SV **svp = AvARRAY(PL_comppad_name);
+    U32 seq = PL_cop_seqmax;
 
 #ifdef USE_THREADS
     /*
@@ -316,9 +316,9 @@ pad_findmy(char *name)
 #endif /* USE_THREADS */
 
     /* The one we're looking for is probably just before comppad_name_fill. */
-    for (off = AvFILLp(comppad_name); off > 0; off--) {
+    for (off = AvFILLp(PL_comppad_name); off > 0; off--) {
        if ((sv = svp[off]) &&
-           sv != &sv_undef &&
+           sv != &PL_sv_undef &&
            (!SvIVX(sv) ||
             (seq <= SvIVX(sv) &&
              seq > I_32(SvNVX(sv)))) &&
@@ -331,11 +331,11 @@ pad_findmy(char *name)
     }
 
     /* See if it's in a nested scope */
-    off = pad_findlex(name, 0, seq, CvOUTSIDE(compcv), cxstack_ix);
+    off = pad_findlex(name, 0, seq, CvOUTSIDE(PL_compcv), cxstack_ix);
     if (off) {
        /* If there is a pending local definition, this new alias must die */
        if (pendoff)
-           SvIVX(AvARRAY(comppad_name)[off]) = seq;
+           SvIVX(AvARRAY(PL_comppad_name)[off]) = seq;
        return off;             /* pad_findlex returns 0 for failure...*/
     }
     return NOT_IN_PAD;         /* ...but we return NOT_IN_PAD for failure */
@@ -345,18 +345,18 @@ void
 pad_leavemy(I32 fill)
 {
     I32 off;
-    SV **svp = AvARRAY(comppad_name);
+    SV **svp = AvARRAY(PL_comppad_name);
     SV *sv;
-    if (min_intro_pending && fill < min_intro_pending) {
-       for (off = max_intro_pending; off >= min_intro_pending; off--) {
-           if ((sv = svp[off]) && sv != &sv_undef)
+    if (PL_min_intro_pending && fill < PL_min_intro_pending) {
+       for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) {
+           if ((sv = svp[off]) && sv != &PL_sv_undef)
                warn("%s never introduced", SvPVX(sv));
        }
     }
     /* "Deintroduce" my variables that are leaving with this scope. */
-    for (off = AvFILLp(comppad_name); off > fill; off--) {
-       if ((sv = svp[off]) && sv != &sv_undef && SvIVX(sv) == 999999999)
-           SvIVX(sv) = cop_seqmax;
+    for (off = AvFILLp(PL_comppad_name); off > fill; off--) {
+       if ((sv = svp[off]) && sv != &PL_sv_undef && SvIVX(sv) == 999999999)
+           SvIVX(sv) = PL_cop_seqmax;
     }
 }
 
@@ -367,43 +367,43 @@ pad_alloc(I32 optype, U32 tmptype)
     SV *sv;
     I32 retval;
 
-    if (AvARRAY(comppad) != curpad)
+    if (AvARRAY(PL_comppad) != PL_curpad)
        croak("panic: pad_alloc");
-    if (pad_reset_pending)
+    if (PL_pad_reset_pending)
        pad_reset();
     if (tmptype & SVs_PADMY) {
        do {
-           sv = *av_fetch(comppad, AvFILLp(comppad) + 1, TRUE);
+           sv = *av_fetch(PL_comppad, AvFILLp(PL_comppad) + 1, TRUE);
        } while (SvPADBUSY(sv));                /* need a fresh one */
-       retval = AvFILLp(comppad);
+       retval = AvFILLp(PL_comppad);
     }
     else {
-       SV **names = AvARRAY(comppad_name);
-       SSize_t names_fill = AvFILLp(comppad_name);
+       SV **names = AvARRAY(PL_comppad_name);
+       SSize_t names_fill = AvFILLp(PL_comppad_name);
        for (;;) {
            /*
             * "foreach" index vars temporarily become aliases to non-"my"
             * values.  Thus we must skip, not just pad values that are
             * marked as current pad values, but also those with names.
             */
-           if (++padix <= names_fill &&
-                  (sv = names[padix]) && sv != &sv_undef)
+           if (++PL_padix <= names_fill &&
+                  (sv = names[PL_padix]) && sv != &PL_sv_undef)
                continue;
-           sv = *av_fetch(comppad, padix, TRUE);
+           sv = *av_fetch(PL_comppad, PL_padix, TRUE);
            if (!(SvFLAGS(sv) & (SVs_PADTMP|SVs_PADMY)))
                break;
        }
-       retval = padix;
+       retval = PL_padix;
     }
     SvFLAGS(sv) |= tmptype;
-    curpad = AvARRAY(comppad);
+    PL_curpad = AvARRAY(PL_comppad);
 #ifdef USE_THREADS
     DEBUG_X(PerlIO_printf(Perl_debug_log, "0x%lx Pad 0x%lx alloc %ld for %s\n",
                          (unsigned long) thr, (unsigned long) curpad,
                          (long) retval, op_name[optype]));
 #else
     DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%lx alloc %ld for %s\n",
-                         (unsigned long) curpad,
+                         (unsigned long) PL_curpad,
                          (long) retval, op_name[optype]));
 #endif /* USE_THREADS */
     return (PADOFFSET)retval;
@@ -420,18 +420,18 @@ pad_sv(PADOFFSET po)
     if (!po)
        croak("panic: pad_sv po");
     DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%lx sv %d\n",
-                         (unsigned long) curpad, po));
+                         (unsigned long) PL_curpad, po));
 #endif /* USE_THREADS */
-    return curpad[po];         /* eventually we'll turn this into a macro */
+    return PL_curpad[po];              /* eventually we'll turn this into a macro */
 }
 
 void
 pad_free(PADOFFSET po)
 {
     dTHR;
-    if (!curpad)
+    if (!PL_curpad)
        return;
-    if (AvARRAY(comppad) != curpad)
+    if (AvARRAY(PL_comppad) != PL_curpad)
        croak("panic: pad_free curpad");
     if (!po)
        croak("panic: pad_free po");
@@ -440,19 +440,19 @@ pad_free(PADOFFSET po)
                          (unsigned long) thr, (unsigned long) curpad, po));
 #else
     DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%lx free %d\n",
-                         (unsigned long) curpad, po));
+                         (unsigned long) PL_curpad, po));
 #endif /* USE_THREADS */
-    if (curpad[po] && curpad[po] != &sv_undef)
-       SvPADTMP_off(curpad[po]);
-    if ((I32)po < padix)
-       padix = po - 1;
+    if (PL_curpad[po] && PL_curpad[po] != &PL_sv_undef)
+       SvPADTMP_off(PL_curpad[po]);
+    if ((I32)po < PL_padix)
+       PL_padix = po - 1;
 }
 
 void
 pad_swipe(PADOFFSET po)
 {
     dTHR;
-    if (AvARRAY(comppad) != curpad)
+    if (AvARRAY(PL_comppad) != PL_curpad)
        croak("panic: pad_swipe curpad");
     if (!po)
        croak("panic: pad_swipe po");
@@ -461,13 +461,13 @@ pad_swipe(PADOFFSET po)
                          (unsigned long) thr, (unsigned long) curpad, po));
 #else
     DEBUG_X(PerlIO_printf(Perl_debug_log, "Pad 0x%lx swipe %d\n",
-                         (unsigned long) curpad, po));
+                         (unsigned long) PL_curpad, po));
 #endif /* USE_THREADS */
-    SvPADTMP_off(curpad[po]);
-    curpad[po] = NEWSV(1107,0);
-    SvPADTMP_on(curpad[po]);
-    if ((I32)po < padix)
-       padix = po - 1;
+    SvPADTMP_off(PL_curpad[po]);
+    PL_curpad[po] = NEWSV(1107,0);
+    SvPADTMP_on(PL_curpad[po]);
+    if ((I32)po < PL_padix)
+       PL_padix = po - 1;
 }
 
 /* XXX pad_reset() is currently disabled because it results in serious bugs.
@@ -500,7 +500,7 @@ pad_reset(void)
        padix = padix_floor;
     }
 #endif
-    pad_reset_pending = FALSE;
+    PL_pad_reset_pending = FALSE;
 }
 
 #ifdef USE_THREADS
@@ -682,15 +682,15 @@ scalarkids(OP *o)
 STATIC OP *
 scalarboolean(OP *o)
 {
-    if (dowarn &&
+    if (PL_dowarn &&
        o->op_type == OP_SASSIGN && cBINOPo->op_first->op_type == OP_CONST) {
        dTHR;
-       line_t oldline = curcop->cop_line;
+       line_t oldline = PL_curcop->cop_line;
 
-       if (copline != NOLINE)
-           curcop->cop_line = copline;
+       if (PL_copline != NOLINE)
+           PL_curcop->cop_line = PL_copline;
        warn("Found = in conditional, should be ==");
-       curcop->cop_line = oldline;
+       PL_curcop->cop_line = oldline;
     }
     return scalar(o);
 }
@@ -701,7 +701,7 @@ scalar(OP *o)
     OP *kid;
 
     /* assumes no premature commitment */
-    if (!o || (o->op_flags & OPf_WANT) || error_count
+    if (!o || (o->op_flags & OPf_WANT) || PL_error_count
         || o->op_type == OP_RETURN)
        return o;
 
@@ -745,7 +745,7 @@ scalar(OP *o)
            else
                scalar(kid);
        }
-       WITH_THR(curcop = &compiling);
+       WITH_THR(PL_curcop = &PL_compiling);
        break;
     case OP_SCOPE:
     case OP_LINESEQ:
@@ -756,7 +756,7 @@ scalar(OP *o)
            else
                scalar(kid);
        }
-       WITH_THR(curcop = &compiling);
+       WITH_THR(PL_curcop = &PL_compiling);
        break;
     }
     return o;
@@ -770,7 +770,7 @@ scalarvoid(OP *o)
     SV* sv;
 
     /* assumes no premature commitment */
-    if (!o || (o->op_flags & OPf_WANT) == OPf_WANT_LIST || error_count
+    if (!o || (o->op_flags & OPf_WANT) == OPf_WANT_LIST || PL_error_count
         || o->op_type == OP_RETURN)
        return o;
 
@@ -872,12 +872,12 @@ scalarvoid(OP *o)
 
     case OP_NEXTSTATE:
     case OP_DBSTATE:
-       WITH_THR(curcop = ((COP*)o));           /* for warning below */
+       WITH_THR(PL_curcop = ((COP*)o));                /* for warning below */
        break;
 
     case OP_CONST:
        sv = cSVOPo->op_sv;
-       if (dowarn) {
+       if (PL_dowarn) {
            useless = "a constant";
            if (SvNIOK(sv) && (SvNV(sv) == 0.0 || SvNV(sv) == 1.0))
                useless = 0;
@@ -911,7 +911,7 @@ scalarvoid(OP *o)
 
     case OP_NULL:
        if (o->op_targ == OP_NEXTSTATE || o->op_targ == OP_DBSTATE)
-           WITH_THR(curcop = ((COP*)o));       /* for warning below */
+           WITH_THR(PL_curcop = ((COP*)o));    /* for warning below */
        if (o->op_flags & OPf_STACKED)
            break;
        /* FALL THROUGH */
@@ -944,7 +944,7 @@ scalarvoid(OP *o)
        }
        break;
     }
-    if (useless && dowarn)
+    if (useless && PL_dowarn)
        warn("Useless use of %s in void context", useless);
     return o;
 }
@@ -966,7 +966,7 @@ list(OP *o)
     OP *kid;
 
     /* assumes no premature commitment */
-    if (!o || (o->op_flags & OPf_WANT) || error_count
+    if (!o || (o->op_flags & OPf_WANT) || PL_error_count
         || o->op_type == OP_RETURN)
        return o;
 
@@ -1007,7 +1007,7 @@ list(OP *o)
            else
                list(kid);
        }
-       WITH_THR(curcop = &compiling);
+       WITH_THR(PL_curcop = &PL_compiling);
        break;
     case OP_SCOPE:
     case OP_LINESEQ:
@@ -1017,7 +1017,7 @@ list(OP *o)
            else
                list(kid);
        }
-       WITH_THR(curcop = &compiling);
+       WITH_THR(PL_curcop = &PL_compiling);
        break;
     case OP_REQUIRE:
        /* all requires must return a boolean value */
@@ -1044,10 +1044,10 @@ scalarseq(OP *o)
                    scalarvoid(kid);
                }
            }
-           curcop = &compiling;
+           PL_curcop = &PL_compiling;
        }
        o->op_flags &= ~OPf_PARENS;
-       if (hints & HINT_BLOCK_SCOPE)
+       if (PL_hints & HINT_BLOCK_SCOPE)
            o->op_flags |= OPf_PARENS;
     }
     else
@@ -1073,23 +1073,23 @@ mod(OP *o, I32 type)
     OP *kid;
     SV *sv;
 
-    if (!o || error_count)
+    if (!o || PL_error_count)
        return o;
 
     switch (o->op_type) {
     case OP_UNDEF:
-       modcount++;
+       PL_modcount++;
        return o;
     case OP_CONST:
        if (!(o->op_private & (OPpCONST_ARYBASE)))
            goto nomod;
-       if (eval_start && eval_start->op_type == OP_CONST) {
-           compiling.cop_arybase = (I32)SvIV(((SVOP*)eval_start)->op_sv);
-           eval_start = 0;
+       if (PL_eval_start && PL_eval_start->op_type == OP_CONST) {
+           PL_compiling.cop_arybase = (I32)SvIV(((SVOP*)PL_eval_start)->op_sv);
+           PL_eval_start = 0;
        }
        else if (!type) {
-           SAVEI32(compiling.cop_arybase);
-           compiling.cop_arybase = 0;
+           SAVEI32(PL_compiling.cop_arybase);
+           PL_compiling.cop_arybase = 0;
        }
        else if (type == OP_REFGEN)
            goto nomod;
@@ -1142,7 +1142,7 @@ mod(OP *o, I32 type)
     case OP_I_SUBTRACT:
        if (!(o->op_flags & OPf_STACKED))
            goto nomod;
-       modcount++;
+       PL_modcount++;
        break;
        
     case OP_COND_EXPR:
@@ -1155,7 +1155,7 @@ mod(OP *o, I32 type)
        if (!type && cUNOPo->op_first->op_type != OP_GV)
            croak("Can't localize through a reference");
        if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
-           modcount = 10000;
+           PL_modcount = 10000;
            return o;           /* Treat \(@foo) like ordinary list. */
        }
        /* FALL THROUGH */
@@ -1171,7 +1171,7 @@ mod(OP *o, I32 type)
     case OP_DBSTATE:
     case OP_REFGEN:
     case OP_CHOMP:
-       modcount = 10000;
+       PL_modcount = 10000;
        break;
     case OP_RV2SV:
        if (!type && cUNOPo->op_first->op_type != OP_GV)
@@ -1180,25 +1180,25 @@ mod(OP *o, I32 type)
        /* FALL THROUGH */
     case OP_GV:
     case OP_AV2ARYLEN:
-       hints |= HINT_BLOCK_SCOPE;
+       PL_hints |= HINT_BLOCK_SCOPE;
     case OP_SASSIGN:
     case OP_AELEMFAST:
-       modcount++;
+       PL_modcount++;
        break;
 
     case OP_PADAV:
     case OP_PADHV:
-       modcount = 10000;
+       PL_modcount = 10000;
        if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
            return o;           /* Treat \(@foo) like ordinary list. */
        if (scalar_mod_type(o, type))
            goto nomod;
        /* FALL THROUGH */
     case OP_PADSV:
-       modcount++;
+       PL_modcount++;
        if (!type)
            croak("Can't localize lexical variable %s",
-               SvPV(*av_fetch(comppad_name, o->op_targ, 4), na));
+               SvPV(*av_fetch(PL_comppad_name, o->op_targ, 4), PL_na));
        break;
 
 #ifdef USE_THREADS
@@ -1234,7 +1234,7 @@ mod(OP *o, I32 type)
        if (type == OP_ENTERSUB &&
             !(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
            o->op_private |= OPpLVAL_DEFER;
-       modcount++;
+       PL_modcount++;
        break;
 
     case OP_SCOPE:
@@ -1264,7 +1264,7 @@ mod(OP *o, I32 type)
     else if (!type) {
        o->op_private |= OPpLVAL_INTRO;
        o->op_flags &= ~OPf_SPECIAL;
-       hints |= HINT_BLOCK_SCOPE;
+       PL_hints |= HINT_BLOCK_SCOPE;
     }
     else if (type != OP_GREPSTART && type != OP_ENTERSUB)
        o->op_flags |= OPf_REF;
@@ -1334,7 +1334,7 @@ ref(OP *o, I32 type)
 {
     OP *kid;
 
-    if (!o || error_count)
+    if (!o || PL_error_count)
        return o;
 
     switch (o->op_type) {
@@ -1420,7 +1420,7 @@ my(OP *o)
     OP *kid;
     I32 type;
 
-    if (!o || error_count)
+    if (!o || PL_error_count)
        return o;
 
     type = o->op_type;
@@ -1455,7 +1455,7 @@ bind_match(I32 type, OP *left, OP *right)
 {
     OP *o;
 
-    if (dowarn &&
+    if (PL_dowarn &&
        (left->op_type == OP_RV2AV ||
         left->op_type == OP_RV2HV ||
         left->op_type == OP_PADAV ||
@@ -1501,7 +1501,7 @@ OP *
 scope(OP *o)
 {
     if (o) {
-       if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || tainting) {
+       if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || PL_tainting) {
            o = prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
            o->op_type = OP_LEAVE;
            o->op_ppaddr = ppaddr[OP_LEAVE];
@@ -1527,34 +1527,34 @@ scope(OP *o)
 void
 save_hints(void)
 {
-    SAVEI32(hints);
-    SAVESPTR(GvHV(hintgv));
-    GvHV(hintgv) = newHVhv(GvHV(hintgv));
-    SAVEFREESV(GvHV(hintgv));
+    SAVEI32(PL_hints);
+    SAVESPTR(GvHV(PL_hintgv));
+    GvHV(PL_hintgv) = newHVhv(GvHV(PL_hintgv));
+    SAVEFREESV(GvHV(PL_hintgv));
 }
 
 int
 block_start(int full)
 {
     dTHR;
-    int retval = savestack_ix;
+    int retval = PL_savestack_ix;
 
-    SAVEI32(comppad_name_floor);
+    SAVEI32(PL_comppad_name_floor);
     if (full) {
-       if ((comppad_name_fill = AvFILLp(comppad_name)) > 0)
-           comppad_name_floor = comppad_name_fill;
+       if ((PL_comppad_name_fill = AvFILLp(PL_comppad_name)) > 0)
+           PL_comppad_name_floor = PL_comppad_name_fill;
        else
-           comppad_name_floor = 0;
-    }
-    SAVEI32(min_intro_pending);
-    SAVEI32(max_intro_pending);
-    min_intro_pending = 0;
-    SAVEI32(comppad_name_fill);
-    SAVEI32(padix_floor);
-    padix_floor = padix;
-    pad_reset_pending = FALSE;
+           PL_comppad_name_floor = 0;
+    }
+    SAVEI32(PL_min_intro_pending);
+    SAVEI32(PL_max_intro_pending);
+    PL_min_intro_pending = 0;
+    SAVEI32(PL_comppad_name_fill);
+    SAVEI32(PL_padix_floor);
+    PL_padix_floor = PL_padix;
+    PL_pad_reset_pending = FALSE;
     SAVEHINTS();
-    hints &= ~HINT_BLOCK_SCOPE;
+    PL_hints &= ~HINT_BLOCK_SCOPE;
     return retval;
 }
 
@@ -1562,14 +1562,14 @@ OP*
 block_end(I32 floor, OP *seq)
 {
     dTHR;
-    int needblockscope = hints & HINT_BLOCK_SCOPE;
+    int needblockscope = PL_hints & HINT_BLOCK_SCOPE;
     OP* retval = scalarseq(seq);
     LEAVE_SCOPE(floor);
-    pad_reset_pending = FALSE;
+    PL_pad_reset_pending = FALSE;
     if (needblockscope)
-       hints |= HINT_BLOCK_SCOPE; /* propagate out */
-    pad_leavemy(comppad_name_fill);
-    cop_seqmax++;
+       PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */
+    pad_leavemy(PL_comppad_name_fill);
+    PL_cop_seqmax++;
     return retval;
 }
 
@@ -1581,7 +1581,7 @@ newDEFSVOP(void)
     o->op_targ = find_threadsv("_");
     return o;
 #else
-    return newSVREF(newGVOP(OP_GV, 0, defgv));
+    return newSVREF(newGVOP(OP_GV, 0, PL_defgv));
 #endif /* USE_THREADS */
 }
 
@@ -1589,21 +1589,21 @@ void
 newPROG(OP *o)
 {
     dTHR;
-    if (in_eval) {
-       eval_root = newUNOP(OP_LEAVEEVAL, ((in_eval & 4) ? OPf_SPECIAL : 0), o);
-       eval_start = linklist(eval_root);
-       eval_root->op_next = 0;
-       peep(eval_start);
+    if (PL_in_eval) {
+       PL_eval_root = newUNOP(OP_LEAVEEVAL, ((PL_in_eval & 4) ? OPf_SPECIAL : 0), o);
+       PL_eval_start = linklist(PL_eval_root);
+       PL_eval_root->op_next = 0;
+       peep(PL_eval_start);
     }
     else {
        if (!o)
            return;
-       main_root = scope(sawparens(scalarvoid(o)));
-       curcop = &compiling;
-       main_start = LINKLIST(main_root);
-       main_root->op_next = 0;
-       peep(main_start);
-       compcv = 0;
+       PL_main_root = scope(sawparens(scalarvoid(o)));
+       PL_curcop = &PL_compiling;
+       PL_main_start = LINKLIST(PL_main_root);
+       PL_main_root->op_next = 0;
+       peep(PL_main_start);
+       PL_compcv = 0;
 
        /* Register with debugger */
        if (PERLDB_INTER) {
@@ -1611,7 +1611,7 @@ newPROG(OP *o)
            if (cv) {
                dSP;
                PUSHMARK(SP);
-               XPUSHs((SV*)compiling.cop_filegv);
+               XPUSHs((SV*)PL_compiling.cop_filegv);
                PUTBACK;
                perl_call_sv((SV*)cv, G_DISCARD);
            }
@@ -1625,15 +1625,15 @@ localize(OP *o, I32 lex)
     if (o->op_flags & OPf_PARENS)
        list(o);
     else {
-       if (dowarn && bufptr > oldbufptr && bufptr[-1] == ',') {
+       if (PL_dowarn && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',') {
            char *s;
-           for (s = bufptr; *s && (isALNUM(*s) || strchr("@$%, ",*s)); s++) ;
+           for (s = PL_bufptr; *s && (isALNUM(*s) || strchr("@$%, ",*s)); s++) ;
            if (*s == ';' || *s == '=')
                warn("Parens missing around \"%s\" list", lex ? "my" : "local");
        }
     }
-    in_my = FALSE;
-    in_my_stash = Nullhv;
+    PL_in_my = FALSE;
+    PL_in_my_stash = Nullhv;
     if (lex)
        return my(o);
     else
@@ -1669,7 +1669,7 @@ fold_constants(register OP *o)
     if (opargs[type] & OA_TARGET)
        o->op_targ = pad_alloc(type, SVs_PADTMP);
 
-    if ((opargs[type] & OA_OTHERINT) && (hints & HINT_INTEGER))
+    if ((opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
        o->op_ppaddr = ppaddr[type = ++(o->op_type)];
 
     if (!(opargs[type] & OA_FOLDCONST))
@@ -1691,7 +1691,7 @@ fold_constants(register OP *o)
            goto nope;
     }
 
-    if (error_count)
+    if (PL_error_count)
        goto nope;              /* Don't try to run w/ errors */
 
     for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
@@ -1708,7 +1708,7 @@ fold_constants(register OP *o)
     o->op_next = 0;
     op = curop;
     CALLRUNOPS();
-    sv = *(stack_sp--);
+    sv = *(PL_stack_sp--);
     if (o->op_targ && sv == PAD_SV(o->op_targ))        /* grab pad temp? */
        pad_swipe(o->op_targ);
     else if (SvTEMP(sv)) {                     /* grab mortal temp? */
@@ -1738,7 +1738,7 @@ fold_constants(register OP *o)
     if (!(opargs[type] & OA_OTHERINT))
        return o;
 
-    if (!(hints & HINT_INTEGER)) {
+    if (!(PL_hints & HINT_INTEGER)) {
        if (type == OP_DIVIDE || !(o->op_flags & OPf_KIDS))
            return o;
 
@@ -1763,10 +1763,10 @@ gen_constant_list(register OP *o)
 {
     dTHR;
     register OP *curop;
-    I32 oldtmps_floor = tmps_floor;
+    I32 oldtmps_floor = PL_tmps_floor;
 
     list(o);
-    if (error_count)
+    if (PL_error_count)
        return o;               /* Don't attempt to run with errors */
 
     op = curop = LINKLIST(o);
@@ -1775,12 +1775,12 @@ gen_constant_list(register OP *o)
     CALLRUNOPS();
     op = curop;
     pp_anonlist(ARGS);
-    tmps_floor = oldtmps_floor;
+    PL_tmps_floor = oldtmps_floor;
 
     o->op_type = OP_RV2AV;
     o->op_ppaddr = ppaddr[OP_RV2AV];
     curop = ((UNOP*)o)->op_first;
-    ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*stack_sp--));
+    ((UNOP*)o)->op_first = newSVOP(OP_CONST, 0, SvREFCNT_inc(*PL_stack_sp--));
     op_free(curop);
     linklist(o);
     return list(o);
@@ -2100,16 +2100,16 @@ newPMOP(I32 type, I32 flags)
     pmop->op_flags = flags;
     pmop->op_private = 0 | (flags >> 8);
 
-    if (hints & HINT_RE_TAINT)
+    if (PL_hints & HINT_RE_TAINT)
        pmop->op_pmpermflags |= PMf_RETAINT;
-    if (hints & HINT_LOCALE)
+    if (PL_hints & HINT_LOCALE)
        pmop->op_pmpermflags |= PMf_LOCALE;
     pmop->op_pmflags = pmop->op_pmpermflags;
 
     /* link into pm list */
-    if (type != OP_TRANS && curstash) {
-       pmop->op_pmnext = HvPMROOT(curstash);
-       HvPMROOT(curstash) = pmop;
+    if (type != OP_TRANS && PL_curstash) {
+       pmop->op_pmnext = HvPMROOT(PL_curstash);
+       HvPMROOT(PL_curstash) = pmop;
     }
 
     return (OP*)pmop;
@@ -2126,7 +2126,7 @@ pmruntime(OP *o, OP *expr, OP *repl)
     if (o->op_type == OP_TRANS)
        return pmtrans(o, expr, repl);
 
-    hints |= HINT_BLOCK_SCOPE;
+    PL_hints |= HINT_BLOCK_SCOPE;
     pm = (PMOP*)o;
 
     if (expr->op_type == OP_CONST) {
@@ -2144,8 +2144,8 @@ pmruntime(OP *o, OP *expr, OP *repl)
        op_free(expr);
     }
     else {
-       if (pm->op_pmflags & PMf_KEEP || !(hints & HINT_RE_EVAL))
-           expr = newUNOP((!(hints & HINT_RE_EVAL) 
+       if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL))
+           expr = newUNOP((!(PL_hints & HINT_RE_EVAL) 
                            ? OP_REGCRESET
                            : OP_REGCMAYBE),0,expr);
 
@@ -2153,14 +2153,14 @@ pmruntime(OP *o, OP *expr, OP *repl)
        rcop->op_type = OP_REGCOMP;
        rcop->op_ppaddr = ppaddr[OP_REGCOMP];
        rcop->op_first = scalar(expr);
-       rcop->op_flags |= ((hints & HINT_RE_EVAL) 
+       rcop->op_flags |= ((PL_hints & HINT_RE_EVAL) 
                           ? (OPf_SPECIAL | OPf_KIDS)
                           : OPf_KIDS);
        rcop->op_private = 1;
        rcop->op_other = o;
 
        /* establish postfix order */
-       if (pm->op_pmflags & PMf_KEEP || !(hints & HINT_RE_EVAL)) {
+       if (pm->op_pmflags & PMf_KEEP || !(PL_hints & HINT_RE_EVAL)) {
            LINKLIST(expr);
            rcop->op_next = expr;
            ((UNOP*)expr)->op_first->op_next = (OP*)rcop;
@@ -2320,23 +2320,23 @@ package(OP *o)
     dTHR;
     SV *sv;
 
-    save_hptr(&curstash);
-    save_item(curstname);
+    save_hptr(&PL_curstash);
+    save_item(PL_curstname);
     if (o) {
        STRLEN len;
        char *name;
        sv = cSVOPo->op_sv;
        name = SvPV(sv, len);
-       curstash = gv_stashpvn(name,len,TRUE);
-       sv_setpvn(curstname, name, len);
+       PL_curstash = gv_stashpvn(name,len,TRUE);
+       sv_setpvn(PL_curstname, name, len);
        op_free(o);
     }
     else {
-       sv_setpv(curstname,"<none>");
-       curstash = Nullhv;
+       sv_setpv(PL_curstname,"<none>");
+       PL_curstash = Nullhv;
     }
-    copline = NOLINE;
-    expect = XSTATE;
+    PL_copline = NOLINE;
+    PL_expect = XSTATE;
 }
 
 void
@@ -2411,8 +2411,8 @@ utilize(int aver, I32 floor, OP *version, OP *id, OP *arg)
                newSTATEOP(0, Nullch, veop)),
            newSTATEOP(0, Nullch, imop) ));
 
-    copline = NOLINE;
-    expect = XSTATE;
+    PL_copline = NOLINE;
+    PL_expect = XSTATE;
 }
 
 OP *
@@ -2476,11 +2476,11 @@ newASSIGNOP(I32 flags, OP *left, I32 optype, OP *right)
 
     if (list_assignment(left)) {
        dTHR;
-       modcount = 0;
-       eval_start = right;     /* Grandfathering $[ assignment here.  Bletch.*/
+       PL_modcount = 0;
+       PL_eval_start = right;  /* Grandfathering $[ assignment here.  Bletch.*/
        left = mod(left, OP_AASSIGN);
-       if (eval_start)
-           eval_start = 0;
+       if (PL_eval_start)
+           PL_eval_start = 0;
        else {
            op_free(left);
            op_free(right);
@@ -2493,24 +2493,24 @@ newASSIGNOP(I32 flags, OP *left, I32 optype, OP *right)
        if (!(left->op_private & OPpLVAL_INTRO)) {
            OP *curop;
            OP *lastop = o;
-           generation++;
+           PL_generation++;
            for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) {
                if (opargs[curop->op_type] & OA_DANGEROUS) {
                    if (curop->op_type == OP_GV) {
                        GV *gv = ((GVOP*)curop)->op_gv;
-                       if (gv == defgv || SvCUR(gv) == generation)
+                       if (gv == PL_defgv || SvCUR(gv) == PL_generation)
                            break;
-                       SvCUR(gv) = generation;
+                       SvCUR(gv) = PL_generation;
                    }
                    else if (curop->op_type == OP_PADSV ||
                             curop->op_type == OP_PADAV ||
                             curop->op_type == OP_PADHV ||
                             curop->op_type == OP_PADANY) {
-                       SV **svp = AvARRAY(comppad_name);
+                       SV **svp = AvARRAY(PL_comppad_name);
                        SV *sv = svp[curop->op_targ];
-                       if (SvCUR(sv) == generation)
+                       if (SvCUR(sv) == PL_generation)
                            break;
-                       SvCUR(sv) = generation; /* (SvCUR not used any more) */
+                       SvCUR(sv) = PL_generation;      /* (SvCUR not used any more) */
                    }
                    else if (curop->op_type == OP_RV2CV)
                        break;
@@ -2524,9 +2524,9 @@ newASSIGNOP(I32 flags, OP *left, I32 optype, OP *right)
                    else if (curop->op_type == OP_PUSHRE) {
                        if (((PMOP*)curop)->op_pmreplroot) {
                            GV *gv = (GV*)((PMOP*)curop)->op_pmreplroot;
-                           if (gv == defgv || SvCUR(gv) == generation)
+                           if (gv == PL_defgv || SvCUR(gv) == PL_generation)
                                break;
-                           SvCUR(gv) = generation;
+                           SvCUR(gv) = PL_generation;
                        }       
                    }
                    else
@@ -2562,12 +2562,12 @@ newASSIGNOP(I32 flags, OP *left, I32 optype, OP *right)
                    }
                }
                else {
-                   if (modcount < 10000 &&
+                   if (PL_modcount < 10000 &&
                      ((LISTOP*)right)->op_last->op_type == OP_CONST)
                    {
                        SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
                        if (SvIVX(sv) == 0)
-                           sv_setiv(sv, modcount+1);
+                           sv_setiv(sv, PL_modcount+1);
                    }
                }
            }
@@ -2581,11 +2581,11 @@ newASSIGNOP(I32 flags, OP *left, I32 optype, OP *right)
        return newBINOP(OP_NULL, flags, mod(scalar(left), OP_SASSIGN), scalar(right));
     }
     else {
-       eval_start = right;     /* Grandfathering $[ assignment here.  Bletch.*/
+       PL_eval_start = right;  /* Grandfathering $[ assignment here.  Bletch.*/
        o = newBINOP(OP_SASSIGN, flags,
            scalar(right), mod(scalar(left), OP_SASSIGN) );
-       if (eval_start)
-           eval_start = 0;
+       if (PL_eval_start)
+           PL_eval_start = 0;
        else {
            op_free(o);
            return Nullop;
@@ -2602,7 +2602,7 @@ newSTATEOP(I32 flags, char *label, OP *o)
     register COP *cop;
 
     Newz(1101, cop, 1, COP);
-    if (PERLDB_LINE && curcop->cop_line && curstash != debstash) {
+    if (PERLDB_LINE && PL_curcop->cop_line && PL_curstash != PL_debstash) {
        cop->op_type = OP_DBSTATE;
        cop->op_ppaddr = ppaddr[ OP_DBSTATE ];
     }
@@ -2619,23 +2619,23 @@ newSTATEOP(I32 flags, char *label, OP *o)
 
     if (label) {
        cop->cop_label = label;
-       hints |= HINT_BLOCK_SCOPE;
+       PL_hints |= HINT_BLOCK_SCOPE;
     }
     cop->cop_seq = seq;
-    cop->cop_arybase = curcop->cop_arybase;
+    cop->cop_arybase = PL_curcop->cop_arybase;
 
-    if (copline == NOLINE)
-        cop->cop_line = curcop->cop_line;
+    if (PL_copline == NOLINE)
+        cop->cop_line = PL_curcop->cop_line;
     else {
-        cop->cop_line = copline;
-        copline = NOLINE;
+        cop->cop_line = PL_copline;
+        PL_copline = NOLINE;
     }
-    cop->cop_filegv = (GV*)SvREFCNT_inc(curcop->cop_filegv);
-    cop->cop_stash = curstash;
+    cop->cop_filegv = (GV*)SvREFCNT_inc(PL_curcop->cop_filegv);
+    cop->cop_stash = PL_curstash;
 
-    if (PERLDB_LINE && curstash != debstash) {
-       SV **svp = av_fetch(GvAV(curcop->cop_filegv),(I32)cop->cop_line, FALSE);
-       if (svp && *svp != &sv_undef && !SvIOK(*svp)) {
+    if (PERLDB_LINE && PL_curstash != PL_debstash) {
+       SV **svp = av_fetch(GvAV(PL_curcop->cop_filegv),(I32)cop->cop_line, FALSE);
+       if (svp && *svp != &PL_sv_undef && !SvIOK(*svp)) {
            (void)SvIOK_on(*svp);
            SvIVX(*svp) = 1;
            SvSTASH(*svp) = (HV*)cop;
@@ -2653,19 +2653,19 @@ intro_my(void)
     SV *sv;
     I32 i;
 
-    if (! min_intro_pending)
-       return cop_seqmax;
+    if (! PL_min_intro_pending)
+       return PL_cop_seqmax;
 
-    svp = AvARRAY(comppad_name);
-    for (i = min_intro_pending; i <= max_intro_pending; i++) {
-       if ((sv = svp[i]) && sv != &sv_undef && !SvIVX(sv)) {
+    svp = AvARRAY(PL_comppad_name);
+    for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) {
+       if ((sv = svp[i]) && sv != &PL_sv_undef && !SvIVX(sv)) {
            SvIVX(sv) = 999999999;      /* Don't know scope end yet. */
-           SvNVX(sv) = (double)cop_seqmax;
+           SvNVX(sv) = (double)PL_cop_seqmax;
        }
     }
-    min_intro_pending = 0;
-    comppad_name_fill = max_intro_pending;     /* Needn't search higher */
-    return cop_seqmax++;
+    PL_min_intro_pending = 0;
+    PL_comppad_name_fill = PL_max_intro_pending;       /* Needn't search higher */
+    return PL_cop_seqmax++;
 }
 
 OP *
@@ -2703,7 +2703,7 @@ new_logop(I32 type, I32 flags, OP** firstp, OP** otherp)
        }
     }
     if (first->op_type == OP_CONST) {
-       if (dowarn && (first->op_private & OPpCONST_BARE))
+       if (PL_dowarn && (first->op_private & OPpCONST_BARE))
            warn("Probable precedence problem on %s", op_desc[type]);
        if ((type == OP_AND) == (SvTRUE(((SVOP*)first)->op_sv))) {
            op_free(first);
@@ -2722,7 +2722,7 @@ new_logop(I32 type, I32 flags, OP** firstp, OP** otherp)
        else
            scalar(other);
     }
-    else if (dowarn && (first->op_flags & OPf_KIDS)) {
+    else if (PL_dowarn && (first->op_flags & OPf_KIDS)) {
        OP *k1 = ((UNOP*)first)->op_first;
        OP *k2 = k1->op_sibling;
        OPCODE warnop = 0;
@@ -2743,13 +2743,13 @@ new_logop(I32 type, I32 flags, OP** firstp, OP** otherp)
            break;
        }
        if (warnop) {
-           line_t oldline = curcop->cop_line;
-           curcop->cop_line = copline;
+           line_t oldline = PL_curcop->cop_line;
+           PL_curcop->cop_line = PL_copline;
            warn("Value of %s%s can be \"0\"; test with defined()",
                 op_desc[warnop],
                 ((warnop == OP_READLINE || warnop == OP_GLOB)
                  ? " construct" : "() operator"));
-           curcop->cop_line = oldline;
+           PL_curcop->cop_line = oldline;
        }
     }
 
@@ -2974,7 +2974,7 @@ newWHILEOP(I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *b
     if (expr) {
        cont = append_elem(OP_LINESEQ, cont, newOP(OP_UNSTACK, 0));
        if ((line_t)whileline != NOLINE) {
-           copline = whileline;
+           PL_copline = whileline;
            cont = append_elem(OP_LINESEQ, cont,
                               newSTATEOP(0, Nullch, Nullop));
        }
@@ -2984,7 +2984,7 @@ newWHILEOP(I32 flags, I32 debuggable, LOOP *loop, I32 whileline, OP *expr, OP *b
     redo = LINKLIST(listop);
 
     if (expr) {
-       copline = whileline;
+       PL_copline = whileline;
        scalar(listop);
        o = new_logop(OP_AND, 0, &expr, &listop);
        if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) {
@@ -3056,7 +3056,7 @@ newFOROP(I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont
        padoff = find_threadsv("_");
        iterflags |= OPf_SPECIAL;
 #else
-       sv = newGVOP(OP_GV, 0, defgv);
+       sv = newGVOP(OP_GV, 0, PL_defgv);
 #endif
     }
     if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
@@ -3102,7 +3102,7 @@ newFOROP(I32 flags,char *label,line_t forline,OP *sv,OP *expr,OP *block,OP *cont
     Renew(loop, 1, LOOP);
     loop->op_targ = padoff;
     wop = newWHILEOP(flags, 1, loop, forline, newOP(OP_ITER, 0), block, cont);
-    copline = forline;
+    PL_copline = forline;
     return newSTATEOP(0, label, wop);
 }
 
@@ -3117,7 +3117,7 @@ newLOOPEX(I32 type, OP *label)
            o = newOP(type, OPf_SPECIAL);
        else {
            o = newPVOP(type, 0, savepv(label->op_type == OP_CONST
-                                       ? SvPVx(((SVOP*)label)->op_sv, na)
+                                       ? SvPVx(((SVOP*)label)->op_sv, PL_na)
                                        : ""));
        }
        op_free(label);
@@ -3127,7 +3127,7 @@ newLOOPEX(I32 type, OP *label)
            label = newUNOP(OP_REFGEN, 0, mod(label, OP_REFGEN));
        o = newUNOP(type, OPf_STACKED, label);
     }
-    hints |= HINT_BLOCK_SCOPE;
+    PL_hints |= HINT_BLOCK_SCOPE;
     return o;
 }
 
@@ -3153,8 +3153,8 @@ cv_undef(CV *cv)
 #endif /* USE_THREADS */
        ENTER;
 
-       SAVESPTR(curpad);
-       curpad = 0;
+       SAVESPTR(PL_curpad);
+       PL_curpad = 0;
 
        if (!CvCLONED(cv))
            op_free(CvROOT(cv));
@@ -3176,11 +3176,11 @@ cv_undef(CV *cv)
                SV* sv = svp ? *svp : Nullsv;
                if (!sv)
                    continue;
-               if (sv == (SV*)comppad_name)
-                   comppad_name = Nullav;
-               else if (sv == (SV*)comppad) {
-                   comppad = Nullav;
-                   curpad = Null(SV**);
+               if (sv == (SV*)PL_comppad_name)
+                   PL_comppad_name = Nullav;
+               else if (sv == (SV*)PL_comppad) {
+                   PL_comppad = Nullav;
+                   PL_curpad = Null(SV**);
                }
                SvREFCNT_dec(sv);
            }
@@ -3255,12 +3255,12 @@ cv_clone2(CV *proto, CV *outside)
     assert(!CvUNIQUE(proto));
 
     ENTER;
-    SAVESPTR(curpad);
-    SAVESPTR(comppad);
-    SAVESPTR(comppad_name);
-    SAVESPTR(compcv);
+    SAVESPTR(PL_curpad);
+    SAVESPTR(PL_comppad);
+    SAVESPTR(PL_comppad_name);
+    SAVESPTR(PL_compcv);
 
-    cv = compcv = (CV*)NEWSV(1104,0);
+    cv = PL_compcv = (CV*)NEWSV(1104,0);
     sv_upgrade((SV *)cv, SvTYPE(proto));
     CvCLONED_on(cv);
     if (CvANON(proto))
@@ -3282,34 +3282,34 @@ cv_clone2(CV *proto, CV *outside)
     if (SvPOK(proto))
        sv_setpvn((SV*)cv, SvPVX(proto), SvCUR(proto));
 
-    comppad_name = newAV();
+    PL_comppad_name = newAV();
     for (ix = fname; ix >= 0; ix--)
-       av_store(comppad_name, ix, SvREFCNT_inc(pname[ix]));
+       av_store(PL_comppad_name, ix, SvREFCNT_inc(pname[ix]));
 
-    comppad = newAV();
+    PL_comppad = newAV();
 
     comppadlist = newAV();
     AvREAL_off(comppadlist);
-    av_store(comppadlist, 0, (SV*)comppad_name);
-    av_store(comppadlist, 1, (SV*)comppad);
+    av_store(comppadlist, 0, (SV*)PL_comppad_name);
+    av_store(comppadlist, 1, (SV*)PL_comppad);
     CvPADLIST(cv) = comppadlist;
-    av_fill(comppad, AvFILLp(protopad));
-    curpad = AvARRAY(comppad);
+    av_fill(PL_comppad, AvFILLp(protopad));
+    PL_curpad = AvARRAY(PL_comppad);
 
     av = newAV();           /* will be @_ */
     av_extend(av, 0);
-    av_store(comppad, 0, (SV*)av);
+    av_store(PL_comppad, 0, (SV*)av);
     AvFLAGS(av) = AVf_REIFY;
 
     for (ix = fpad; ix > 0; ix--) {
        SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
-       if (namesv && namesv != &sv_undef) {
+       if (namesv && namesv != &PL_sv_undef) {
            char *name = SvPVX(namesv);    /* XXX */
            if (SvFLAGS(namesv) & SVf_FAKE) {   /* lexical from outside? */
                I32 off = pad_findlex(name, ix, SvIVX(namesv),
                                      CvOUTSIDE(cv), cxstack_ix);
                if (!off)
-                   curpad[ix] = SvREFCNT_inc(ppad[ix]);
+                   PL_curpad[ix] = SvREFCNT_inc(ppad[ix]);
                else if (off != ix)
                    croak("panic: cv_clone: %s", name);
            }
@@ -3327,13 +3327,13 @@ cv_clone2(CV *proto, CV *outside)
                    sv = NEWSV(0,0);
                if (!SvPADBUSY(sv))
                    SvPADMY_on(sv);
-               curpad[ix] = sv;
+               PL_curpad[ix] = sv;
            }
        }
        else {
            SV* sv = NEWSV(0,0);
            SvPADTMP_on(sv);
-           curpad[ix] = sv;
+           PL_curpad[ix] = sv;
        }
     }
 
@@ -3342,7 +3342,7 @@ cv_clone2(CV *proto, CV *outside)
     for (ix = fpad; ix > 0; ix--) {
        SV* namesv = (ix <= fname) ? pname[ix] : Nullsv;
        if (namesv
-           && namesv != &sv_undef
+           && namesv != &PL_sv_undef
            && !(SvFLAGS(namesv) & SVf_FAKE)
            && *SvPVX(namesv) == '&'
            && CvCLONE(ppad[ix]))
@@ -3351,7 +3351,7 @@ cv_clone2(CV *proto, CV *outside)
            SvREFCNT_dec(ppad[ix]);
            CvCLONE_on(kid);
            SvPADMY_on(kid);
-           curpad[ix] = (SV*)kid;
+           PL_curpad[ix] = (SV*)kid;
        }
     }
 
@@ -3447,10 +3447,10 @@ CV *
 newSUB(I32 floor, OP *o, OP *proto, OP *block)
 {
     dTHR;
-    char *name = o ? SvPVx(cSVOPo->op_sv, na) : Nullch;
+    char *name = o ? SvPVx(cSVOPo->op_sv, PL_na) : Nullch;
     GV *gv = gv_fetchpv(name ? name : "__ANON__",
                        GV_ADDMULTI | (block ? 0 : GV_NOINIT), SVt_PVCV);
-    char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, na) : Nullch;
+    char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, PL_na) : Nullch;
     register CV *cv=0;
     I32 ix;
 
@@ -3470,9 +3470,9 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
            sv_setpv((SV*)gv, ps);
        else
            sv_setiv((SV*)gv, -1);
-       SvREFCNT_dec(compcv);
-       cv = compcv = NULL;
-       sub_generation++;
+       SvREFCNT_dec(PL_compcv);
+       cv = PL_compcv = NULL;
+       PL_sub_generation++;
        goto noblock;
     }
 
@@ -3486,23 +3486,23 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
            bool const_changed = TRUE;
            if (!block) {
                /* just a "sub foo;" when &foo is already defined */
-               SAVEFREESV(compcv);
+               SAVEFREESV(PL_compcv);
                goto done;
            }
            /* ahem, death to those who redefine active sort subs */
-           if (curstackinfo->si_type == PERLSI_SORT && sortcop == CvSTART(cv))
+           if (PL_curstackinfo->si_type == PERLSI_SORT && PL_sortcop == CvSTART(cv))
                croak("Can't redefine active sort subroutine %s", name);
            if(const_sv = cv_const_sv(cv))
                const_changed = sv_cmp(const_sv, op_const_sv(block, Nullcv));
-           if ((const_sv && const_changed) || dowarn && !(CvGV(cv) && GvSTASH(CvGV(cv))
+           if ((const_sv && const_changed) || PL_dowarn && !(CvGV(cv) && GvSTASH(CvGV(cv))
                                        && HvNAME(GvSTASH(CvGV(cv)))
                                        && strEQ(HvNAME(GvSTASH(CvGV(cv))),
                                                 "autouse"))) {
-               line_t oldline = curcop->cop_line;
-               curcop->cop_line = copline;
+               line_t oldline = PL_curcop->cop_line;
+               PL_curcop->cop_line = PL_copline;
                warn(const_sv ? "Constant subroutine %s redefined"
                     : "Subroutine %s redefined", name);
-               curcop->cop_line = oldline;
+               PL_curcop->cop_line = oldline;
            }
            SvREFCNT_dec(cv);
            cv = Nullcv;
@@ -3510,26 +3510,26 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
     }
     if (cv) {                          /* must reuse cv if autoloaded */
        cv_undef(cv);
-       CvFLAGS(cv) = CvFLAGS(compcv);
-       CvOUTSIDE(cv) = CvOUTSIDE(compcv);
-       CvOUTSIDE(compcv) = 0;
-       CvPADLIST(cv) = CvPADLIST(compcv);
-       CvPADLIST(compcv) = 0;
-       if (SvREFCNT(compcv) > 1) /* XXX Make closures transit through stub. */
-           CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc((SV*)cv);
-       SvREFCNT_dec(compcv);
+       CvFLAGS(cv) = CvFLAGS(PL_compcv);
+       CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv);
+       CvOUTSIDE(PL_compcv) = 0;
+       CvPADLIST(cv) = CvPADLIST(PL_compcv);
+       CvPADLIST(PL_compcv) = 0;
+       if (SvREFCNT(PL_compcv) > 1) /* XXX Make closures transit through stub. */
+           CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc((SV*)cv);
+       SvREFCNT_dec(PL_compcv);
     }
     else {
-       cv = compcv;
+       cv = PL_compcv;
        if (name) {
            GvCV(gv) = cv;
            GvCVGEN(gv) = 0;
-           sub_generation++;
+           PL_sub_generation++;
        }
     }
     CvGV(cv) = (GV*)SvREFCNT_inc(gv);
-    CvFILEGV(cv) = curcop->cop_filegv;
-    CvSTASH(cv) = curstash;
+    CvFILEGV(cv) = PL_curcop->cop_filegv;
+    CvSTASH(cv) = PL_curstash;
 #ifdef USE_THREADS
     CvOWNER(cv) = 0;
     if (!CvMUTEXP(cv))
@@ -3540,7 +3540,7 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
     if (ps)
        sv_setpv((SV*)cv, ps);
 
-    if (error_count) {
+    if (PL_error_count) {
        op_free(block);
        block = Nullop;
        if (name) {
@@ -3549,32 +3549,32 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
            if (strEQ(s, "BEGIN")) {
                char *not_safe =
                    "BEGIN not safe after errors--compilation aborted";
-               if (in_eval & 4)
+               if (PL_in_eval & 4)
                    croak(not_safe);
                else {
                    /* force display of errors found but not reported */
                    sv_catpv(ERRSV, not_safe);
-                   croak("%s", SvPVx(ERRSV, na));
+                   croak("%s", SvPVx(ERRSV, PL_na));
                }
            }
        }
     }
     if (!block) {
       noblock:
-       copline = NOLINE;
+       PL_copline = NOLINE;
        LEAVE_SCOPE(floor);
        return cv;
     }
 
-    if (AvFILLp(comppad_name) < AvFILLp(comppad))
-       av_store(comppad_name, AvFILLp(comppad), Nullsv);
+    if (AvFILLp(PL_comppad_name) < AvFILLp(PL_comppad))
+       av_store(PL_comppad_name, AvFILLp(PL_comppad), Nullsv);
 
     if (CvCLONE(cv)) {
-       SV **namep = AvARRAY(comppad_name);
-       for (ix = AvFILLp(comppad); ix > 0; ix--) {
+       SV **namep = AvARRAY(PL_comppad_name);
+       for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
            SV *namesv;
 
-           if (SvIMMORTAL(curpad[ix]))
+           if (SvIMMORTAL(PL_curpad[ix]))
                continue;
            /*
             * The only things that a clonable function needs in its
@@ -3582,26 +3582,26 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
             * The rest are created anew during cloning.
             */
            if (!((namesv = namep[ix]) != Nullsv &&
-                 namesv != &sv_undef &&
+                 namesv != &PL_sv_undef &&
                  (SvFAKE(namesv) ||
                   *SvPVX(namesv) == '&')))
            {
-               SvREFCNT_dec(curpad[ix]);
-               curpad[ix] = Nullsv;
+               SvREFCNT_dec(PL_curpad[ix]);
+               PL_curpad[ix] = Nullsv;
            }
        }
     }
     else {
        AV *av = newAV();                       /* Will be @_ */
        av_extend(av, 0);
-       av_store(comppad, 0, (SV*)av);
+       av_store(PL_comppad, 0, (SV*)av);
        AvFLAGS(av) = AVf_REIFY;
 
-       for (ix = AvFILLp(comppad); ix > 0; ix--) {
-           if (SvIMMORTAL(curpad[ix]))
+       for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
+           if (SvIMMORTAL(PL_curpad[ix]))
                continue;
-           if (!SvPADMY(curpad[ix]))
-               SvPADTMP_on(curpad[ix]);
+           if (!SvPADMY(PL_curpad[ix]))
+               SvPADTMP_on(PL_curpad[ix]);
        }
     }
 
@@ -3613,7 +3613,7 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
     if (name) {
        char *s;
 
-       if (PERLDB_SUBLINE && curstash != debstash) {
+       if (PERLDB_SUBLINE && PL_curstash != PL_debstash) {
            SV *sv = NEWSV(0,0);
            SV *tmpstr = sv_newmortal();
            GV *db_postponed = gv_fetchpv("DB::postponed", GV_ADDMULTI, SVt_PVHV);
@@ -3621,10 +3621,10 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
            HV *hv;
 
            sv_setpvf(sv, "%_:%ld-%ld",
-                   GvSV(curcop->cop_filegv),
-                   (long)subline, (long)curcop->cop_line);
+                   GvSV(PL_curcop->cop_filegv),
+                   (long)PL_subline, (long)PL_curcop->cop_line);
            gv_efullname3(tmpstr, gv, Nullch);
-           hv_store(GvHV(DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
+           hv_store(GvHV(PL_DBsub), SvPVX(tmpstr), SvCUR(tmpstr), sv, 0);
            hv = GvHVn(db_postponed);
            if (HvFILL(hv) > 0 && hv_exists(hv, SvPVX(tmpstr), SvCUR(tmpstr))
                  && (cv = GvCV(db_postponed))) {
@@ -3641,39 +3641,39 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
        else
            s = name;
        if (strEQ(s, "BEGIN")) {
-           I32 oldscope = scopestack_ix;
+           I32 oldscope = PL_scopestack_ix;
            ENTER;
-           SAVESPTR(compiling.cop_filegv);
-           SAVEI16(compiling.cop_line);
-           save_svref(&rs);
-           sv_setsv(rs, nrs);
+           SAVESPTR(PL_compiling.cop_filegv);
+           SAVEI16(PL_compiling.cop_line);
+           save_svref(&PL_rs);
+           sv_setsv(PL_rs, PL_nrs);
 
-           if (!beginav)
-               beginav = newAV();
+           if (!PL_beginav)
+               PL_beginav = newAV();
            DEBUG_x( dump_sub(gv) );
-           av_push(beginav, (SV *)cv);
+           av_push(PL_beginav, (SV *)cv);
            GvCV(gv) = 0;
-           call_list(oldscope, beginav);
+           call_list(oldscope, PL_beginav);
 
-           curcop = &compiling;
+           PL_curcop = &PL_compiling;
            LEAVE;
        }
-       else if (strEQ(s, "END") && !error_count) {
-           if (!endav)
-               endav = newAV();
-           av_unshift(endav, 1);
-           av_store(endav, 0, (SV *)cv);
+       else if (strEQ(s, "END") && !PL_error_count) {
+           if (!PL_endav)
+               PL_endav = newAV();
+           av_unshift(PL_endav, 1);
+           av_store(PL_endav, 0, (SV *)cv);
            GvCV(gv) = 0;
        }
-       else if (strEQ(s, "INIT") && !error_count) {
-           if (!initav)
-               initav = newAV();
-           av_push(initav, SvREFCNT_inc(cv));
+       else if (strEQ(s, "INIT") && !PL_error_count) {
+           if (!PL_initav)
+               PL_initav = newAV();
+           av_push(PL_initav, SvREFCNT_inc(cv));
        }
     }
 
   done:
-    copline = NOLINE;
+    PL_copline = NOLINE;
     LEAVE_SCOPE(floor);
     return cv;
 }
@@ -3682,27 +3682,27 @@ void
 newCONSTSUB(HV *stash, char *name, SV *sv)
 {
     dTHR;
-    U32 oldhints = hints;
-    HV *old_cop_stash = curcop->cop_stash;
-    HV *old_curstash = curstash;
-    line_t oldline = curcop->cop_line;
-    curcop->cop_line = copline;
+    U32 oldhints = PL_hints;
+    HV *old_cop_stash = PL_curcop->cop_stash;
+    HV *old_curstash = PL_curstash;
+    line_t oldline = PL_curcop->cop_line;
+    PL_curcop->cop_line = PL_copline;
 
-    hints &= ~HINT_BLOCK_SCOPE;
+    PL_hints &= ~HINT_BLOCK_SCOPE;
     if(stash)
-       curstash = curcop->cop_stash = stash;
+       PL_curstash = PL_curcop->cop_stash = stash;
 
     newSUB(
        start_subparse(FALSE, 0),
        newSVOP(OP_CONST, 0, newSVpv(name,0)),
-       newSVOP(OP_CONST, 0, &sv_no),   /* SvPV(&sv_no) == "" -- GMB */
+       newSVOP(OP_CONST, 0, &PL_sv_no),        /* SvPV(&sv_no) == "" -- GMB */
        newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
     );
 
-    hints = oldhints;
-    curcop->cop_stash = old_cop_stash;
-    curstash = old_curstash;
-    curcop->cop_line = oldline;
+    PL_hints = oldhints;
+    PL_curcop->cop_stash = old_cop_stash;
+    PL_curstash = old_curstash;
+    PL_curcop->cop_line = oldline;
 }
 
 CV *
@@ -3720,13 +3720,13 @@ newXS(char *name, void (*subaddr) (CV * _CPERLproto), char *filename)
        }
        else if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
            /* already defined (or promised) */
-           if (dowarn && !(CvGV(cv) && GvSTASH(CvGV(cv))
+           if (PL_dowarn && !(CvGV(cv) && GvSTASH(CvGV(cv))
                            && HvNAME(GvSTASH(CvGV(cv)))
                            && strEQ(HvNAME(GvSTASH(CvGV(cv))), "autouse"))) {
-               line_t oldline = curcop->cop_line;
-               curcop->cop_line = copline;
+               line_t oldline = PL_curcop->cop_line;
+               PL_curcop->cop_line = PL_copline;
                warn("Subroutine %s redefined",name);
-               curcop->cop_line = oldline;
+               PL_curcop->cop_line = oldline;
            }
            SvREFCNT_dec(cv);
            cv = 0;
@@ -3741,7 +3741,7 @@ newXS(char *name, void (*subaddr) (CV * _CPERLproto), char *filename)
        if (name) {
            GvCV(gv) = cv;
            GvCVGEN(gv) = 0;
-           sub_generation++;
+           PL_sub_generation++;
        }
     }
     CvGV(cv) = (GV*)SvREFCNT_inc(gv);
@@ -3760,22 +3760,22 @@ newXS(char *name, void (*subaddr) (CV * _CPERLproto), char *filename)
        else
            s = name;
        if (strEQ(s, "BEGIN")) {
-           if (!beginav)
-               beginav = newAV();
-           av_push(beginav, (SV *)cv);
+           if (!PL_beginav)
+               PL_beginav = newAV();
+           av_push(PL_beginav, (SV *)cv);
            GvCV(gv) = 0;
        }
        else if (strEQ(s, "END")) {
-           if (!endav)
-               endav = newAV();
-           av_unshift(endav, 1);
-           av_store(endav, 0, (SV *)cv);
+           if (!PL_endav)
+               PL_endav = newAV();
+           av_unshift(PL_endav, 1);
+           av_store(PL_endav, 0, (SV *)cv);
            GvCV(gv) = 0;
        }
        else if (strEQ(s, "INIT")) {
-           if (!initav)
-               initav = newAV();
-           av_push(initav, (SV *)cv);
+           if (!PL_initav)
+               PL_initav = newAV();
+           av_push(PL_initav, (SV *)cv);
        }
     }
     else
@@ -3794,29 +3794,29 @@ newFORM(I32 floor, OP *o, OP *block)
     I32 ix;
 
     if (o)
-       name = SvPVx(cSVOPo->op_sv, na);
+       name = SvPVx(cSVOPo->op_sv, PL_na);
     else
        name = "STDOUT";
     gv = gv_fetchpv(name,TRUE, SVt_PVFM);
     GvMULTI_on(gv);
     if (cv = GvFORM(gv)) {
-       if (dowarn) {
-           line_t oldline = curcop->cop_line;
+       if (PL_dowarn) {
+           line_t oldline = PL_curcop->cop_line;
 
-           curcop->cop_line = copline;
+           PL_curcop->cop_line = PL_copline;
            warn("Format %s redefined",name);
-           curcop->cop_line = oldline;
+           PL_curcop->cop_line = oldline;
        }
        SvREFCNT_dec(cv);
     }
-    cv = compcv;
+    cv = PL_compcv;
     GvFORM(gv) = cv;
     CvGV(cv) = (GV*)SvREFCNT_inc(gv);
-    CvFILEGV(cv) = curcop->cop_filegv;
+    CvFILEGV(cv) = PL_curcop->cop_filegv;
 
-    for (ix = AvFILLp(comppad); ix > 0; ix--) {
-       if (!SvPADMY(curpad[ix]) && !SvIMMORTAL(curpad[ix]))
-           SvPADTMP_on(curpad[ix]);
+    for (ix = AvFILLp(PL_comppad); ix > 0; ix--) {
+       if (!SvPADMY(PL_curpad[ix]) && !SvIMMORTAL(PL_curpad[ix]))
+           SvPADTMP_on(PL_curpad[ix]);
     }
 
     CvROOT(cv) = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block));
@@ -3824,7 +3824,7 @@ newFORM(I32 floor, OP *o, OP *block)
     CvROOT(cv)->op_next = 0;
     peep(CvSTART(cv));
     op_free(o);
-    copline = NOLINE;
+    PL_copline = NOLINE;
     LEAVE_SCOPE(floor);
 }
 
@@ -3968,8 +3968,8 @@ ck_anoncode(OP *o)
     SvIVX(name) = -1;
     SvNVX(name) = 1;
     ix = pad_alloc(o->op_type, SVs_PADMY);
-    av_store(comppad_name, ix, name);
-    av_store(comppad, ix, cSVOPo->op_sv);
+    av_store(PL_comppad_name, ix, name);
+    av_store(PL_comppad, ix, cSVOPo->op_sv);
     SvPADMY_on(cSVOPo->op_sv);
     cSVOPo->op_sv = Nullsv;
     cSVOPo->op_targ = ix;
@@ -3979,7 +3979,7 @@ ck_anoncode(OP *o)
 OP *
 ck_bitop(OP *o)
 {
-    o->op_private = hints;
+    o->op_private = PL_hints;
     return o;
 }
 
@@ -4052,7 +4052,7 @@ ck_eof(OP *o)
 OP *
 ck_eval(OP *o)
 {
-    hints |= HINT_BLOCK_SCOPE;
+    PL_hints |= HINT_BLOCK_SCOPE;
     if (o->op_flags & OPf_KIDS) {
        SVOP *kid = (SVOP*)cUNOPo->op_first;
 
@@ -4088,7 +4088,7 @@ ck_eval(OP *o)
        op_free(o);
        o = newUNOP(OP_ENTEREVAL, 0, newDEFSVOP());
     }
-    o->op_targ = (PADOFFSET)hints;
+    o->op_targ = (PADOFFSET)PL_hints;
     return o;
 }
 
@@ -4135,14 +4135,14 @@ ck_rvconst(register OP *o)
     dTHR;
     SVOP *kid = (SVOP*)cUNOPo->op_first;
 
-    o->op_private |= (hints & HINT_STRICT_REFS);
+    o->op_private |= (PL_hints & HINT_STRICT_REFS);
     if (kid->op_type == OP_CONST) {
        char *name;
        int iscv;
        GV *gv;
 
-       name = SvPV(kid->op_sv, na);
-       if ((hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
+       name = SvPV(kid->op_sv, PL_na);
+       if ((PL_hints & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) {
            char *badthing = Nullch;
            switch (o->op_type) {
            case OP_RV2SV:
@@ -4205,7 +4205,7 @@ ck_ftst(OP *o)
 
        if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
            OP *newop = newGVOP(type, OPf_REF,
-               gv_fetchpv(SvPVx(kid->op_sv, na), TRUE, SVt_PVIO));
+               gv_fetchpv(SvPVx(kid->op_sv, PL_na), TRUE, SVt_PVIO));
            op_free(o);
            return newop;
        }
@@ -4269,10 +4269,10 @@ ck_fun(OP *o)
            case OA_AVREF:
                if (kid->op_type == OP_CONST &&
                  (kid->op_private & OPpCONST_BARE)) {
-                   char *name = SvPVx(((SVOP*)kid)->op_sv, na);
+                   char *name = SvPVx(((SVOP*)kid)->op_sv, PL_na);
                    OP *newop = newAVREF(newGVOP(OP_GV, 0,
                        gv_fetchpv(name, TRUE, SVt_PVAV) ));
-                   if (dowarn)
+                   if (PL_dowarn)
                        warn("Array @%s missing the @ in argument %ld of %s()",
                            name, (long)numargs, op_desc[type]);
                    op_free(kid);
@@ -4287,10 +4287,10 @@ ck_fun(OP *o)
            case OA_HVREF:
                if (kid->op_type == OP_CONST &&
                  (kid->op_private & OPpCONST_BARE)) {
-                   char *name = SvPVx(((SVOP*)kid)->op_sv, na);
+                   char *name = SvPVx(((SVOP*)kid)->op_sv, PL_na);
                    OP *newop = newHVREF(newGVOP(OP_GV, 0,
                        gv_fetchpv(name, TRUE, SVt_PVHV) ));
-                   if (dowarn)
+                   if (PL_dowarn)
                        warn("Hash %%%s missing the %% in argument %ld of %s()",
                            name, (long)numargs, op_desc[type]);
                    op_free(kid);
@@ -4318,7 +4318,7 @@ ck_fun(OP *o)
                    if (kid->op_type == OP_CONST &&
                      (kid->op_private & OPpCONST_BARE)) {
                        OP *newop = newGVOP(OP_GV, 0,
-                           gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, na), TRUE,
+                           gv_fetchpv(SvPVx(((SVOP*)kid)->op_sv, PL_na), TRUE,
                                        SVt_PVIO) );
                        op_free(kid);
                        kid = newop;
@@ -4420,7 +4420,7 @@ ck_grep(OP *o)
     else
        scalar(kid);
     o = ck_fun(o);
-    if (error_count)
+    if (PL_error_count)
        return o;
     kid = cLISTOPo->op_first->op_sibling;
     if (kid->op_type != OP_NULL)
@@ -4508,7 +4508,7 @@ ck_listiob(OP *o)
 
     o->op_private = 0;
 #ifdef USE_LOCALE
-    if (hints & HINT_LOCALE)
+    if (PL_hints & HINT_LOCALE)
        o->op_private |= OPpLOCALE;
 #endif
 
@@ -4522,7 +4522,7 @@ ck_fun_locale(OP *o)
 
     o->op_private = 0;
 #ifdef USE_LOCALE
-    if (hints & HINT_LOCALE)
+    if (PL_hints & HINT_LOCALE)
        o->op_private |= OPpLOCALE;
 #endif
 
@@ -4534,7 +4534,7 @@ ck_scmp(OP *o)
 {
     o->op_private = 0;
 #ifdef USE_LOCALE
-    if (hints & HINT_LOCALE)
+    if (PL_hints & HINT_LOCALE)
        o->op_private |= OPpLOCALE;
 #endif
 
@@ -4636,8 +4636,8 @@ ck_shift(OP *o)
        }
 #else
        argop = newUNOP(OP_RV2AV, 0,
-           scalar(newGVOP(OP_GV, 0, !CvUNIQUE(compcv) ?
-                          defgv : gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
+           scalar(newGVOP(OP_GV, 0, !CvUNIQUE(PL_compcv) ?
+                          PL_defgv : gv_fetchpv("ARGV", TRUE, SVt_PVAV))));
 #endif /* USE_THREADS */
        return newUNOP(type, 0, scalar(argop));
     }
@@ -4649,7 +4649,7 @@ ck_sort(OP *o)
 {
     o->op_private = 0;
 #ifdef USE_LOCALE
-    if (hints & HINT_LOCALE)
+    if (PL_hints & HINT_LOCALE)
        o->op_private |= OPpLOCALE;
 #endif
 
@@ -4768,12 +4768,12 @@ ck_subr(OP *o)
            cv = GvCVu(tmpop->op_sv);
            if (cv && SvPOK(cv) && !(o->op_private & OPpENTERSUB_AMPER)) {
                namegv = CvANON(cv) ? (GV*)tmpop->op_sv : CvGV(cv);
-               proto = SvPV((SV*)cv, na);
+               proto = SvPV((SV*)cv, PL_na);
            }
        }
     }
-    o->op_private |= (hints & HINT_STRICT_REFS);
-    if (PERLDB_SUB && curstash != debstash)
+    o->op_private |= (PL_hints & HINT_STRICT_REFS);
+    if (PERLDB_SUB && PL_curstash != PL_debstash)
        o->op_private |= OPpENTERSUB_DB;
     while (o2 != cvop) {
        if (proto) {
@@ -4856,7 +4856,7 @@ ck_subr(OP *o)
            default:
              oops:
                croak("Malformed prototype for %s: %s",
-                       gv_ename(namegv), SvPV((SV*)cv, na));
+                       gv_ename(namegv), SvPV((SV*)cv, PL_na));
            }
        }
        else
@@ -4904,18 +4904,18 @@ peep(register OP *o)
        return;
     ENTER;
     SAVEOP();
-    SAVESPTR(curcop);
+    SAVESPTR(PL_curcop);
     for (; o; o = o->op_next) {
        if (o->op_seq)
            break;
-       if (!op_seqmax)
-           op_seqmax++;
+       if (!PL_op_seqmax)
+           PL_op_seqmax++;
        op = o;
        switch (o->op_type) {
        case OP_NEXTSTATE:
        case OP_DBSTATE:
-           curcop = ((COP*)o);         /* for warnings */
-           o->op_seq = op_seqmax++;
+           PL_curcop = ((COP*)o);              /* for warnings */
+           o->op_seq = PL_op_seqmax++;
            break;
 
        case OP_CONCAT:
@@ -4928,17 +4928,17 @@ peep(register OP *o)
        case OP_QUOTEMETA:
            if (o->op_next && o->op_next->op_type == OP_STRINGIFY)
                null(o->op_next);
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            break;
        case OP_STUB:
            if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) {
-               o->op_seq = op_seqmax++;
+               o->op_seq = PL_op_seqmax++;
                break; /* Scalar stub must produce undef.  List stub is noop */
            }
            goto nothin;
        case OP_NULL:
            if (o->op_targ == OP_NEXTSTATE || o->op_targ == OP_DBSTATE)
-               curcop = ((COP*)o);
+               PL_curcop = ((COP*)o);
            goto nothin;
        case OP_SCALAR:
        case OP_LINESEQ:
@@ -4948,7 +4948,7 @@ peep(register OP *o)
                oldop->op_next = o->op_next;
                continue;
            }
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            break;
 
        case OP_GV:
@@ -4969,7 +4969,7 @@ peep(register OP *o)
                    pop->op_next->op_type == OP_AELEM &&
                    !(pop->op_next->op_private &
                      (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF)) &&
-                   (i = SvIV(((SVOP*)pop)->op_sv) - compiling.cop_arybase)
+                   (i = SvIV(((SVOP*)pop)->op_sv) - PL_compiling.cop_arybase)
                                <= 255 &&
                    i >= 0)
                {
@@ -4985,7 +4985,7 @@ peep(register OP *o)
                    GvAVn(((GVOP*)o)->op_gv);
                }
            }
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            break;
 
        case OP_PADAV:
@@ -5010,20 +5010,20 @@ peep(register OP *o)
        case OP_GREPWHILE:
        case OP_AND:
        case OP_OR:
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            while (cLOGOP->op_other->op_type == OP_NULL)
                cLOGOP->op_other = cLOGOP->op_other->op_next;
            peep(cLOGOP->op_other);
            break;
 
        case OP_COND_EXPR:
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            peep(cCONDOP->op_true);
            peep(cCONDOP->op_false);
            break;
 
        case OP_ENTERLOOP:
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            peep(cLOOP->op_redoop);
            peep(cLOOP->op_nextop);
            peep(cLOOP->op_lastop);
@@ -5032,23 +5032,23 @@ peep(register OP *o)
        case OP_QR:
        case OP_MATCH:
        case OP_SUBST:
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            peep(cPMOP->op_pmreplstart);
            break;
 
        case OP_EXEC:
-           o->op_seq = op_seqmax++;
-           if (dowarn && o->op_next && o->op_next->op_type == OP_NEXTSTATE) {
+           o->op_seq = PL_op_seqmax++;
+           if (PL_dowarn && o->op_next && o->op_next->op_type == OP_NEXTSTATE) {
                if (o->op_next->op_sibling &&
                        o->op_next->op_sibling->op_type != OP_EXIT &&
                        o->op_next->op_sibling->op_type != OP_WARN &&
                        o->op_next->op_sibling->op_type != OP_DIE) {
-                   line_t oldline = curcop->cop_line;
+                   line_t oldline = PL_curcop->cop_line;
 
-                   curcop->cop_line = ((COP*)o->op_next)->cop_line;
+                   PL_curcop->cop_line = ((COP*)o->op_next)->cop_line;
                    warn("Statement unlikely to be reached");
                    warn("(Maybe you meant system() when you said exec()?)\n");
-                   curcop->cop_line = oldline;
+                   PL_curcop->cop_line = oldline;
                }
            }
            break;
@@ -5068,7 +5068,7 @@ peep(register OP *o)
            rop = (UNOP*)((BINOP*)o)->op_first;
            if (rop->op_type != OP_RV2HV || rop->op_first->op_type != OP_PADSV)
                break;
-           lexname = *av_fetch(comppad_name, rop->op_first->op_targ, TRUE);
+           lexname = *av_fetch(PL_comppad_name, rop->op_first->op_targ, TRUE);
            if (!SvOBJECT(lexname))
                break;
            fields = (GV**)hv_fetch(SvSTASH(lexname), "FIELDS", 6, FALSE);
@@ -5079,7 +5079,7 @@ peep(register OP *o)
            indsvp = hv_fetch(GvHV(*fields), key, keylen, FALSE);
            if (!indsvp) {
                croak("No such field \"%s\" in variable %s of type %s",
-                     key, SvPV(lexname, na), HvNAME(SvSTASH(lexname)));
+                     key, SvPV(lexname, PL_na), HvNAME(SvSTASH(lexname)));
            }
            ind = SvIV(*indsvp);
            if (ind < 1)
@@ -5094,7 +5094,7 @@ peep(register OP *o)
        }
 
        default:
-           o->op_seq = op_seqmax++;
+           o->op_seq = PL_op_seqmax++;
            break;
        }
        oldop = o;
diff --git a/perl.c b/perl.c
index fe1df90..b3f76eb 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -86,7 +86,7 @@ perl_alloc(void)
 {
     PerlInterpreter *sv_interp;
 
-    curinterp = 0;
+    PL_curinterp = 0;
     New(53, sv_interp, 1, PerlInterpreter);
     return sv_interp;
 }
@@ -107,7 +107,7 @@ perl_construct(register PerlInterpreter *sv_interp)
 #endif /* USE_THREADS */
     
 #ifndef PERL_OBJECT
-    if (!(curinterp = sv_interp))
+    if (!(PL_curinterp = sv_interp))
        return;
 #endif
 
@@ -117,7 +117,7 @@ perl_construct(register PerlInterpreter *sv_interp)
 #endif
 
    /* Init the real globals (and main thread)? */
-    if (!linestr) {
+    if (!PL_linestr) {
 #ifdef USE_THREADS
 
        INIT_THREADS;
@@ -143,34 +143,34 @@ perl_construct(register PerlInterpreter *sv_interp)
        thr = init_main_thread();
 #endif /* USE_THREADS */
 
-       linestr = NEWSV(65,79);
-       sv_upgrade(linestr,SVt_PVIV);
+       PL_linestr = NEWSV(65,79);
+       sv_upgrade(PL_linestr,SVt_PVIV);
 
-       if (!SvREADONLY(&sv_undef)) {
+       if (!SvREADONLY(&PL_sv_undef)) {
            /* set read-only and try to insure than we wont see REFCNT==0
               very often */
 
-           SvREADONLY_on(&sv_undef);
-           SvREFCNT(&sv_undef) = (~(U32)0)/2;
+           SvREADONLY_on(&PL_sv_undef);
+           SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
 
-           sv_setpv(&sv_no,No);
-           SvNV(&sv_no);
-           SvREADONLY_on(&sv_no);
-           SvREFCNT(&sv_no) = (~(U32)0)/2;
+           sv_setpv(&PL_sv_no,PL_No);
+           SvNV(&PL_sv_no);
+           SvREADONLY_on(&PL_sv_no);
+           SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
 
-           sv_setpv(&sv_yes,Yes);
-           SvNV(&sv_yes);
-           SvREADONLY_on(&sv_yes);
-           SvREFCNT(&sv_yes) = (~(U32)0)/2;
+           sv_setpv(&PL_sv_yes,PL_Yes);
+           SvNV(&PL_sv_yes);
+           SvREADONLY_on(&PL_sv_yes);
+           SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
        }
 
 #ifdef PERL_OBJECT
        /* TODO: */
        /* sighandlerp = sighandler; */
 #else
-       sighandlerp = sighandler;
+       PL_sighandlerp = sighandler;
 #endif
-       pidstatus = newHV();
+       PL_pidstatus = newHV();
 
 #ifdef MSDOS
        /*
@@ -183,30 +183,30 @@ perl_construct(register PerlInterpreter *sv_interp)
 #endif
     }
 
-    nrs = newSVpv("\n", 1);
-    rs = SvREFCNT_inc(nrs);
+    PL_nrs = newSVpv("\n", 1);
+    PL_rs = SvREFCNT_inc(PL_nrs);
 
     init_stacks(ARGS);
 #ifdef MULTIPLICITY
     init_interp();
     perl_destruct_level = 1; 
 #else
-   if (perl_destruct_level > 0)
+   if (PL_perl_destruct_level > 0)
        init_interp();
 #endif
 
     init_ids();
-    lex_state = LEX_NOTPARSING;
+    PL_lex_state = LEX_NOTPARSING;
 
-    start_env.je_prev = NULL;
-    start_env.je_ret = -1;
-    start_env.je_mustcatch = TRUE;
-    top_env     = &start_env;
+    PL_start_env.je_prev = NULL;
+    PL_start_env.je_ret = -1;
+    PL_start_env.je_mustcatch = TRUE;
+    PL_top_env     = &PL_start_env;
     STATUS_ALL_SUCCESS;
 
     SET_NUMERIC_STANDARD();
 #if defined(SUBVERSION) && SUBVERSION > 0
-    sprintf(patchlevel, "%7.5f",   (double) 5 
+    sprintf(PL_patchlevel, "%7.5f",   (double) 5 
                                + ((double) PATCHLEVEL / (double) 1000)
                                + ((double) SUBVERSION / (double) 100000));
 #else
@@ -215,17 +215,17 @@ perl_construct(register PerlInterpreter *sv_interp)
 #endif
 
 #if defined(LOCAL_PATCH_COUNT)
-    localpatches = local_patches;      /* For possible -v */
+    PL_localpatches = local_patches;   /* For possible -v */
 #endif
 
     PerlIO_init();                     /* Hook to IO system */
 
-    fdpid = newAV();                   /* for remembering popen pids by fd */
-    modglobal = newHV();               /* pointers to per-interpreter module globals */
+    PL_fdpid = newAV();                        /* for remembering popen pids by fd */
+    PL_modglobal = newHV();            /* pointers to per-interpreter module globals */
 
     DEBUG( {
-       New(51,debname,128,char);
-       New(52,debdelim,128,char);
+       New(51,PL_debname,128,char);
+       New(52,PL_debdelim,128,char);
     } )
 
     ENTER;
@@ -247,7 +247,7 @@ perl_destruct(register PerlInterpreter *sv_interp)
 #endif /* USE_THREADS */
 
 #ifndef PERL_OBJECT
-    if (!(curinterp = sv_interp))
+    if (!(PL_curinterp = sv_interp))
        return;
 #endif
 
@@ -321,7 +321,7 @@ perl_destruct(register PerlInterpreter *sv_interp)
 #endif /* !defined(FAKE_THREADS) */
 #endif /* USE_THREADS */
 
-    destruct_level = perl_destruct_level;
+    destruct_level = PL_perl_destruct_level;
 #ifdef DEBUGGING
     {
        char *s;
@@ -343,40 +343,40 @@ perl_destruct(register PerlInterpreter *sv_interp)
     /* We must account for everything.  */
 
     /* Destroy the main CV and syntax tree */
-    if (main_root) {
-       curpad = AvARRAY(comppad);
-       op_free(main_root);
-       main_root = Nullop;
+    if (PL_main_root) {
+       PL_curpad = AvARRAY(PL_comppad);
+       op_free(PL_main_root);
+       PL_main_root = Nullop;
     }
-    curcop = &compiling;
-    main_start = Nullop;
-    SvREFCNT_dec(main_cv);
-    main_cv = Nullcv;
+    PL_curcop = &PL_compiling;
+    PL_main_start = Nullop;
+    SvREFCNT_dec(PL_main_cv);
+    PL_main_cv = Nullcv;
 
-    if (sv_objcount) {
+    if (PL_sv_objcount) {
        /*
         * Try to destruct global references.  We do this first so that the
         * destructors and destructees still exist.  Some sv's might remain.
         * Non-referenced objects are on their own.
         */
     
-       dirty = TRUE;
+       PL_dirty = TRUE;
        sv_clean_objs();
     }
 
     /* unhook hooks which will soon be, or use, destroyed data */
-    SvREFCNT_dec(warnhook);
-    warnhook = Nullsv;
-    SvREFCNT_dec(diehook);
-    diehook = Nullsv;
-    SvREFCNT_dec(parsehook);
-    parsehook = Nullsv;
+    SvREFCNT_dec(PL_warnhook);
+    PL_warnhook = Nullsv;
+    SvREFCNT_dec(PL_diehook);
+    PL_diehook = Nullsv;
+    SvREFCNT_dec(PL_parsehook);
+    PL_parsehook = Nullsv;
 
     /* call exit list functions */
-    while (exitlistlen-- > 0)
-       exitlist[exitlistlen].fn(PERL_OBJECT_THIS_ exitlist[exitlistlen].ptr);
+    while (PL_exitlistlen-- > 0)
+       PL_exitlist[PL_exitlistlen].fn(PERL_OBJECT_THIS_ PL_exitlist[PL_exitlistlen].ptr);
 
-    Safefree(exitlist);
+    Safefree(PL_exitlist);
 
     if (destruct_level == 0){
 
@@ -388,108 +388,108 @@ perl_destruct(register PerlInterpreter *sv_interp)
 
     /* loosen bonds of global variables */
 
-    if(rsfp) {
-       (void)PerlIO_close(rsfp);
-       rsfp = Nullfp;
+    if(PL_rsfp) {
+       (void)PerlIO_close(PL_rsfp);
+       PL_rsfp = Nullfp;
     }
 
     /* Filters for program text */
-    SvREFCNT_dec(rsfp_filters);
-    rsfp_filters = Nullav;
+    SvREFCNT_dec(PL_rsfp_filters);
+    PL_rsfp_filters = Nullav;
 
     /* switches */
-    preprocess   = FALSE;
-    minus_n      = FALSE;
-    minus_p      = FALSE;
-    minus_l      = FALSE;
-    minus_a      = FALSE;
-    minus_F      = FALSE;
-    doswitches   = FALSE;
-    dowarn       = FALSE;
-    doextract    = FALSE;
-    sawampersand = FALSE;      /* must save all match strings */
-    sawstudy     = FALSE;      /* do fbm_instr on all strings */
-    sawvec       = FALSE;
-    unsafe       = FALSE;
-
-    Safefree(inplace);
-    inplace = Nullch;
-
-    if (e_script) {
-       SvREFCNT_dec(e_script);
-       e_script = Nullsv;
+    PL_preprocess   = FALSE;
+    PL_minus_n      = FALSE;
+    PL_minus_p      = FALSE;
+    PL_minus_l      = FALSE;
+    PL_minus_a      = FALSE;
+    PL_minus_F      = FALSE;
+    PL_doswitches   = FALSE;
+    PL_dowarn       = FALSE;
+    PL_doextract    = FALSE;
+    PL_sawampersand = FALSE;   /* must save all match strings */
+    PL_sawstudy     = FALSE;   /* do fbm_instr on all strings */
+    PL_sawvec       = FALSE;
+    PL_unsafe       = FALSE;
+
+    Safefree(PL_inplace);
+    PL_inplace = Nullch;
+
+    if (PL_e_script) {
+       SvREFCNT_dec(PL_e_script);
+       PL_e_script = Nullsv;
     }
 
     /* magical thingies */
 
-    Safefree(ofs);     /* $, */
-    ofs = Nullch;
+    Safefree(PL_ofs);  /* $, */
+    PL_ofs = Nullch;
 
-    Safefree(ors);     /* $\ */
-    ors = Nullch;
+    Safefree(PL_ors);  /* $\ */
+    PL_ors = Nullch;
 
-    SvREFCNT_dec(rs);  /* $/ */
-    rs = Nullsv;
+    SvREFCNT_dec(PL_rs);       /* $/ */
+    PL_rs = Nullsv;
 
-    SvREFCNT_dec(nrs); /* $/ helper */
-    nrs = Nullsv;
+    SvREFCNT_dec(PL_nrs);      /* $/ helper */
+    PL_nrs = Nullsv;
 
-    multiline = 0;     /* $* */
+    PL_multiline = 0;  /* $* */
 
-    SvREFCNT_dec(statname);
-    statname = Nullsv;
-    statgv = Nullgv;
+    SvREFCNT_dec(PL_statname);
+    PL_statname = Nullsv;
+    PL_statgv = Nullgv;
 
     /* defgv, aka *_ should be taken care of elsewhere */
 
     /* clean up after study() */
-    SvREFCNT_dec(lastscream);
-    lastscream = Nullsv;
-    Safefree(screamfirst);
-    screamfirst = 0;
-    Safefree(screamnext);
-    screamnext  = 0;
+    SvREFCNT_dec(PL_lastscream);
+    PL_lastscream = Nullsv;
+    Safefree(PL_screamfirst);
+    PL_screamfirst = 0;
+    Safefree(PL_screamnext);
+    PL_screamnext  = 0;
 
     /* startup and shutdown function lists */
-    SvREFCNT_dec(beginav);
-    SvREFCNT_dec(endav);
-    SvREFCNT_dec(initav);
-    beginav = Nullav;
-    endav = Nullav;
-    initav = Nullav;
+    SvREFCNT_dec(PL_beginav);
+    SvREFCNT_dec(PL_endav);
+    SvREFCNT_dec(PL_initav);
+    PL_beginav = Nullav;
+    PL_endav = Nullav;
+    PL_initav = Nullav;
 
     /* shortcuts just get cleared */
-    envgv = Nullgv;
-    siggv = Nullgv;
-    incgv = Nullgv;
-    hintgv = Nullgv;
-    errgv = Nullgv;
-    argvgv = Nullgv;
-    argvoutgv = Nullgv;
-    stdingv = Nullgv;
-    last_in_gv = Nullgv;
-    replgv = Nullgv;
+    PL_envgv = Nullgv;
+    PL_siggv = Nullgv;
+    PL_incgv = Nullgv;
+    PL_hintgv = Nullgv;
+    PL_errgv = Nullgv;
+    PL_argvgv = Nullgv;
+    PL_argvoutgv = Nullgv;
+    PL_stdingv = Nullgv;
+    PL_last_in_gv = Nullgv;
+    PL_replgv = Nullgv;
 
     /* reset so print() ends up where we expect */
     setdefout(Nullgv);
 
     /* Prepare to destruct main symbol table.  */
 
-    hv = defstash;
-    defstash = 0;
+    hv = PL_defstash;
+    PL_defstash = 0;
     SvREFCNT_dec(hv);
 
     FREETMPS;
     if (destruct_level >= 2) {
-       if (scopestack_ix != 0)
+       if (PL_scopestack_ix != 0)
            warn("Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
-                (long)scopestack_ix);
-       if (savestack_ix != 0)
+                (long)PL_scopestack_ix);
+       if (PL_savestack_ix != 0)
            warn("Unbalanced saves: %ld more saves than restores\n",
-                (long)savestack_ix);
-       if (tmps_floor != -1)
+                (long)PL_savestack_ix);
+       if (PL_tmps_floor != -1)
            warn("Unbalanced tmps: %ld more allocs than frees\n",
-                (long)tmps_floor + 1);
+                (long)PL_tmps_floor + 1);
        if (cxstack_ix != -1)
            warn("Unbalanced context: %ld more PUSHes than POPs\n",
                 (long)cxstack_ix + 1);
@@ -497,13 +497,13 @@ perl_destruct(register PerlInterpreter *sv_interp)
 
     /* Now absolutely destruct everything, somehow or other, loops or no. */
     last_sv_count = 0;
-    SvFLAGS(strtab) |= SVTYPEMASK;             /* don't clean out strtab now */
-    while (sv_count != 0 && sv_count != last_sv_count) {
-       last_sv_count = sv_count;
+    SvFLAGS(PL_strtab) |= SVTYPEMASK;          /* don't clean out strtab now */
+    while (PL_sv_count != 0 && PL_sv_count != last_sv_count) {
+       last_sv_count = PL_sv_count;
        sv_clean_all();
     }
-    SvFLAGS(strtab) &= ~SVTYPEMASK;
-    SvFLAGS(strtab) |= SVt_PVHV;
+    SvFLAGS(PL_strtab) &= ~SVTYPEMASK;
+    SvFLAGS(PL_strtab) |= SVt_PVHV;
     
     /* Destruct the global string table. */
     {
@@ -516,8 +516,8 @@ perl_destruct(register PerlInterpreter *sv_interp)
        HE **array;
 
        riter = 0;
-       max = HvMAX(strtab);
-       array = HvARRAY(strtab);
+       max = HvMAX(PL_strtab);
+       array = HvARRAY(PL_strtab);
        hent = array[0];
        for (;;) {
            if (hent) {
@@ -533,23 +533,23 @@ perl_destruct(register PerlInterpreter *sv_interp)
            }
        }
     }
-    SvREFCNT_dec(strtab);
+    SvREFCNT_dec(PL_strtab);
 
-    if (sv_count != 0)
-       warn("Scalars leaked: %ld\n", (long)sv_count);
+    if (PL_sv_count != 0)
+       warn("Scalars leaked: %ld\n", (long)PL_sv_count);
 
     sv_free_arenas();
 
     /* No SVs have survived, need to clean out */
-    linestr = NULL;
-    pidstatus = Nullhv;
-    Safefree(origfilename);
-    Safefree(archpat_auto);
-    Safefree(reg_start_tmp);
-    Safefree(HeKEY_hek(&hv_fetch_ent_mh));
-    Safefree(op_mask);
+    PL_linestr = NULL;
+    PL_pidstatus = Nullhv;
+    Safefree(PL_origfilename);
+    Safefree(PL_archpat_auto);
+    Safefree(PL_reg_start_tmp);
+    Safefree(HeKEY_hek(&PL_hv_fetch_ent_mh));
+    Safefree(PL_op_mask);
     nuke_stacks();
-    hints = 0;         /* Reset hints. Should hints be per-interpreter ? */
+    PL_hints = 0;              /* Reset hints. Should hints be per-interpreter ? */
     
     DEBUG_P(debprofdump());
 #ifdef USE_THREADS
@@ -566,13 +566,13 @@ perl_destruct(register PerlInterpreter *sv_interp)
     
     /* As the absolutely last thing, free the non-arena SV for mess() */
 
-    if (mess_sv) {
+    if (PL_mess_sv) {
        /* we know that type >= SVt_PV */
-       SvOOK_off(mess_sv);
-       Safefree(SvPVX(mess_sv));
-       Safefree(SvANY(mess_sv));
-       Safefree(mess_sv);
-       mess_sv = Nullsv;
+       SvOOK_off(PL_mess_sv);
+       Safefree(SvPVX(PL_mess_sv));
+       Safefree(SvANY(PL_mess_sv));
+       Safefree(PL_mess_sv);
+       PL_mess_sv = Nullsv;
     }
 }
 
@@ -586,7 +586,7 @@ perl_free(PerlInterpreter *sv_interp)
 #ifdef PERL_OBJECT
        Safefree(this);
 #else
-    if (!(curinterp = sv_interp))
+    if (!(PL_curinterp = sv_interp))
        return;
     Safefree(sv_interp);
 #endif
@@ -599,10 +599,10 @@ CPerlObj::perl_atexit(void (*fn) (CPerlObj*,void *), void *ptr)
 perl_atexit(void (*fn) (void *), void *ptr)
 #endif
 {
-    Renew(exitlist, exitlistlen+1, PerlExitListEntry);
-    exitlist[exitlistlen].fn = fn;
-    exitlist[exitlistlen].ptr = ptr;
-    ++exitlistlen;
+    Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
+    PL_exitlist[PL_exitlistlen].fn = fn;
+    PL_exitlist[PL_exitlistlen].ptr = ptr;
+    ++PL_exitlistlen;
 }
 
 int
@@ -633,7 +633,7 @@ setuid perl scripts securely.\n");
 #endif
 
 #ifndef PERL_OBJECT
-    if (!(curinterp = sv_interp))
+    if (!(PL_curinterp = sv_interp))
        return 255;
 #endif
 
@@ -642,35 +642,35 @@ setuid perl scripts securely.\n");
        ("__environ", (unsigned long *) &environ_pointer, NULL);
 #endif /* environ */
 
-    origargv = argv;
-    origargc = argc;
+    PL_origargv = argv;
+    PL_origargc = argc;
 #ifndef VMS  /* VMS doesn't have environ array */
-    origenviron = environ;
+    PL_origenviron = environ;
 #endif
 
-    if (do_undump) {
+    if (PL_do_undump) {
 
        /* Come here if running an undumped a.out. */
 
-       origfilename = savepv(argv[0]);
-       do_undump = FALSE;
+       PL_origfilename = savepv(argv[0]);
+       PL_do_undump = FALSE;
        cxstack_ix = -1;                /* start label stack again */
        init_ids();
        init_postdump_symbols(argc,argv,env);
        return 0;
     }
 
-    if (main_root) {
-       curpad = AvARRAY(comppad);
-       op_free(main_root);
-       main_root = Nullop;
+    if (PL_main_root) {
+       PL_curpad = AvARRAY(PL_comppad);
+       op_free(PL_main_root);
+       PL_main_root = Nullop;
     }
-    main_start = Nullop;
-    SvREFCNT_dec(main_cv);
-    main_cv = Nullcv;
+    PL_main_start = Nullop;
+    SvREFCNT_dec(PL_main_cv);
+    PL_main_cv = Nullcv;
 
-    time(&basetime);
-    oldscope = scopestack_ix;
+    time(&PL_basetime);
+    oldscope = PL_scopestack_ix;
 
     JMPENV_PUSH(ret);
     switch (ret) {
@@ -679,12 +679,12 @@ setuid perl scripts securely.\n");
        /* FALL THROUGH */
     case 2:
        /* my_exit() was called */
-       while (scopestack_ix > oldscope)
+       while (PL_scopestack_ix > oldscope)
            LEAVE;
        FREETMPS;
-       curstash = defstash;
-       if (endav)
-           call_list(oldscope, endav);
+       PL_curstash = PL_defstash;
+       if (PL_endav)
+           call_list(oldscope, PL_endav);
        JMPENV_POP;
        return STATUS_NATIVE_EXPORT;
     case 3:
@@ -693,7 +693,7 @@ setuid perl scripts securely.\n");
        return 1;
     }
 
-    sv_setpvn(linestr,"",0);
+    sv_setpvn(PL_linestr,"",0);
     sv = newSVpv("",0);                /* first used for -I flags */
     SAVEFREESV(sv);
     init_main_stash();
@@ -734,26 +734,26 @@ setuid perl scripts securely.\n");
            break;
 
        case 'T':
-           tainting = TRUE;
+           PL_tainting = TRUE;
            s++;
            goto reswitch;
 
        case 'e':
-           if (euid != uid || egid != gid)
+           if (PL_euid != PL_uid || PL_egid != PL_gid)
                croak("No -e allowed in setuid scripts");
-           if (!e_script) {
-               e_script = newSVpv("",0);
+           if (!PL_e_script) {
+               PL_e_script = newSVpv("",0);
                filter_add(read_e_script, NULL);
            }
            if (*++s)
-               sv_catpv(e_script, s);
+               sv_catpv(PL_e_script, s);
            else if (argv[1]) {
-               sv_catpv(e_script, argv[1]);
+               sv_catpv(PL_e_script, argv[1]);
                argc--,argv++;
            }
            else
                croak("No code specified for -e");
-           sv_catpv(e_script, "\n");
+           sv_catpv(PL_e_script, "\n");
            break;
 
        case 'I':       /* -I handled both here and in moreswitches() */
@@ -776,7 +776,7 @@ setuid perl scripts securely.\n");
            break;
        case 'P':
            forbid_setid("-P");
-           preprocess = TRUE;
+           PL_preprocess = TRUE;
            s++;
            goto reswitch;
        case 'S':
@@ -785,20 +785,20 @@ setuid perl scripts securely.\n");
            s++;
            goto reswitch;
        case 'V':
-           if (!preambleav)
-               preambleav = newAV();
-           av_push(preambleav, newSVpv("use Config qw(myconfig config_vars)",0));
+           if (!PL_preambleav)
+               PL_preambleav = newAV();
+           av_push(PL_preambleav, newSVpv("use Config qw(myconfig config_vars)",0));
            if (*++s != ':')  {
-               Sv = newSVpv("print myconfig();",0);
+               PL_Sv = newSVpv("print myconfig();",0);
 #ifdef VMS
                sv_catpv(Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
 #else
-               sv_catpv(Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
+               sv_catpv(PL_Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
 #endif
 #if defined(DEBUGGING) || defined(NO_EMBED) || defined(MULTIPLICITY)
-               sv_catpv(Sv,"\"  Compile-time options:");
+               sv_catpv(PL_Sv,"\"  Compile-time options:");
 #  ifdef DEBUGGING
-               sv_catpv(Sv," DEBUGGING");
+               sv_catpv(PL_Sv," DEBUGGING");
 #  endif
 #  ifdef NO_EMBED
                sv_catpv(Sv," NO_EMBED");
@@ -806,46 +806,46 @@ setuid perl scripts securely.\n");
 #  ifdef MULTIPLICITY
                sv_catpv(Sv," MULTIPLICITY");
 #  endif
-               sv_catpv(Sv,"\\n\",");
+               sv_catpv(PL_Sv,"\\n\",");
 #endif
 #if defined(LOCAL_PATCH_COUNT)
                if (LOCAL_PATCH_COUNT > 0) {
                    int i;
-                   sv_catpv(Sv,"\"  Locally applied patches:\\n\",");
+                   sv_catpv(PL_Sv,"\"  Locally applied patches:\\n\",");
                    for (i = 1; i <= LOCAL_PATCH_COUNT; i++) {
-                       if (localpatches[i])
-                           sv_catpvf(Sv,"\"  \\t%s\\n\",",localpatches[i]);
+                       if (PL_localpatches[i])
+                           sv_catpvf(PL_Sv,"\"  \\t%s\\n\",",PL_localpatches[i]);
                    }
                }
 #endif
-               sv_catpvf(Sv,"\"  Built under %s\\n\"",OSNAME);
+               sv_catpvf(PL_Sv,"\"  Built under %s\\n\"",OSNAME);
 #ifdef __DATE__
 #  ifdef __TIME__
-               sv_catpvf(Sv,",\"  Compiled at %s %s\\n\"",__DATE__,__TIME__);
+               sv_catpvf(PL_Sv,",\"  Compiled at %s %s\\n\"",__DATE__,__TIME__);
 #  else
                sv_catpvf(Sv,",\"  Compiled on %s\\n\"",__DATE__);
 #  endif
 #endif
-               sv_catpv(Sv, "; \
+               sv_catpv(PL_Sv, "; \
 $\"=\"\\n    \"; \
 @env = map { \"$_=\\\"$ENV{$_}\\\"\" } sort grep {/^PERL/} keys %ENV; \
 print \"  \\%ENV:\\n    @env\\n\" if @env; \
 print \"  \\@INC:\\n    @INC\\n\";");
            }
            else {
-               Sv = newSVpv("config_vars(qw(",0);
-               sv_catpv(Sv, ++s);
-               sv_catpv(Sv, "))");
+               PL_Sv = newSVpv("config_vars(qw(",0);
+               sv_catpv(PL_Sv, ++s);
+               sv_catpv(PL_Sv, "))");
                s += strlen(s);
            }
-           av_push(preambleav, Sv);
+           av_push(PL_preambleav, PL_Sv);
            scriptname = BIT_BUCKET;    /* don't look for script or read stdin */
            goto reswitch;
        case 'x':
-           doextract = TRUE;
+           PL_doextract = TRUE;
            s++;
            if (*s)
-               cddir = savepv(s);
+               PL_cddir = savepv(s);
            break;
        case 0:
            break;
@@ -871,7 +871,7 @@ print \"  \\@INC:\\n    @INC\\n\";");
     }
   switch_end:
 
-    if (!tainting && (s = PerlEnv_getenv("PERL5OPT"))) {
+    if (!PL_tainting && (s = PerlEnv_getenv("PERL5OPT"))) {
        while (s && *s) {
            while (isSPACE(*s))
                s++;
@@ -890,7 +890,7 @@ print \"  \\@INC:\\n    @INC\\n\";");
 
     if (!scriptname)
        scriptname = argv[0];
-    if (e_script) {
+    if (PL_e_script) {
        argc++,argv--;
        scriptname = BIT_BUCKET;        /* don't look for script or read stdin */
     }
@@ -908,20 +908,20 @@ print \"  \\@INC:\\n    @INC\\n\";");
 
     validate_suid(validarg, scriptname,fdscript);
 
-    if (doextract)
+    if (PL_doextract)
        find_beginning();
 
-    main_cv = compcv = (CV*)NEWSV(1104,0);
-    sv_upgrade((SV *)compcv, SVt_PVCV);
-    CvUNIQUE_on(compcv);
-
-    comppad = newAV();
-    av_push(comppad, Nullsv);
-    curpad = AvARRAY(comppad);
-    comppad_name = newAV();
-    comppad_name_fill = 0;
-    min_intro_pending = 0;
-    padix = 0;
+    PL_main_cv = PL_compcv = (CV*)NEWSV(1104,0);
+    sv_upgrade((SV *)PL_compcv, SVt_PVCV);
+    CvUNIQUE_on(PL_compcv);
+
+    PL_comppad = newAV();
+    av_push(PL_comppad, Nullsv);
+    PL_curpad = AvARRAY(PL_comppad);
+    PL_comppad_name = newAV();
+    PL_comppad_name_fill = 0;
+    PL_min_intro_pending = 0;
+    PL_padix = 0;
 #ifdef USE_THREADS
     av_store(comppad_name, 0, newSVpv("@_", 2));
     curpad[0] = (SV*)newAV();
@@ -933,9 +933,9 @@ print \"  \\@INC:\\n    @INC\\n\";");
 
     comppadlist = newAV();
     AvREAL_off(comppadlist);
-    av_store(comppadlist, 0, (SV*)comppad_name);
-    av_store(comppadlist, 1, (SV*)comppad);
-    CvPADLIST(compcv) = comppadlist;
+    av_store(comppadlist, 0, (SV*)PL_comppad_name);
+    av_store(comppadlist, 1, (SV*)PL_comppad);
+    CvPADLIST(PL_compcv) = comppadlist;
 
     boot_core_UNIVERSAL();
 
@@ -949,7 +949,7 @@ print \"  \\@INC:\\n    @INC\\n\";");
     /* init_postdump_symbols not currently designed to be called */
     /* more than once (ENV isn't cleared first, for example)    */
     /* But running with -u leaves %ENV & @ARGV undefined!    XXX */
-    if (!do_undump)
+    if (!PL_do_undump)
        init_postdump_symbols(argc,argv,env);
 
     init_lexer();
@@ -957,32 +957,32 @@ print \"  \\@INC:\\n    @INC\\n\";");
     /* now parse the script */
 
     SETERRNO(0,SS$_NORMAL);
-    error_count = 0;
-    if (yyparse() || error_count) {
-       if (minus_c)
-           croak("%s had compilation errors.\n", origfilename);
+    PL_error_count = 0;
+    if (yyparse() || PL_error_count) {
+       if (PL_minus_c)
+           croak("%s had compilation errors.\n", PL_origfilename);
        else {
            croak("Execution of %s aborted due to compilation errors.\n",
-               origfilename);
+               PL_origfilename);
        }
     }
-    curcop->cop_line = 0;
-    curstash = defstash;
-    preprocess = FALSE;
-    if (e_script) {
-       SvREFCNT_dec(e_script);
-       e_script = Nullsv;
+    PL_curcop->cop_line = 0;
+    PL_curstash = PL_defstash;
+    PL_preprocess = FALSE;
+    if (PL_e_script) {
+       SvREFCNT_dec(PL_e_script);
+       PL_e_script = Nullsv;
     }
 
     /* now that script is parsed, we can modify record separator */
-    SvREFCNT_dec(rs);
-    rs = SvREFCNT_inc(nrs);
-    sv_setsv(perl_get_sv("/", TRUE), rs);
-    if (do_undump)
+    SvREFCNT_dec(PL_rs);
+    PL_rs = SvREFCNT_inc(PL_nrs);
+    sv_setsv(perl_get_sv("/", TRUE), PL_rs);
+    if (PL_do_undump)
        my_unexec();
 
-    if (dowarn)
-       gv_check(defstash);
+    if (PL_dowarn)
+       gv_check(PL_defstash);
 
     LEAVE;
     FREETMPS;
@@ -993,7 +993,7 @@ print \"  \\@INC:\\n    @INC\\n\";");
 #endif
 
     ENTER;
-    restartop = 0;
+    PL_restartop = 0;
     JMPENV_POP;
     return 0;
 }
@@ -1011,11 +1011,11 @@ perl_run(PerlInterpreter *sv_interp)
     int ret;
 
 #ifndef PERL_OBJECT
-    if (!(curinterp = sv_interp))
+    if (!(PL_curinterp = sv_interp))
        return 255;
 #endif
 
-    oldscope = scopestack_ix;
+    oldscope = PL_scopestack_ix;
 
     JMPENV_PUSH(ret);
     switch (ret) {
@@ -1024,12 +1024,12 @@ perl_run(PerlInterpreter *sv_interp)
        break;
     case 2:
        /* my_exit() was called */
-       while (scopestack_ix > oldscope)
+       while (PL_scopestack_ix > oldscope)
            LEAVE;
        FREETMPS;
-       curstash = defstash;
-       if (endav)
-           call_list(oldscope, endav);
+       PL_curstash = PL_defstash;
+       if (PL_endav)
+           call_list(oldscope, PL_endav);
 #ifdef MYMALLOC
        if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
            dump_mstats("after execution:  ");
@@ -1037,20 +1037,20 @@ perl_run(PerlInterpreter *sv_interp)
        JMPENV_POP;
        return STATUS_NATIVE_EXPORT;
     case 3:
-       if (!restartop) {
+       if (!PL_restartop) {
            PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
            FREETMPS;
            JMPENV_POP;
            return 1;
        }
-       POPSTACK_TO(mainstack);
+       POPSTACK_TO(PL_mainstack);
        break;
     }
 
     DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
-                    sawampersand ? "Enabling" : "Omitting"));
+                    PL_sawampersand ? "Enabling" : "Omitting"));
 
-    if (!restartop) {
+    if (!PL_restartop) {
        DEBUG_x(dump_all());
        DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
 #ifdef USE_THREADS
@@ -1058,26 +1058,26 @@ perl_run(PerlInterpreter *sv_interp)
                              (unsigned long) thr));
 #endif /* USE_THREADS */       
 
-       if (minus_c) {
-           PerlIO_printf(PerlIO_stderr(), "%s syntax OK\n", origfilename);
+       if (PL_minus_c) {
+           PerlIO_printf(PerlIO_stderr(), "%s syntax OK\n", PL_origfilename);
            my_exit(0);
        }
-       if (PERLDB_SINGLE && DBsingle)
-          sv_setiv(DBsingle, 1); 
-       if (initav)
-           call_list(oldscope, initav);
+       if (PERLDB_SINGLE && PL_DBsingle)
+          sv_setiv(PL_DBsingle, 1); 
+       if (PL_initav)
+           call_list(oldscope, PL_initav);
     }
 
     /* do it */
 
-    if (restartop) {
-       op = restartop;
-       restartop = 0;
+    if (PL_restartop) {
+       op = PL_restartop;
+       PL_restartop = 0;
        CALLRUNOPS();
     }
-    else if (main_start) {
-       CvDEPTH(main_cv) = 1;
-       op = main_start;
+    else if (PL_main_start) {
+       CvDEPTH(PL_main_cv) = 1;
+       op = PL_main_start;
        CALLRUNOPS();
     }
 
@@ -1184,7 +1184,7 @@ perl_call_method(char *methname, I32 flags)
     pp_method(ARGS);
        if(op == &myop)
                op = Nullop;
-    return perl_call_sv(*stack_sp--, flags);
+    return perl_call_sv(*PL_stack_sp--, flags);
 }
 
 /* May be called with any of a CV, a GV, or an SV containing the name. */
@@ -1218,23 +1218,23 @@ perl_call_sv(SV *sv, I32 flags)
     SAVEOP();
     op = (OP*)&myop;
 
-    EXTEND(stack_sp, 1);
-    *++stack_sp = sv;
+    EXTEND(PL_stack_sp, 1);
+    *++PL_stack_sp = sv;
     oldmark = TOPMARK;
-    oldscope = scopestack_ix;
+    oldscope = PL_scopestack_ix;
 
-    if (PERLDB_SUB && curstash != debstash
+    if (PERLDB_SUB && PL_curstash != PL_debstash
           /* Handle first BEGIN of -d. */
-         && (DBcv || (DBcv = GvCV(DBsub)))
+         && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
           /* Try harder, since this may have been a sighandler, thus
            * curstash may be meaningless. */
-         && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != debstash)
+         && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != PL_debstash)
          && !(flags & G_NODEBUG))
        op->op_private |= OPpENTERSUB_DB;
 
     if (flags & G_EVAL) {
        cLOGOP->op_other = op;
-       markstack_ptr--;
+       PL_markstack_ptr--;
        /* we're trying to emulate pp_entertry() here */
        {
            register PERL_CONTEXT *cx;
@@ -1244,17 +1244,17 @@ perl_call_sv(SV *sv, I32 flags)
            SAVETMPS;
            
            push_return(op->op_next);
-           PUSHBLOCK(cx, CXt_EVAL, stack_sp);
+           PUSHBLOCK(cx, CXt_EVAL, PL_stack_sp);
            PUSHEVAL(cx, 0, 0);
-           eval_root = op;             /* Only needed so that goto works right. */
+           PL_eval_root = op;             /* Only needed so that goto works right. */
            
-           in_eval = 1;
+           PL_in_eval = 1;
            if (flags & G_KEEPERR)
-               in_eval |= 4;
+               PL_in_eval |= 4;
            else
                sv_setpv(ERRSV,"");
        }
-       markstack_ptr++;
+       PL_markstack_ptr++;
 
        JMPENV_PUSH(ret);
        switch (ret) {
@@ -1265,25 +1265,25 @@ perl_call_sv(SV *sv, I32 flags)
            /* FALL THROUGH */
        case 2:
            /* my_exit() was called */
-           curstash = defstash;
+           PL_curstash = PL_defstash;
            FREETMPS;
            JMPENV_POP;
-           if (statusvalue)
+           if (PL_statusvalue)
                croak("Callback called exit");
            my_exit_jump();
            /* NOTREACHED */
        case 3:
-           if (restartop) {
-               op = restartop;
-               restartop = 0;
+           if (PL_restartop) {
+               op = PL_restartop;
+               PL_restartop = 0;
                break;
            }
-           stack_sp = stack_base + oldmark;
+           PL_stack_sp = PL_stack_base + oldmark;
            if (flags & G_ARRAY)
                retval = 0;
            else {
                retval = 1;
-               *++stack_sp = &sv_undef;
+               *++PL_stack_sp = &PL_sv_undef;
            }
            goto cleanup;
        }
@@ -1295,13 +1295,13 @@ perl_call_sv(SV *sv, I32 flags)
        op = pp_entersub(ARGS);
     if (op)
        CALLRUNOPS();
-    retval = stack_sp - (stack_base + oldmark);
+    retval = PL_stack_sp - (PL_stack_base + oldmark);
     if ((flags & G_EVAL) && !(flags & G_KEEPERR))
        sv_setpv(ERRSV,"");
 
   cleanup:
     if (flags & G_EVAL) {
-       if (scopestack_ix > oldscope) {
+       if (PL_scopestack_ix > oldscope) {
            SV **newsp;
            PMOP *newpm;
            I32 gimme;
@@ -1311,7 +1311,7 @@ perl_call_sv(SV *sv, I32 flags)
            POPBLOCK(cx,newpm);
            POPEVAL(cx);
            pop_return();
-           curpm = newpm;
+           PL_curpm = newpm;
            LEAVE;
        }
        JMPENV_POP;
@@ -1320,7 +1320,7 @@ perl_call_sv(SV *sv, I32 flags)
        CATCH_SET(oldcatch);
 
     if (flags & G_DISCARD) {
-       stack_sp = stack_base + oldmark;
+       PL_stack_sp = PL_stack_base + oldmark;
        retval = 0;
        FREETMPS;
        LEAVE;
@@ -1338,7 +1338,7 @@ perl_eval_sv(SV *sv, I32 flags)
 {
     dSP;
     UNOP myop;         /* fake syntax tree node */
-    I32 oldmark = SP - stack_base;
+    I32 oldmark = SP - PL_stack_base;
     I32 retval;
     I32 oldscope;
     dJMPENV;
@@ -1353,9 +1353,9 @@ perl_eval_sv(SV *sv, I32 flags)
     SAVEOP();
     op = (OP*)&myop;
     Zero(op, 1, UNOP);
-    EXTEND(stack_sp, 1);
-    *++stack_sp = sv;
-    oldscope = scopestack_ix;
+    EXTEND(PL_stack_sp, 1);
+    *++PL_stack_sp = sv;
+    oldscope = PL_scopestack_ix;
 
     if (!(flags & G_NOARGS))
        myop.op_flags = OPf_STACKED;
@@ -1376,25 +1376,25 @@ perl_eval_sv(SV *sv, I32 flags)
        /* FALL THROUGH */
     case 2:
        /* my_exit() was called */
-       curstash = defstash;
+       PL_curstash = PL_defstash;
        FREETMPS;
        JMPENV_POP;
-       if (statusvalue)
+       if (PL_statusvalue)
            croak("Callback called exit");
        my_exit_jump();
        /* NOTREACHED */
     case 3:
-       if (restartop) {
-           op = restartop;
-           restartop = 0;
+       if (PL_restartop) {
+           op = PL_restartop;
+           PL_restartop = 0;
            break;
        }
-       stack_sp = stack_base + oldmark;
+       PL_stack_sp = PL_stack_base + oldmark;
        if (flags & G_ARRAY)
            retval = 0;
        else {
            retval = 1;
-           *++stack_sp = &sv_undef;
+           *++PL_stack_sp = &PL_sv_undef;
        }
        goto cleanup;
     }
@@ -1403,14 +1403,14 @@ perl_eval_sv(SV *sv, I32 flags)
        op = pp_entereval(ARGS);
     if (op)
        CALLRUNOPS();
-    retval = stack_sp - (stack_base + oldmark);
+    retval = PL_stack_sp - (PL_stack_base + oldmark);
     if (!(flags & G_KEEPERR))
        sv_setpv(ERRSV,"");
 
   cleanup:
     JMPENV_POP;
     if (flags & G_DISCARD) {
-       stack_sp = stack_base + oldmark;
+       PL_stack_sp = PL_stack_base + oldmark;
        retval = 0;
        FREETMPS;
        LEAVE;
@@ -1434,7 +1434,7 @@ perl_eval_pv(char *p, I32 croak_on_error)
     PUTBACK;
 
     if (croak_on_error && SvTRUE(ERRSV))
-       croak(SvPVx(ERRSV, na));
+       croak(SvPVx(ERRSV, PL_na));
 
     return sv;
 }
@@ -1520,28 +1520,28 @@ moreswitches(char *s)
     {
        dTHR;
        rschar = scan_oct(s, 4, &numlen);
-       SvREFCNT_dec(nrs);
+       SvREFCNT_dec(PL_nrs);
        if (rschar & ~((U8)~0))
-           nrs = &sv_undef;
+           PL_nrs = &PL_sv_undef;
        else if (!rschar && numlen >= 2)
-           nrs = newSVpv("", 0);
+           PL_nrs = newSVpv("", 0);
        else {
            char ch = rschar;
-           nrs = newSVpv(&ch, 1);
+           PL_nrs = newSVpv(&ch, 1);
        }
        return s + numlen;
     }
     case 'F':
-       minus_F = TRUE;
-       splitstr = savepv(s + 1);
+       PL_minus_F = TRUE;
+       PL_splitstr = savepv(s + 1);
        s += strlen(s);
        return s;
     case 'a':
-       minus_a = TRUE;
+       PL_minus_a = TRUE;
        s++;
        return s;
     case 'c':
-       minus_c = TRUE;
+       PL_minus_c = TRUE;
        s++;
        return s;
     case 'd':
@@ -1551,8 +1551,8 @@ moreswitches(char *s)
            my_setenv("PERL5DB", form("use Devel::%s;", ++s));
            s += strlen(s);
        }
-       if (!perldb) {
-           perldb = PERLDB_ALL;
+       if (!PL_perldb) {
+           PL_perldb = PERLDB_ALL;
            init_debugger();
        }
        return s;
@@ -1564,13 +1564,13 @@ moreswitches(char *s)
            char *d;
 
            for (s++; *s && (d = strchr(debopts,*s)); s++)
-               debug |= 1 << (d - debopts);
+               PL_debug |= 1 << (d - debopts);
        }
        else {
-           debug = atoi(s+1);
+           PL_debug = atoi(s+1);
            for (s++; isDIGIT(*s); s++) ;
        }
-       debug |= 0x80000000;
+       PL_debug |= 0x80000000;
 #else
        warn("Recompile perl with -DDEBUGGING to use -D switch\n");
        for (s++; isALNUM(*s); s++) ;
@@ -1578,14 +1578,14 @@ moreswitches(char *s)
        /*SUPPRESS 530*/
        return s;
     case 'h':
-       usage(origargv[0]);    
+       usage(PL_origargv[0]);    
        PerlProc_exit(0);
     case 'i':
-       if (inplace)
-           Safefree(inplace);
-       inplace = savepv(s+1);
+       if (PL_inplace)
+           Safefree(PL_inplace);
+       PL_inplace = savepv(s+1);
        /*SUPPRESS 530*/
-       for (s = inplace; *s && !isSPACE(*s); s++) ;
+       for (s = PL_inplace; *s && !isSPACE(*s); s++) ;
        if (*s) {
            *s++ = '\0';
            if (*s == '-')      /* Additional switches on #! line. */
@@ -1609,25 +1609,25 @@ moreswitches(char *s)
            croak("No space allowed after -I");
        return s;
     case 'l':
-       minus_l = TRUE;
+       PL_minus_l = TRUE;
        s++;
-       if (ors)
-           Safefree(ors);
+       if (PL_ors)
+           Safefree(PL_ors);
        if (isDIGIT(*s)) {
-           ors = savepv("\n");
-           orslen = 1;
-           *ors = scan_oct(s, 3 + (*s == '0'), &numlen);
+           PL_ors = savepv("\n");
+           PL_orslen = 1;
+           *PL_ors = scan_oct(s, 3 + (*s == '0'), &numlen);
            s += numlen;
        }
        else {
            dTHR;
-           if (RsPARA(nrs)) {
-               ors = "\n\n";
-               orslen = 2;
+           if (RsPARA(PL_nrs)) {
+               PL_ors = "\n\n";
+               PL_orslen = 2;
            }
            else
-               ors = SvPV(nrs, orslen);
-           ors = savepvn(ors, orslen);
+               PL_ors = SvPV(PL_nrs, PL_orslen);
+           PL_ors = savepvn(PL_ors, PL_orslen);
        }
        return s;
     case 'M':
@@ -1659,37 +1659,37 @@ moreswitches(char *s)
                sv_catpv(sv,    "})");
            }
            s += strlen(s);
-           if (preambleav == NULL)
-               preambleav = newAV();
-           av_push(preambleav, sv);
+           if (PL_preambleav == NULL)
+               PL_preambleav = newAV();
+           av_push(PL_preambleav, sv);
        }
        else
            croak("No space allowed after -%c", *(s-1));
        return s;
     case 'n':
-       minus_n = TRUE;
+       PL_minus_n = TRUE;
        s++;
        return s;
     case 'p':
-       minus_p = TRUE;
+       PL_minus_p = TRUE;
        s++;
        return s;
     case 's':
        forbid_setid("-s");
-       doswitches = TRUE;
+       PL_doswitches = TRUE;
        s++;
        return s;
     case 'T':
-       if (!tainting)
+       if (!PL_tainting)
            croak("Too late for \"-T\" option");
        s++;
        return s;
     case 'u':
-       do_undump = TRUE;
+       PL_do_undump = TRUE;
        s++;
        return s;
     case 'U':
-       unsafe = TRUE;
+       PL_unsafe = TRUE;
        s++;
        return s;
     case 'v':
@@ -1738,7 +1738,7 @@ this system using `man perl' or `perldoc perl'.  If you have access to the\n\
 Internet, point your browser at http://www.perl.com/, the Perl Home Page.\n\n");
        PerlProc_exit(0);
     case 'w':
-       dowarn = TRUE;
+       PL_dowarn = TRUE;
        s++;
        return s;
     case '*':
@@ -1759,7 +1759,7 @@ Internet, point your browser at http://www.perl.com/, the Perl Home Page.\n\n");
        break;
 #endif
     case 'P':
-       if (preprocess)
+       if (PL_preprocess)
            return s+1;
        /* FALL THROUGH */
     default:
@@ -1875,33 +1875,33 @@ init_main_stash(void)
     /* Note that strtab is a rather special HV.  Assumptions are made
        about not iterating on it, and not adding tie magic to it.
        It is properly deallocated in perl_destruct() */
-    strtab = newHV();
-    HvSHAREKEYS_off(strtab);                   /* mandatory */
-    hv_ksplit(strtab, 512);
+    PL_strtab = newHV();
+    HvSHAREKEYS_off(PL_strtab);                        /* mandatory */
+    hv_ksplit(PL_strtab, 512);
     
-    curstash = defstash = newHV();
-    curstname = newSVpv("main",4);
+    PL_curstash = PL_defstash = newHV();
+    PL_curstname = newSVpv("main",4);
     gv = gv_fetchpv("main::",TRUE, SVt_PVHV);
     SvREFCNT_dec(GvHV(gv));
-    GvHV(gv) = (HV*)SvREFCNT_inc(defstash);
+    GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
     SvREADONLY_on(gv);
-    HvNAME(defstash) = savepv("main");
-    incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
-    GvMULTI_on(incgv);
-    hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */
-    GvMULTI_on(hintgv);
-    defgv = gv_fetchpv("_",TRUE, SVt_PVAV);
-    errgv = gv_HVadd(gv_fetchpv("@", TRUE, SVt_PV));
-    GvMULTI_on(errgv);
-    replgv = gv_fetchpv("\022", TRUE, SVt_PV); /* ^R */
-    GvMULTI_on(replgv);
+    HvNAME(PL_defstash) = savepv("main");
+    PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
+    GvMULTI_on(PL_incgv);
+    PL_hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */
+    GvMULTI_on(PL_hintgv);
+    PL_defgv = gv_fetchpv("_",TRUE, SVt_PVAV);
+    PL_errgv = gv_HVadd(gv_fetchpv("@", TRUE, SVt_PV));
+    GvMULTI_on(PL_errgv);
+    PL_replgv = gv_fetchpv("\022", TRUE, SVt_PV); /* ^R */
+    GvMULTI_on(PL_replgv);
     (void)form("%240s","");    /* Preallocate temp - for immediate signals. */
     sv_grow(ERRSV, 240);       /* Preallocate - for immediate signals. */
     sv_setpvn(ERRSV, "", 0);
-    curstash = defstash;
-    compiling.cop_stash = defstash;
-    debstash = GvHV(gv_fetchpv("DB::", GV_ADDMULTI, SVt_PVHV));
-    globalstash = GvHV(gv_fetchpv("CORE::GLOBAL::", GV_ADDMULTI, SVt_PVHV));
+    PL_curstash = PL_defstash;
+    PL_compiling.cop_stash = PL_defstash;
+    PL_debstash = GvHV(gv_fetchpv("DB::", GV_ADDMULTI, SVt_PVHV));
+    PL_globalstash = GvHV(gv_fetchpv("CORE::GLOBAL::", GV_ADDMULTI, SVt_PVHV));
     /* We must init $/ before switches are processed. */
     sv_setpvn(GvSV(gv_fetchpv("/", TRUE, SVt_PV)), "\n", 1);
 }
@@ -1914,12 +1914,12 @@ open_script(char *scriptname, bool dosearch, SV *sv, int *fdscript)
 
     *fdscript = -1;
 
-    if (e_script) {
-       origfilename = savepv("-e");
+    if (PL_e_script) {
+       PL_origfilename = savepv("-e");
     }
     else {
        /* if find_script() returns, it returns a malloc()-ed value */
-       origfilename = scriptname = find_script(scriptname, dosearch, NULL, 1);
+       PL_origfilename = scriptname = find_script(scriptname, dosearch, NULL, 1);
 
        if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) {
            char *s = scriptname + 8;
@@ -1928,23 +1928,23 @@ open_script(char *scriptname, bool dosearch, SV *sv, int *fdscript)
                s++;
            if (*s) {
                scriptname = savepv(s + 1);
-               Safefree(origfilename);
-               origfilename = scriptname;
+               Safefree(PL_origfilename);
+               PL_origfilename = scriptname;
            }
        }
     }
 
-    curcop->cop_filegv = gv_fetchfile(origfilename);
-    if (strEQ(origfilename,"-"))
+    PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
+    if (strEQ(PL_origfilename,"-"))
        scriptname = "";
     if (*fdscript >= 0) {
-       rsfp = PerlIO_fdopen(*fdscript,PERL_SCRIPT_MODE);
+       PL_rsfp = PerlIO_fdopen(*fdscript,PERL_SCRIPT_MODE);
 #if defined(HAS_FCNTL) && defined(F_SETFD)
-       if (rsfp)
-           fcntl(PerlIO_fileno(rsfp),F_SETFD,1);  /* ensure close-on-exec */
+       if (PL_rsfp)
+           fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);  /* ensure close-on-exec */
 #endif
     }
-    else if (preprocess) {
+    else if (PL_preprocess) {
        char *cpp_cfg = CPPSTDIN;
        SV *cpp = newSVpv("",0);
        SV *cmd = NEWSV(0,0);
@@ -1990,10 +1990,10 @@ sed %s -e \"/^[^#]/b\" \
 #else
          "sed",
 #endif
-         (doextract ? "-e '1,/^#/d\n'" : ""),
+         (PL_doextract ? "-e '1,/^#/d\n'" : ""),
 #endif
          scriptname, cpp, sv, CPPMINUS);
-       doextract = FALSE;
+       PL_doextract = FALSE;
 #ifdef IAMSUID                         /* actually, this is caught earlier */
        if (euid != uid && !euid) {     /* if running suidperl */
 #ifdef HAS_SETEUID
@@ -2013,22 +2013,22 @@ sed %s -e \"/^[^#]/b\" \
                croak("Can't do seteuid!\n");
        }
 #endif /* IAMSUID */
-       rsfp = PerlProc_popen(SvPVX(cmd), "r");
+       PL_rsfp = PerlProc_popen(SvPVX(cmd), "r");
        SvREFCNT_dec(cmd);
        SvREFCNT_dec(cpp);
     }
     else if (!*scriptname) {
        forbid_setid("program input from stdin");
-       rsfp = PerlIO_stdin();
+       PL_rsfp = PerlIO_stdin();
     }
     else {
-       rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
+       PL_rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
 #if defined(HAS_FCNTL) && defined(F_SETFD)
-       if (rsfp)
-           fcntl(PerlIO_fileno(rsfp),F_SETFD,1);  /* ensure close-on-exec */
+       if (PL_rsfp)
+           fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);  /* ensure close-on-exec */
 #endif
     }
-    if (!rsfp) {
+    if (!PL_rsfp) {
 #ifdef DOSUID
 #ifndef IAMSUID                /* in case script is not readable before setuid */
        if (euid && PerlLIO_stat(SvPVX(GvSV(curcop->cop_filegv)),&statbuf) >= 0 &&
@@ -2040,7 +2040,7 @@ sed %s -e \"/^[^#]/b\" \
 #endif
 #endif
        croak("Can't open perl script \"%s\": %s\n",
-         SvPVX(GvSV(curcop->cop_filegv)), Strerror(errno));
+         SvPVX(GvSV(PL_curcop->cop_filegv)), Strerror(errno));
     }
 }
 
@@ -2267,7 +2267,7 @@ FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
     croak("Can't do setuid\n");
 #endif /* IAMSUID */
 #else /* !DOSUID */
-    if (euid != uid || egid != gid) {  /* (suidperl doesn't exist, in fact) */
+    if (PL_euid != PL_uid || PL_egid != PL_gid) {      /* (suidperl doesn't exist, in fact) */
 #ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
        dTHR;
        PerlLIO_fstat(PerlIO_fileno(rsfp),&statbuf);    /* may be either wrapped or real suid */
@@ -2292,12 +2292,12 @@ find_beginning(void)
     /* skip forward in input to the real script? */
 
     forbid_setid("-x");
-    while (doextract) {
-       if ((s = sv_gets(linestr, rsfp, 0)) == Nullch)
+    while (PL_doextract) {
+       if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch)
            croak("No Perl script found in input\n");
        if (*s == '#' && s[1] == '!' && (s = instr(s,"perl"))) {
-           PerlIO_ungetc(rsfp, '\n');          /* to keep line count right */
-           doextract = FALSE;
+           PerlIO_ungetc(PL_rsfp, '\n');               /* to keep line count right */
+           PL_doextract = FALSE;
            while (*s && !(isSPACE (*s) || *s == '#')) s++;
            s2 = s;
            while (*s == ' ' || *s == '\t') s++;
@@ -2307,8 +2307,8 @@ find_beginning(void)
                    /*SUPPRESS 530*/
                    while (s = moreswitches(s)) ;
            }
-           if (cddir && PerlDir_chdir(cddir) < 0)
-               croak("Can't chdir to %s",cddir);
+           if (PL_cddir && PerlDir_chdir(PL_cddir) < 0)
+               croak("Can't chdir to %s",PL_cddir);
        }
     }
 }
@@ -2317,23 +2317,23 @@ find_beginning(void)
 STATIC void
 init_ids(void)
 {
-    uid = (int)PerlProc_getuid();
-    euid = (int)PerlProc_geteuid();
-    gid = (int)PerlProc_getgid();
-    egid = (int)PerlProc_getegid();
+    PL_uid = (int)PerlProc_getuid();
+    PL_euid = (int)PerlProc_geteuid();
+    PL_gid = (int)PerlProc_getgid();
+    PL_egid = (int)PerlProc_getegid();
 #ifdef VMS
     uid |= gid << 16;
     euid |= egid << 16;
 #endif
-    tainting |= (uid && (euid != uid || egid != gid));
+    PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
 }
 
 STATIC void
 forbid_setid(char *s)
 {
-    if (euid != uid)
+    if (PL_euid != PL_uid)
         croak("No %s allowed while running setuid", s);
-    if (egid != gid)
+    if (PL_egid != PL_gid)
         croak("No %s allowed while running setgid", s);
 }
 
@@ -2341,19 +2341,19 @@ STATIC void
 init_debugger(void)
 {
     dTHR;
-    curstash = debstash;
-    dbargs = GvAV(gv_AVadd((gv_fetchpv("args", GV_ADDMULTI, SVt_PVAV))));
-    AvREAL_off(dbargs);
-    DBgv = gv_fetchpv("DB", GV_ADDMULTI, SVt_PVGV);
-    DBline = gv_fetchpv("dbline", GV_ADDMULTI, SVt_PVAV);
-    DBsub = gv_HVadd(gv_fetchpv("sub", GV_ADDMULTI, SVt_PVHV));
-    DBsingle = GvSV((gv_fetchpv("single", GV_ADDMULTI, SVt_PV)));
-    sv_setiv(DBsingle, 0); 
-    DBtrace = GvSV((gv_fetchpv("trace", GV_ADDMULTI, SVt_PV)));
-    sv_setiv(DBtrace, 0); 
-    DBsignal = GvSV((gv_fetchpv("signal", GV_ADDMULTI, SVt_PV)));
-    sv_setiv(DBsignal, 0); 
-    curstash = defstash;
+    PL_curstash = PL_debstash;
+    PL_dbargs = GvAV(gv_AVadd((gv_fetchpv("args", GV_ADDMULTI, SVt_PVAV))));
+    AvREAL_off(PL_dbargs);
+    PL_DBgv = gv_fetchpv("DB", GV_ADDMULTI, SVt_PVGV);
+    PL_DBline = gv_fetchpv("dbline", GV_ADDMULTI, SVt_PVAV);
+    PL_DBsub = gv_HVadd(gv_fetchpv("sub", GV_ADDMULTI, SVt_PVHV));
+    PL_DBsingle = GvSV((gv_fetchpv("single", GV_ADDMULTI, SVt_PV)));
+    sv_setiv(PL_DBsingle, 0); 
+    PL_DBtrace = GvSV((gv_fetchpv("trace", GV_ADDMULTI, SVt_PV)));
+    sv_setiv(PL_DBtrace, 0); 
+    PL_DBsignal = GvSV((gv_fetchpv("signal", GV_ADDMULTI, SVt_PV)));
+    sv_setiv(PL_DBsignal, 0); 
+    PL_curstash = PL_defstash;
 }
 
 #ifndef STRESS_REALLOC
@@ -2366,38 +2366,38 @@ void
 init_stacks(ARGSproto)
 {
     /* start with 128-item stack and 8K cxstack */
-    curstackinfo = new_stackinfo(REASONABLE(128),
+    PL_curstackinfo = new_stackinfo(REASONABLE(128),
                                 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
-    curstackinfo->si_type = PERLSI_MAIN;
-    curstack = curstackinfo->si_stack;
-    mainstack = curstack;              /* remember in case we switch stacks */
+    PL_curstackinfo->si_type = PERLSI_MAIN;
+    PL_curstack = PL_curstackinfo->si_stack;
+    PL_mainstack = PL_curstack;                /* remember in case we switch stacks */
 
-    stack_base = AvARRAY(curstack);
-    stack_sp = stack_base;
-    stack_max = stack_base + AvMAX(curstack);
+    PL_stack_base = AvARRAY(PL_curstack);
+    PL_stack_sp = PL_stack_base;
+    PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
 
-    New(50,tmps_stack,REASONABLE(128),SV*);
-    tmps_floor = -1;
-    tmps_ix = -1;
-    tmps_max = REASONABLE(128);
+    New(50,PL_tmps_stack,REASONABLE(128),SV*);
+    PL_tmps_floor = -1;
+    PL_tmps_ix = -1;
+    PL_tmps_max = REASONABLE(128);
 
-    New(54,markstack,REASONABLE(32),I32);
-    markstack_ptr = markstack;
-    markstack_max = markstack + REASONABLE(32);
+    New(54,PL_markstack,REASONABLE(32),I32);
+    PL_markstack_ptr = PL_markstack;
+    PL_markstack_max = PL_markstack + REASONABLE(32);
 
     SET_MARKBASE;
 
-    New(54,scopestack,REASONABLE(32),I32);
-    scopestack_ix = 0;
-    scopestack_max = REASONABLE(32);
+    New(54,PL_scopestack,REASONABLE(32),I32);
+    PL_scopestack_ix = 0;
+    PL_scopestack_max = REASONABLE(32);
 
-    New(54,savestack,REASONABLE(128),ANY);
-    savestack_ix = 0;
-    savestack_max = REASONABLE(128);
+    New(54,PL_savestack,REASONABLE(128),ANY);
+    PL_savestack_ix = 0;
+    PL_savestack_max = REASONABLE(128);
 
-    New(54,retstack,REASONABLE(16),OP*);
-    retstack_ix = 0;
-    retstack_max = REASONABLE(16);
+    New(54,PL_retstack,REASONABLE(16),OP*);
+    PL_retstack_ix = 0;
+    PL_retstack_max = REASONABLE(16);
 }
 
 #undef REASONABLE
@@ -2406,23 +2406,23 @@ STATIC void
 nuke_stacks(void)
 {
     dTHR;
-    while (curstackinfo->si_next)
-       curstackinfo = curstackinfo->si_next;
-    while (curstackinfo) {
-       PERL_SI *p = curstackinfo->si_prev;
+    while (PL_curstackinfo->si_next)
+       PL_curstackinfo = PL_curstackinfo->si_next;
+    while (PL_curstackinfo) {
+       PERL_SI *p = PL_curstackinfo->si_prev;
        /* curstackinfo->si_stack got nuked by sv_free_arenas() */
-       Safefree(curstackinfo->si_cxstack);
-       Safefree(curstackinfo);
-       curstackinfo = p;
+       Safefree(PL_curstackinfo->si_cxstack);
+       Safefree(PL_curstackinfo);
+       PL_curstackinfo = p;
     }
-    Safefree(tmps_stack);
-    Safefree(markstack);
-    Safefree(scopestack);
-    Safefree(savestack);
-    Safefree(retstack);
+    Safefree(PL_tmps_stack);
+    Safefree(PL_markstack);
+    Safefree(PL_scopestack);
+    Safefree(PL_savestack);
+    Safefree(PL_retstack);
     DEBUG( {
-       Safefree(debname);
-       Safefree(debdelim);
+       Safefree(PL_debname);
+       Safefree(PL_debdelim);
     } )
 }
 
@@ -2436,11 +2436,11 @@ init_lexer(void)
 #ifdef PERL_OBJECT
        PerlIO *tmpfp;
 #endif
-    tmpfp = rsfp;
-    rsfp = Nullfp;
-    lex_start(linestr);
-    rsfp = tmpfp;
-    subname = newSVpv("main",4);
+    tmpfp = PL_rsfp;
+    PL_rsfp = Nullfp;
+    lex_start(PL_linestr);
+    PL_rsfp = tmpfp;
+    PL_subname = newSVpv("main",4);
 }
 
 STATIC void
@@ -2451,12 +2451,12 @@ init_predump_symbols(void)
     GV *othergv;
 
     sv_setpvn(perl_get_sv("\"", TRUE), " ", 1);
-    stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
-    GvMULTI_on(stdingv);
-    IoIFP(GvIOp(stdingv)) = PerlIO_stdin();
+    PL_stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
+    GvMULTI_on(PL_stdingv);
+    IoIFP(GvIOp(PL_stdingv)) = PerlIO_stdin();
     tmpgv = gv_fetchpv("stdin",TRUE, SVt_PV);
     GvMULTI_on(tmpgv);
-    GvIOp(tmpgv) = (IO*)SvREFCNT_inc(GvIOp(stdingv));
+    GvIOp(tmpgv) = (IO*)SvREFCNT_inc(GvIOp(PL_stdingv));
 
     tmpgv = gv_fetchpv("STDOUT",TRUE, SVt_PVIO);
     GvMULTI_on(tmpgv);
@@ -2464,7 +2464,7 @@ init_predump_symbols(void)
     setdefout(tmpgv);
     tmpgv = gv_fetchpv("stdout",TRUE, SVt_PV);
     GvMULTI_on(tmpgv);
-    GvIOp(tmpgv) = (IO*)SvREFCNT_inc(GvIOp(defoutgv));
+    GvIOp(tmpgv) = (IO*)SvREFCNT_inc(GvIOp(PL_defoutgv));
 
     othergv = gv_fetchpv("STDERR",TRUE, SVt_PVIO);
     GvMULTI_on(othergv);
@@ -2473,10 +2473,10 @@ init_predump_symbols(void)
     GvMULTI_on(tmpgv);
     GvIOp(tmpgv) = (IO*)SvREFCNT_inc(GvIOp(othergv));
 
-    statname = NEWSV(66,0);            /* last filename we did stat on */
+    PL_statname = NEWSV(66,0);         /* last filename we did stat on */
 
-    if (!osname)
-       osname = savepv(OSNAME);
+    if (!PL_osname)
+       PL_osname = savepv(OSNAME);
 }
 
 STATIC void
@@ -2488,7 +2488,7 @@ init_postdump_symbols(register int argc, register char **argv, register char **e
     GV* tmpgv;
 
     argc--,argv++;     /* skip name of script */
-    if (doswitches) {
+    if (PL_doswitches) {
        for (; argc > 0 && **argv == '-'; argc--,argv++) {
            if (!argv[0][1])
                break;
@@ -2504,34 +2504,34 @@ init_postdump_symbols(register int argc, register char **argv, register char **e
                sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),1);
        }
     }
-    toptarget = NEWSV(0,0);
-    sv_upgrade(toptarget, SVt_PVFM);
-    sv_setpvn(toptarget, "", 0);
-    bodytarget = NEWSV(0,0);
-    sv_upgrade(bodytarget, SVt_PVFM);
-    sv_setpvn(bodytarget, "", 0);
-    formtarget = bodytarget;
+    PL_toptarget = NEWSV(0,0);
+    sv_upgrade(PL_toptarget, SVt_PVFM);
+    sv_setpvn(PL_toptarget, "", 0);
+    PL_bodytarget = NEWSV(0,0);
+    sv_upgrade(PL_bodytarget, SVt_PVFM);
+    sv_setpvn(PL_bodytarget, "", 0);
+    PL_formtarget = PL_bodytarget;
 
     TAINT;
     if (tmpgv = gv_fetchpv("0",TRUE, SVt_PV)) {
-       sv_setpv(GvSV(tmpgv),origfilename);
+       sv_setpv(GvSV(tmpgv),PL_origfilename);
        magicname("0", "0", 1);
     }
     if (tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))
-       sv_setpv(GvSV(tmpgv),origargv[0]);
-    if (argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV)) {
-       GvMULTI_on(argvgv);
-       (void)gv_AVadd(argvgv);
-       av_clear(GvAVn(argvgv));
+       sv_setpv(GvSV(tmpgv),PL_origargv[0]);
+    if (PL_argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV)) {
+       GvMULTI_on(PL_argvgv);
+       (void)gv_AVadd(PL_argvgv);
+       av_clear(GvAVn(PL_argvgv));
        for (; argc > 0; argc--,argv++) {
-           av_push(GvAVn(argvgv),newSVpv(argv[0],0));
+           av_push(GvAVn(PL_argvgv),newSVpv(argv[0],0));
        }
     }
-    if (envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV)) {
+    if (PL_envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV)) {
        HV *hv;
-       GvMULTI_on(envgv);
-       hv = GvHVn(envgv);
-       hv_magic(hv, envgv, 'E');
+       GvMULTI_on(PL_envgv);
+       hv = GvHVn(PL_envgv);
+       hv_magic(hv, PL_envgv, 'E');
 #ifndef VMS  /* VMS doesn't have environ array */
        /* Note that if the supplied env parameter is actually a copy
           of the global environ then it may now point to free'd memory
@@ -2571,7 +2571,7 @@ STATIC void
 init_perllib(void)
 {
     char *s;
-    if (!tainting) {
+    if (!PL_tainting) {
 #ifndef VMS
        s = PerlEnv_getenv("PERL5LIB");
        if (s)
@@ -2621,7 +2621,7 @@ init_perllib(void)
     incpush(SITELIB_EXP, FALSE);
 #endif
 #endif
-    if (!tainting)
+    if (!PL_tainting)
        incpush(".", FALSE);
 }
 
@@ -2648,11 +2648,11 @@ incpush(char *p, int addsubdirs)
 
     if (addsubdirs) {
        subdir = sv_newmortal();
-       if (!archpat_auto) {
-           STRLEN len = (sizeof(ARCHNAME) + strlen(patchlevel)
+       if (!PL_archpat_auto) {
+           STRLEN len = (sizeof(ARCHNAME) + strlen(PL_patchlevel)
                          + sizeof("//auto"));
-           New(55, archpat_auto, len, char);
-           sprintf(archpat_auto, "/%s/%s/auto", ARCHNAME, patchlevel);
+           New(55, PL_archpat_auto, len, char);
+           sprintf(PL_archpat_auto, "/%s/%s/auto", ARCHNAME, PL_patchlevel);
 #ifdef VMS
        for (len = sizeof(ARCHNAME) + 2;
             archpat_auto[len] != '\0' && archpat_auto[len] != '/'; len++)
@@ -2705,23 +2705,23 @@ incpush(char *p, int addsubdirs)
 #endif
            /* .../archname/version if -d .../archname/version/auto */
            sv_setsv(subdir, libdir);
-           sv_catpv(subdir, archpat_auto);
+           sv_catpv(subdir, PL_archpat_auto);
            if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
                  S_ISDIR(tmpstatbuf.st_mode))
-               av_push(GvAVn(incgv),
+               av_push(GvAVn(PL_incgv),
                        newSVpv(SvPVX(subdir), SvCUR(subdir) - sizeof "auto"));
 
            /* .../archname if -d .../archname/auto */
            sv_insert(subdir, SvCUR(libdir) + sizeof(ARCHNAME),
-                     strlen(patchlevel) + 1, "", 0);
+                     strlen(PL_patchlevel) + 1, "", 0);
            if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
                  S_ISDIR(tmpstatbuf.st_mode))
-               av_push(GvAVn(incgv),
+               av_push(GvAVn(PL_incgv),
                        newSVpv(SvPVX(subdir), SvCUR(subdir) - sizeof "auto"));
        }
 
        /* finally push this lib directory on the end of @INC */
-       av_push(GvAVn(incgv), libdir);
+       av_push(GvAVn(PL_incgv), libdir);
     }
 }
 
@@ -2800,7 +2800,7 @@ void
 call_list(I32 oldscope, AV *paramList)
 {
     dTHR;
-    line_t oldline = curcop->cop_line;
+    line_t oldline = PL_curcop->cop_line;
     STRLEN len;
     dJMPENV;
     int ret;
@@ -2814,18 +2814,18 @@ call_list(I32 oldscope, AV *paramList)
        switch (ret) {
        case 0: {
                SV* atsv = ERRSV;
-               PUSHMARK(stack_sp);
+               PUSHMARK(PL_stack_sp);
                perl_call_sv((SV*)cv, G_EVAL|G_DISCARD);
                (void)SvPV(atsv, len);
                if (len) {
                    JMPENV_POP;
-                   curcop = &compiling;
-                   curcop->cop_line = oldline;
-                   if (paramList == beginav)
+                   PL_curcop = &PL_compiling;
+                   PL_curcop->cop_line = oldline;
+                   if (paramList == PL_beginav)
                        sv_catpv(atsv, "BEGIN failed--compilation aborted");
                    else
                        sv_catpv(atsv, "END failed--cleanup aborted");
-                   while (scopestack_ix > oldscope)
+                   while (PL_scopestack_ix > oldscope)
                        LEAVE;
                    croak("%s", SvPVX(atsv));
                }
@@ -2836,17 +2836,17 @@ call_list(I32 oldscope, AV *paramList)
            /* FALL THROUGH */
        case 2:
            /* my_exit() was called */
-           while (scopestack_ix > oldscope)
+           while (PL_scopestack_ix > oldscope)
                LEAVE;
            FREETMPS;
-           curstash = defstash;
-           if (endav)
-               call_list(oldscope, endav);
+           PL_curstash = PL_defstash;
+           if (PL_endav)
+               call_list(oldscope, PL_endav);
            JMPENV_POP;
-           curcop = &compiling;
-           curcop->cop_line = oldline;
-           if (statusvalue) {
-               if (paramList == beginav)
+           PL_curcop = &PL_compiling;
+           PL_curcop->cop_line = oldline;
+           if (PL_statusvalue) {
+               if (paramList == PL_beginav)
                    croak("BEGIN failed--compilation aborted");
                else
                    croak("END failed--cleanup aborted");
@@ -2854,14 +2854,14 @@ call_list(I32 oldscope, AV *paramList)
            my_exit_jump();
            /* NOTREACHED */
        case 3:
-           if (!restartop) {
+           if (!PL_restartop) {
                PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
                FREETMPS;
                break;
            }
            JMPENV_POP;
-           curcop = &compiling;
-           curcop->cop_line = oldline;
+           PL_curcop = &PL_compiling;
+           PL_curcop->cop_line = oldline;
            JMPENV_JUMP(3);
        }
        JMPENV_POP;
@@ -2928,16 +2928,16 @@ my_exit_jump(void)
     I32 gimme;
     SV **newsp;
 
-    if (e_script) {
-       SvREFCNT_dec(e_script);
-       e_script = Nullsv;
+    if (PL_e_script) {
+       SvREFCNT_dec(PL_e_script);
+       PL_e_script = Nullsv;
     }
 
-    POPSTACK_TO(mainstack);
+    POPSTACK_TO(PL_mainstack);
     if (cxstack_ix >= 0) {
        if (cxstack_ix > 0)
            dounwind(0);
-       POPBLOCK(cx,curpm);
+       POPBLOCK(cx,PL_curpm);
        LEAVE;
     }
 
@@ -2955,13 +2955,13 @@ read_e_script(int idx, SV *buf_sv, int maxlen)
 #endif
 {
     char *p, *nl;
-    p  = SvPVX(e_script);
+    p  = SvPVX(PL_e_script);
     nl = strchr(p, '\n');
-    nl = (nl) ? nl+1 : SvEND(e_script);
+    nl = (nl) ? nl+1 : SvEND(PL_e_script);
     if (nl-p == 0)
        return 0;
     sv_catpvn(buf_sv, p, nl-p);
-    sv_chop(e_script, nl);
+    sv_chop(PL_e_script, nl);
     return 1;
 }
 
diff --git a/perl.h b/perl.h
index b05119d..cad672f 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -127,9 +127,9 @@ class CPerlObj;
 #define PERL_OBJECT_THIS
 #define _PERL_OBJECT_THIS
 #define PERL_OBJECT_THIS_
-#define CALLRUNOPS runops
-#define CALLREGCOMP (*regcompp)
-#define CALLREGEXEC (*regexecp)
+#define CALLRUNOPS PL_runops
+#define CALLREGCOMP (*PL_regcompp)
+#define CALLREGEXEC (*PL_regexecp)
 
 #endif /* PERL_OBJECT */
 
@@ -240,11 +240,11 @@ register struct op *op asm(stringify(OP_IN_REGISTER));
 #   define VOL
 #endif
 
-#define TAINT          (tainted = TRUE)
-#define TAINT_NOT      (tainted = FALSE)
-#define TAINT_IF(c)    if (c) { tainted = TRUE; }
-#define TAINT_ENV()    if (tainting) { taint_env(); }
-#define TAINT_PROPER(s)        if (tainting) { taint_proper(no_security, s); }
+#define TAINT          (PL_tainted = TRUE)
+#define TAINT_NOT      (PL_tainted = FALSE)
+#define TAINT_IF(c)    if (c) { PL_tainted = TRUE; }
+#define TAINT_ENV()    if (PL_tainting) { taint_env(); }
+#define TAINT_PROPER(s)        if (PL_tainting) { taint_proper(no_security, s); }
 
 /* XXX All process group stuff is handled in pp_sys.c.  Should these 
    defines move there?  If so, I could simplify this a lot. --AD  9/96.
@@ -594,10 +594,10 @@ Free_t   Perl_free _((Malloc_t where));
 #  define DEFSV THREADSV(0)
 #  define SAVE_DEFSV save_threadsv(0)
 #else
-#  define ERRSV GvSV(errgv)
-#  define ERRHV GvHV(errgv)
-#  define DEFSV GvSV(defgv)
-#  define SAVE_DEFSV SAVESPTR(GvSV(defgv))
+#  define ERRSV GvSV(PL_errgv)
+#  define ERRHV GvHV(PL_errgv)
+#  define DEFSV GvSV(PL_defgv)
+#  define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
 #endif /* USE_THREADS */
 
 #ifndef errno
@@ -1090,8 +1090,8 @@ typedef I32 (*filter_t) _((int, SV *, int));
 #endif
 
 #define FILTER_READ(idx, sv, len)  filter_read(idx, sv, len)
-#define FILTER_DATA(idx)          (AvARRAY(rsfp_filters)[idx])
-#define FILTER_ISREADER(idx)      (idx >= AvFILLp(rsfp_filters))
+#define FILTER_DATA(idx)          (AvARRAY(PL_rsfp_filters)[idx])
+#define FILTER_ISREADER(idx)      (idx >= AvFILLp(PL_rsfp_filters))
 
 #ifdef DOSISH
 # if defined(OS2)
@@ -1160,15 +1160,15 @@ typedef pthread_key_t perl_key;
        STMT_START {                                                    \
            statusvalue_vms = (n);                                      \
            if ((I32)statusvalue_vms == -1)                             \
-               statusvalue = -1;                                       \
+               PL_statusvalue = -1;                                    \
            else if (statusvalue_vms & STS$M_SUCCESS)                   \
-               statusvalue = 0;                                        \
+               PL_statusvalue = 0;                                     \
            else if ((statusvalue_vms & STS$M_SEVERITY) == 0)           \
-               statusvalue = 1 << 8;                                   \
+               PL_statusvalue = 1 << 8;                                        \
            else                                                        \
-               statusvalue = (statusvalue_vms & STS$M_SEVERITY) << 8;  \
+               PL_statusvalue = (statusvalue_vms & STS$M_SEVERITY) << 8;       \
        } STMT_END
-#   define STATUS_POSIX        statusvalue
+#   define STATUS_POSIX        PL_statusvalue
 #   ifdef VMSISH_STATUS
 #      define STATUS_CURRENT   (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
 #   else
@@ -1176,29 +1176,29 @@ typedef pthread_key_t perl_key;
 #   endif
 #   define STATUS_POSIX_SET(n)                         \
        STMT_START {                                    \
-           statusvalue = (n);                          \
-           if (statusvalue != -1) {                    \
-               statusvalue &= 0xFFFF;                  \
-               statusvalue_vms = statusvalue ? 44 : 1; \
+           PL_statusvalue = (n);                               \
+           if (PL_statusvalue != -1) {                 \
+               PL_statusvalue &= 0xFFFF;                       \
+               statusvalue_vms = PL_statusvalue ? 44 : 1;      \
            }                                           \
            else statusvalue_vms = -1;                  \
        } STMT_END
-#   define STATUS_ALL_SUCCESS  (statusvalue = 0, statusvalue_vms = 1)
-#   define STATUS_ALL_FAILURE  (statusvalue = 1, statusvalue_vms = 44)
+#   define STATUS_ALL_SUCCESS  (PL_statusvalue = 0, statusvalue_vms = 1)
+#   define STATUS_ALL_FAILURE  (PL_statusvalue = 1, statusvalue_vms = 44)
 #else
 #   define STATUS_NATIVE       STATUS_POSIX
 #   define STATUS_NATIVE_EXPORT        STATUS_POSIX
 #   define STATUS_NATIVE_SET   STATUS_POSIX_SET
-#   define STATUS_POSIX                statusvalue
+#   define STATUS_POSIX                PL_statusvalue
 #   define STATUS_POSIX_SET(n)         \
        STMT_START {                    \
-           statusvalue = (n);          \
-           if (statusvalue != -1)      \
-               statusvalue &= 0xFFFF;  \
+           PL_statusvalue = (n);               \
+           if (PL_statusvalue != -1)   \
+               PL_statusvalue &= 0xFFFF;       \
        } STMT_END
 #   define STATUS_CURRENT STATUS_POSIX
-#   define STATUS_ALL_SUCCESS  (statusvalue = 0)
-#   define STATUS_ALL_FAILURE  (statusvalue = 1)
+#   define STATUS_ALL_SUCCESS  (PL_statusvalue = 0)
+#   define STATUS_ALL_FAILURE  (PL_statusvalue = 1)
 #endif
 
 /* Some unistd.h's give a prototype for pause() even though
@@ -1425,23 +1425,23 @@ Gid_t getegid _((void));
 #endif
 #define YYDEBUG 1
 #define DEB(a)                         a
-#define DEBUG(a)   if (debug)          a
-#define DEBUG_p(a) if (debug & 1)      a
-#define DEBUG_s(a) if (debug & 2)      a
-#define DEBUG_l(a) if (debug & 4)      a
-#define DEBUG_t(a) if (debug & 8)      a
-#define DEBUG_o(a) if (debug & 16)     a
-#define DEBUG_c(a) if (debug & 32)     a
-#define DEBUG_P(a) if (debug & 64)     a
-#define DEBUG_m(a) if (curinterp && debug & 128)       a
-#define DEBUG_f(a) if (debug & 256)    a
-#define DEBUG_r(a) if (debug & 512)    a
-#define DEBUG_x(a) if (debug & 1024)   a
-#define DEBUG_u(a) if (debug & 2048)   a
-#define DEBUG_L(a) if (debug & 4096)   a
-#define DEBUG_H(a) if (debug & 8192)   a
-#define DEBUG_X(a) if (debug & 16384)  a
-#define DEBUG_D(a) if (debug & 32768)  a
+#define DEBUG(a)   if (PL_debug)               a
+#define DEBUG_p(a) if (PL_debug & 1)   a
+#define DEBUG_s(a) if (PL_debug & 2)   a
+#define DEBUG_l(a) if (PL_debug & 4)   a
+#define DEBUG_t(a) if (PL_debug & 8)   a
+#define DEBUG_o(a) if (PL_debug & 16)  a
+#define DEBUG_c(a) if (PL_debug & 32)  a
+#define DEBUG_P(a) if (PL_debug & 64)  a
+#define DEBUG_m(a) if (PL_curinterp && PL_debug & 128) a
+#define DEBUG_f(a) if (PL_debug & 256) a
+#define DEBUG_r(a) if (PL_debug & 512) a
+#define DEBUG_x(a) if (PL_debug & 1024)        a
+#define DEBUG_u(a) if (PL_debug & 2048)        a
+#define DEBUG_L(a) if (PL_debug & 4096)        a
+#define DEBUG_H(a) if (PL_debug & 8192)        a
+#define DEBUG_X(a) if (PL_debug & 16384)       a
+#define DEBUG_D(a) if (PL_debug & 32768)       a
 #else
 #define DEB(a)
 #define DEBUG(a)
@@ -2276,27 +2276,27 @@ enum {
 #define PERLDBf_NONAME 0x40            /* For _SUB: no name of the subr. */
 #define PERLDBf_GOTO   0x80            /* Report goto: call DB::goto. */
 
-#define PERLDB_SUB     (perldb && (perldb & PERLDBf_SUB))
-#define PERLDB_LINE    (perldb && (perldb & PERLDBf_LINE))
-#define PERLDB_NOOPT   (perldb && (perldb & PERLDBf_NOOPT))
-#define PERLDB_INTER   (perldb && (perldb & PERLDBf_INTER))
-#define PERLDB_SUBLINE (perldb && (perldb & PERLDBf_SUBLINE))
-#define PERLDB_SINGLE  (perldb && (perldb & PERLDBf_SINGLE))
-#define PERLDB_SUB_NN  (perldb && (perldb & (PERLDBf_NONAME)))
-#define PERLDB_GOTO    (perldb && (perldb & PERLDBf_GOTO))
+#define PERLDB_SUB     (PL_perldb && (PL_perldb & PERLDBf_SUB))
+#define PERLDB_LINE    (PL_perldb && (PL_perldb & PERLDBf_LINE))
+#define PERLDB_NOOPT   (PL_perldb && (PL_perldb & PERLDBf_NOOPT))
+#define PERLDB_INTER   (PL_perldb && (PL_perldb & PERLDBf_INTER))
+#define PERLDB_SUBLINE (PL_perldb && (PL_perldb & PERLDBf_SUBLINE))
+#define PERLDB_SINGLE  (PL_perldb && (PL_perldb & PERLDBf_SINGLE))
+#define PERLDB_SUB_NN  (PL_perldb && (PL_perldb & (PERLDBf_NONAME)))
+#define PERLDB_GOTO    (PL_perldb && (PL_perldb & PERLDBf_GOTO))
 
 
 #ifdef USE_LOCALE_NUMERIC
 
 #define SET_NUMERIC_STANDARD() \
     STMT_START {                               \
-       if (! numeric_standard)                 \
+       if (! PL_numeric_standard)                      \
            perl_set_numeric_standard();        \
     } STMT_END
 
 #define SET_NUMERIC_LOCAL() \
     STMT_START {                               \
-       if (! numeric_local)                    \
+       if (! PL_numeric_local)                 \
            perl_set_numeric_local();           \
     } STMT_END
 
@@ -2325,9 +2325,9 @@ enum {
  */
 #define offer_nice_chunk(chunk, chunk_size) do {       \
        LOCK_SV_MUTEX;                                  \
-       if (!nice_chunk) {                              \
-           nice_chunk = (char*)(chunk);                \
-           nice_chunk_size = (chunk_size);             \
+       if (!PL_nice_chunk) {                           \
+           PL_nice_chunk = (char*)(chunk);             \
+           PL_nice_chunk_size = (chunk_size);          \
        }                                               \
        else {                                          \
            Safefree(chunk);                            \
diff --git a/perly.c b/perly.c
index 2f115b8..9b2137f 100644 (file)
--- a/perly.c
+++ b/perly.c
@@ -1516,9 +1516,9 @@ case 1:
 #line 86 "perly.y"
 {
 #if defined(YYDEBUG) && defined(DEBUGGING)
-                   yydebug = (debug & 1);
+                   yydebug = (PL_debug & 1);
 #endif
-                   expect = XSTATE;
+                   PL_expect = XSTATE;
                }
 break;
 case 2:
@@ -1527,8 +1527,8 @@ case 2:
 break;
 case 3:
 #line 97 "perly.y"
-{ if (copline > (line_t)yyvsp[-3].ival)
-                             copline = yyvsp[-3].ival;
+{ if (PL_copline > (line_t)yyvsp[-3].ival)
+                             PL_copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
 case 4:
@@ -1537,8 +1537,8 @@ case 4:
 break;
 case 5:
 #line 107 "perly.y"
-{ if (copline > (line_t)yyvsp[-3].ival)
-                             copline = yyvsp[-3].ival;
+{ if (PL_copline > (line_t)yyvsp[-3].ival)
+                             PL_copline = yyvsp[-3].ival;
                          yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
 break;
 case 6:
@@ -1557,8 +1557,8 @@ case 9:
 #line 121 "perly.y"
 {   yyval.opval = append_list(OP_LINESEQ,
                                (LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval);
-                           pad_reset_pending = TRUE;
-                           if (yyvsp[-1].opval && yyvsp[0].opval) hints |= HINT_BLOCK_SCOPE; }
+                           PL_pad_reset_pending = TRUE;
+                           if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 10:
 #line 128 "perly.y"
@@ -1571,14 +1571,14 @@ case 12:
                            }
                            else {
                              yyval.opval = Nullop;
-                             copline = NOLINE;
+                             PL_copline = NOLINE;
                            }
-                           expect = XSTATE; }
+                           PL_expect = XSTATE; }
 break;
 case 13:
 #line 140 "perly.y"
 { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval);
-                         expect = XSTATE; }
+                         PL_expect = XSTATE; }
 break;
 case 14:
 #line 145 "perly.y"
@@ -1619,20 +1619,20 @@ case 22:
 break;
 case 23:
 #line 166 "perly.y"
-{ copline = yyvsp[-5].ival;
+{ PL_copline = yyvsp[-5].ival;
                            yyval.opval = newSTATEOP(0, Nullch,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval));
-                           hints |= HINT_BLOCK_SCOPE; }
+                           PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 24:
 #line 173 "perly.y"
-{ copline = yyvsp[-6].ival;
+{ PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
 case 25:
 #line 177 "perly.y"
-{ copline = yyvsp[-6].ival;
+{ PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
 break;
@@ -1646,7 +1646,7 @@ case 27:
 break;
 case 28:
 #line 189 "perly.y"
-{ copline = yyvsp[-6].ival;
+{ PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
@@ -1654,7 +1654,7 @@ case 28:
 break;
 case 29:
 #line 195 "perly.y"
-{ copline = yyvsp[-6].ival;
+{ PL_copline = yyvsp[-6].ival;
                            yyval.opval = block_end(yyvsp[-4].ival,
                                   newSTATEOP(0, yyvsp[-7].pval,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
@@ -1683,7 +1683,7 @@ case 33:
                                        newWHILEOP(0, 1, (LOOP*)Nullop,
                                                   yyvsp[-9].ival, scalar(yyvsp[-4].opval),
                                                   yyvsp[0].opval, scalar(yyvsp[-2].opval)));
-                         copline = yyvsp[-9].ival;
+                         PL_copline = yyvsp[-9].ival;
                          yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); }
 break;
 case 34:
@@ -1770,10 +1770,10 @@ case 56:
 break;
 case 57:
 #line 294 "perly.y"
-{ char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv, na);
+{ char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv, PL_na);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END")
                              || strEQ(name, "INIT"))
-                             CvUNIQUE_on(compcv);
+                             CvUNIQUE_on(PL_compcv);
                          yyval.opval = yyvsp[0].opval; }
 break;
 case 58:
@@ -1786,7 +1786,7 @@ case 60:
 break;
 case 61:
 #line 307 "perly.y"
-{ yyval.opval = Nullop; expect = XSTATE; }
+{ yyval.opval = Nullop; PL_expect = XSTATE; }
 break;
 case 62:
 #line 311 "perly.y"
@@ -1798,7 +1798,7 @@ case 63:
 break;
 case 64:
 #line 317 "perly.y"
-{ CvUNIQUE_on(compcv); /* It's a BEGIN {} */ }
+{ CvUNIQUE_on(PL_compcv); /* It's a BEGIN {} */ }
 break;
 case 65:
 #line 319 "perly.y"
@@ -2042,21 +2042,21 @@ break;
 case 123:
 #line 465 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
 break;
 case 124:
 #line 468 "perly.y"
 { yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
 break;
 case 125:
 #line 473 "perly.y"
 { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
                                        jmaybe(yyvsp[-2].opval));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
 break;
 case 126:
 #line 478 "perly.y"
@@ -2081,7 +2081,7 @@ case 129:
                                    newLISTOP(OP_HSLICE, 0,
                                        list(yyvsp[-2].opval),
                                        ref(oopsHV(yyvsp[-4].opval), OP_HSLICE)));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
 break;
 case 130:
 #line 495 "perly.y"
@@ -2161,7 +2161,7 @@ break;
 case 143:
 #line 544 "perly.y"
 { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
-                           hints |= HINT_BLOCK_SCOPE; }
+                           PL_hints |= HINT_BLOCK_SCOPE; }
 break;
 case 144:
 #line 547 "perly.y"
@@ -2247,7 +2247,7 @@ case 165:
 break;
 case 166:
 #line 597 "perly.y"
-{ in_my = 0; yyval.opval = my(yyvsp[0].opval); }
+{ PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); }
 break;
 case 167:
 #line 601 "perly.y"
diff --git a/perly.y b/perly.y
index a1a1f0d..f9c5f74 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -85,17 +85,17 @@ dep(void)
 prog   :       /* NULL */
                {
 #if defined(YYDEBUG) && defined(DEBUGGING)
-                   yydebug = (debug & 1);
+                   yydebug = (PL_debug & 1);
 #endif
-                   expect = XSTATE;
+                   PL_expect = XSTATE;
                }
        /*CONTINUED*/   lineseq
                        { newPROG($2); }
        ;
 
 block  :       '{' remember lineseq '}'
-                       { if (copline > (line_t)$1)
-                             copline = $1;
+                       { if (PL_copline > (line_t)$1)
+                             PL_copline = $1;
                          $$ = block_end($2, $3); }
        ;
 
@@ -104,8 +104,8 @@ remember:   /* NULL */      /* start a full lexical scope */
        ;
 
 mblock :       '{' mremember lineseq '}'
-                       { if (copline > (line_t)$1)
-                             copline = $1;
+                       { if (PL_copline > (line_t)$1)
+                             PL_copline = $1;
                          $$ = block_end($2, $3); }
        ;
 
@@ -120,8 +120,8 @@ lineseq     :       /* NULL */
        |       lineseq line
                        {   $$ = append_list(OP_LINESEQ,
                                (LISTOP*)$1, (LISTOP*)$2);
-                           pad_reset_pending = TRUE;
-                           if ($1 && $2) hints |= HINT_BLOCK_SCOPE; }
+                           PL_pad_reset_pending = TRUE;
+                           if ($1 && $2) PL_hints |= HINT_BLOCK_SCOPE; }
        ;
 
 line   :       label cond
@@ -133,12 +133,12 @@ line      :       label cond
                            }
                            else {
                              $$ = Nullop;
-                             copline = NOLINE;
+                             PL_copline = NOLINE;
                            }
-                           expect = XSTATE; }
+                           PL_expect = XSTATE; }
        |       label sideff ';'
                        { $$ = newSTATEOP(0, $1, $2);
-                         expect = XSTATE; }
+                         PL_expect = XSTATE; }
        ;
 
 sideff :       error
@@ -163,18 +163,18 @@ else      :       /* NULL */
        |       ELSE mblock
                        { $$ = scope($2); }
        |       ELSIF '(' mexpr ')' mblock else
-                       { copline = $1;
+                       { PL_copline = $1;
                            $$ = newSTATEOP(0, Nullch,
                                   newCONDOP(0, $3, scope($5), $6));
-                           hints |= HINT_BLOCK_SCOPE; }
+                           PL_hints |= HINT_BLOCK_SCOPE; }
        ;
 
 cond   :       IF '(' remember mexpr ')' mblock else
-                       { copline = $1;
+                       { PL_copline = $1;
                            $$ = block_end($3,
                                   newCONDOP(0, $4, scope($6), $7)); }
        |       UNLESS '(' remember miexpr ')' mblock else
-                       { copline = $1;
+                       { PL_copline = $1;
                            $$ = block_end($3,
                                   newCONDOP(0, $4, scope($6), $7)); }
        ;
@@ -186,13 +186,13 @@ cont      :       /* NULL */
        ;
 
 loop   :       label WHILE '(' remember mtexpr ')' mblock cont
-                       { copline = $2;
+                       { PL_copline = $2;
                            $$ = block_end($4,
                                   newSTATEOP(0, $1,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
                                                $2, $5, $7, $8))); }
        |       label UNTIL '(' remember miexpr ')' mblock cont
-                       { copline = $2;
+                       { PL_copline = $2;
                            $$ = block_end($4,
                                   newSTATEOP(0, $1,
                                     newWHILEOP(0, 1, (LOOP*)Nullop,
@@ -214,7 +214,7 @@ loop        :       label WHILE '(' remember mtexpr ')' mblock cont
                                        newWHILEOP(0, 1, (LOOP*)Nullop,
                                                   $2, scalar($7),
                                                   $11, scalar($9)));
-                         copline = $2;
+                         PL_copline = $2;
                          $$ = block_end($4, newSTATEOP(0, $1, forop)); }
        |       label block cont  /* a block is a loop that happens once */
                        { $$ = newSTATEOP(0, $1,
@@ -291,10 +291,10 @@ startformsub:     /* NULL */      /* start a format subroutine scope */
                        { $$ = start_subparse(TRUE, 0); }
        ;
 
-subname        :       WORD    { char *name = SvPV(((SVOP*)$1)->op_sv, na);
+subname        :       WORD    { char *name = SvPV(((SVOP*)$1)->op_sv, PL_na);
                          if (strEQ(name, "BEGIN") || strEQ(name, "END")
                              || strEQ(name, "INIT"))
-                             CvUNIQUE_on(compcv);
+                             CvUNIQUE_on(PL_compcv);
                          $$ = $1; }
        ;
 
@@ -304,7 +304,7 @@ proto       :       /* NULL */
        ;
 
 subbody        :       block   { $$ = $1; }
-       |       ';'     { $$ = Nullop; expect = XSTATE; }
+       |       ';'     { $$ = Nullop; PL_expect = XSTATE; }
        ;
 
 package :      PACKAGE WORD ';'
@@ -314,7 +314,7 @@ package :   PACKAGE WORD ';'
        ;
 
 use    :       USE startsub
-                       { CvUNIQUE_on(compcv); /* It's a BEGIN {} */ }
+                       { CvUNIQUE_on(PL_compcv); /* It's a BEGIN {} */ }
                    WORD WORD listexpr ';'
                        { utilize($1, $2, $4, $5, $6); }
        ;
@@ -463,17 +463,17 @@ term      :       term ASSIGNOP term
                        { $$ = newUNOP(OP_AV2ARYLEN, 0, ref($1, OP_AV2ARYLEN));}
        |       scalar '{' expr ';' '}' %prec '('
                        { $$ = newBINOP(OP_HELEM, 0, oopsHV($1), jmaybe($3));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
        |       term ARROW '{' expr ';' '}'     %prec '('
                        { $$ = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF($1),OP_RV2HV),
                                        jmaybe($4));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
        |       term '{' expr ';' '}'   %prec '('
                        { assertref($1); $$ = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF($1),OP_RV2HV),
                                        jmaybe($3));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
        |       '(' expr ')' '[' expr ']'       %prec '('
                        { $$ = newSLICEOP(0, $5, $2); }
        |       '(' ')' '[' expr ']'    %prec '('
@@ -490,7 +490,7 @@ term        :       term ASSIGNOP term
                                    newLISTOP(OP_HSLICE, 0,
                                        list($3),
                                        ref(oopsHV($1), OP_HSLICE)));
-                           expect = XOPERATOR; }
+                           PL_expect = XOPERATOR; }
        |       THING   %prec '('
                        { $$ = $1; }
        |       amper
@@ -542,7 +542,7 @@ term        :       term ASSIGNOP term
                                       newCVREF(0, scalar($1)))); }
        |       LOOPEX
                        { $$ = newOP($1, OPf_SPECIAL);
-                           hints |= HINT_BLOCK_SCOPE; }
+                           PL_hints |= HINT_BLOCK_SCOPE; }
        |       LOOPEX term
                        { $$ = newLOOPEX($1,$2); }
        |       NOTOP argexpr
@@ -594,7 +594,7 @@ local       :       LOCAL   { $$ = 0; }
        ;
 
 my_scalar:     scalar
-                       { in_my = 0; $$ = my($1); }
+                       { PL_in_my = 0; $$ = my($1); }
        ;
 
 amper  :       '&' indirob
diff --git a/pp.c b/pp.c
index 8625a39..d304891 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -127,7 +127,7 @@ PP(pp_stub)
 {
     djSP;
     if (GIMME_V == G_SCALAR)
-       XPUSHs(&sv_undef);
+       XPUSHs(&PL_sv_undef);
     RETURN;
 }
 
@@ -142,7 +142,7 @@ PP(pp_padav)
 {
     djSP; dTARGET;
     if (op->op_private & OPpLVAL_INTRO)
-       SAVECLEARSV(curpad[op->op_targ]);
+       SAVECLEARSV(PL_curpad[op->op_targ]);
     EXTEND(SP, 1);
     if (op->op_flags & OPf_REF) {
        PUSHs(TARG);
@@ -155,7 +155,7 @@ PP(pp_padav)
            U32 i;
            for (i=0; i < maxarg; i++) {
                SV **svp = av_fetch((AV*)TARG, i, FALSE);
-               SP[i+1] = (svp) ? *svp : &sv_undef;
+               SP[i+1] = (svp) ? *svp : &PL_sv_undef;
            }
        }
        else {
@@ -179,7 +179,7 @@ PP(pp_padhv)
 
     XPUSHs(TARG);
     if (op->op_private & OPpLVAL_INTRO)
-       SAVECLEARSV(curpad[op->op_targ]);
+       SAVECLEARSV(PL_curpad[op->op_targ]);
     if (op->op_flags & OPf_REF)
        RETURN;
     gimme = GIMME_V;
@@ -234,11 +234,11 @@ PP(pp_rv2gv)
                if (op->op_flags & OPf_REF ||
                    op->op_private & HINT_STRICT_REFS)
                    DIE(no_usym, "a symbol");
-               if (dowarn)
+               if (PL_dowarn)
                    warn(warn_uninit);
                RETSETUNDEF;
            }
-           sym = SvPV(sv, na);
+           sym = SvPV(sv, PL_na);
            if (op->op_private & HINT_STRICT_REFS)
                DIE(no_symref, sym, "a symbol");
            sv = (SV*)gv_fetchpv(sym, TRUE, SVt_PVGV);
@@ -278,11 +278,11 @@ PP(pp_rv2sv)
                if (op->op_flags & OPf_REF ||
                    op->op_private & HINT_STRICT_REFS)
                    DIE(no_usym, "a SCALAR");
-               if (dowarn)
+               if (PL_dowarn)
                    warn(warn_uninit);
                RETSETUNDEF;
            }
-           sym = SvPV(sv, na);
+           sym = SvPV(sv, PL_na);
            if (op->op_private & HINT_STRICT_REFS)
                DIE(no_symref, sym, "a SCALAR");
            gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PV);
@@ -338,7 +338,7 @@ PP(pp_pos)
        if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
            mg = mg_find(sv, 'g');
            if (mg && mg->mg_len >= 0) {
-               PUSHi(mg->mg_len + curcop->cop_arybase);
+               PUSHi(mg->mg_len + PL_curcop->cop_arybase);
                RETURN;
            }
        }
@@ -360,7 +360,7 @@ PP(pp_rv2cv)
            cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
     }
     else
-       cv = (CV*)&sv_undef;
+       cv = (CV*)&PL_sv_undef;
     SETs((SV*)cv);
     RETURN;
 }
@@ -373,7 +373,7 @@ PP(pp_prototype)
     GV *gv;
     SV *ret;
 
-    ret = &sv_undef;
+    ret = &PL_sv_undef;
     if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
        char *s = SvPVX(TOPs);
        if (strnEQ(s, "CORE::", 6)) {
@@ -429,7 +429,7 @@ PP(pp_prototype)
 PP(pp_anoncode)
 {
     djSP;
-    CV* cv = (CV*)curpad[op->op_targ];
+    CV* cv = (CV*)PL_curpad[op->op_targ];
     if (CvCLONE(cv))
        cv = (CV*)sv_2mortal((SV*)cv_clone(cv));
     EXTEND(SP,1);
@@ -451,7 +451,7 @@ PP(pp_refgen)
        if (++MARK <= SP)
            *MARK = *SP;
        else
-           *MARK = &sv_undef;
+           *MARK = &PL_sv_undef;
        *MARK = refto(*MARK);
        SP = MARK;
        RETURN;
@@ -471,7 +471,7 @@ refto(SV *sv)
        if (LvTARGLEN(sv))
            vivify_defelem(sv);
        if (!(sv = LvTARG(sv)))
-           sv = &sv_undef;
+           sv = &PL_sv_undef;
     }
     else if (SvPADTMP(sv))
        sv = newSVsv(sv);
@@ -512,12 +512,12 @@ PP(pp_bless)
     HV *stash;
 
     if (MAXARG == 1)
-       stash = curcop->cop_stash;
+       stash = PL_curcop->cop_stash;
     else {
        SV *ssv = POPs;
        STRLEN len;
        char *ptr = SvPV(ssv,len);
-       if (dowarn && len == 0)
+       if (PL_dowarn && len == 0)
            warn("Explicit blessing to '' (assuming package main)");
        stash = gv_stashpvn(ptr, len, TRUE);
     }
@@ -535,7 +535,7 @@ PP(pp_gelem)
     djSP;
 
     sv = POPs;
-    elem = SvPV(sv, na);
+    elem = SvPV(sv, PL_na);
     gv = (GV*)POPs;
     tmpRef = Nullsv;
     sv = Nullsv;
@@ -583,7 +583,7 @@ PP(pp_gelem)
     if (sv)
        sv_2mortal(sv);
     else
-       sv = &sv_undef;
+       sv = &PL_sv_undef;
     XPUSHs(sv);
     RETURN;
 }
@@ -601,36 +601,36 @@ PP(pp_study)
     register I32 *snext;
     STRLEN len;
 
-    if (sv == lastscream) {
+    if (sv == PL_lastscream) {
        if (SvSCREAM(sv))
            RETPUSHYES;
     }
     else {
-       if (lastscream) {
-           SvSCREAM_off(lastscream);
-           SvREFCNT_dec(lastscream);
+       if (PL_lastscream) {
+           SvSCREAM_off(PL_lastscream);
+           SvREFCNT_dec(PL_lastscream);
        }
-       lastscream = SvREFCNT_inc(sv);
+       PL_lastscream = SvREFCNT_inc(sv);
     }
 
     s = (unsigned char*)(SvPV(sv, len));
     pos = len;
     if (pos <= 0)
        RETPUSHNO;
-    if (pos > maxscream) {
-       if (maxscream < 0) {
-           maxscream = pos + 80;
-           New(301, screamfirst, 256, I32);
-           New(302, screamnext, maxscream, I32);
+    if (pos > PL_maxscream) {
+       if (PL_maxscream < 0) {
+           PL_maxscream = pos + 80;
+           New(301, PL_screamfirst, 256, I32);
+           New(302, PL_screamnext, PL_maxscream, I32);
        }
        else {
-           maxscream = pos + pos / 4;
-           Renew(screamnext, maxscream, I32);
+           PL_maxscream = pos + pos / 4;
+           Renew(PL_screamnext, PL_maxscream, I32);
        }
     }
 
-    sfirst = screamfirst;
-    snext = screamnext;
+    sfirst = PL_screamfirst;
+    snext = PL_screamnext;
 
     if (!sfirst || !snext)
        DIE("do_study: out of memory");
@@ -767,7 +767,7 @@ PP(pp_undef)
        hv_undef((HV*)sv);
        break;
     case SVt_PVCV:
-       if (dowarn && cv_const_sv((CV*)sv))
+       if (PL_dowarn && cv_const_sv((CV*)sv))
            warn("Constant subroutine %s undefined",
                 CvANON((CV*)sv) ? "(anonymous)" : GvENAME(CvGV((CV*)sv)));
        /* FALL THROUGH */
@@ -778,14 +778,14 @@ PP(pp_undef)
        break;
     case SVt_PVGV:
        if (SvFAKE(sv))
-           SvSetMagicSV(sv, &sv_undef);
+           SvSetMagicSV(sv, &PL_sv_undef);
        else {
            GP *gp;
            gp_free((GV*)sv);
            Newz(602, gp, 1, GP);
            GvGP(sv) = gp_ref(gp);
            GvSV(sv) = NEWSV(72,0);
-           GvLINE(sv) = curcop->cop_line;
+           GvLINE(sv) = PL_curcop->cop_line;
            GvEGV(sv) = (GV*)sv;
            GvMULTI_on(sv);
        }
@@ -992,7 +992,7 @@ PP(pp_repeat)
 
        tmpstr = POPs;
        if (TARG == tmpstr && SvTHINKFIRST(tmpstr)) {
-           if (SvREADONLY(tmpstr) && curcop != &compiling)
+           if (SvREADONLY(tmpstr) && PL_curcop != &PL_compiling)
                DIE("Can't x= to readonly value");
            if (SvROK(tmpstr))
                sv_unref(tmpstr);
@@ -1128,7 +1128,7 @@ PP(pp_ncmp)
       else if (left > right)
        value = 1;
       else {
-       SETs(&sv_undef);
+       SETs(&PL_sv_undef);
        RETURN;
       }
       SETi(value);
@@ -1327,7 +1327,7 @@ PP(pp_not)
 #ifdef OVERLOAD
     djSP; tryAMAGICunSET(not);
 #endif /* OVERLOAD */
-    *stack_sp = boolSV(!SvTRUE(*stack_sp));
+    *PL_stack_sp = boolSV(!SvTRUE(*PL_stack_sp));
     return NORMAL;
 }
 
@@ -1641,7 +1641,7 @@ seed(void)
 #  endif
 #endif
     u += SEED_C3 * (U32)getpid();
-    u += SEED_C4 * (U32)(UV)stack_sp;
+    u += SEED_C4 * (U32)(UV)PL_stack_sp;
 #ifndef PLAN9           /* XXX Plan9 assembler chokes on this; fix needed  */
     u += SEED_C5 * (U32)(UV)&when;
 #endif
@@ -1793,7 +1793,7 @@ PP(pp_substr)
     I32 fail;
     I32 lvalue = op->op_flags & OPf_MOD;
     char *tmps;
-    I32 arybase = curcop->cop_arybase;
+    I32 arybase = PL_curcop->cop_arybase;
     char *repl = 0;
     STRLEN repl_len;
 
@@ -1843,7 +1843,7 @@ PP(pp_substr)
        rem -= pos;
     }
     if (fail < 0) {
-       if (dowarn || lvalue || repl)
+       if (PL_dowarn || lvalue || repl)
            warn("substr outside of string");
        RETPUSHUNDEF;
     }
@@ -1853,8 +1853,8 @@ PP(pp_substr)
        if (lvalue) {                   /* it's an lvalue! */
            if (!SvGMAGICAL(sv)) {
                if (SvROK(sv)) {
-                   SvPV_force(sv,na);
-                   if (dowarn)
+                   SvPV_force(sv,PL_na);
+                   if (PL_dowarn)
                        warn("Attempt to use reference as lvalue in substr");
                }
                if (SvOK(sv))           /* is it defined ? */
@@ -1974,7 +1974,7 @@ PP(pp_index)
     char *tmps;
     char *tmps2;
     STRLEN biglen;
-    I32 arybase = curcop->cop_arybase;
+    I32 arybase = PL_curcop->cop_arybase;
 
     if (MAXARG < 3)
        offset = 0;
@@ -2008,7 +2008,7 @@ PP(pp_rindex)
     I32 retval;
     char *tmps;
     char *tmps2;
-    I32 arybase = curcop->cop_arybase;
+    I32 arybase = PL_curcop->cop_arybase;
 
     if (MAXARG >= 3)
        offstr = POPs;
@@ -2088,11 +2088,11 @@ PP(pp_crypt)
 {
     djSP; dTARGET; dPOPTOPssrl;
 #ifdef HAS_CRYPT
-    char *tmps = SvPV(left, na);
+    char *tmps = SvPV(left, PL_na);
 #ifdef FCRYPT
     sv_setpv(TARG, fcrypt(tmps, SvPV(right, na)));
 #else
-    sv_setpv(TARG, crypt(tmps, SvPV(right, na)));
+    sv_setpv(TARG, crypt(tmps, SvPV(right, PL_na)));
 #endif
 #else
     DIE(
@@ -2114,7 +2114,7 @@ PP(pp_ucfirst)
        sv = TARG;
        SETs(sv);
     }
-    s = SvPV_force(sv, na);
+    s = SvPV_force(sv, PL_na);
     if (*s) {
        if (op->op_private & OPpLOCALE) {
            TAINT;
@@ -2140,7 +2140,7 @@ PP(pp_lcfirst)
        sv = TARG;
        SETs(sv);
     }
-    s = SvPV_force(sv, na);
+    s = SvPV_force(sv, PL_na);
     if (*s) {
        if (op->op_private & OPpLOCALE) {
            TAINT;
@@ -2254,7 +2254,7 @@ PP(pp_aslice)
     register SV** svp;
     register AV* av = (AV*)POPs;
     register I32 lval = op->op_flags & OPf_MOD;
-    I32 arybase = curcop->cop_arybase;
+    I32 arybase = PL_curcop->cop_arybase;
     I32 elem;
 
     if (SvTYPE(av) == SVt_PVAV) {
@@ -2275,12 +2275,12 @@ PP(pp_aslice)
                elem -= arybase;
            svp = av_fetch(av, elem, lval);
            if (lval) {
-               if (!svp || *svp == &sv_undef)
+               if (!svp || *svp == &PL_sv_undef)
                    DIE(no_aelem, elem);
                if (op->op_private & OPpLVAL_INTRO)
                    save_aelem(av, elem, svp);
            }
-           *MARK = svp ? *svp : &sv_undef;
+           *MARK = svp ? *svp : &PL_sv_undef;
        }
     }
     if (GIMME != G_ARRAY) {
@@ -2352,7 +2352,7 @@ PP(pp_delete)
                sv = hv_delete_ent(hv, *MARK, discard, 0);
            else
                DIE("Not a HASH reference");
-           *MARK = sv ? sv : &sv_undef;
+           *MARK = sv ? sv : &PL_sv_undef;
        }
        if (discard)
            SP = ORIGMARK;
@@ -2370,7 +2370,7 @@ PP(pp_delete)
        else
            DIE("Not a HASH reference");
        if (!sv)
-           sv = &sv_undef;
+           sv = &PL_sv_undef;
        if (!discard)
            PUSHs(sv);
     }
@@ -2412,12 +2412,12 @@ PP(pp_hslice)
                svp = avhv_fetch_ent((AV*)hv, keysv, lval, 0);
            }
            if (lval) {
-               if (!svp || *svp == &sv_undef)
-                   DIE(no_helem, SvPV(keysv, na));
+               if (!svp || *svp == &PL_sv_undef)
+                   DIE(no_helem, SvPV(keysv, PL_na));
                if (op->op_private & OPpLVAL_INTRO)
                    save_helem(hv, keysv, svp);
            }
-           *MARK = svp ? *svp : &sv_undef;
+           *MARK = svp ? *svp : &PL_sv_undef;
        }
     }
     if (GIMME != G_ARRAY) {
@@ -2437,7 +2437,7 @@ PP(pp_list)
        if (++MARK <= SP)
            *MARK = *SP;                /* unwanted list, return last item */
        else
-           *MARK = &sv_undef;
+           *MARK = &PL_sv_undef;
        SP = MARK;
     }
     RETURN;
@@ -2446,11 +2446,11 @@ PP(pp_list)
 PP(pp_lslice)
 {
     djSP;
-    SV **lastrelem = stack_sp;
-    SV **lastlelem = stack_base + POPMARK;
-    SV **firstlelem = stack_base + POPMARK + 1;
+    SV **lastrelem = PL_stack_sp;
+    SV **lastlelem = PL_stack_base + POPMARK;
+    SV **firstlelem = PL_stack_base + POPMARK + 1;
     register SV **firstrelem = lastlelem + 1;
-    I32 arybase = curcop->cop_arybase;
+    I32 arybase = PL_curcop->cop_arybase;
     I32 lval = op->op_flags & OPf_MOD;
     I32 is_something_there = lval;
 
@@ -2465,7 +2465,7 @@ PP(pp_lslice)
        else
            ix -= arybase;
        if (ix < 0 || ix >= max)
-           *firstlelem = &sv_undef;
+           *firstlelem = &PL_sv_undef;
        else
            *firstlelem = firstrelem[ix];
        SP = firstlelem;
@@ -2482,14 +2482,14 @@ PP(pp_lslice)
        if (ix < 0) {
            ix += max;
            if (ix < 0)
-               *lelem = &sv_undef;
+               *lelem = &PL_sv_undef;
            else if (!(*lelem = firstrelem[ix]))
-               *lelem = &sv_undef;
+               *lelem = &PL_sv_undef;
        }
        else {
            ix -= arybase;
            if (ix >= max || !(*lelem = firstrelem[ix]))
-               *lelem = &sv_undef;
+               *lelem = &PL_sv_undef;
        }
        if (!is_something_there && (SvOK(*lelem) || SvGMAGICAL(*lelem)))
            is_something_there = TRUE;
@@ -2521,7 +2521,7 @@ PP(pp_anonhash)
        SV *val = NEWSV(46, 0);
        if (MARK < SP)
            sv_setsv(val, *++MARK);
-       else if (dowarn)
+       else if (PL_dowarn)
            warn("Odd number of elements in hash assignment");
        (void)hv_store_ent(hv,key,val,0);
     }
@@ -2563,7 +2563,7 @@ PP(pp_splice)
        if (offset < 0)
            offset += AvFILLp(ary) + 1;
        else
-           offset -= curcop->cop_arybase;
+           offset -= PL_curcop->cop_arybase;
        if (offset < 0)
            DIE(no_aelem, i);
        if (++MARK < SP) {
@@ -2655,7 +2655,7 @@ PP(pp_splice)
        }
        i = -diff;
        while (i)
-           dst[--i] = &sv_undef;
+           dst[--i] = &PL_sv_undef;
        
        if (newlen) {
            for (src = tmparyval, dst = AvARRAY(ary) + offset;
@@ -2730,7 +2730,7 @@ PP(pp_splice)
            Safefree(tmparyval);
        }
        else
-           *MARK = &sv_undef;
+           *MARK = &PL_sv_undef;
     }
     SP = MARK;
     RETURN;
@@ -2740,7 +2740,7 @@ PP(pp_push)
 {
     djSP; dMARK; dORIGMARK; dTARGET;
     register AV *ary = (AV*)*++MARK;
-    register SV *sv = &sv_undef;
+    register SV *sv = &PL_sv_undef;
     MAGIC *mg;
 
     if (SvRMAGICAL(ary) && (mg = mg_find((SV*)ary,'P'))) {
@@ -2844,7 +2844,7 @@ PP(pp_reverse)
        STRLEN len;
 
        if (SP - MARK > 1)
-           do_join(TARG, &sv_no, MARK, SP);
+           do_join(TARG, &PL_sv_no, MARK, SP);
        else
            sv_setsv(TARG, (SP > MARK) ? *SP : DEFSV);
        up = SvPV_force(TARG, len);
@@ -2965,7 +2965,7 @@ PP(pp_unpack)
        default:
            croak("Invalid type in unpack: '%c'", (int)datumtype);
        case ',': /* grandfather in commas but with a warning */
-           if (commas++ == 0 && dowarn)
+           if (commas++ == 0 && PL_dowarn)
                warn("Invalid type in unpack: '%c'", (int)datumtype);
            break;
        case '%':
@@ -3096,7 +3096,7 @@ PP(pp_unpack)
                        bits >>= 4;
                    else
                        bits = *s++;
-                   *pat++ = hexdigit[bits & 15];
+                   *pat++ = PL_hexdigit[bits & 15];
                }
            }
            else {
@@ -3106,7 +3106,7 @@ PP(pp_unpack)
                        bits <<= 4;
                    else
                        bits = *s++;
-                   *pat++ = hexdigit[(bits >> 4) & 15];
+                   *pat++ = PL_hexdigit[(bits >> 4) & 15];
                }
            }
            *pat = '\0';
@@ -3398,7 +3398,7 @@ PP(pp_unpack)
                                break;
                            }
                        }
-                       t = SvPV(sv, na);
+                       t = SvPV(sv, PL_na);
                        while (*t == '0')
                            t++;
                        sv_chop(sv, t);
@@ -3594,7 +3594,7 @@ PP(pp_unpack)
        }
     }
     if (SP == oldsp && gimme == G_SCALAR)
-       PUSHs(&sv_undef);
+       PUSHs(&PL_sv_undef);
     RETURN;
 }
 
@@ -3626,7 +3626,7 @@ STATIC SV      *
 is_an_int(char *s, STRLEN l)
 {
   SV             *result = newSVpv("", l);
-  char           *result_c = SvPV(result, na); /* convenience */
+  char           *result_c = SvPV(result, PL_na);      /* convenience */
   char           *out = result_c;
   bool            skip = 1;
   bool            ignore = 0;
@@ -3734,7 +3734,7 @@ PP(pp_pack)
     MARK++;
     sv_setpvn(cat, "", 0);
     while (pat < patend) {
-#define NEXTFROM (items-- > 0 ? *MARK++ : &sv_no)
+#define NEXTFROM (items-- > 0 ? *MARK++ : &PL_sv_no)
        datumtype = *pat++ & 0xFF;
        if (isSPACE(datumtype))
            continue;
@@ -3753,7 +3753,7 @@ PP(pp_pack)
        default:
            croak("Invalid type in pack: '%c'", (int)datumtype);
        case ',': /* grandfather in commas but with a warning */
-           if (commas++ == 0 && dowarn)
+           if (commas++ == 0 && PL_dowarn)
                warn("Invalid type in pack: '%c'", (int)datumtype);
            break;
        case '%':
@@ -4118,7 +4118,7 @@ PP(pp_pack)
        case 'p':
            while (len-- > 0) {
                fromstr = NEXTFROM;
-               if (fromstr == &sv_undef)
+               if (fromstr == &PL_sv_undef)
                    aptr = NULL;
                else {
                    /* XXX better yet, could spirit away the string to
@@ -4126,12 +4126,12 @@ PP(pp_pack)
                     * of pack() (and all copies of the result) are
                     * gone.
                     */
-                   if (dowarn && (SvTEMP(fromstr) || SvPADTMP(fromstr)))
+                   if (PL_dowarn && (SvTEMP(fromstr) || SvPADTMP(fromstr)))
                        warn("Attempt to pack pointer to temporary value");
                    if (SvPOK(fromstr) || SvNIOK(fromstr))
-                       aptr = SvPV(fromstr,na);
+                       aptr = SvPV(fromstr,PL_na);
                    else
-                       aptr = SvPV_force(fromstr,na);
+                       aptr = SvPV_force(fromstr,PL_na);
                }
                sv_catpvn(cat, (char*)&aptr, sizeof(char*));
            }
@@ -4186,9 +4186,9 @@ PP(pp_split)
     I32 origlimit = limit;
     I32 realarray = 0;
     I32 base;
-    AV *oldstack = curstack;
+    AV *oldstack = PL_curstack;
     I32 gimme = GIMME_V;
-    I32 oldsave = savestack_ix;
+    I32 oldsave = PL_savestack_ix;
     I32 make_mortal = 1;
     MAGIC *mg = (MAGIC *) NULL;
 
@@ -4210,7 +4210,7 @@ PP(pp_split)
 #ifdef USE_THREADS
        ary = (AV*)curpad[0];
 #else
-       ary = GvAVn(defgv);
+       ary = GvAVn(PL_defgv);
 #endif /* USE_THREADS */
     else
        ary = Nullav;
@@ -4228,14 +4228,14 @@ PP(pp_split)
            if (!AvREAL(ary)) {
                AvREAL_on(ary);
                for (i = AvFILLp(ary); i >= 0; i--)
-                   AvARRAY(ary)[i] = &sv_undef;        /* don't free mere refs */
+                   AvARRAY(ary)[i] = &PL_sv_undef;     /* don't free mere refs */
            }
            /* temporarily switch stacks */
-           SWITCHSTACK(curstack, ary);
+           SWITCHSTACK(PL_curstack, ary);
            make_mortal = 0;
        }
     }
-    base = SP - stack_base;
+    base = SP - PL_stack_base;
     orig = s;
     if (pm->op_pmflags & PMf_SKIPWHITE) {
        if (pm->op_pmflags & PMf_LOCALE) {
@@ -4248,8 +4248,8 @@ PP(pp_split)
        }
     }
     if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
-       SAVEINT(multiline);
-       multiline = pm->op_pmflags & PMf_MULTILINE;
+       SAVEINT(PL_multiline);
+       PL_multiline = pm->op_pmflags & PMf_MULTILINE;
     }
 
     if (!limit)
@@ -4367,7 +4367,7 @@ PP(pp_split)
     }
 
     LEAVE_SCOPE(oldsave);
-    iters = (SP - stack_base) - base;
+    iters = (SP - PL_stack_base) - base;
     if (iters > maxiters)
        DIE("Split loop");
 
@@ -4411,7 +4411,7 @@ PP(pp_split)
                EXTEND(SP, iters);
                for (i=0; i < iters; i++) {
                    SV **svp = av_fetch(ary, i, FALSE);
-                   PUSHs((svp) ? *svp : &sv_undef);
+                   PUSHs((svp) ? *svp : &PL_sv_undef);
                }
                RETURN;
            }
diff --git a/pp.h b/pp.h
index de405f6..836ca1d 100644 (file)
--- a/pp.h
+++ b/pp.h
 #define MARK mark
 #define TARG targ
 
-#define PUSHMARK(p) if (++markstack_ptr == markstack_max)      \
+#define PUSHMARK(p) if (++PL_markstack_ptr == PL_markstack_max)        \
                        markstack_grow();                       \
-                   *markstack_ptr = (p) - stack_base
+                   *PL_markstack_ptr = (p) - PL_stack_base
 
-#define TOPMARK                (*markstack_ptr)
-#define POPMARK                (*markstack_ptr--)
+#define TOPMARK                (*PL_markstack_ptr)
+#define POPMARK                (*PL_markstack_ptr--)
 
-#define djSP           register SV **sp = stack_sp
+#define djSP           register SV **sp = PL_stack_sp
 #define dSP            dTHR; djSP
-#define dMARK          register SV **mark = stack_base + POPMARK
-#define dORIGMARK      I32 origmark = mark - stack_base
-#define SETORIGMARK    origmark = mark - stack_base
-#define ORIGMARK       (stack_base + origmark)
+#define dMARK          register SV **mark = PL_stack_base + POPMARK
+#define dORIGMARK      I32 origmark = mark - PL_stack_base
+#define SETORIGMARK    origmark = mark - PL_stack_base
+#define ORIGMARK       (PL_stack_base + origmark)
 
-#define SPAGAIN                sp = stack_sp
-#define MSPAGAIN       sp = stack_sp; mark = ORIGMARK
+#define SPAGAIN                sp = PL_stack_sp
+#define MSPAGAIN       sp = PL_stack_sp; mark = ORIGMARK
 
 #define GETTARGETSTACKED targ = (op->op_flags & OPf_STACKED ? POPs : PAD_SV(op->op_targ))
 #define dTARGETSTACKED SV * GETTARGETSTACKED
 #define NORMAL op->op_next
 #define DIE return die
 
-#define PUTBACK                stack_sp = sp
+#define PUTBACK                PL_stack_sp = sp
 #define RETURN         return PUTBACK, NORMAL
 #define RETURNOP(o)    return PUTBACK, o
 #define RETURNX(x)     return x, PUTBACK, NORMAL
 
 #define POPs           (*sp--)
-#define POPp           (SvPVx(POPs, na))
+#define POPp           (SvPVx(POPs, PL_na))
 #define POPn           (SvNVx(POPs))
 #define POPi           ((IV)SvIVx(POPs))
 #define POPu           ((UV)SvUVx(POPs))
 #define POPl           ((long)SvIVx(POPs))
 
 #define TOPs           (*sp)
-#define TOPp           (SvPV(TOPs, na))
+#define TOPp           (SvPV(TOPs, PL_na))
 #define TOPn           (SvNV(TOPs))
 #define TOPi           ((IV)SvIV(TOPs))
 #define TOPu           ((UV)SvUV(TOPs))
 #define TOPl           ((long)SvIV(TOPs))
 
 /* Go to some pains in the rare event that we must extend the stack. */
-#define EXTEND(p,n)    STMT_START { if (stack_max - p < (n)) {         \
+#define EXTEND(p,n)    STMT_START { if (PL_stack_max - p < (n)) {              \
                            sp = stack_grow(sp,p, (int) (n));           \
                        } } STMT_END
 
 /* Same thing, but update mark register too. */
-#define MEXTEND(p,n)   STMT_START {if (stack_max - p < (n)) {          \
-                           int markoff = mark - stack_base;            \
+#define MEXTEND(p,n)   STMT_START {if (PL_stack_max - p < (n)) {               \
+                           int markoff = mark - PL_stack_base;         \
                            sp = stack_grow(sp,p,(int) (n));            \
-                           mark = stack_base + markoff;                \
+                           mark = PL_stack_base + markoff;             \
                        } } STMT_END
 
 #define PUSHs(s)       (*++sp = (s))
 #define dPOPTOPiirl    dPOPXiirl(TOP)
 #define dPOPTOPiirl_ul dPOPXiirl_ul(TOP)
 
-#define RETPUSHYES     RETURNX(PUSHs(&sv_yes))
-#define RETPUSHNO      RETURNX(PUSHs(&sv_no))
-#define RETPUSHUNDEF   RETURNX(PUSHs(&sv_undef))
+#define RETPUSHYES     RETURNX(PUSHs(&PL_sv_yes))
+#define RETPUSHNO      RETURNX(PUSHs(&PL_sv_no))
+#define RETPUSHUNDEF   RETURNX(PUSHs(&PL_sv_undef))
 
-#define RETSETYES      RETURNX(SETs(&sv_yes))
-#define RETSETNO       RETURNX(SETs(&sv_no))
-#define RETSETUNDEF    RETURNX(SETs(&sv_undef))
+#define RETSETYES      RETURNX(SETs(&PL_sv_yes))
+#define RETSETNO       RETURNX(SETs(&PL_sv_no))
+#define RETSETUNDEF    RETURNX(SETs(&PL_sv_undef))
 
 #define ARGTARG                op->op_targ
 #define MAXARG         op->op_private
 
 #define SWITCHSTACK(f,t) \
     STMT_START {                                                       \
-       AvFILLp(f) = sp - stack_base;                                   \
-       stack_base = AvARRAY(t);                                        \
-       stack_max = stack_base + AvMAX(t);                              \
-       sp = stack_sp = stack_base + AvFILLp(t);                        \
-       curstack = t;                                                   \
+       AvFILLp(f) = sp - PL_stack_base;                                        \
+       PL_stack_base = AvARRAY(t);                                     \
+       PL_stack_max = PL_stack_base + AvMAX(t);                                \
+       sp = PL_stack_sp = PL_stack_base + AvFILLp(t);                  \
+       PL_curstack = t;                                                        \
     } STMT_END
 
 #define EXTEND_MORTAL(n) \
        STMT_START { \
-           if (tmps_ix + (n) >= tmps_max) \
-               Renew(tmps_stack, tmps_max = tmps_ix + (n) + 1, SV*); \
+           if (PL_tmps_ix + (n) >= PL_tmps_max) \
+               Renew(PL_tmps_stack, PL_tmps_max = PL_tmps_ix + (n) + 1, SV*); \
        } STMT_END
 
 #ifdef OVERLOAD
 #define AMGf_unary     8
 
 #define tryAMAGICbinW(meth,assign,set) STMT_START { \
-          if (amagic_generation) { \
+          if (PL_amagic_generation) { \
            SV* tmpsv; \
            SV* right= *(sp); SV* left= *(sp-1);\
            if ((SvAMAGIC(left)||SvAMAGIC(right))&&\
 #define tryAMAGICbin(meth,assign) tryAMAGICbinW(meth,assign,SETsv)
 #define tryAMAGICbinSET(meth,assign) tryAMAGICbinW(meth,assign,SETs)
 
-#define AMG_CALLun(sv,meth) amagic_call(sv,&sv_undef,  \
+#define AMG_CALLun(sv,meth) amagic_call(sv,&PL_sv_undef,  \
                                        CAT2(meth,_amg),AMGf_noright | AMGf_unary)
 #define AMG_CALLbinL(left,right,meth) \
             amagic_call(left,right,CAT2(meth,_amg),AMGf_noright)
 
 #define tryAMAGICunW(meth,set) STMT_START { \
-          if (amagic_generation) { \
+          if (PL_amagic_generation) { \
            SV* tmpsv; \
            SV* arg= *(sp); \
            if ((SvAMAGIC(arg))&&\
index c781870..fb990b9 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -72,7 +72,7 @@ PP(pp_regcreset)
 {
     /* XXXX Should store the old value to allow for tie/overload - and
        restore in regcomp, where marked with XXXX. */
-    reginterp_cnt = 0;
+    PL_reginterp_cnt = 0;
     return NORMAL;
 }
 
@@ -109,26 +109,26 @@ PP(pp_regcomp)
                pm->op_pmregexp = Null(REGEXP*);        /* crucial if regcomp aborts */
            }
            if (op->op_flags & OPf_SPECIAL)
-               reginterp_cnt = I32_MAX; /* Mark as safe.  */
+               PL_reginterp_cnt = I32_MAX; /* Mark as safe.  */
 
            pm->op_pmflags = pm->op_pmpermflags;        /* reset case sensitivity */
            pm->op_pmregexp = CALLREGCOMP(t, t + len, pm);
-           reginterp_cnt = 0;          /* XXXX Be extra paranoid - needed
+           PL_reginterp_cnt = 0;               /* XXXX Be extra paranoid - needed
                                           inside tie/overload accessors.  */
        }
     }
 
 #ifndef INCOMPLETE_TAINTS
-    if (tainting) {
-       if (tainted)
+    if (PL_tainting) {
+       if (PL_tainted)
            pm->op_pmdynflags |= PMdf_TAINTED;
        else
            pm->op_pmdynflags &= ~PMdf_TAINTED;
     }
 #endif
 
-    if (!pm->op_pmregexp->prelen && curpm)
-       pm = curpm;
+    if (!pm->op_pmregexp->prelen && PL_curpm)
+       pm = PL_curpm;
     else if (strEQ("\\s+", pm->op_pmregexp->precomp))
        pm->op_pmflags |= PMf_WHITE;
 
@@ -281,7 +281,7 @@ PP(pp_formline)
     I32 itemsize;
     I32 fieldsize;
     I32 lines = 0;
-    bool chopspace = (strchr(chopset, ' ') != Nullch);
+    bool chopspace = (strchr(PL_chopset, ' ') != Nullch);
     char *chophere;
     char *linemark;
     double value;
@@ -293,8 +293,8 @@ PP(pp_formline)
        doparseform(tmpForm);
     }
 
-    SvPV_force(formtarget, len);
-    t = SvGROW(formtarget, len + SvCUR(tmpForm) + 1);  /* XXX SvCUR bad */
+    SvPV_force(PL_formtarget, len);
+    t = SvGROW(PL_formtarget, len + SvCUR(tmpForm) + 1);  /* XXX SvCUR bad */
     t += len;
     f = SvPV(tmpForm, len);
     /* need to jump to the next word */
@@ -355,8 +355,8 @@ PP(pp_formline)
            if (MARK < SP)
                sv = *++MARK;
            else {
-               sv = &sv_no;
-               if (dowarn)
+               sv = &PL_sv_no;
+               if (PL_dowarn)
                    warn("Not enough format arguments");
            }
            break;
@@ -404,7 +404,7 @@ PP(pp_formline)
                    else {
                        if (*s & ~31)
                            gotsome = TRUE;
-                       if (strchr(chopset, *s))
+                       if (strchr(PL_chopset, *s))
                            chophere = s + 1;
                    }
                    s++;
@@ -471,10 +471,10 @@ PP(pp_formline)
                            lines++;
                    }
                }
-               SvCUR_set(formtarget, t - SvPVX(formtarget));
-               sv_catpvn(formtarget, item, itemsize);
-               SvGROW(formtarget, SvCUR(formtarget) + SvCUR(tmpForm) + 1);
-               t = SvPVX(formtarget) + SvCUR(formtarget);
+               SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
+               sv_catpvn(PL_formtarget, item, itemsize);
+               SvGROW(PL_formtarget, SvCUR(PL_formtarget) + SvCUR(tmpForm) + 1);
+               t = SvPVX(PL_formtarget) + SvCUR(PL_formtarget);
            }
            break;
 
@@ -512,14 +512,14 @@ PP(pp_formline)
            if (gotsome) {
                if (arg) {              /* repeat until fields exhausted? */
                    *t = '\0';
-                   SvCUR_set(formtarget, t - SvPVX(formtarget));
-                   lines += FmLINES(formtarget);
+                   SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
+                   lines += FmLINES(PL_formtarget);
                    if (lines == 200) {
                        arg = t - linemark;
                        if (strnEQ(linemark, linemark - arg, arg))
                            DIE("Runaway format");
                    }
-                   FmLINES(formtarget) = lines;
+                   FmLINES(PL_formtarget) = lines;
                    SP = ORIGMARK;
                    RETURNOP(cLISTOP->op_first);
                }
@@ -540,7 +540,7 @@ PP(pp_formline)
                }
                s = t - 3;
                if (strnEQ(s,"   ",3)) {
-                   while (s > SvPVX(formtarget) && isSPACE(s[-1]))
+                   while (s > SvPVX(PL_formtarget) && isSPACE(s[-1]))
                        s--;
                }
                *s++ = '.';
@@ -551,8 +551,8 @@ PP(pp_formline)
 
        case FF_END:
            *t = '\0';
-           SvCUR_set(formtarget, t - SvPVX(formtarget));
-           FmLINES(formtarget) += lines;
+           SvCUR_set(PL_formtarget, t - SvPVX(PL_formtarget));
+           FmLINES(PL_formtarget) += lines;
            SP = ORIGMARK;
            RETPUSHYES;
        }
@@ -564,13 +564,13 @@ PP(pp_grepstart)
     djSP;
     SV *src;
 
-    if (stack_base + *markstack_ptr == SP) {
+    if (PL_stack_base + *PL_markstack_ptr == SP) {
        (void)POPMARK;
        if (GIMME_V == G_SCALAR)
-           XPUSHs(&sv_no);
+           XPUSHs(&PL_sv_no);
        RETURNOP(op->op_next->op_next);
     }
-    stack_sp = stack_base + *markstack_ptr + 1;
+    PL_stack_sp = PL_stack_base + *PL_markstack_ptr + 1;
     pp_pushmark(ARGS);                         /* push dst */
     pp_pushmark(ARGS);                         /* push src */
     ENTER;                                     /* enter outer scope */
@@ -580,12 +580,12 @@ PP(pp_grepstart)
     /* SAVE_DEFSV does *not* suffice here */
     save_sptr(&THREADSV(0));
 #else
-    SAVESPTR(GvSV(defgv));
+    SAVESPTR(GvSV(PL_defgv));
 #endif /* USE_THREADS */
     ENTER;                                     /* enter inner scope */
-    SAVESPTR(curpm);
+    SAVESPTR(PL_curpm);
 
-    src = stack_base[*markstack_ptr];
+    src = PL_stack_base[*PL_markstack_ptr];
     SvTEMP_off(src);
     DEFSV = src;
 
@@ -603,27 +603,27 @@ PP(pp_mapstart)
 PP(pp_mapwhile)
 {
     djSP;
-    I32 diff = (SP - stack_base) - *markstack_ptr;
+    I32 diff = (SP - PL_stack_base) - *PL_markstack_ptr;
     I32 count;
     I32 shift;
     SV** src;
     SV** dst; 
 
-    ++markstack_ptr[-1];
+    ++PL_markstack_ptr[-1];
     if (diff) {
-       if (diff > markstack_ptr[-1] - markstack_ptr[-2]) {
-           shift = diff - (markstack_ptr[-1] - markstack_ptr[-2]);
-           count = (SP - stack_base) - markstack_ptr[-1] + 2;
+       if (diff > PL_markstack_ptr[-1] - PL_markstack_ptr[-2]) {
+           shift = diff - (PL_markstack_ptr[-1] - PL_markstack_ptr[-2]);
+           count = (SP - PL_stack_base) - PL_markstack_ptr[-1] + 2;
            
            EXTEND(SP,shift);
            src = SP;
            dst = (SP += shift);
-           markstack_ptr[-1] += shift;
-           *markstack_ptr += shift;
+           PL_markstack_ptr[-1] += shift;
+           *PL_markstack_ptr += shift;
            while (--count)
                *dst-- = *src--;
        }
-       dst = stack_base + (markstack_ptr[-2] += diff) - 1; 
+       dst = PL_stack_base + (PL_markstack_ptr[-2] += diff) - 1; 
        ++diff;
        while (--diff)
            *dst-- = SvTEMP(TOPs) ? POPs : sv_mortalcopy(POPs); 
@@ -631,16 +631,16 @@ PP(pp_mapwhile)
     LEAVE;                                     /* exit inner scope */
 
     /* All done yet? */
-    if (markstack_ptr[-1] > *markstack_ptr) {
+    if (PL_markstack_ptr[-1] > *PL_markstack_ptr) {
        I32 items;
        I32 gimme = GIMME_V;
 
        (void)POPMARK;                          /* pop top */
        LEAVE;                                  /* exit outer scope */
        (void)POPMARK;                          /* pop src */
-       items = --*markstack_ptr - markstack_ptr[-1];
+       items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
        (void)POPMARK;                          /* pop dst */
-       SP = stack_base + POPMARK;              /* pop original mark */
+       SP = PL_stack_base + POPMARK;           /* pop original mark */
        if (gimme == G_SCALAR) {
            dTARGET;
            XPUSHi(items);
@@ -653,9 +653,9 @@ PP(pp_mapwhile)
        SV *src;
 
        ENTER;                                  /* enter inner scope */
-       SAVESPTR(curpm);
+       SAVESPTR(PL_curpm);
 
-       src = stack_base[markstack_ptr[-1]];
+       src = PL_stack_base[PL_markstack_ptr[-1]];
        SvTEMP_off(src);
        DEFSV = src;
 
@@ -681,14 +681,14 @@ PP(pp_sort)
     }
 
     ENTER;
-    SAVEPPTR(sortcop);
+    SAVEPPTR(PL_sortcop);
     if (op->op_flags & OPf_STACKED) {
        if (op->op_flags & OPf_SPECIAL) {
            OP *kid = cLISTOP->op_first->op_sibling;    /* pass pushmark */
            kid = kUNOP->op_first;                      /* pass rv2gv */
            kid = kUNOP->op_first;                      /* pass leave */
-           sortcop = kid->op_next;
-           stash = curcop->cop_stash;
+           PL_sortcop = kid->op_next;
+           stash = PL_curcop->cop_stash;
        }
        else {
            cv = sv_2cv(*++MARK, &stash, &gv, 0);
@@ -708,17 +708,17 @@ PP(pp_sort)
                }
                DIE("Not a CODE reference in sort");
            }
-           sortcop = CvSTART(cv);
+           PL_sortcop = CvSTART(cv);
            SAVESPTR(CvROOT(cv)->op_ppaddr);
            CvROOT(cv)->op_ppaddr = ppaddr[OP_NULL];
 
-           SAVESPTR(curpad);
-           curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
+           SAVESPTR(PL_curpad);
+           PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]);
        }
     }
     else {
-       sortcop = Nullop;
-       stash = curcop->cop_stash;
+       PL_sortcop = Nullop;
+       stash = PL_curcop->cop_stash;
     }
 
     up = myorigmark + 1;
@@ -726,13 +726,13 @@ PP(pp_sort)
        /*SUPPRESS 560*/
        if (*up = *++MARK) {                    /* Weed out nulls. */
            SvTEMP_off(*up);
-           if (!sortcop && !SvPOK(*up))
-               (void)sv_2pv(*up, &na);
+           if (!PL_sortcop && !SvPOK(*up))
+               (void)sv_2pv(*up, &PL_na);
            up++;
        }
     }
     max = --up - myorigmark;
-    if (sortcop) {
+    if (PL_sortcop) {
        if (max > 1) {
            PERL_CONTEXT *cx;
            SV** newsp;
@@ -743,16 +743,16 @@ PP(pp_sort)
 
            CATCH_SET(TRUE);
            PUSHSTACKi(PERLSI_SORT);
-           if (sortstash != stash) {
-               firstgv = gv_fetchpv("a", TRUE, SVt_PV);
-               secondgv = gv_fetchpv("b", TRUE, SVt_PV);
-               sortstash = stash;
+           if (PL_sortstash != stash) {
+               PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV);
+               PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV);
+               PL_sortstash = stash;
            }
 
-           SAVESPTR(GvSV(firstgv));
-           SAVESPTR(GvSV(secondgv));
+           SAVESPTR(GvSV(PL_firstgv));
+           SAVESPTR(GvSV(PL_secondgv));
 
-           PUSHBLOCK(cx, CXt_NULL, stack_base);
+           PUSHBLOCK(cx, CXt_NULL, PL_stack_base);
            if (!(op->op_flags & OPf_SPECIAL)) {
                bool hasargs = FALSE;
                cx->cx_type = CXt_SUB;
@@ -761,10 +761,10 @@ PP(pp_sort)
                if (!CvDEPTH(cv))
                    (void)SvREFCNT_inc(cv); /* in preparation for POPSUB */
            }
-           sortcxix = cxstack_ix;
+           PL_sortcxix = cxstack_ix;
            qsortsv((myorigmark+1), max, FUNC_NAME_TO_PTR(sortcv));
 
-           POPBLOCK(cx,curpm);
+           POPBLOCK(cx,PL_curpm);
            POPSTACK;
            CATCH_SET(oldcatch);
        }
@@ -779,7 +779,7 @@ PP(pp_sort)
        }
     }
     LEAVE;
-    stack_sp = ORIGMARK + max;
+    PL_stack_sp = ORIGMARK + max;
     return nextop;
 }
 
@@ -804,7 +804,7 @@ PP(pp_flip)
        SV *targ = PAD_SV(op->op_targ);
 
        if ((op->op_private & OPpFLIP_LINENUM)
-         ? (last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(last_in_gv)))
+         ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
          : SvTRUE(sv) ) {
            sv_setiv(PAD_SV(cUNOP->op_first->op_targ), 1);
            if (op->op_flags & OPf_SPECIAL) {
@@ -870,7 +870,7 @@ PP(pp_flop)
        SV *targ = PAD_SV(cUNOP->op_first->op_targ);
        sv_inc(targ);
        if ((op->op_private & OPpFLIP_LINENUM)
-         ? (last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(last_in_gv)))
+         ? (PL_last_in_gv && SvIV(sv) == (IV)IoLINES(GvIOp(PL_last_in_gv)))
          : SvTRUE(sv) ) {
            sv_setiv(PAD_SV(((UNOP*)cUNOP->op_first)->op_first->op_targ), 0);
            sv_catpv(targ, "E0");
@@ -894,19 +894,19 @@ dopoptolabel(char *label)
        cx = &cxstack[i];
        switch (cx->cx_type) {
        case CXt_SUBST:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting substitution via %s", op_name[op->op_type]);
            break;
        case CXt_SUB:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting subroutine via %s", op_name[op->op_type]);
            break;
        case CXt_EVAL:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting eval via %s", op_name[op->op_type]);
            break;
        case CXt_NULL:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting pseudo-block via %s", op_name[op->op_type]);
            return -1;
        case CXt_LOOP:
@@ -1010,19 +1010,19 @@ dopoptoloop(I32 startingblock)
        cx = &cxstack[i];
        switch (cx->cx_type) {
        case CXt_SUBST:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting substitution via %s", op_name[op->op_type]);
            break;
        case CXt_SUB:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting subroutine via %s", op_name[op->op_type]);
            break;
        case CXt_EVAL:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting eval via %s", op_name[op->op_type]);
            break;
        case CXt_NULL:
-           if (dowarn)
+           if (PL_dowarn)
                warn("Exiting pseudo-block via %s", op_name[op->op_type]);
            return -1;
        case CXt_LOOP:
@@ -1070,14 +1070,14 @@ OP *
 die_where(char *message)
 {
     dSP;
-    if (in_eval) {
+    if (PL_in_eval) {
        I32 cxix;
        register PERL_CONTEXT *cx;
        I32 gimme;
        SV **newsp;
 
        if (message) {
-           if (in_eval & 4) {
+           if (PL_in_eval & 4) {
                SV **svp;
                STRLEN klen = strlen(message);
                
@@ -1101,9 +1101,9 @@ die_where(char *message)
                sv_setpv(ERRSV, message);
        }
        else
-           message = SvPVx(ERRSV, na);
+           message = SvPVx(ERRSV, PL_na);
 
-       while ((cxix = dopoptoeval(cxstack_ix)) < 0 && curstackinfo->si_prev) {
+       while ((cxix = dopoptoeval(cxstack_ix)) < 0 && PL_curstackinfo->si_prev) {
            dounwind(-1);
            POPSTACK;
        }
@@ -1114,7 +1114,7 @@ die_where(char *message)
            if (cxix < cxstack_ix)
                dounwind(cxix);
 
-           POPBLOCK(cx,curpm);
+           POPBLOCK(cx,PL_curpm);
            if (cx->cx_type != CXt_EVAL) {
                PerlIO_printf(PerlIO_stderr(), "panic: die %s", message);
                my_exit(1);
@@ -1122,13 +1122,13 @@ die_where(char *message)
            POPEVAL(cx);
 
            if (gimme == G_SCALAR)
-               *++newsp = &sv_undef;
-           stack_sp = newsp;
+               *++newsp = &PL_sv_undef;
+           PL_stack_sp = newsp;
 
            LEAVE;
 
            if (optype == OP_REQUIRE) {
-               char* msg = SvPVx(ERRSV, na);
+               char* msg = SvPVx(ERRSV, PL_na);
                DIE("%s", *msg ? msg : "Compilation failed in require");
            }
            return pop_return();
@@ -1174,7 +1174,7 @@ PP(pp_caller)
     register I32 cxix = dopoptosub(cxstack_ix);
     register PERL_CONTEXT *cx;
     register PERL_CONTEXT *ccstack = cxstack;
-    PERL_SI *top_si = curstackinfo;
+    PERL_SI *top_si = PL_curstackinfo;
     I32 dbcxix;
     I32 gimme;
     HV *hv;
@@ -1196,8 +1196,8 @@ PP(pp_caller)
                RETPUSHUNDEF;
            RETURN;
        }
-       if (DBsub && cxix >= 0 &&
-               ccstack[cxix].blk_sub.cv == GvCV(DBsub))
+       if (PL_DBsub && cxix >= 0 &&
+               ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
            count++;
        if (!count--)
            break;
@@ -1209,14 +1209,14 @@ PP(pp_caller)
         dbcxix = dopoptosub_at(ccstack, cxix - 1);
        /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
           field below is defined for any cx. */
-       if (DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(DBsub))
+       if (PL_DBsub && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
            cx = &ccstack[dbcxix];
     }
 
     if (GIMME != G_ARRAY) {
        hv = cx->blk_oldcop->cop_stash;
        if (!hv)
-           PUSHs(&sv_undef);
+           PUSHs(&PL_sv_undef);
        else {
            dTARGET;
            sv_setpv(TARG, HvNAME(hv));
@@ -1227,7 +1227,7 @@ PP(pp_caller)
 
     hv = cx->blk_oldcop->cop_stash;
     if (!hv)
-       PUSHs(&sv_undef);
+       PUSHs(&PL_sv_undef);
     else
        PUSHs(sv_2mortal(newSVpv(HvNAME(hv), 0)));
     PUSHs(sv_2mortal(newSVpv(SvPVX(GvSV(cx->blk_oldcop->cop_filegv)), 0)));
@@ -1246,39 +1246,39 @@ PP(pp_caller)
     }
     gimme = (I32)cx->blk_gimme;
     if (gimme == G_VOID)
-       PUSHs(&sv_undef);
+       PUSHs(&PL_sv_undef);
     else
        PUSHs(sv_2mortal(newSViv(gimme & G_ARRAY)));
     if (cx->cx_type == CXt_EVAL) {
        if (cx->blk_eval.old_op_type == OP_ENTEREVAL) {
            PUSHs(cx->blk_eval.cur_text);
-           PUSHs(&sv_no);
+           PUSHs(&PL_sv_no);
        } 
        else if (cx->blk_eval.old_name) { /* Try blocks have old_name == 0. */
            /* Require, put the name. */
            PUSHs(sv_2mortal(newSVpv(cx->blk_eval.old_name, 0)));
-           PUSHs(&sv_yes);
+           PUSHs(&PL_sv_yes);
        }
     }
     else if (cx->cx_type == CXt_SUB &&
            cx->blk_sub.hasargs &&
-           curcop->cop_stash == debstash)
+           PL_curcop->cop_stash == PL_debstash)
     {
        AV *ary = cx->blk_sub.argarray;
        int off = AvARRAY(ary) - AvALLOC(ary);
 
-       if (!dbargs) {
+       if (!PL_dbargs) {
            GV* tmpgv;
-           dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
+           PL_dbargs = GvAV(gv_AVadd(tmpgv = gv_fetchpv("DB::args", TRUE,
                                SVt_PVAV)));
            GvMULTI_on(tmpgv);
-           AvREAL_off(dbargs);         /* XXX Should be REIFY */
+           AvREAL_off(PL_dbargs);              /* XXX Should be REIFY */
        }
 
-       if (AvMAX(dbargs) < AvFILLp(ary) + off)
-           av_extend(dbargs, AvFILLp(ary) + off);
-       Copy(AvALLOC(ary), AvARRAY(dbargs), AvFILLp(ary) + 1 + off, SV*);
-       AvFILLp(dbargs) = AvFILLp(ary) + off;
+       if (AvMAX(PL_dbargs) < AvFILLp(ary) + off)
+           av_extend(PL_dbargs, AvFILLp(ary) + off);
+       Copy(AvALLOC(ary), AvARRAY(PL_dbargs), AvFILLp(ary) + 1 + off, SV*);
+       AvFILLp(PL_dbargs) = AvFILLp(ary) + off;
     }
     RETURN;
 }
@@ -1287,20 +1287,20 @@ STATIC I32
 sortcv(SV *a, SV *b)
 {
     dTHR;
-    I32 oldsaveix = savestack_ix;
-    I32 oldscopeix = scopestack_ix;
+    I32 oldsaveix = PL_savestack_ix;
+    I32 oldscopeix = PL_scopestack_ix;
     I32 result;
-    GvSV(firstgv) = a;
-    GvSV(secondgv) = b;
-    stack_sp = stack_base;
-    op = sortcop;
+    GvSV(PL_firstgv) = a;
+    GvSV(PL_secondgv) = b;
+    PL_stack_sp = PL_stack_base;
+    op = PL_sortcop;
     CALLRUNOPS();
-    if (stack_sp != stack_base + 1)
+    if (PL_stack_sp != PL_stack_base + 1)
        croak("Sort subroutine didn't return single value");
-    if (!SvNIOKp(*stack_sp))
+    if (!SvNIOKp(*PL_stack_sp))
        croak("Sort subroutine didn't return a numeric value");
-    result = SvIV(*stack_sp);
-    while (scopestack_ix > oldscopeix) {
+    result = SvIV(*PL_stack_sp);
+    while (PL_scopestack_ix > oldscopeix) {
        LEAVE;
     }
     leave_scope(oldsaveix);
@@ -1316,8 +1316,8 @@ PP(pp_reset)
        tmps = "";
     else
        tmps = POPp;
-    sv_reset(tmps, curcop->cop_stash);
-    PUSHs(&sv_yes);
+    sv_reset(tmps, PL_curcop->cop_stash);
+    PUSHs(&PL_sv_yes);
     RETURN;
 }
 
@@ -1328,12 +1328,12 @@ PP(pp_lineseq)
 
 PP(pp_dbstate)
 {
-    curcop = (COP*)op;
+    PL_curcop = (COP*)op;
     TAINT_NOT;         /* Each statement is presumed innocent */
-    stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
+    PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
     FREETMPS;
 
-    if (op->op_private || SvIV(DBsingle) || SvIV(DBsignal) || SvIV(DBtrace))
+    if (op->op_private || SvIV(PL_DBsingle) || SvIV(PL_DBsignal) || SvIV(PL_DBtrace))
     {
        djSP;
        register CV *cv;
@@ -1342,20 +1342,20 @@ PP(pp_dbstate)
        I32 hasargs;
        GV *gv;
 
-       gv = DBgv;
+       gv = PL_DBgv;
        cv = GvCV(gv);
        if (!cv)
            DIE("No DB::DB routine defined");
 
-       if (CvDEPTH(cv) >= 1 && !(debug & (1<<30))) /* don't do recursive DB::DB call */
+       if (CvDEPTH(cv) >= 1 && !(PL_debug & (1<<30))) /* don't do recursive DB::DB call */
            return NORMAL;
 
        ENTER;
        SAVETMPS;
 
-       SAVEI32(debug);
+       SAVEI32(PL_debug);
        SAVESTACK_POS();
-       debug = 0;
+       PL_debug = 0;
        hasargs = 0;
        SPAGAIN;
 
@@ -1364,8 +1364,8 @@ PP(pp_dbstate)
        PUSHSUB(cx);
        CvDEPTH(cv)++;
        (void)SvREFCNT_inc(cv);
-       SAVESPTR(curpad);
-       curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
+       SAVESPTR(PL_curpad);
+       PL_curpad = AvARRAY((AV*)*av_fetch(CvPADLIST(cv),1,FALSE));
        RETURNOP(CvSTART(cv));
     }
     else
@@ -1393,7 +1393,7 @@ PP(pp_enteriter)
     else
 #endif /* USE_THREADS */
     if (op->op_targ) {
-       svp = &curpad[op->op_targ];             /* "my" variable */
+       svp = &PL_curpad[op->op_targ];          /* "my" variable */
        SAVESPTR(*svp);
     }
     else {
@@ -1423,9 +1423,9 @@ PP(pp_enteriter)
        }
     }
     else {
-       cx->blk_loop.iterary = curstack;
-       AvFILLp(curstack) = SP - stack_base;
-       cx->blk_loop.iterix = MARK - stack_base;
+       cx->blk_loop.iterary = PL_curstack;
+       AvFILLp(PL_curstack) = SP - PL_stack_base;
+       cx->blk_loop.iterix = MARK - PL_stack_base;
     }
 
     RETURN;
@@ -1468,7 +1468,7 @@ PP(pp_leaveloop)
        if (mark < SP)
            *++newsp = sv_mortalcopy(*SP);
        else
-           *++newsp = &sv_undef;
+           *++newsp = &PL_sv_undef;
     }
     else {
        while (mark < SP) {
@@ -1480,7 +1480,7 @@ PP(pp_leaveloop)
     PUTBACK;
 
     POPLOOP2();                /* Stack values are safe: release loop vars ... */
-    curpm = newpm;     /* ... and pop $1 et al */
+    PL_curpm = newpm;  /* ... and pop $1 et al */
 
     LEAVE;
     LEAVE;
@@ -1500,12 +1500,12 @@ PP(pp_return)
     PMOP *newpm;
     I32 optype = 0;
 
-    if (curstackinfo->si_type == PERLSI_SORT) {
-       if (cxstack_ix == sortcxix || dopoptosub(cxstack_ix) <= sortcxix) {
-           if (cxstack_ix > sortcxix)
-               dounwind(sortcxix);
-           AvARRAY(curstack)[1] = *SP;
-           stack_sp = stack_base + 1;
+    if (PL_curstackinfo->si_type == PERLSI_SORT) {
+       if (cxstack_ix == PL_sortcxix || dopoptosub(cxstack_ix) <= PL_sortcxix) {
+           if (cxstack_ix > PL_sortcxix)
+               dounwind(PL_sortcxix);
+           AvARRAY(PL_curstack)[1] = *SP;
+           PL_stack_sp = PL_stack_base + 1;
            return 0;
        }
     }
@@ -1529,7 +1529,7 @@ PP(pp_return)
        {
            /* Unassume the success we assumed earlier. */
            char *name = cx->blk_eval.old_name;
-           (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
+           (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
            DIE("%s did not return a true value", name);
        }
        break;
@@ -1555,7 +1555,7 @@ PP(pp_return)
            } else
                *++newsp = sv_mortalcopy(*SP);
        } else
-           *++newsp = &sv_undef;
+           *++newsp = &PL_sv_undef;
     }
     else if (gimme == G_ARRAY) {
        while (++MARK <= SP) {
@@ -1564,13 +1564,13 @@ PP(pp_return)
            TAINT_NOT;          /* Each item is independent */
        }
     }
-    stack_sp = newsp;
+    PL_stack_sp = newsp;
 
     /* Stack values are safe: */
     if (popsub2) {
        POPSUB2();      /* release CV and @_ ... */
     }
-    curpm = newpm;     /* ... and pop $1 et al */
+    PL_curpm = newpm;  /* ... and pop $1 et al */
 
     LEAVE;
     return pop_return();
@@ -1589,7 +1589,7 @@ PP(pp_last)
     OP *nextop;
     SV **newsp;
     PMOP *newpm;
-    SV **mark = stack_base + cxstack[cxstack_ix].blk_oldsp;
+    SV **mark = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
 
     if (op->op_flags & OPf_SPECIAL) {
        cxix = dopoptoloop(cxstack_ix);
@@ -1630,7 +1630,7 @@ PP(pp_last)
            *++newsp = ((pop2 == CXt_SUB) && SvTEMP(*SP))
                        ? *SP : sv_mortalcopy(*SP);
        else
-           *++newsp = &sv_undef;
+           *++newsp = &PL_sv_undef;
     }
     else if (gimme == G_ARRAY) {
        while (++MARK <= SP) {
@@ -1652,7 +1652,7 @@ PP(pp_last)
        POPSUB2();      /* release CV and @_ ... */
        break;
     }
-    curpm = newpm;     /* ... and pop $1 et al */
+    PL_curpm = newpm;  /* ... and pop $1 et al */
 
     LEAVE;
     return nextop;
@@ -1678,7 +1678,7 @@ PP(pp_next)
        dounwind(cxix);
 
     TOPBLOCK(cx);
-    oldsave = scopestack[scopestack_ix - 1];
+    oldsave = PL_scopestack[PL_scopestack_ix - 1];
     LEAVE_SCOPE(oldsave);
     return cx->blk_loop.next_op;
 }
@@ -1703,7 +1703,7 @@ PP(pp_redo)
        dounwind(cxix);
 
     TOPBLOCK(cx);
-    oldsave = scopestack[scopestack_ix - 1];
+    oldsave = PL_scopestack[PL_scopestack_ix - 1];
     LEAVE_SCOPE(oldsave);
     return cx->blk_loop.redo_op;
 }
@@ -1736,7 +1736,7 @@ dofindlabel(OP *o, char *label, OP **opstack, OP **oplimit)
                return kid;
        }
        for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
-           if (kid == lastgotoprobe)
+           if (kid == PL_lastgotoprobe)
                continue;
            if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
                (ops == opstack ||
@@ -1799,19 +1799,19 @@ PP(pp_goto)
            TOPBLOCK(cx);
            if (cx->cx_type == CXt_EVAL && cx->blk_eval.old_op_type == OP_ENTEREVAL) 
                DIE("Can't goto subroutine from an eval-string");
-           mark = stack_sp;
+           mark = PL_stack_sp;
            if (cx->cx_type == CXt_SUB &&
                cx->blk_sub.hasargs) {   /* put @_ back onto stack */
                AV* av = cx->blk_sub.argarray;
                
                items = AvFILLp(av) + 1;
-               stack_sp++;
-               EXTEND(stack_sp, items); /* @_ could have been extended. */
-               Copy(AvARRAY(av), stack_sp, items, SV*);
-               stack_sp += items;
+               PL_stack_sp++;
+               EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
+               Copy(AvARRAY(av), PL_stack_sp, items, SV*);
+               PL_stack_sp += items;
 #ifndef USE_THREADS
-               SvREFCNT_dec(GvAV(defgv));
-               GvAV(defgv) = cx->blk_sub.savearray;
+               SvREFCNT_dec(GvAV(PL_defgv));
+               GvAV(PL_defgv) = cx->blk_sub.savearray;
 #endif /* USE_THREADS */
                AvREAL_off(av);
                av_clear(av);
@@ -1822,18 +1822,18 @@ PP(pp_goto)
 #ifdef USE_THREADS
                av = (AV*)curpad[0];
 #else
-               av = GvAV(defgv);
+               av = GvAV(PL_defgv);
 #endif
                items = AvFILLp(av) + 1;
-               stack_sp++;
-               EXTEND(stack_sp, items); /* @_ could have been extended. */
-               Copy(AvARRAY(av), stack_sp, items, SV*);
-               stack_sp += items;
+               PL_stack_sp++;
+               EXTEND(PL_stack_sp, items); /* @_ could have been extended. */
+               Copy(AvARRAY(av), PL_stack_sp, items, SV*);
+               PL_stack_sp += items;
            }
            if (cx->cx_type == CXt_SUB &&
                !(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth))
                SvREFCNT_dec(cx->blk_sub.cv);
-           oldsave = scopestack[scopestack_ix - 1];
+           oldsave = PL_scopestack[PL_scopestack_ix - 1];
            LEAVE_SCOPE(oldsave);
 
            /* Now do some callish stuff. */
@@ -1847,20 +1847,20 @@ PP(pp_goto)
                    }
                    fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
                    items = (*fp3)(CvXSUBANY(cv).any_i32,
-                                  mark - stack_base + 1,
+                                  mark - PL_stack_base + 1,
                                   items);
-                   SP = stack_base + items;
+                   SP = PL_stack_base + items;
                }
                else {
                    SV **newsp;
                    I32 gimme;
 
-                   stack_sp--;         /* There is no cv arg. */
+                   PL_stack_sp--;              /* There is no cv arg. */
                    /* Push a mark for the start of arglist */
                    PUSHMARK(mark); 
                    (void)(*CvXSUB(cv))(cv _PERL_OBJECT_THIS);
                    /* Pop the current context like a decent sub should */
-                   POPBLOCK(cx, curpm);
+                   POPBLOCK(cx, PL_curpm);
                    /* Do _not_ use PUTBACK, keep the XSUB's return stack! */
                }
                LEAVE;
@@ -1870,8 +1870,8 @@ PP(pp_goto)
                AV* padlist = CvPADLIST(cv);
                SV** svp = AvARRAY(padlist);
                if (cx->cx_type == CXt_EVAL) {
-                   in_eval = cx->blk_eval.old_in_eval;
-                   eval_root = cx->blk_eval.old_eval_root;
+                   PL_in_eval = cx->blk_eval.old_in_eval;
+                   PL_eval_root = cx->blk_eval.old_eval_root;
                    cx->cx_type = CXt_SUB;
                    cx->blk_sub.hasargs = 0;
                }
@@ -1881,7 +1881,7 @@ PP(pp_goto)
                if (CvDEPTH(cv) < 2)
                    (void)SvREFCNT_inc(cv);
                else {  /* save temporaries on recursion? */
-                   if (CvDEPTH(cv) == 100 && dowarn)
+                   if (CvDEPTH(cv) == 100 && PL_dowarn)
                        sub_crush_depth(cv);
                    if (CvDEPTH(cv) > AvFILLp(padlist)) {
                        AV *newpad = newAV();
@@ -1889,7 +1889,7 @@ PP(pp_goto)
                        I32 ix = AvFILLp((AV*)svp[1]);
                        svp = AvARRAY(svp[0]);
                        for ( ;ix > 0; ix--) {
-                           if (svp[ix] != &sv_undef) {
+                           if (svp[ix] != &PL_sv_undef) {
                                char *name = SvPVX(svp[ix]);
                                if ((SvFLAGS(svp[ix]) & SVf_FAKE)
                                    || *name == '&')
@@ -1938,18 +1938,18 @@ PP(pp_goto)
                    }
                }
 #endif /* USE_THREADS */               
-               SAVESPTR(curpad);
-               curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
+               SAVESPTR(PL_curpad);
+               PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
 #ifndef USE_THREADS
                if (cx->blk_sub.hasargs)
 #endif /* USE_THREADS */
                {
-                   AV* av = (AV*)curpad[0];
+                   AV* av = (AV*)PL_curpad[0];
                    SV** ary;
 
 #ifndef USE_THREADS
-                   cx->blk_sub.savearray = GvAV(defgv);
-                   GvAV(defgv) = (AV*)SvREFCNT_inc(av);
+                   cx->blk_sub.savearray = GvAV(PL_defgv);
+                   GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
 #endif /* USE_THREADS */
                    cx->blk_sub.argarray = av;
                    ++mark;
@@ -1981,7 +1981,7 @@ PP(pp_goto)
                     * We do not care about using sv to call CV;
                     * it's for informational purposes only.
                     */
-                   SV *sv = GvSV(DBsub);
+                   SV *sv = GvSV(PL_DBsub);
                    CV *gotocv;
                    
                    if (PERLDB_SUB_NN) {
@@ -1992,16 +1992,16 @@ PP(pp_goto)
                    }
                    if (  PERLDB_GOTO
                          && (gotocv = perl_get_cv("DB::goto", FALSE)) ) {
-                       PUSHMARK( stack_sp );
+                       PUSHMARK( PL_stack_sp );
                        perl_call_sv((SV*)gotocv, G_SCALAR | G_NODEBUG);
-                       stack_sp--;
+                       PL_stack_sp--;
                    }
                }
                RETURNOP(CvSTART(cv));
            }
        }
        else
-           label = SvPV(sv,na);
+           label = SvPV(sv,PL_na);
     }
     else if (op->op_flags & OPf_SPECIAL) {
        if (! do_dump)
@@ -2015,13 +2015,13 @@ PP(pp_goto)
 
        /* find label */
 
-       lastgotoprobe = 0;
+       PL_lastgotoprobe = 0;
        *enterops = 0;
        for (ix = cxstack_ix; ix >= 0; ix--) {
            cx = &cxstack[ix];
            switch (cx->cx_type) {
            case CXt_EVAL:
-               gotoprobe = eval_root; /* XXX not good for nested eval */
+               gotoprobe = PL_eval_root; /* XXX not good for nested eval */
                break;
            case CXt_LOOP:
                gotoprobe = cx->blk_oldcop->op_sibling;
@@ -2032,7 +2032,7 @@ PP(pp_goto)
                if (ix)
                    gotoprobe = cx->blk_oldcop->op_sibling;
                else
-                   gotoprobe = main_root;
+                   gotoprobe = PL_main_root;
                break;
            case CXt_SUB:
                if (CvDEPTH(cx->blk_sub.cv)) {
@@ -2045,14 +2045,14 @@ PP(pp_goto)
            default:
                if (ix)
                    DIE("panic: goto");
-               gotoprobe = main_root;
+               gotoprobe = PL_main_root;
                break;
            }
            retop = dofindlabel(gotoprobe, label,
                                enterops, enterops + GOTO_DEPTH);
            if (retop)
                break;
-           lastgotoprobe = gotoprobe;
+           PL_lastgotoprobe = gotoprobe;
        }
        if (!retop)
            DIE("Can't find label %s", label);
@@ -2066,7 +2066,7 @@ PP(pp_goto)
                ix = 0;
            dounwind(ix);
            TOPBLOCK(cx);
-           oldsave = scopestack[scopestack_ix];
+           oldsave = PL_scopestack[PL_scopestack_ix];
            LEAVE_SCOPE(oldsave);
        }
 
@@ -2091,17 +2091,17 @@ PP(pp_goto)
 #ifdef VMS
        if (!retop) retop = main_start;
 #endif
-       restartop = retop;
-       do_undump = TRUE;
+       PL_restartop = retop;
+       PL_do_undump = TRUE;
 
        my_unexec();
 
-       restartop = 0;          /* hmm, must be GNU unexec().. */
-       do_undump = FALSE;
+       PL_restartop = 0;               /* hmm, must be GNU unexec().. */
+       PL_do_undump = FALSE;
     }
 
-    if (top_env->je_prev) {
-        restartop = retop;
+    if (PL_top_env->je_prev) {
+        PL_restartop = retop;
         JMPENV_JUMP(3);
     }
 
@@ -2123,7 +2123,7 @@ PP(pp_exit)
 #endif
     }
     my_exit(anum);
-    PUSHs(&sv_undef);
+    PUSHs(&PL_sv_undef);
     RETURN;
 }
 
@@ -2204,7 +2204,7 @@ docatch(OP *o)
     op = o;
 #ifdef DEBUGGING
     assert(CATCH_GET == TRUE);
-    DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, top_env));
+    DEBUG_l(deb("Setting up local jumplevel %p, was %p\n", &cur_env, PL_top_env));
 #endif
     JMPENV_PUSH(ret);
     switch (ret) {
@@ -2214,12 +2214,12 @@ docatch(OP *o)
        JMPENV_JUMP(ret);
        /* NOTREACHED */
     case 3:
-       if (!restartop) {
+       if (!PL_restartop) {
            PerlIO_printf(PerlIO_stderr(), "panic: restartop\n");
            break;
        }
-       op = restartop;
-       restartop = 0;
+       op = PL_restartop;
+       PL_restartop = 0;
        /* FALL THROUGH */
     case 0:
         CALLRUNOPS();
@@ -2251,25 +2251,25 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
     SAVETMPS;
     /* switch to eval mode */
 
-    SAVESPTR(compiling.cop_filegv);
-    SAVEI16(compiling.cop_line);
-    sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++evalseq);
-    compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
-    compiling.cop_line = 1;
+    SAVESPTR(PL_compiling.cop_filegv);
+    SAVEI16(PL_compiling.cop_line);
+    sprintf(tmpbuf, "_<(%.10s_eval %lu)", code, (unsigned long)++PL_evalseq);
+    PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
+    PL_compiling.cop_line = 1;
     /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
        deleting the eval's FILEGV from the stash before gv_check() runs
        (i.e. before run-time proper). To work around the coredump that
        ensues, we always turn GvMULTI_on for any globals that were
        introduced within evals. See force_ident(). GSAR 96-10-12 */
     safestr = savepv(tmpbuf);
-    SAVEDELETE(defstash, safestr, strlen(safestr));
+    SAVEDELETE(PL_defstash, safestr, strlen(safestr));
     SAVEHINTS();
 #ifdef OP_IN_REGISTER
     opsave = op;
 #else
     SAVEPPTR(op);
 #endif
-    hints = 0;
+    PL_hints = 0;
 
     op = &dummy;
     op->op_type = 0;                   /* Avoid uninit warning. */
@@ -2277,13 +2277,13 @@ sv_compile_2op(SV *sv, OP** startop, char *code, AV** avp)
     PUSHBLOCK(cx, CXt_EVAL, SP);
     PUSHEVAL(cx, 0, compiling.cop_filegv);
     rop = doeval(G_SCALAR, startop);
-    POPBLOCK(cx,curpm);
+    POPBLOCK(cx,PL_curpm);
     POPEVAL(cx);
 
     (*startop)->op_type = OP_NULL;
     (*startop)->op_ppaddr = ppaddr[OP_NULL];
     lex_end();
-    *avp = (AV*)SvREFCNT_inc(comppad);
+    *avp = (AV*)SvREFCNT_inc(PL_comppad);
     LEAVE;
 #ifdef OP_IN_REGISTER
     op = opsave;
@@ -2302,21 +2302,21 @@ doeval(int gimme, OP** startop)
     AV* comppadlist;
     I32 i;
 
-    in_eval = 1;
+    PL_in_eval = 1;
 
     PUSHMARK(SP);
 
     /* set up a scratch pad */
 
-    SAVEI32(padix);
-    SAVESPTR(curpad);
-    SAVESPTR(comppad);
-    SAVESPTR(comppad_name);
-    SAVEI32(comppad_name_fill);
-    SAVEI32(min_intro_pending);
-    SAVEI32(max_intro_pending);
+    SAVEI32(PL_padix);
+    SAVESPTR(PL_curpad);
+    SAVESPTR(PL_comppad);
+    SAVESPTR(PL_comppad_name);
+    SAVEI32(PL_comppad_name_fill);
+    SAVEI32(PL_min_intro_pending);
+    SAVEI32(PL_max_intro_pending);
 
-    caller = compcv;
+    caller = PL_compcv;
     for (i = cxstack_ix - 1; i >= 0; i--) {
        PERL_CONTEXT *cx = &cxstack[i];
        if (cx->cx_type == CXt_EVAL)
@@ -2327,23 +2327,23 @@ doeval(int gimme, OP** startop)
        }
     }
 
-    SAVESPTR(compcv);
-    compcv = (CV*)NEWSV(1104,0);
-    sv_upgrade((SV *)compcv, SVt_PVCV);
-    CvUNIQUE_on(compcv);
+    SAVESPTR(PL_compcv);
+    PL_compcv = (CV*)NEWSV(1104,0);
+    sv_upgrade((SV *)PL_compcv, SVt_PVCV);
+    CvUNIQUE_on(PL_compcv);
 #ifdef USE_THREADS
     CvOWNER(compcv) = 0;
     New(666, CvMUTEXP(compcv), 1, perl_mutex);
     MUTEX_INIT(CvMUTEXP(compcv));
 #endif /* USE_THREADS */
 
-    comppad = newAV();
-    av_push(comppad, Nullsv);
-    curpad = AvARRAY(comppad);
-    comppad_name = newAV();
-    comppad_name_fill = 0;
-    min_intro_pending = 0;
-    padix = 0;
+    PL_comppad = newAV();
+    av_push(PL_comppad, Nullsv);
+    PL_curpad = AvARRAY(PL_comppad);
+    PL_comppad_name = newAV();
+    PL_comppad_name_fill = 0;
+    PL_min_intro_pending = 0;
+    PL_padix = 0;
 #ifdef USE_THREADS
     av_store(comppad_name, 0, newSVpv("@_", 2));
     curpad[0] = (SV*)newAV();
@@ -2352,69 +2352,69 @@ doeval(int gimme, OP** startop)
 
     comppadlist = newAV();
     AvREAL_off(comppadlist);
-    av_store(comppadlist, 0, (SV*)comppad_name);
-    av_store(comppadlist, 1, (SV*)comppad);
-    CvPADLIST(compcv) = comppadlist;
+    av_store(comppadlist, 0, (SV*)PL_comppad_name);
+    av_store(comppadlist, 1, (SV*)PL_comppad);
+    CvPADLIST(PL_compcv) = comppadlist;
 
     if (!saveop || saveop->op_type != OP_REQUIRE)
-       CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc(caller);
+       CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
 
-    SAVEFREESV(compcv);
+    SAVEFREESV(PL_compcv);
 
     /* make sure we compile in the right package */
 
-    newstash = curcop->cop_stash;
-    if (curstash != newstash) {
-       SAVESPTR(curstash);
-       curstash = newstash;
+    newstash = PL_curcop->cop_stash;
+    if (PL_curstash != newstash) {
+       SAVESPTR(PL_curstash);
+       PL_curstash = newstash;
     }
-    SAVESPTR(beginav);
-    beginav = newAV();
-    SAVEFREESV(beginav);
+    SAVESPTR(PL_beginav);
+    PL_beginav = newAV();
+    SAVEFREESV(PL_beginav);
 
     /* try to compile it */
 
-    eval_root = Nullop;
-    error_count = 0;
-    curcop = &compiling;
-    curcop->cop_arybase = 0;
-    SvREFCNT_dec(rs);
-    rs = newSVpv("\n", 1);
+    PL_eval_root = Nullop;
+    PL_error_count = 0;
+    PL_curcop = &PL_compiling;
+    PL_curcop->cop_arybase = 0;
+    SvREFCNT_dec(PL_rs);
+    PL_rs = newSVpv("\n", 1);
     if (saveop && saveop->op_flags & OPf_SPECIAL)
-       in_eval |= 4;
+       PL_in_eval |= 4;
     else
        sv_setpv(ERRSV,"");
-    if (yyparse() || error_count || !eval_root) {
+    if (yyparse() || PL_error_count || !PL_eval_root) {
        SV **newsp;
        I32 gimme;
        PERL_CONTEXT *cx;
        I32 optype = 0;                 /* Might be reset by POPEVAL. */
 
        op = saveop;
-       if (eval_root) {
-           op_free(eval_root);
-           eval_root = Nullop;
+       if (PL_eval_root) {
+           op_free(PL_eval_root);
+           PL_eval_root = Nullop;
        }
-       SP = stack_base + POPMARK;              /* pop original mark */
+       SP = PL_stack_base + POPMARK;           /* pop original mark */
        if (!startop) {
-           POPBLOCK(cx,curpm);
+           POPBLOCK(cx,PL_curpm);
            POPEVAL(cx);
            pop_return();
        }
        lex_end();
        LEAVE;
        if (optype == OP_REQUIRE) {
-           char* msg = SvPVx(ERRSV, na);
+           char* msg = SvPVx(ERRSV, PL_na);
            DIE("%s", *msg ? msg : "Compilation failed in require");
        } else if (startop) {
-           char* msg = SvPVx(ERRSV, na);
+           char* msg = SvPVx(ERRSV, PL_na);
 
-           POPBLOCK(cx,curpm);
+           POPBLOCK(cx,PL_curpm);
            POPEVAL(cx);
            croak("%sCompilation failed in regexp", (*msg ? msg : "Unknown error\n"));
        }
-       SvREFCNT_dec(rs);
-       rs = SvREFCNT_inc(nrs);
+       SvREFCNT_dec(PL_rs);
+       PL_rs = SvREFCNT_inc(PL_nrs);
 #ifdef USE_THREADS
        MUTEX_LOCK(&eval_mutex);
        eval_owner = 0;
@@ -2423,21 +2423,21 @@ doeval(int gimme, OP** startop)
 #endif /* USE_THREADS */
        RETPUSHUNDEF;
     }
-    SvREFCNT_dec(rs);
-    rs = SvREFCNT_inc(nrs);
-    compiling.cop_line = 0;
+    SvREFCNT_dec(PL_rs);
+    PL_rs = SvREFCNT_inc(PL_nrs);
+    PL_compiling.cop_line = 0;
     if (startop) {
-       *startop = eval_root;
-       SvREFCNT_dec(CvOUTSIDE(compcv));
-       CvOUTSIDE(compcv) = Nullcv;
+       *startop = PL_eval_root;
+       SvREFCNT_dec(CvOUTSIDE(PL_compcv));
+       CvOUTSIDE(PL_compcv) = Nullcv;
     } else
-       SAVEFREEOP(eval_root);
+       SAVEFREEOP(PL_eval_root);
     if (gimme & G_VOID)
-       scalarvoid(eval_root);
+       scalarvoid(PL_eval_root);
     else if (gimme & G_ARRAY)
-       list(eval_root);
+       list(PL_eval_root);
     else
-       scalar(eval_root);
+       scalar(PL_eval_root);
 
     DEBUG_x(dump_eval());
 
@@ -2447,7 +2447,7 @@ doeval(int gimme, OP** startop)
        if (cv) {
            dSP;
            PUSHMARK(SP);
-           XPUSHs((SV*)compiling.cop_filegv);
+           XPUSHs((SV*)PL_compiling.cop_filegv);
            PUTBACK;
            perl_call_sv((SV*)cv, G_DISCARD);
        }
@@ -2455,8 +2455,8 @@ doeval(int gimme, OP** startop)
 
     /* compiled okay, so do it */
 
-    CvDEPTH(compcv) = 1;
-    SP = stack_base + POPMARK;         /* pop original mark */
+    CvDEPTH(PL_compcv) = 1;
+    SP = PL_stack_base + POPMARK;              /* pop original mark */
     op = saveop;                       /* The caller may need it. */
 #ifdef USE_THREADS
     MUTEX_LOCK(&eval_mutex);
@@ -2465,7 +2465,7 @@ doeval(int gimme, OP** startop)
     MUTEX_UNLOCK(&eval_mutex);
 #endif /* USE_THREADS */
 
-    RETURNOP(eval_start);
+    RETURNOP(PL_eval_start);
 }
 
 PP(pp_require)
@@ -2484,9 +2484,9 @@ PP(pp_require)
     sv = POPs;
     if (SvNIOKp(sv) && !SvPOKp(sv)) {
        SET_NUMERIC_STANDARD();
-       if (atof(patchlevel) + 0.00000999 < SvNV(sv))
+       if (atof(PL_patchlevel) + 0.00000999 < SvNV(sv))
            DIE("Perl %s required--this is only version %s, stopped",
-               SvPV(sv,na),patchlevel);
+               SvPV(sv,PL_na),PL_patchlevel);
        RETPUSHYES;
     }
     name = SvPV(sv, len);
@@ -2494,8 +2494,8 @@ PP(pp_require)
        DIE("Null filename used");
     TAINT_PROPER("require");
     if (op->op_type == OP_REQUIRE &&
-      (svp = hv_fetch(GvHVn(incgv), name, len, 0)) &&
-      *svp != &sv_undef)
+      (svp = hv_fetch(GvHVn(PL_incgv), name, len, 0)) &&
+      *svp != &PL_sv_undef)
        RETPUSHYES;
 
     /* prepare to compile file */
@@ -2520,7 +2520,7 @@ PP(pp_require)
        tryrsfp = PerlIO_open(name,PERL_SCRIPT_MODE);
     }
     else {
-       AV *ar = GvAVn(incgv);
+       AV *ar = GvAVn(PL_incgv);
        I32 i;
 #ifdef VMS
        char *unixname;
@@ -2529,7 +2529,7 @@ PP(pp_require)
        {
            namesv = NEWSV(806, 0);
            for (i = 0; i <= AvFILL(ar); i++) {
-               char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
+               char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
 #ifdef VMS
                char *unixdir;
                if ((unixdir = tounixpath(dir, Nullch)) == Nullch)
@@ -2549,14 +2549,14 @@ PP(pp_require)
            }
        }
     }
-    SAVESPTR(compiling.cop_filegv);
-    compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
+    SAVESPTR(PL_compiling.cop_filegv);
+    PL_compiling.cop_filegv = gv_fetchfile(tryrsfp ? tryname : name);
     SvREFCNT_dec(namesv);
     if (!tryrsfp) {
        if (op->op_type == OP_REQUIRE) {
            SV *msg = sv_2mortal(newSVpvf("Can't locate %s in @INC", name));
            SV *dirmsgsv = NEWSV(0, 0);
-           AV *ar = GvAVn(incgv);
+           AV *ar = GvAVn(PL_incgv);
            I32 i;
            if (instr(SvPVX(msg), ".h "))
                sv_catpv(msg, " (change .h to .ph maybe?)");
@@ -2564,7 +2564,7 @@ PP(pp_require)
                sv_catpv(msg, " (did you run h2ph?)");
            sv_catpv(msg, " (@INC contains:");
            for (i = 0; i <= AvFILL(ar); i++) {
-               char *dir = SvPVx(*av_fetch(ar, i, TRUE), na);
+               char *dir = SvPVx(*av_fetch(ar, i, TRUE), PL_na);
                sv_setpvf(dirmsgsv, " %s", dir);
                sv_catsv(msg, dirmsgsv);
            }
@@ -2577,22 +2577,22 @@ PP(pp_require)
     }
 
     /* Assume success here to prevent recursive requirement. */
-    (void)hv_store(GvHVn(incgv), name, strlen(name),
-       newSVsv(GvSV(compiling.cop_filegv)), 0 );
+    (void)hv_store(GvHVn(PL_incgv), name, strlen(name),
+       newSVsv(GvSV(PL_compiling.cop_filegv)), 0 );
 
     ENTER;
     SAVETMPS;
     lex_start(sv_2mortal(newSVpv("",0)));
-    if (rsfp_filters){
-       save_aptr(&rsfp_filters);
-       rsfp_filters = NULL;
+    if (PL_rsfp_filters){
+       save_aptr(&PL_rsfp_filters);
+       PL_rsfp_filters = NULL;
     }
 
-    rsfp = tryrsfp;
+    PL_rsfp = tryrsfp;
     name = savepv(name);
     SAVEFREEPV(name);
     SAVEHINTS();
-    hints = 0;
+    PL_hints = 0;
  
     /* switch to eval mode */
 
@@ -2600,7 +2600,7 @@ PP(pp_require)
     PUSHBLOCK(cx, CXt_EVAL, SP);
     PUSHEVAL(cx, name, compiling.cop_filegv);
 
-    compiling.cop_line = 0;
+    PL_compiling.cop_line = 0;
 
     PUTBACK;
 #ifdef USE_THREADS
@@ -2624,7 +2624,7 @@ PP(pp_entereval)
     djSP;
     register PERL_CONTEXT *cx;
     dPOPss;
-    I32 gimme = GIMME_V, was = sub_generation;
+    I32 gimme = GIMME_V, was = PL_sub_generation;
     char tmpbuf[TYPE_DIGITS(long) + 12];
     char *safestr;
     STRLEN len;
@@ -2640,19 +2640,19 @@ PP(pp_entereval)
  
     /* switch to eval mode */
 
-    SAVESPTR(compiling.cop_filegv);
-    sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++evalseq);
-    compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
-    compiling.cop_line = 1;
+    SAVESPTR(PL_compiling.cop_filegv);
+    sprintf(tmpbuf, "_<(eval %lu)", (unsigned long)++PL_evalseq);
+    PL_compiling.cop_filegv = gv_fetchfile(tmpbuf+2);
+    PL_compiling.cop_line = 1;
     /* XXX For C<eval "...">s within BEGIN {} blocks, this ends up
        deleting the eval's FILEGV from the stash before gv_check() runs
        (i.e. before run-time proper). To work around the coredump that
        ensues, we always turn GvMULTI_on for any globals that were
        introduced within evals. See force_ident(). GSAR 96-10-12 */
     safestr = savepv(tmpbuf);
-    SAVEDELETE(defstash, safestr, strlen(safestr));
+    SAVEDELETE(PL_defstash, safestr, strlen(safestr));
     SAVEHINTS();
-    hints = op->op_targ;
+    PL_hints = op->op_targ;
 
     push_return(op->op_next);
     PUSHBLOCK(cx, CXt_EVAL, SP);
@@ -2660,8 +2660,8 @@ PP(pp_entereval)
 
     /* prepare to compile string */
 
-    if (PERLDB_LINE && curstash != debstash)
-       save_lines(GvAV(compiling.cop_filegv), linestr);
+    if (PERLDB_LINE && PL_curstash != PL_debstash)
+       save_lines(GvAV(PL_compiling.cop_filegv), PL_linestr);
     PUTBACK;
 #ifdef USE_THREADS
     MUTEX_LOCK(&eval_mutex);
@@ -2672,7 +2672,7 @@ PP(pp_entereval)
     MUTEX_UNLOCK(&eval_mutex);
 #endif /* USE_THREADS */
     ret = doeval(gimme, NULL);
-    if (PERLDB_INTER && was != sub_generation /* Some subs defined here. */
+    if (PERLDB_INTER && was != PL_sub_generation /* Some subs defined here. */
        && ret != op->op_next) {        /* Successive compilation. */
        strcpy(safestr, "_<(eval )");   /* Anything fake and short. */
     }
@@ -2708,7 +2708,7 @@ PP(pp_leaveeval)
        }
        else {
            MEXTEND(mark,0);
-           *MARK = &sv_undef;
+           *MARK = &PL_sv_undef;
        }
     }
     else {
@@ -2720,7 +2720,7 @@ PP(pp_leaveeval)
            }
        }
     }
-    curpm = newpm;     /* Don't pop $1 et al till now */
+    PL_curpm = newpm;  /* Don't pop $1 et al till now */
 
     /*
      * Closures mentioned at top level of eval cannot be referenced
@@ -2728,16 +2728,16 @@ PP(pp_leaveeval)
      * (Note that the fact that compcv and friends are still set here
      * is, AFAIK, an accident.)  --Chip
      */
-    if (AvFILLp(comppad_name) >= 0) {
-       SV **svp = AvARRAY(comppad_name);
+    if (AvFILLp(PL_comppad_name) >= 0) {
+       SV **svp = AvARRAY(PL_comppad_name);
        I32 ix;
-       for (ix = AvFILLp(comppad_name); ix >= 0; ix--) {
+       for (ix = AvFILLp(PL_comppad_name); ix >= 0; ix--) {
            SV *sv = svp[ix];
-           if (sv && sv != &sv_undef && *SvPVX(sv) == '&') {
+           if (sv && sv != &PL_sv_undef && *SvPVX(sv) == '&') {
                SvREFCNT_dec(sv);
-               svp[ix] = &sv_undef;
+               svp[ix] = &PL_sv_undef;
 
-               sv = curpad[ix];
+               sv = PL_curpad[ix];
                if (CvCLONE(sv)) {
                    SvREFCNT_dec(CvOUTSIDE(sv));
                    CvOUTSIDE(sv) = Nullcv;
@@ -2746,16 +2746,16 @@ PP(pp_leaveeval)
                    SvREFCNT_dec(sv);
                    sv = NEWSV(0,0);
                    SvPADTMP_on(sv);
-                   curpad[ix] = sv;
+                   PL_curpad[ix] = sv;
                }
            }
        }
     }
 
 #ifdef DEBUGGING
-    assert(CvDEPTH(compcv) == 1);
+    assert(CvDEPTH(PL_compcv) == 1);
 #endif
-    CvDEPTH(compcv) = 0;
+    CvDEPTH(PL_compcv) = 0;
     lex_end();
 
     if (optype == OP_REQUIRE &&
@@ -2763,7 +2763,7 @@ PP(pp_leaveeval)
     {
        /* Unassume the success we assumed earlier. */
        char *name = cx->blk_eval.old_name;
-       (void)hv_delete(GvHVn(incgv), name, strlen(name), G_DISCARD);
+       (void)hv_delete(GvHVn(PL_incgv), name, strlen(name), G_DISCARD);
        retop = die("%s did not return a true value", name);
        /* die_where() did LEAVE, or we won't be here */
     }
@@ -2788,9 +2788,9 @@ PP(pp_entertry)
     push_return(cLOGOP->op_other->op_next);
     PUSHBLOCK(cx, CXt_EVAL, SP);
     PUSHEVAL(cx, 0, 0);
-    eval_root = op;            /* Only needed so that goto works right. */
+    PL_eval_root = op;         /* Only needed so that goto works right. */
 
-    in_eval = 1;
+    PL_in_eval = 1;
     sv_setpv(ERRSV,"");
     PUTBACK;
     return DOCATCH(op->op_next);
@@ -2823,7 +2823,7 @@ PP(pp_leavetry)
        }
        else {
            MEXTEND(mark,0);
-           *MARK = &sv_undef;
+           *MARK = &PL_sv_undef;
        }
        SP = MARK;
     }
@@ -2836,7 +2836,7 @@ PP(pp_leavetry)
            }
        }
     }
-    curpm = newpm;     /* Don't pop $1 et al till now */
+    PL_curpm = newpm;  /* Don't pop $1 et al till now */
 
     LEAVE;
     sv_setpv(ERRSV,"");
index 4fe40cc..99e45d1 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -55,9 +55,9 @@ PP(pp_const)
 
 PP(pp_nextstate)
 {
-    curcop = (COP*)op;
+    PL_curcop = (COP*)op;
     TAINT_NOT;         /* Each statement is presumed innocent */
-    stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
+    PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
     FREETMPS;
     return NORMAL;
 }
@@ -80,7 +80,7 @@ PP(pp_null)
 
 PP(pp_pushmark)
 {
-    PUSHMARK(stack_sp);
+    PUSHMARK(PL_stack_sp);
     return NORMAL;
 }
 
@@ -122,7 +122,7 @@ PP(pp_sassign)
        SV *temp;
        temp = left; left = right; right = temp;
     }
-    if (tainting && tainted && !SvTAINTED(left))
+    if (PL_tainting && PL_tainted && !SvTAINTED(left))
        TAINT_NOT;
     SvSetMagicSV(right, left);
     SETs(right);
@@ -142,9 +142,9 @@ PP(pp_unstack)
 {
     I32 oldsave;
     TAINT_NOT;         /* Each statement is presumed innocent */
-    stack_sp = stack_base + cxstack[cxstack_ix].blk_oldsp;
+    PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
     FREETMPS;
-    oldsave = scopestack[scopestack_ix - 1];
+    oldsave = PL_scopestack[PL_scopestack_ix - 1];
     LEAVE_SCOPE(oldsave);
     return NORMAL;
 }
@@ -182,10 +182,10 @@ PP(pp_padsv)
     XPUSHs(TARG);
     if (op->op_flags & OPf_MOD) {
        if (op->op_private & OPpLVAL_INTRO)
-           SAVECLEARSV(curpad[op->op_targ]);
+           SAVECLEARSV(PL_curpad[op->op_targ]);
         else if (op->op_private & OPpDEREF) {
            PUTBACK;
-           vivify_ref(curpad[op->op_targ], op->op_private & OPpDEREF);
+           vivify_ref(PL_curpad[op->op_targ], op->op_private & OPpDEREF);
            SPAGAIN;
        }
     }
@@ -194,7 +194,7 @@ PP(pp_padsv)
 
 PP(pp_readline)
 {
-    last_in_gv = (GV*)(*stack_sp--);
+    PL_last_in_gv = (GV*)(*PL_stack_sp--);
     return do_readline();
 }
 
@@ -252,7 +252,7 @@ PP(pp_aelemfast)
     AV *av = GvAV((GV*)cSVOP->op_sv);
     U32 lval = op->op_flags & OPf_MOD;
     SV** svp = av_fetch(av, op->op_private, lval);
-    SV *sv = (svp ? *svp : &sv_undef);
+    SV *sv = (svp ? *svp : &PL_sv_undef);
     EXTEND(SP, 1);
     if (!lval && SvGMAGICAL(sv))       /* see note in pp_helem() */
        sv = sv_mortalcopy(sv);
@@ -302,7 +302,7 @@ PP(pp_print)
     if (op->op_flags & OPf_STACKED)
        gv = (GV*)*++MARK;
     else
-       gv = defoutgv;
+       gv = PL_defoutgv;
     if (SvRMAGICAL(gv) && (mg = mg_find((SV*)gv, 'q'))) {
        if (MARK == ORIGMARK) {
            /* If using default handle then we need to make space to 
@@ -326,36 +326,36 @@ PP(pp_print)
        RETURN;
     }
     if (!(io = GvIO(gv))) {
-       if (dowarn) {
+       if (PL_dowarn) {
            SV* sv = sv_newmortal();
             gv_fullname3(sv, gv, Nullch);
-            warn("Filehandle %s never opened", SvPV(sv,na));
+            warn("Filehandle %s never opened", SvPV(sv,PL_na));
         }
 
        SETERRNO(EBADF,RMS$_IFI);
        goto just_say_no;
     }
     else if (!(fp = IoOFP(io))) {
-       if (dowarn)  {
+       if (PL_dowarn)  {
            SV* sv = sv_newmortal();
             gv_fullname3(sv, gv, Nullch);
            if (IoIFP(io))
-               warn("Filehandle %s opened only for input", SvPV(sv,na));
+               warn("Filehandle %s opened only for input", SvPV(sv,PL_na));
            else
-               warn("print on closed filehandle %s", SvPV(sv,na));
+               warn("print on closed filehandle %s", SvPV(sv,PL_na));
        }
        SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
        goto just_say_no;
     }
     else {
        MARK++;
-       if (ofslen) {
+       if (PL_ofslen) {
            while (MARK <= SP) {
                if (!do_print(*MARK, fp))
                    break;
                MARK++;
                if (MARK <= SP) {
-                   if (PerlIO_write(fp, ofs, ofslen) == 0 || PerlIO_error(fp)) {
+                   if (PerlIO_write(fp, PL_ofs, PL_ofslen) == 0 || PerlIO_error(fp)) {
                        MARK--;
                        break;
                    }
@@ -372,8 +372,8 @@ PP(pp_print)
        if (MARK <= SP)
            goto just_say_no;
        else {
-           if (orslen)
-               if (PerlIO_write(fp, ors, orslen) == 0 || PerlIO_error(fp))
+           if (PL_orslen)
+               if (PerlIO_write(fp, PL_ors, PL_orslen) == 0 || PerlIO_error(fp))
                    goto just_say_no;
 
            if (IoFLAGS(io) & IOf_FLUSH)
@@ -382,12 +382,12 @@ PP(pp_print)
        }
     }
     SP = ORIGMARK;
-    PUSHs(&sv_yes);
+    PUSHs(&PL_sv_yes);
     RETURN;
 
   just_say_no:
     SP = ORIGMARK;
-    PUSHs(&sv_undef);
+    PUSHs(&PL_sv_undef);
     RETURN;
 }
 
@@ -429,13 +429,13 @@ PP(pp_rv2av)
                    if (op->op_flags & OPf_REF ||
                      op->op_private & HINT_STRICT_REFS)
                        DIE(no_usym, "an ARRAY");
-                   if (dowarn)
+                   if (PL_dowarn)
                        warn(warn_uninit);
                    if (GIMME == G_ARRAY)
                        RETURN;
                    RETPUSHUNDEF;
                }
-               sym = SvPV(sv,na);
+               sym = SvPV(sv,PL_na);
                if (op->op_private & HINT_STRICT_REFS)
                    DIE(no_symref, sym, "an ARRAY");
                gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
@@ -459,7 +459,7 @@ PP(pp_rv2av)
            U32 i; 
            for (i=0; i < maxarg; i++) {
                SV **svp = av_fetch(av, i, FALSE);
-               SP[i+1] = (svp) ? *svp : &sv_undef;
+               SP[i+1] = (svp) ? *svp : &PL_sv_undef;
            }
        } 
        else {
@@ -513,7 +513,7 @@ PP(pp_rv2hv)
                    if (op->op_flags & OPf_REF ||
                      op->op_private & HINT_STRICT_REFS)
                        DIE(no_usym, "a HASH");
-                   if (dowarn)
+                   if (PL_dowarn)
                        warn(warn_uninit);
                    if (GIMME == G_ARRAY) {
                        SP--;
@@ -521,7 +521,7 @@ PP(pp_rv2hv)
                    }
                    RETSETUNDEF;
                }
-               sym = SvPV(sv,na);
+               sym = SvPV(sv,PL_na);
                if (op->op_private & HINT_STRICT_REFS)
                    DIE(no_symref, sym, "a HASH");
                gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
@@ -539,7 +539,7 @@ PP(pp_rv2hv)
     }
 
     if (GIMME == G_ARRAY) { /* array wanted */
-       *stack_sp = (SV*)hv;
+       *PL_stack_sp = (SV*)hv;
        return do_kv(ARGS);
     }
     else {
@@ -560,9 +560,9 @@ PP(pp_rv2hv)
 PP(pp_aassign)
 {
     djSP;
-    SV **lastlelem = stack_sp;
-    SV **lastrelem = stack_base + POPMARK;
-    SV **firstrelem = stack_base + POPMARK + 1;
+    SV **lastlelem = PL_stack_sp;
+    SV **lastrelem = PL_stack_base + POPMARK;
+    SV **firstrelem = PL_stack_base + POPMARK + 1;
     SV **firstlelem = lastrelem + 1;
 
     register SV **relem;
@@ -576,7 +576,7 @@ PP(pp_aassign)
     I32 i;
     int magic;
 
-    delaymagic = DM_DELAY;             /* catch simultaneous items */
+    PL_delaymagic = DM_DELAY;          /* catch simultaneous items */
 
     /* If there's a common identifier on both sides we have to take
      * special care that assigning the identifier on the left doesn't
@@ -635,7 +635,7 @@ PP(pp_aassign)
                    if (*relem)
                        sv = *(relem++);
                    else
-                       sv = &sv_no, relem++;
+                       sv = &PL_sv_no, relem++;
                    tmpstr = NEWSV(29,0);
                    if (*relem)
                        sv_setsv(tmpstr,*relem);        /* value */
@@ -652,7 +652,7 @@ PP(pp_aassign)
                if (relem == lastrelem) {
                    if (*relem) {
                        HE *didstore;
-                       if (dowarn) {
+                       if (PL_dowarn) {
                            if (relem == firstrelem &&
                                SvROK(*relem) &&
                                ( SvTYPE(SvRV(*relem)) == SVt_PVAV ||
@@ -677,7 +677,7 @@ PP(pp_aassign)
            break;
        default:
            if (SvTHINKFIRST(sv)) {
-               if (SvREADONLY(sv) && curcop != &compiling) {
+               if (SvREADONLY(sv) && PL_curcop != &PL_compiling) {
                    if (!SvIMMORTAL(sv))
                        DIE(no_modify);
                    if (relem <= lastrelem)
@@ -692,18 +692,18 @@ PP(pp_aassign)
                *(relem++) = sv;
            }
            else
-               sv_setsv(sv, &sv_undef);
+               sv_setsv(sv, &PL_sv_undef);
            SvSETMAGIC(sv);
            break;
        }
     }
-    if (delaymagic & ~DM_DELAY) {
-       if (delaymagic & DM_UID) {
+    if (PL_delaymagic & ~DM_DELAY) {
+       if (PL_delaymagic & DM_UID) {
 #ifdef HAS_SETRESUID
            (void)setresuid(uid,euid,(Uid_t)-1);
 #else
 #  ifdef HAS_SETREUID
-           (void)setreuid(uid,euid);
+           (void)setreuid(PL_uid,PL_euid);
 #  else
 #    ifdef HAS_SETRUID
            if ((delaymagic & DM_UID) == DM_RUID) {
@@ -724,15 +724,15 @@ PP(pp_aassign)
            }
 #  endif /* HAS_SETREUID */
 #endif /* HAS_SETRESUID */
-           uid = (int)PerlProc_getuid();
-           euid = (int)PerlProc_geteuid();
+           PL_uid = (int)PerlProc_getuid();
+           PL_euid = (int)PerlProc_geteuid();
        }
-       if (delaymagic & DM_GID) {
+       if (PL_delaymagic & DM_GID) {
 #ifdef HAS_SETRESGID
            (void)setresgid(gid,egid,(Gid_t)-1);
 #else
 #  ifdef HAS_SETREGID
-           (void)setregid(gid,egid);
+           (void)setregid(PL_gid,PL_egid);
 #  else
 #    ifdef HAS_SETRGID
            if ((delaymagic & DM_GID) == DM_RGID) {
@@ -753,12 +753,12 @@ PP(pp_aassign)
            }
 #  endif /* HAS_SETREGID */
 #endif /* HAS_SETRESGID */
-           gid = (int)PerlProc_getgid();
-           egid = (int)PerlProc_getegid();
+           PL_gid = (int)PerlProc_getgid();
+           PL_egid = (int)PerlProc_getegid();
        }
-       tainting |= (uid && (euid != uid || egid != gid));
+       PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
     }
-    delaymagic = 0;
+    PL_delaymagic = 0;
 
     gimme = GIMME_V;
     if (gimme == G_VOID)
@@ -775,7 +775,7 @@ PP(pp_aassign)
            SP = firstrelem + (lastlelem - firstlelem);
        lelem = firstlelem + (relem - firstrelem);
        while (relem <= SP)
-           *relem++ = (lelem <= lastlelem) ? *lelem++ : &sv_undef;
+           *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
     }
     RETURN;
 }
@@ -805,7 +805,7 @@ PP(pp_match)
     I32 gimme = GIMME;
     STRLEN len;
     I32 minmatch = 0;
-    I32 oldsave = savestack_ix;
+    I32 oldsave = PL_savestack_ix;
     I32 update_minmatch = 1;
     SV *screamer;
 
@@ -821,7 +821,7 @@ PP(pp_match)
     if (!s)
        DIE("panic: do_match");
     rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
-                (tainted && (pm->op_pmflags & PMf_RETAINT)));
+                (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
     TAINT_NOT;
 
     if (pm->op_pmdynflags & PMdf_USED) {
@@ -831,8 +831,8 @@ PP(pp_match)
        RETPUSHNO;
     }
 
-    if (!rx->prelen && curpm) {
-       pm = curpm;
+    if (!rx->prelen && PL_curpm) {
+       pm = PL_curpm;
        rx = pm->op_pmregexp;
     }
     if (rx->minlen > len) goto failure;
@@ -856,11 +856,11 @@ PP(pp_match)
     if (!rx->nparens && !global)
        gimme = G_SCALAR;                       /* accidental array context? */
     safebase = (((gimme == G_ARRAY) || global || !rx->nparens)
-               && !sawampersand);
+               && !PL_sawampersand);
     safebase = safebase ? 0  : REXEC_COPY_STR ;
     if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
-       SAVEINT(multiline);
-       multiline = pm->op_pmflags & PMf_MULTILINE;
+       SAVEINT(PL_multiline);
+       PL_multiline = pm->op_pmflags & PMf_MULTILINE;
     }
 
 play_it_again:
@@ -876,20 +876,20 @@ play_it_again:
            if ( screamer ) {
                I32 p = -1;
                
-               if (screamfirst[BmRARE(rx->check_substr)] < 0)
+               if (PL_screamfirst[BmRARE(rx->check_substr)] < 0)
                    goto nope;
                else if (!(s = screaminstr(TARG, rx->check_substr, 
                                           rx->check_offset_min, 0, &p, 0)))
                    goto nope;
                else if ((rx->reganch & ROPT_CHECK_ALL)
-                        && !sawampersand && !SvTAIL(rx->check_substr))
+                        && !PL_sawampersand && !SvTAIL(rx->check_substr))
                    goto yup;
            }
            else if (!(s = fbm_instr((unsigned char*)s + rx->check_offset_min,
                                     (unsigned char*)strend, 
                                     rx->check_substr, 0)))
                goto nope;
-           else if ((rx->reganch & ROPT_CHECK_ALL) && !sawampersand)
+           else if ((rx->reganch & ROPT_CHECK_ALL) && !PL_sawampersand)
                goto yup;
            if (s && rx->check_offset_max < s - t) {
                ++BmUSEFUL(rx->check_substr);
@@ -900,7 +900,7 @@ play_it_again:
        }
        /* Now checkstring is fixed, i.e. at fixed offset from the
           beginning of match, and the match is anchored at s. */
-       else if (!multiline) {  /* Anchored near beginning of string. */
+       else if (!PL_multiline) {       /* Anchored near beginning of string. */
            I32 slen;
            if (*SvPVX(rx->check_substr) != s[rx->check_offset_min]
                || ((slen = SvCUR(rx->check_substr)) > 1
@@ -918,7 +918,7 @@ play_it_again:
     if (CALLREGEXEC(rx, s, strend, truebase, minmatch,
                      screamer, NULL, safebase))
     {
-       curpm = pm;
+       PL_curpm = pm;
        if (pm->op_pmflags & PMf_ONCE)
            pm->op_pmdynflags |= PMdf_USED;
        goto gotcha;
@@ -987,7 +987,7 @@ yup:                                        /* Confirmed by check_substr */
        RX_MATCH_TAINTED_on(rx);
     TAINT_IF(RX_MATCH_TAINTED(rx));
     ++BmUSEFUL(rx->check_substr);
-    curpm = pm;
+    PL_curpm = pm;
     if (pm->op_pmflags & PMf_ONCE)
        pm->op_pmdynflags |= PMdf_USED;
     Safefree(rx->subbase);
@@ -999,7 +999,7 @@ yup:                                        /* Confirmed by check_substr */
        rx->endp[0] = s + SvCUR(rx->check_substr);
        goto gotcha;
     }
-    if (sawampersand) {
+    if (PL_sawampersand) {
        char *tmps;
 
        tmps = rx->subbase = savepvn(t, strend-t);
@@ -1037,12 +1037,12 @@ do_readline(void)
     STRLEN tmplen = 0;
     STRLEN offset;
     PerlIO *fp;
-    register IO *io = GvIO(last_in_gv);
+    register IO *io = GvIO(PL_last_in_gv);
     register I32 type = op->op_type;
     I32 gimme = GIMME_V;
     MAGIC *mg;
 
-    if (SvRMAGICAL(last_in_gv) && (mg = mg_find((SV*)last_in_gv, 'q'))) {
+    if (SvRMAGICAL(PL_last_in_gv) && (mg = mg_find((SV*)PL_last_in_gv, 'q'))) {
        PUSHMARK(SP);
        XPUSHs(mg->mg_obj);
        PUTBACK;
@@ -1062,17 +1062,17 @@ do_readline(void)
                if (IoFLAGS(io) & IOf_START) {
                    IoFLAGS(io) &= ~IOf_START;
                    IoLINES(io) = 0;
-                   if (av_len(GvAVn(last_in_gv)) < 0) {
-                       do_open(last_in_gv,"-",1,FALSE,0,0,Nullfp);
-                       sv_setpvn(GvSV(last_in_gv), "-", 1);
-                       SvSETMAGIC(GvSV(last_in_gv));
+                   if (av_len(GvAVn(PL_last_in_gv)) < 0) {
+                       do_open(PL_last_in_gv,"-",1,FALSE,0,0,Nullfp);
+                       sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
+                       SvSETMAGIC(GvSV(PL_last_in_gv));
                        fp = IoIFP(io);
                        goto have_fp;
                    }
                }
-               fp = nextargv(last_in_gv);
+               fp = nextargv(PL_last_in_gv);
                if (!fp) { /* Note: fp != IoIFP(io) */
-                   (void)do_close(last_in_gv, FALSE); /* now it does*/
+                   (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
                    IoFLAGS(io) |= IOf_START;
                }
            }
@@ -1182,7 +1182,7 @@ do_readline(void)
 #endif /* !OS2 */
 #else /* !DOSISH */
 #if defined(CSH)
-               sv_setpvn(tmpcmd, cshname, cshlen);
+               sv_setpvn(tmpcmd, PL_cshname, PL_cshlen);
                sv_catpv(tmpcmd, " -cf 'set nonomatch; glob ");
                sv_catsv(tmpcmd, tmpglob);
                sv_catpv(tmpcmd, "' 2>/dev/null |");
@@ -1196,7 +1196,7 @@ do_readline(void)
 #endif
 #endif /* !CSH */
 #endif /* !DOSISH */
-               (void)do_open(last_in_gv, SvPVX(tmpcmd), SvCUR(tmpcmd),
+               (void)do_open(PL_last_in_gv, SvPVX(tmpcmd), SvCUR(tmpcmd),
                              FALSE, 0, 0, Nullfp);
                fp = IoIFP(io);
 #endif /* !VMS */
@@ -1207,8 +1207,8 @@ do_readline(void)
            SP--;
     }
     if (!fp) {
-       if (dowarn && io && !(IoFLAGS(io) & IOf_START))
-           warn("Read on closed filehandle <%s>", GvENAME(last_in_gv));
+       if (PL_dowarn && io && !(IoFLAGS(io) & IOf_START))
+           warn("Read on closed filehandle <%s>", GvENAME(PL_last_in_gv));
        if (gimme == G_SCALAR) {
            (void)SvOK_off(TARG);
            PUSHTARG;
@@ -1237,14 +1237,14 @@ do_readline(void)
        if (!sv_gets(sv, fp, offset)) {
            PerlIO_clearerr(fp);
            if (IoFLAGS(io) & IOf_ARGV) {
-               fp = nextargv(last_in_gv);
+               fp = nextargv(PL_last_in_gv);
                if (fp)
                    continue;
-               (void)do_close(last_in_gv, FALSE);
+               (void)do_close(PL_last_in_gv, FALSE);
                IoFLAGS(io) |= IOf_START;
            }
            else if (type == OP_GLOB) {
-               if (do_close(last_in_gv, FALSE) & ~0xFF)
+               if (do_close(PL_last_in_gv, FALSE) & ~0xFF)
                    warn("internal error: glob failed");
            }
            if (gimme == G_SCALAR) {
@@ -1264,9 +1264,9 @@ do_readline(void)
        if (type == OP_GLOB) {
            char *tmps;
 
-           if (SvCUR(sv) > 0 && SvCUR(rs) > 0) {
+           if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
                tmps = SvEND(sv) - 1;
-               if (*tmps == *SvPVX(rs)) {
+               if (*tmps == *SvPVX(PL_rs)) {
                    *tmps = '\0';
                    SvCUR(sv)--;
                }
@@ -1275,7 +1275,7 @@ do_readline(void)
                if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
                    strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
                        break;
-           if (*tmps && PerlLIO_stat(SvPVX(sv), &statbuf) < 0) {
+           if (*tmps && PerlLIO_stat(SvPVX(sv), &PL_statbuf) < 0) {
                (void)POPs;             /* Unmatched wildcard?  Chuck it... */
                continue;
            }
@@ -1343,11 +1343,11 @@ PP(pp_helem)
        RETPUSHUNDEF;
     }
     if (lval) {
-       if (!svp || *svp == &sv_undef) {
+       if (!svp || *svp == &PL_sv_undef) {
            SV* lv;
            SV* key2;
            if (!defer)
-               DIE(no_helem, SvPV(keysv, na));
+               DIE(no_helem, SvPV(keysv, PL_na));
            lv = sv_newmortal();
            sv_upgrade(lv, SVt_PVLV);
            LvTYPE(lv) = 'y';
@@ -1367,7 +1367,7 @@ PP(pp_helem)
        else if (op->op_private & OPpDEREF)
            vivify_ref(*svp, op->op_private & OPpDEREF);
     }
-    sv = (svp ? *svp : &sv_undef);
+    sv = (svp ? *svp : &PL_sv_undef);
     /* This makes C<local $tied{foo} = $tied{foo}> possible.
      * Pushing the magical RHS on to the stack is useless, since
      * that magic is soon destined to be misled by the local(),
@@ -1391,7 +1391,7 @@ PP(pp_leave)
 
     if (op->op_flags & OPf_SPECIAL) {
        cx = &cxstack[cxstack_ix];
-       cx->blk_oldpm = curpm;  /* fake block should preserve $1 et al */
+       cx->blk_oldpm = PL_curpm;       /* fake block should preserve $1 et al */
     }
 
     POPBLOCK(cx,newpm);
@@ -1416,7 +1416,7 @@ PP(pp_leave)
                *MARK = sv_mortalcopy(TOPs);
        else {
            MEXTEND(mark,0);
-           *MARK = &sv_undef;
+           *MARK = &PL_sv_undef;
        }
        SP = MARK;
     }
@@ -1429,7 +1429,7 @@ PP(pp_leave)
            }
        }
     }
-    curpm = newpm;     /* Don't pop $1 et al till now */
+    PL_curpm = newpm;  /* Don't pop $1 et al till now */
 
     LEAVE;
 
@@ -1501,7 +1501,7 @@ PP(pp_iter)
     }
 
     /* iterate array */
-    if (cx->blk_loop.iterix >= (av == curstack ? cx->blk_oldsp : AvFILL(av)))
+    if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
        RETPUSHNO;
 
     SvREFCNT_dec(*cx->blk_loop.itervar);
@@ -1511,8 +1511,8 @@ PP(pp_iter)
            : AvARRAY(av)[++cx->blk_loop.iterix])
        SvTEMP_off(sv);
     else
-       sv = &sv_undef;
-    if (av != curstack && SvIMMORTAL(sv)) {
+       sv = &PL_sv_undef;
+    if (av != PL_curstack && SvIMMORTAL(sv)) {
        SV *lv = cx->blk_loop.iterlval;
        if (lv && SvREFCNT(lv) > 1) {
            SvREFCNT_dec(lv);
@@ -1558,7 +1558,7 @@ PP(pp_subst)
     register REGEXP *rx = pm->op_pmregexp;
     STRLEN len;
     int force_on_match = 0;
-    I32 oldsave = savestack_ix;
+    I32 oldsave = PL_savestack_ix;
     I32 update_minmatch = 1;
     SV *screamer;
 
@@ -1580,8 +1580,8 @@ PP(pp_subst)
     if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
        force_on_match = 1;
     rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
-                (tainted && (pm->op_pmflags & PMf_RETAINT)));
-    if (tainted)
+                (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
+    if (PL_tainted)
        rxtainted |= 2;
     TAINT_NOT;
 
@@ -1592,18 +1592,18 @@ PP(pp_subst)
     strend = s + len;
     maxiters = (strend - s) + 10;
 
-    if (!rx->prelen && curpm) {
-       pm = curpm;
+    if (!rx->prelen && PL_curpm) {
+       pm = PL_curpm;
        rx = pm->op_pmregexp;
     }
     screamer = ( (SvSCREAM(TARG) && rx->check_substr
                  && SvTYPE(rx->check_substr) == SVt_PVBM
                  && SvVALID(rx->check_substr)) 
                ? TARG : Nullsv);
-    safebase = (!rx->nparens && !sawampersand) ? 0 : REXEC_COPY_STR;
+    safebase = (!rx->nparens && !PL_sawampersand) ? 0 : REXEC_COPY_STR;
     if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
-       SAVEINT(multiline);
-       multiline = pm->op_pmflags & PMf_MULTILINE;
+       SAVEINT(PL_multiline);
+       PL_multiline = pm->op_pmflags & PMf_MULTILINE;
     }
     orig = m = s;
     if (rx->check_substr) {
@@ -1611,7 +1611,7 @@ PP(pp_subst)
            if (screamer) {
                I32 p = -1;
                
-               if (screamfirst[BmRARE(rx->check_substr)] < 0)
+               if (PL_screamfirst[BmRARE(rx->check_substr)] < 0)
                    goto nope;
                else if (!(s = screaminstr(TARG, rx->check_substr, rx->check_offset_min, 0, &p, 0)))
                    goto nope;
@@ -1629,7 +1629,7 @@ PP(pp_subst)
        }
        /* Now checkstring is fixed, i.e. at fixed offset from the
           beginning of match, and the match is anchored at s. */
-       else if (!multiline) { /* Anchored at beginning of string. */
+       else if (!PL_multiline) { /* Anchored at beginning of string. */
            I32 slen;
            if (*SvPVX(rx->check_substr) != s[rx->check_offset_min]
                || ((slen = SvCUR(rx->check_substr)) > 1
@@ -1656,7 +1656,7 @@ PP(pp_subst)
        && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)) {
        if (!CALLREGEXEC(rx, s, strend, orig, 0, screamer, NULL, safebase)) {
            SPAGAIN;
-           PUSHs(&sv_no);
+           PUSHs(&PL_sv_no);
            LEAVE_SCOPE(oldsave);
            RETURN;
        }
@@ -1666,7 +1666,7 @@ PP(pp_subst)
            goto force_it;
        }
        d = s;
-       curpm = pm;
+       PL_curpm = pm;
        SvSCREAM_off(TARG);     /* disable possible screamer */
        if (once) {
            rxtainted |= RX_MATCH_TAINTED(rx);
@@ -1712,7 +1712,7 @@ PP(pp_subst)
            }
            TAINT_IF(rxtainted & 1);
            SPAGAIN;
-           PUSHs(&sv_yes);
+           PUSHs(&PL_sv_yes);
        }
        else {
            do {
@@ -1763,7 +1763,7 @@ PP(pp_subst)
        rxtainted |= RX_MATCH_TAINTED(rx);
        dstr = NEWSV(25, len);
        sv_setpvn(dstr, m, s-m);
-       curpm = pm;
+       PL_curpm = pm;
        if (!c) {
            register PERL_CONTEXT *cx;
            SPAGAIN;
@@ -1817,7 +1817,7 @@ nope:
 
 ret_no:         
     SPAGAIN;
-    PUSHs(&sv_no);
+    PUSHs(&PL_sv_no);
     LEAVE_SCOPE(oldsave);
     RETURN;
 }
@@ -1827,20 +1827,20 @@ PP(pp_grepwhile)
     djSP;
 
     if (SvTRUEx(POPs))
-       stack_base[markstack_ptr[-1]++] = stack_base[*markstack_ptr];
-    ++*markstack_ptr;
+       PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
+    ++*PL_markstack_ptr;
     LEAVE;                                     /* exit inner scope */
 
     /* All done yet? */
-    if (stack_base + *markstack_ptr > SP) {
+    if (PL_stack_base + *PL_markstack_ptr > SP) {
        I32 items;
        I32 gimme = GIMME_V;
 
        LEAVE;                                  /* exit outer scope */
        (void)POPMARK;                          /* pop src */
-       items = --*markstack_ptr - markstack_ptr[-1];
+       items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
        (void)POPMARK;                          /* pop dst */
-       SP = stack_base + POPMARK;              /* pop original mark */
+       SP = PL_stack_base + POPMARK;           /* pop original mark */
        if (gimme == G_SCALAR) {
            dTARGET;
            XPUSHi(items);
@@ -1853,9 +1853,9 @@ PP(pp_grepwhile)
        SV *src;
 
        ENTER;                                  /* enter inner scope */
-       SAVESPTR(curpm);
+       SAVESPTR(PL_curpm);
 
-       src = stack_base[*markstack_ptr];
+       src = PL_stack_base[*PL_markstack_ptr];
        SvTEMP_off(src);
        DEFSV = src;
 
@@ -1893,7 +1893,7 @@ PP(pp_leavesub)
                *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
        } else {
            MEXTEND(MARK, 0);
-           *MARK = &sv_undef;
+           *MARK = &PL_sv_undef;
        }
        SP = MARK;
     }
@@ -1908,7 +1908,7 @@ PP(pp_leavesub)
     PUTBACK;
     
     POPSUB2();         /* Stack values are safe: release CV and @_ ... */
-    curpm = newpm;     /* ... and pop $1 et al */
+    PL_curpm = newpm;  /* ... and pop $1 et al */
 
     LEAVE;
     return pop_return();
@@ -1918,7 +1918,7 @@ STATIC CV *
 get_db_sub(SV **svp, CV *cv)
 {
     dTHR;
-    SV *dbsv = GvSV(DBsub);
+    SV *dbsv = GvSV(PL_DBsub);
 
     if (!PERLDB_SUB_NN) {
        GV *gv = CvGV(cv);
@@ -1945,8 +1945,8 @@ get_db_sub(SV **svp, CV *cv)
     }
 
     if (CvXSUB(cv))
-       curcopdb = curcop;
-    cv = GvCV(DBsub);
+       PL_curcopdb = PL_curcop;
+    cv = GvCV(PL_DBsub);
     return cv;
 }
 
@@ -1967,9 +1967,9 @@ PP(pp_entersub)
        if (!SvROK(sv)) {
            char *sym;
 
-           if (sv == &sv_yes) {                /* unfound import, ignore */
+           if (sv == &PL_sv_yes) {             /* unfound import, ignore */
                if (hasargs)
-                   SP = stack_base + POPMARK;
+                   SP = PL_stack_base + POPMARK;
                RETURN;
            }
            if (SvGMAGICAL(sv)) {
@@ -1977,7 +1977,7 @@ PP(pp_entersub)
                sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
            }
            else
-               sym = SvPV(sv, na);
+               sym = SvPV(sv, PL_na);
            if (!sym)
                DIE(no_usym, "a subroutine");
            if (op->op_private & HINT_STRICT_REFS)
@@ -2034,7 +2034,7 @@ PP(pp_entersub)
     }
 
     gimme = GIMME_V;
-    if ((op->op_private & OPpENTERSUB_DB) && GvCV(DBsub) && !CvNODEBUG(cv))
+    if ((op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv))
        cv = get_db_sub(&sv, cv);
     if (!cv)
        DIE("No DBsub routine");
@@ -2179,12 +2179,12 @@ PP(pp_entersub)
                SP[1] = SP[0];
                SP--;
            }
-           stack_sp = mark + 1;
+           PL_stack_sp = mark + 1;
            fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
            items = (*fp3)(CvXSUBANY(cv).any_i32, 
-                          MARK - stack_base + 1,
+                          MARK - PL_stack_base + 1,
                           items);
-           stack_sp = stack_base + items;
+           PL_stack_sp = PL_stack_base + items;
        }
        else {
            I32 markix = TOPMARK;
@@ -2200,7 +2200,7 @@ PP(pp_entersub)
 #ifdef USE_THREADS
                av = (AV*)curpad[0];
 #else
-               av = GvAV(defgv);
+               av = GvAV(PL_defgv);
 #endif /* USE_THREADS */               
                items = AvFILLp(av) + 1;   /* @_ is not tieable */
 
@@ -2212,23 +2212,23 @@ PP(pp_entersub)
                    PUTBACK ;               
                }
            }
-           if (curcopdb) {             /* We assume that the first
+           if (PL_curcopdb) {          /* We assume that the first
                                           XSUB in &DB::sub is the
                                           called one. */
-               SAVESPTR(curcop);
-               curcop = curcopdb;
-               curcopdb = NULL;
+               SAVESPTR(PL_curcop);
+               PL_curcop = PL_curcopdb;
+               PL_curcopdb = NULL;
            }
            /* Do we need to open block here? XXXX */
            (void)(*CvXSUB(cv))(cv _PERL_OBJECT_THIS);
 
            /* Enforce some sanity in scalar context. */
-           if (gimme == G_SCALAR && ++markix != stack_sp - stack_base ) {
-               if (markix > stack_sp - stack_base)
-                   *(stack_base + markix) = &sv_undef;
+           if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
+               if (markix > PL_stack_sp - PL_stack_base)
+                   *(PL_stack_base + markix) = &PL_sv_undef;
                else
-                   *(stack_base + markix) = *stack_sp;
-               stack_sp = stack_base + markix;
+                   *(PL_stack_base + markix) = *PL_stack_sp;
+               PL_stack_sp = PL_stack_base + markix;
            }
        }
        LEAVE;
@@ -2246,8 +2246,8 @@ PP(pp_entersub)
        if (CvDEPTH(cv) < 2)
            (void)SvREFCNT_inc(cv);
        else {  /* save temporaries on recursion? */
-           if (CvDEPTH(cv) == 100 && dowarn 
-                 && !(PERLDB_SUB && cv == GvCV(DBsub)))
+           if (CvDEPTH(cv) == 100 && PL_dowarn 
+                 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
                sub_crush_depth(cv);
            if (CvDEPTH(cv) > AvFILLp(padlist)) {
                AV *av;
@@ -2256,7 +2256,7 @@ PP(pp_entersub)
                I32 ix = AvFILLp((AV*)svp[1]);
                svp = AvARRAY(svp[0]);
                for ( ;ix > 0; ix--) {
-                   if (svp[ix] != &sv_undef) {
+                   if (svp[ix] != &PL_sv_undef) {
                        char *name = SvPVX(svp[ix]);
                        if ((SvFLAGS(svp[ix]) & SVf_FAKE) /* outer lexical? */
                            || *name == '&')              /* anonymous code? */
@@ -2301,8 +2301,8 @@ PP(pp_entersub)
            }
        }
 #endif /* USE_THREADS */               
-       SAVESPTR(curpad);
-       curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
+       SAVESPTR(PL_curpad);
+       PL_curpad = AvARRAY((AV*)svp[CvDEPTH(cv)]);
 #ifndef USE_THREADS
        if (hasargs)
 #endif /* USE_THREADS */
@@ -2314,14 +2314,14 @@ PP(pp_entersub)
            DEBUG_L(PerlIO_printf(PerlIO_stderr(),
                                  "%p entersub preparing @_\n", thr));
 #endif
-           av = (AV*)curpad[0];
+           av = (AV*)PL_curpad[0];
            if (AvREAL(av)) {
                av_clear(av);
                AvREAL_off(av);
            }
 #ifndef USE_THREADS
-           cx->blk_sub.savearray = GvAV(defgv);
-           GvAV(defgv) = (AV*)SvREFCNT_inc(av);
+           cx->blk_sub.savearray = GvAV(PL_defgv);
+           GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
 #endif /* USE_THREADS */
            cx->blk_sub.argarray = av;
            ++MARK;
@@ -2379,12 +2379,12 @@ PP(pp_aelem)
     SV *sv;
 
     if (elem > 0)
-       elem -= curcop->cop_arybase;
+       elem -= PL_curcop->cop_arybase;
     if (SvTYPE(av) != SVt_PVAV)
        RETPUSHUNDEF;
     svp = av_fetch(av, elem, lval && !defer);
     if (lval) {
-       if (!svp || *svp == &sv_undef) {
+       if (!svp || *svp == &PL_sv_undef) {
            SV* lv;
            if (!defer)
                DIE(no_aelem, elem);
@@ -2403,7 +2403,7 @@ PP(pp_aelem)
        else if (op->op_private & OPpDEREF)
            vivify_ref(*svp, op->op_private & OPpDEREF);
     }
-    sv = (svp ? *svp : &sv_undef);
+    sv = (svp ? *svp : &PL_sv_undef);
     if (!lval && SvGMAGICAL(sv))       /* see note in pp_helem() */
        sv = sv_mortalcopy(sv);
     PUSHs(sv);
@@ -2460,8 +2460,8 @@ PP(pp_method)
        }
     }
 
-    name = SvPV(TOPs, na);
-    sv = *(stack_base + TOPMARK + 1);
+    name = SvPV(TOPs, PL_na);
+    sv = *(PL_stack_base + TOPMARK + 1);
     
     if (SvGMAGICAL(sv))
         mg_get(sv);
@@ -2483,7 +2483,7 @@ PP(pp_method)
            stash = gv_stashpvn(packname, packlen, TRUE);
            goto fetch;
        }
-       *(stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
+       *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
     }
 
     if (!ob || !SvOBJECT(ob))
@@ -2505,7 +2505,7 @@ PP(pp_method)
                sep = p, leaf = p + 2;
        }
        if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
-           packname = HvNAME(sep ? curcop->cop_stash : stash);
+           packname = HvNAME(sep ? PL_curcop->cop_stash : stash);
            packlen = strlen(packname);
        }
        else {
index f880719..a410697 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -242,7 +242,7 @@ PP(pp_glob)
     ENTER;
 
 #ifndef VMS
-    if (tainting) {
+    if (PL_tainting) {
        /*
         * The external globbing program may use things we can't control,
         * so for security reasons we must assume the worst.
@@ -252,11 +252,11 @@ PP(pp_glob)
     }
 #endif /* !VMS */
 
-    SAVESPTR(last_in_gv);      /* We don't want this to be permanent. */
-    last_in_gv = (GV*)*stack_sp--;
+    SAVESPTR(PL_last_in_gv);   /* We don't want this to be permanent. */
+    PL_last_in_gv = (GV*)*PL_stack_sp--;
 
-    SAVESPTR(rs);              /* This is not permanent, either. */
-    rs = sv_2mortal(newSVpv("", 1));
+    SAVESPTR(PL_rs);           /* This is not permanent, either. */
+    PL_rs = sv_2mortal(newSVpv("", 1));
 #ifndef DOSISH
 #ifndef CSH
     *SvPVX(rs) = '\n';
@@ -278,7 +278,7 @@ PP(pp_indread)
 
 PP(pp_rcatline)
 {
-    last_in_gv = cGVOP->op_gv;
+    PL_last_in_gv = cGVOP->op_gv;
     return do_readline();
 }
 
@@ -288,19 +288,19 @@ PP(pp_warn)
     char *tmps;
     if (SP - MARK != 1) {
        dTARGET;
-       do_join(TARG, &sv_no, MARK, SP);
-       tmps = SvPV(TARG, na);
+       do_join(TARG, &PL_sv_no, MARK, SP);
+       tmps = SvPV(TARG, PL_na);
        SP = MARK + 1;
     }
     else {
-       tmps = SvPV(TOPs, na);
+       tmps = SvPV(TOPs, PL_na);
     }
     if (!tmps || !*tmps) {
        SV *error = ERRSV;
        (void)SvUPGRADE(error, SVt_PV);
        if (SvPOK(error) && SvCUR(error))
            sv_catpv(error, "\t...caught");
-       tmps = SvPV(error, na);
+       tmps = SvPV(error, PL_na);
     }
     if (!tmps || !*tmps)
        tmps = "Warning: something's wrong";
@@ -316,13 +316,13 @@ PP(pp_die)
     char *pat = "%s";
     if (SP - MARK != 1) {
        dTARGET;
-       do_join(TARG, &sv_no, MARK, SP);
-       tmps = SvPV(TARG, na);
+       do_join(TARG, &PL_sv_no, MARK, SP);
+       tmps = SvPV(TARG, PL_na);
        SP = MARK + 1;
     }
     else {
        tmpsv = TOPs;
-       tmps = SvROK(tmpsv) ? Nullch : SvPV(tmpsv, na);
+       tmps = SvROK(tmpsv) ? Nullch : SvPV(tmpsv, PL_na);
     }
     if (!tmps || !*tmps) {
        SV *error = ERRSV;
@@ -334,8 +334,8 @@ PP(pp_die)
                HV *stash = SvSTASH(SvRV(error));
                GV *gv = gv_fetchmethod(stash, "PROPAGATE");
                if (gv) {
-                   SV *file = sv_2mortal(newSVsv(GvSV(curcop->cop_filegv)));
-                   SV *line = sv_2mortal(newSViv(curcop->cop_line));
+                   SV *file = sv_2mortal(newSVsv(GvSV(PL_curcop->cop_filegv)));
+                   SV *line = sv_2mortal(newSViv(PL_curcop->cop_line));
                    EXTEND(SP, 3);
                    PUSHMARK(SP);
                    PUSHs(error);
@@ -344,7 +344,7 @@ PP(pp_die)
                    PUTBACK;
                    perl_call_sv((SV*)GvCV(gv),
                                 G_SCALAR|G_EVAL|G_KEEPERR);
-                   sv_setsv(error,*stack_sp--);
+                   sv_setsv(error,*PL_stack_sp--);
                }
            }
            pat = Nullch;
@@ -352,7 +352,7 @@ PP(pp_die)
        else {
            if (SvPOK(error) && SvCUR(error))
                sv_catpv(error, "\t...propagated");
-           tmps = SvPV(error, na);
+           tmps = SvPV(error, PL_na);
        }
     }
     if (!tmps || !*tmps)
@@ -383,8 +383,8 @@ PP(pp_open)
        IoFLAGS(GvIOp(gv)) &= ~IOf_UNTAINT;
     tmps = SvPV(sv, len);
     if (do_open(gv, tmps, len, FALSE, 0, 0, Nullfp))
-       PUSHi( (I32)forkprocess );
-    else if (forkprocess == 0)         /* we are a new child */
+       PUSHi( (I32)PL_forkprocess );
+    else if (PL_forkprocess == 0)              /* we are a new child */
        PUSHi(0);
     else
        RETPUSHUNDEF;
@@ -398,7 +398,7 @@ PP(pp_close)
     MAGIC *mg;
 
     if (MAXARG == 0)
-       gv = defoutgv;
+       gv = PL_defoutgv;
     else
        gv = (GV*)POPs;
 
@@ -540,7 +540,7 @@ PP(pp_tie)
     HV* stash;
     GV *gv;
     SV *sv;
-    I32 markoff = MARK - stack_base;
+    I32 markoff = MARK - PL_stack_base;
     char *methname;
     int how = 'P';
     U32 items;
@@ -580,7 +580,7 @@ PP(pp_tie)
        stash = gv_stashsv(*MARK, FALSE);
        if (!stash || !(gv = gv_fetchmethod(stash, methname))) {
            DIE("Can't locate object method \"%s\" via package \"%s\"",
-                methname, SvPV(*MARK,na));                   
+                methname, SvPV(*MARK,PL_na));                   
        }
        ENTER;
        PUSHSTACKi(PERLSI_MAGIC);
@@ -600,7 +600,7 @@ PP(pp_tie)
        sv_magic(varsv, sv, how, Nullch, 0);
     }
     LEAVE;
-    SP = stack_base + markoff;
+    SP = PL_stack_base + markoff;
     PUSHs(sv);
     RETURN;
 }
@@ -612,7 +612,7 @@ PP(pp_untie)
 
     sv = POPs;
 
-    if (dowarn) {
+    if (PL_dowarn) {
         MAGIC * mg ;
         if (SvMAGICAL(sv)) {
             if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
@@ -665,7 +665,7 @@ PP(pp_dbmopen)
 
     hv = (HV*)POPs;
 
-    sv = sv_mortalcopy(&sv_no);
+    sv = sv_mortalcopy(&PL_sv_no);
     sv_setpv(sv, "AnyDBM_File");
     stash = gv_stashsv(sv, FALSE);
     if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH"))) {
@@ -793,7 +793,7 @@ PP(pp_sselect)
            continue;
        }
        else if (!SvPOK(sv))
-           SvPV_force(sv,na);  /* force string conversion */
+           SvPV_force(sv,PL_na);       /* force string conversion */
        j = SvLEN(sv);
        if (j < growsize) {
            Sv_Grow(sv, growsize);
@@ -841,7 +841,7 @@ PP(pp_sselect)
     if (GIMME == G_ARRAY && tbuf) {
        value = (double)(timebuf.tv_sec) +
                (double)(timebuf.tv_usec) / 1000000.0;
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setnv(sv, value);
     }
     RETURN;
@@ -856,9 +856,9 @@ setdefout(GV *gv)
     dTHR;
     if (gv)
        (void)SvREFCNT_inc(gv);
-    if (defoutgv)
-       SvREFCNT_dec(defoutgv);
-    defoutgv = gv;
+    if (PL_defoutgv)
+       SvREFCNT_dec(PL_defoutgv);
+    PL_defoutgv = gv;
 }
 
 PP(pp_select)
@@ -869,16 +869,16 @@ PP(pp_select)
 
     newdefout = (op->op_private > 0) ? ((GV *) POPs) : (GV *) NULL;
 
-    egv = GvEGV(defoutgv);
+    egv = GvEGV(PL_defoutgv);
     if (!egv)
-       egv = defoutgv;
+       egv = PL_defoutgv;
     hv = GvSTASH(egv);
     if (! hv)
-       XPUSHs(&sv_undef);
+       XPUSHs(&PL_sv_undef);
     else {
        GV **gvp = (GV**)hv_fetch(hv, GvNAME(egv), GvNAMELEN(egv), FALSE);
        if (gvp && *gvp == egv) {
-           gv_efullname3(TARG, defoutgv, Nullch);
+           gv_efullname3(TARG, PL_defoutgv, Nullch);
            XPUSHTARG;
        }
        else {
@@ -902,11 +902,11 @@ PP(pp_getc)
     MAGIC *mg;
 
     if (MAXARG <= 0)
-       gv = stdingv;
+       gv = PL_stdingv;
     else
        gv = (GV*)POPs;
     if (!gv)
-       gv = argvgv;
+       gv = PL_argvgv;
 
     if (SvRMAGICAL(gv) && (mg = mg_find((SV*)gv, 'q'))) {
        I32 gimme = GIMME_V;
@@ -948,10 +948,10 @@ doform(CV *cv, GV *gv, OP *retop)
     SAVETMPS;
 
     push_return(retop);
-    PUSHBLOCK(cx, CXt_SUB, stack_sp);
+    PUSHBLOCK(cx, CXt_SUB, PL_stack_sp);
     PUSHFORMAT(cx);
-    SAVESPTR(curpad);
-    curpad = AvARRAY((AV*)svp[1]);
+    SAVESPTR(PL_curpad);
+    PL_curpad = AvARRAY((AV*)svp[1]);
 
     setdefout(gv);         /* locally select filehandle so $% et al work */
     return CvSTART(cv);
@@ -966,11 +966,11 @@ PP(pp_enterwrite)
     CV *cv;
 
     if (MAXARG == 0)
-       gv = defoutgv;
+       gv = PL_defoutgv;
     else {
        gv = (GV*)POPs;
        if (!gv)
-           gv = defoutgv;
+           gv = PL_defoutgv;
     }
     EXTEND(SP, 1);
     io = GvIO(gv);
@@ -1010,9 +1010,9 @@ PP(pp_leavewrite)
     register PERL_CONTEXT *cx;
 
     DEBUG_f(PerlIO_printf(Perl_debug_log, "left=%ld, todo=%ld\n",
-         (long)IoLINES_LEFT(io), (long)FmLINES(formtarget)));
-    if (IoLINES_LEFT(io) < FmLINES(formtarget) &&
-       formtarget != toptarget)
+         (long)IoLINES_LEFT(io), (long)FmLINES(PL_formtarget)));
+    if (IoLINES_LEFT(io) < FmLINES(PL_formtarget) &&
+       PL_formtarget != PL_toptarget)
     {
        GV *fgv;
        CV *cv;
@@ -1040,7 +1040,7 @@ PP(pp_leavewrite)
        }
        if (IoFLAGS(io) & IOf_DIDTOP) { /* Oh dear.  It still doesn't fit. */
            I32 lines = IoLINES_LEFT(io);
-           char *s = SvPVX(formtarget);
+           char *s = SvPVX(PL_formtarget);
            if (lines <= 0)             /* Yow, header didn't even fit!!! */
                goto forget_top;
            while (lines-- > 0) {
@@ -1050,16 +1050,16 @@ PP(pp_leavewrite)
                s++;
            }
            if (s) {
-               PerlIO_write(ofp, SvPVX(formtarget), s - SvPVX(formtarget));
-               sv_chop(formtarget, s);
-               FmLINES(formtarget) -= IoLINES_LEFT(io);
+               PerlIO_write(ofp, SvPVX(PL_formtarget), s - SvPVX(PL_formtarget));
+               sv_chop(PL_formtarget, s);
+               FmLINES(PL_formtarget) -= IoLINES_LEFT(io);
            }
        }
        if (IoLINES_LEFT(io) >= 0 && IoPAGE(io) > 0)
-           PerlIO_write(ofp, SvPVX(formfeed), SvCUR(formfeed));
+           PerlIO_write(ofp, SvPVX(PL_formfeed), SvCUR(PL_formfeed));
        IoLINES_LEFT(io) = IoPAGE_LEN(io);
        IoPAGE(io)++;
-       formtarget = toptarget;
+       PL_formtarget = PL_toptarget;
        IoFLAGS(io) |= IOf_DIDTOP;
        fgv = IoTOP_GV(io);
        if (!fgv)
@@ -1076,38 +1076,38 @@ PP(pp_leavewrite)
     }
 
   forget_top:
-    POPBLOCK(cx,curpm);
+    POPBLOCK(cx,PL_curpm);
     POPFORMAT(cx);
     LEAVE;
 
     fp = IoOFP(io);
     if (!fp) {
-       if (dowarn) {
+       if (PL_dowarn) {
            if (IoIFP(io))
                warn("Filehandle only opened for input");
            else
                warn("Write on closed filehandle");
        }
-       PUSHs(&sv_no);
+       PUSHs(&PL_sv_no);
     }
     else {
-       if ((IoLINES_LEFT(io) -= FmLINES(formtarget)) < 0) {
-           if (dowarn)
+       if ((IoLINES_LEFT(io) -= FmLINES(PL_formtarget)) < 0) {
+           if (PL_dowarn)
                warn("page overflow");
        }
-       if (!PerlIO_write(ofp, SvPVX(formtarget), SvCUR(formtarget)) ||
+       if (!PerlIO_write(ofp, SvPVX(PL_formtarget), SvCUR(PL_formtarget)) ||
                PerlIO_error(fp))
-           PUSHs(&sv_no);
+           PUSHs(&PL_sv_no);
        else {
-           FmLINES(formtarget) = 0;
-           SvCUR_set(formtarget, 0);
-           *SvEND(formtarget) = '\0';
+           FmLINES(PL_formtarget) = 0;
+           SvCUR_set(PL_formtarget, 0);
+           *SvEND(PL_formtarget) = '\0';
            if (IoFLAGS(io) & IOf_FLUSH)
                (void)PerlIO_flush(fp);
-           PUSHs(&sv_yes);
+           PUSHs(&PL_sv_yes);
        }
     }
-    formtarget = bodytarget;
+    PL_formtarget = PL_bodytarget;
     PUTBACK;
     return pop_return();
 }
@@ -1124,7 +1124,7 @@ PP(pp_prtf)
     if (op->op_flags & OPf_STACKED)
        gv = (GV*)*++MARK;
     else
-       gv = defoutgv;
+       gv = PL_defoutgv;
 
     if (SvRMAGICAL(gv) && (mg = mg_find((SV*)gv, 'q'))) {
        if (MARK == ORIGMARK) {
@@ -1148,20 +1148,20 @@ PP(pp_prtf)
 
     sv = NEWSV(0,0);
     if (!(io = GvIO(gv))) {
-       if (dowarn) {
+       if (PL_dowarn) {
            gv_fullname3(sv, gv, Nullch);
-           warn("Filehandle %s never opened", SvPV(sv,na));
+           warn("Filehandle %s never opened", SvPV(sv,PL_na));
        }
        SETERRNO(EBADF,RMS$_IFI);
        goto just_say_no;
     }
     else if (!(fp = IoOFP(io))) {
-       if (dowarn)  {
+       if (PL_dowarn)  {
            gv_fullname3(sv, gv, Nullch);
            if (IoIFP(io))
-               warn("Filehandle %s opened only for input", SvPV(sv,na));
+               warn("Filehandle %s opened only for input", SvPV(sv,PL_na));
            else
-               warn("printf on closed filehandle %s", SvPV(sv,na));
+               warn("printf on closed filehandle %s", SvPV(sv,PL_na));
        }
        SETERRNO(EBADF,IoIFP(io)?RMS$_FAC:RMS$_IFI);
        goto just_say_no;
@@ -1183,13 +1183,13 @@ PP(pp_prtf)
     }
     SvREFCNT_dec(sv);
     SP = ORIGMARK;
-    PUSHs(&sv_yes);
+    PUSHs(&PL_sv_yes);
     RETURN;
 
   just_say_no:
     SvREFCNT_dec(sv);
     SP = ORIGMARK;
-    PUSHs(&sv_undef);
+    PUSHs(&PL_sv_undef);
     RETURN;
 }
 
@@ -1213,10 +1213,10 @@ PP(pp_sysopen)
     tmps = SvPV(sv, len);
     if (do_open(gv, tmps, len, TRUE, mode, perm, Nullfp)) {
        IoLINES(GvIOp(gv)) = 0;
-       PUSHs(&sv_yes);
+       PUSHs(&PL_sv_yes);
     }
     else {
-       PUSHs(&sv_undef);
+       PUSHs(&PL_sv_undef);
     }
     RETURN;
 }
@@ -1395,7 +1395,7 @@ PP(pp_send)
     io = GvIO(gv);
     if (!io || !IoIFP(io)) {
        length = -1;
-       if (dowarn) {
+       if (PL_dowarn) {
            if (op->op_type == OP_SYSWRITE)
                warn("Syswrite on closed filehandle");
            else
@@ -1454,9 +1454,9 @@ PP(pp_eof)
     GV *gv;
 
     if (MAXARG <= 0)
-       gv = last_in_gv;
+       gv = PL_last_in_gv;
     else
-       gv = last_in_gv = (GV*)POPs;
+       gv = PL_last_in_gv = (GV*)POPs;
     PUSHs(boolSV(!gv || do_eof(gv)));
     RETURN;
 }
@@ -1467,9 +1467,9 @@ PP(pp_tell)
     GV *gv;
 
     if (MAXARG <= 0)
-       gv = last_in_gv;
+       gv = PL_last_in_gv;
     else
-       gv = last_in_gv = (GV*)POPs;
+       gv = PL_last_in_gv = (GV*)POPs;
     PUSHi( do_tell(gv) );
     RETURN;
 }
@@ -1486,12 +1486,12 @@ PP(pp_sysseek)
     int whence = POPi;
     long offset = POPl;
 
-    gv = last_in_gv = (GV*)POPs;
+    gv = PL_last_in_gv = (GV*)POPs;
     if (op->op_type == OP_SEEK)
        PUSHs(boolSV(do_seek(gv, offset, whence)));
     else {
        long n = do_sysseek(gv, offset, whence);
-       PUSHs((n < 0) ? &sv_undef
+       PUSHs((n < 0) ? &PL_sv_undef
              : sv_2mortal(n ? newSViv((IV)n)
                           : newSVpv(zero_but_true, ZBTLEN)));
     }
@@ -1532,7 +1532,7 @@ PP(pp_truncate)
            goto do_ftruncate;
        }
 
-       name = SvPV(sv, na);
+       name = SvPV(sv, PL_na);
        TAINT_PROPER("truncate");
 #ifdef HAS_TRUNCATE
        if (truncate(name, len) < 0)
@@ -1648,7 +1648,7 @@ PP(pp_flock)
 #ifdef FLOCK
     argtype = POPi;
     if (MAXARG <= 0)
-       gv = last_in_gv;
+       gv = PL_last_in_gv;
     else
        gv = (GV*)POPs;
     if (gv && GvIO(gv))
@@ -1812,7 +1812,7 @@ PP(pp_bind)
        RETPUSHUNDEF;
 
 nuts:
-    if (dowarn)
+    if (PL_dowarn)
        warn("bind() on closed fd");
     SETERRNO(EBADF,SS$_IVCHAN);
     RETPUSHUNDEF;
@@ -1842,7 +1842,7 @@ PP(pp_connect)
        RETPUSHUNDEF;
 
 nuts:
-    if (dowarn)
+    if (PL_dowarn)
        warn("connect() on closed fd");
     SETERRNO(EBADF,SS$_IVCHAN);
     RETPUSHUNDEF;
@@ -1868,7 +1868,7 @@ PP(pp_listen)
        RETPUSHUNDEF;
 
 nuts:
-    if (dowarn)
+    if (PL_dowarn)
        warn("listen() on closed fd");
     SETERRNO(EBADF,SS$_IVCHAN);
     RETPUSHUNDEF;
@@ -1922,7 +1922,7 @@ PP(pp_accept)
     RETURN;
 
 nuts:
-    if (dowarn)
+    if (PL_dowarn)
        warn("accept() on closed fd");
     SETERRNO(EBADF,SS$_IVCHAN);
 
@@ -1949,7 +1949,7 @@ PP(pp_shutdown)
     RETURN;
 
 nuts:
-    if (dowarn)
+    if (PL_dowarn)
        warn("shutdown() on closed fd");
     SETERRNO(EBADF,SS$_IVCHAN);
     RETPUSHUNDEF;
@@ -2010,8 +2010,8 @@ PP(pp_ssockopt)
            char *buf;
            int aint;
            if (SvPOKp(sv)) {
-               buf = SvPV(sv, na);
-               len = na;
+               buf = SvPV(sv, PL_na);
+               len = PL_na;
            }
            else {
                aint = (int)SvIV(sv);
@@ -2020,14 +2020,14 @@ PP(pp_ssockopt)
            }
            if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
                goto nuts2;
-           PUSHs(&sv_yes);
+           PUSHs(&PL_sv_yes);
        }
        break;
     }
     RETURN;
 
 nuts:
-    if (dowarn)
+    if (PL_dowarn)
        warn("[gs]etsockopt() on closed fd");
     SETERRNO(EBADF,SS$_IVCHAN);
 nuts2:
@@ -2100,7 +2100,7 @@ PP(pp_getpeername)
     RETURN;
 
 nuts:
-    if (dowarn)
+    if (PL_dowarn)
        warn("get{sock, peer}name() on closed fd");
     SETERRNO(EBADF,SS$_IVCHAN);
 nuts2:
@@ -2128,14 +2128,14 @@ PP(pp_stat)
     if (op->op_flags & OPf_REF) {
        tmpgv = cGVOP->op_gv;
       do_fstat:
-       if (tmpgv != defgv) {
-           laststype = OP_STAT;
-           statgv = tmpgv;
-           sv_setpv(statname, "");
-           laststatval = (GvIO(tmpgv) && IoIFP(GvIOp(tmpgv))
-               ? PerlLIO_fstat(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), &statcache) : -1);
+       if (tmpgv != PL_defgv) {
+           PL_laststype = OP_STAT;
+           PL_statgv = tmpgv;
+           sv_setpv(PL_statname, "");
+           PL_laststatval = (GvIO(tmpgv) && IoIFP(GvIOp(tmpgv))
+               ? PerlLIO_fstat(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), &PL_statcache) : -1);
        }
-       if (laststatval < 0)
+       if (PL_laststatval < 0)
            max = 0;
     }
     else {
@@ -2148,17 +2148,17 @@ PP(pp_stat)
            tmpgv = (GV*)SvRV(sv);
            goto do_fstat;
        }
-       sv_setpv(statname, SvPV(sv,na));
-       statgv = Nullgv;
+       sv_setpv(PL_statname, SvPV(sv,PL_na));
+       PL_statgv = Nullgv;
 #ifdef HAS_LSTAT
-       laststype = op->op_type;
+       PL_laststype = op->op_type;
        if (op->op_type == OP_LSTAT)
-           laststatval = PerlLIO_lstat(SvPV(statname, na), &statcache);
+           PL_laststatval = PerlLIO_lstat(SvPV(PL_statname, PL_na), &PL_statcache);
        else
 #endif
-           laststatval = PerlLIO_stat(SvPV(statname, na), &statcache);
-       if (laststatval < 0) {
-           if (dowarn && strchr(SvPV(statname, na), '\n'))
+           PL_laststatval = PerlLIO_stat(SvPV(PL_statname, PL_na), &PL_statcache);
+       if (PL_laststatval < 0) {
+           if (PL_dowarn && strchr(SvPV(PL_statname, PL_na), '\n'))
                warn(warn_nl, "stat");
            max = 0;
        }
@@ -2173,30 +2173,30 @@ PP(pp_stat)
     if (max) {
        EXTEND(SP, max);
        EXTEND_MORTAL(max);
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_dev)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_ino)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_mode)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_nlink)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_uid)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_gid)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_dev)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_ino)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_mode)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_nlink)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_uid)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_gid)));
 #ifdef USE_STAT_RDEV
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_rdev)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_rdev)));
 #else
        PUSHs(sv_2mortal(newSVpv("", 0)));
 #endif
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_size)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_size)));
 #ifdef BIG_TIME
        PUSHs(sv_2mortal(newSVnv((U32)statcache.st_atime)));
        PUSHs(sv_2mortal(newSVnv((U32)statcache.st_mtime)));
        PUSHs(sv_2mortal(newSVnv((U32)statcache.st_ctime)));
 #else
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_atime)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_mtime)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_ctime)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_atime)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_mtime)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_ctime)));
 #endif
 #ifdef USE_STAT_BLOCKS
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_blksize)));
-       PUSHs(sv_2mortal(newSViv((I32)statcache.st_blocks)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_blksize)));
+       PUSHs(sv_2mortal(newSViv((I32)PL_statcache.st_blocks)));
 #else
        PUSHs(sv_2mortal(newSVpv("", 0)));
        PUSHs(sv_2mortal(newSVpv("", 0)));
@@ -2211,7 +2211,7 @@ PP(pp_ftrread)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (cando(S_IRUSR, 0, &statcache))
+    if (cando(S_IRUSR, 0, &PL_statcache))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2222,7 +2222,7 @@ PP(pp_ftrwrite)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (cando(S_IWUSR, 0, &statcache))
+    if (cando(S_IWUSR, 0, &PL_statcache))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2233,7 +2233,7 @@ PP(pp_ftrexec)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (cando(S_IXUSR, 0, &statcache))
+    if (cando(S_IXUSR, 0, &PL_statcache))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2244,7 +2244,7 @@ PP(pp_fteread)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (cando(S_IRUSR, 1, &statcache))
+    if (cando(S_IRUSR, 1, &PL_statcache))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2255,7 +2255,7 @@ PP(pp_ftewrite)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (cando(S_IWUSR, 1, &statcache))
+    if (cando(S_IWUSR, 1, &PL_statcache))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2266,7 +2266,7 @@ PP(pp_fteexec)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (cando(S_IXUSR, 1, &statcache))
+    if (cando(S_IXUSR, 1, &PL_statcache))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2291,7 +2291,7 @@ PP(pp_ftrowned)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (statcache.st_uid == (op->op_type == OP_FTEOWNED ? euid : uid) )
+    if (PL_statcache.st_uid == (op->op_type == OP_FTEOWNED ? PL_euid : PL_uid) )
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2302,7 +2302,7 @@ PP(pp_ftzero)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (!statcache.st_size)
+    if (!PL_statcache.st_size)
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2313,7 +2313,7 @@ PP(pp_ftsize)
     djSP; dTARGET;
     if (result < 0)
        RETPUSHUNDEF;
-    PUSHi(statcache.st_size);
+    PUSHi(PL_statcache.st_size);
     RETURN;
 }
 
@@ -2323,7 +2323,7 @@ PP(pp_ftmtime)
     djSP; dTARGET;
     if (result < 0)
        RETPUSHUNDEF;
-    PUSHn( ((I32)basetime - (I32)statcache.st_mtime) / 86400.0 );
+    PUSHn( ((I32)PL_basetime - (I32)PL_statcache.st_mtime) / 86400.0 );
     RETURN;
 }
 
@@ -2333,7 +2333,7 @@ PP(pp_ftatime)
     djSP; dTARGET;
     if (result < 0)
        RETPUSHUNDEF;
-    PUSHn( ((I32)basetime - (I32)statcache.st_atime) / 86400.0 );
+    PUSHn( ((I32)PL_basetime - (I32)PL_statcache.st_atime) / 86400.0 );
     RETURN;
 }
 
@@ -2343,7 +2343,7 @@ PP(pp_ftctime)
     djSP; dTARGET;
     if (result < 0)
        RETPUSHUNDEF;
-    PUSHn( ((I32)basetime - (I32)statcache.st_ctime) / 86400.0 );
+    PUSHn( ((I32)PL_basetime - (I32)PL_statcache.st_ctime) / 86400.0 );
     RETURN;
 }
 
@@ -2353,7 +2353,7 @@ PP(pp_ftsock)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (S_ISSOCK(statcache.st_mode))
+    if (S_ISSOCK(PL_statcache.st_mode))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2364,7 +2364,7 @@ PP(pp_ftchr)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (S_ISCHR(statcache.st_mode))
+    if (S_ISCHR(PL_statcache.st_mode))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2375,7 +2375,7 @@ PP(pp_ftblk)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (S_ISBLK(statcache.st_mode))
+    if (S_ISBLK(PL_statcache.st_mode))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2386,7 +2386,7 @@ PP(pp_ftfile)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (S_ISREG(statcache.st_mode))
+    if (S_ISREG(PL_statcache.st_mode))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2397,7 +2397,7 @@ PP(pp_ftdir)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (S_ISDIR(statcache.st_mode))
+    if (S_ISDIR(PL_statcache.st_mode))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2408,7 +2408,7 @@ PP(pp_ftpipe)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (S_ISFIFO(statcache.st_mode))
+    if (S_ISFIFO(PL_statcache.st_mode))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2419,7 +2419,7 @@ PP(pp_ftlink)
     djSP;
     if (result < 0)
        RETPUSHUNDEF;
-    if (S_ISLNK(statcache.st_mode))
+    if (S_ISLNK(PL_statcache.st_mode))
        RETPUSHYES;
     RETPUSHNO;
 }
@@ -2432,7 +2432,7 @@ PP(pp_ftsuid)
     SPAGAIN;
     if (result < 0)
        RETPUSHUNDEF;
-    if (statcache.st_mode & S_ISUID)
+    if (PL_statcache.st_mode & S_ISUID)
        RETPUSHYES;
 #endif
     RETPUSHNO;
@@ -2446,7 +2446,7 @@ PP(pp_ftsgid)
     SPAGAIN;
     if (result < 0)
        RETPUSHUNDEF;
-    if (statcache.st_mode & S_ISGID)
+    if (PL_statcache.st_mode & S_ISGID)
        RETPUSHYES;
 #endif
     RETPUSHNO;
@@ -2460,7 +2460,7 @@ PP(pp_ftsvtx)
     SPAGAIN;
     if (result < 0)
        RETPUSHUNDEF;
-    if (statcache.st_mode & S_ISVTX)
+    if (PL_statcache.st_mode & S_ISVTX)
        RETPUSHYES;
 #endif
     RETPUSHNO;
@@ -2524,27 +2524,27 @@ PP(pp_fttext)
 
     if (gv) {
        EXTEND(SP, 1);
-       if (gv == defgv) {
-           if (statgv)
-               io = GvIO(statgv);
+       if (gv == PL_defgv) {
+           if (PL_statgv)
+               io = GvIO(PL_statgv);
            else {
-               sv = statname;
+               sv = PL_statname;
                goto really_filename;
            }
        }
        else {
-           statgv = gv;
-           laststatval = -1;
-           sv_setpv(statname, "");
-           io = GvIO(statgv);
+           PL_statgv = gv;
+           PL_laststatval = -1;
+           sv_setpv(PL_statname, "");
+           io = GvIO(PL_statgv);
        }
        if (io && IoIFP(io)) {
            if (! PerlIO_has_base(IoIFP(io)))
                DIE("-T and -B not implemented on filehandles");
-           laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &statcache);
-           if (laststatval < 0)
+           PL_laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &PL_statcache);
+           if (PL_laststatval < 0)
                RETPUSHUNDEF;
-           if (S_ISDIR(statcache.st_mode))     /* handle NFS glitch */
+           if (S_ISDIR(PL_statcache.st_mode))  /* handle NFS glitch */
                if (op->op_type == OP_FTTEXT)
                    RETPUSHNO;
                else
@@ -2563,7 +2563,7 @@ PP(pp_fttext)
                len = 512;
        }
        else {
-           if (dowarn)
+           if (PL_dowarn)
                warn("Test on unopened file <%s>",
                  GvENAME(cGVOP->op_gv));
            SETERRNO(EBADF,RMS$_IFI);
@@ -2573,26 +2573,26 @@ PP(pp_fttext)
     else {
        sv = POPs;
       really_filename:
-       statgv = Nullgv;
-       laststatval = -1;
-       sv_setpv(statname, SvPV(sv, na));
+       PL_statgv = Nullgv;
+       PL_laststatval = -1;
+       sv_setpv(PL_statname, SvPV(sv, PL_na));
 #ifdef HAS_OPEN3
-       i = PerlLIO_open3(SvPV(sv, na), O_RDONLY, 0);
+       i = PerlLIO_open3(SvPV(sv, PL_na), O_RDONLY, 0);
 #else
        i = PerlLIO_open(SvPV(sv, na), 0);
 #endif
        if (i < 0) {
-           if (dowarn && strchr(SvPV(sv, na), '\n'))
+           if (PL_dowarn && strchr(SvPV(sv, PL_na), '\n'))
                warn(warn_nl, "open");
            RETPUSHUNDEF;
        }
-       laststatval = PerlLIO_fstat(i, &statcache);
-       if (laststatval < 0)
+       PL_laststatval = PerlLIO_fstat(i, &PL_statcache);
+       if (PL_laststatval < 0)
            RETPUSHUNDEF;
        len = PerlLIO_read(i, tbuf, 512);
        (void)PerlLIO_close(i);
        if (len <= 0) {
-           if (S_ISDIR(statcache.st_mode) && op->op_type == OP_FTTEXT)
+           if (S_ISDIR(PL_statcache.st_mode) && op->op_type == OP_FTTEXT)
                RETPUSHNO;              /* special case NFS directories */
            RETPUSHYES;         /* null file is anything */
        }
@@ -2639,14 +2639,14 @@ PP(pp_chdir)
     else
        tmps = POPp;
     if (!tmps || !*tmps) {
-       svp = hv_fetch(GvHVn(envgv), "HOME", 4, FALSE);
+       svp = hv_fetch(GvHVn(PL_envgv), "HOME", 4, FALSE);
        if (svp)
-           tmps = SvPV(*svp, na);
+           tmps = SvPV(*svp, PL_na);
     }
     if (!tmps || !*tmps) {
-       svp = hv_fetch(GvHVn(envgv), "LOGDIR", 6, FALSE);
+       svp = hv_fetch(GvHVn(PL_envgv), "LOGDIR", 6, FALSE);
        if (svp)
-           tmps = SvPV(*svp, na);
+           tmps = SvPV(*svp, PL_na);
     }
 #ifdef VMS
     if (!tmps || !*tmps) {
@@ -2729,7 +2729,7 @@ PP(pp_rename)
     int anum;
 
     char *tmps2 = POPp;
-    char *tmps = SvPV(TOPs, na);
+    char *tmps = SvPV(TOPs, PL_na);
     TAINT_PROPER("rename");
 #ifdef HAS_RENAME
     anum = PerlLIO_rename(tmps, tmps2);
@@ -2754,7 +2754,7 @@ PP(pp_link)
     djSP; dTARGET;
 #ifdef HAS_LINK
     char *tmps2 = POPp;
-    char *tmps = SvPV(TOPs, na);
+    char *tmps = SvPV(TOPs, PL_na);
     TAINT_PROPER("link");
     SETi( link(tmps, tmps2) >= 0 );
 #else
@@ -2768,7 +2768,7 @@ PP(pp_symlink)
     djSP; dTARGET;
 #ifdef HAS_SYMLINK
     char *tmps2 = POPp;
-    char *tmps = SvPV(TOPs, na);
+    char *tmps = SvPV(TOPs, PL_na);
     TAINT_PROPER("symlink");
     SETi( symlink(tmps, tmps2) >= 0 );
     RETURN;
@@ -2897,7 +2897,7 @@ PP(pp_mkdir)
 #ifndef HAS_MKDIR
     int oldumask;
 #endif
-    char *tmps = SvPV(TOPs, na);
+    char *tmps = SvPV(TOPs, PL_na);
 
     TAINT_PROPER("mkdir");
 #ifdef HAS_MKDIR
@@ -3125,7 +3125,7 @@ PP(pp_fork)
        /*SUPPRESS 560*/
        if (tmpgv = gv_fetchpv("$", TRUE, SVt_PV))
            sv_setiv(GvSV(tmpgv), (IV)getpid());
-       hv_clear(pidstatus);    /* no kids, so don't wait for 'em */
+       hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */
     }
     PUSHi(childpid);
     RETURN;
@@ -3179,8 +3179,8 @@ PP(pp_system)
     Sigsave_t ihand,qhand;     /* place to save signals during system() */
 
     if (SP - MARK == 1) {
-       if (tainting) {
-           char *junk = SvPV(TOPs, na);
+       if (PL_tainting) {
+           char *junk = SvPV(TOPs, PL_na);
            TAINT_ENV();
            TAINT_PROPER("system");
        }
@@ -3216,7 +3216,7 @@ PP(pp_system)
     else if (SP - MARK != 1)
        value = (I32)do_aexec(Nullsv, MARK, SP);
     else {
-       value = (I32)do_exec(SvPVx(sv_mortalcopy(*SP), na));
+       value = (I32)do_exec(SvPVx(sv_mortalcopy(*SP), PL_na));
     }
     PerlProc__exit(-1);
 #else /* ! FORK or VMS or OS/2 */
@@ -3253,15 +3253,15 @@ PP(pp_exec)
        value = (I32)do_aexec(Nullsv, MARK, SP);
 #endif
     else {
-       if (tainting) {
-           char *junk = SvPV(*SP, na);
+       if (PL_tainting) {
+           char *junk = SvPV(*SP, PL_na);
            TAINT_ENV();
            TAINT_PROPER("exec");
        }
 #ifdef VMS
        value = (I32)vms_do_exec(SvPVx(sv_mortalcopy(*SP), na));
 #else
-       value = (I32)do_exec(SvPVx(sv_mortalcopy(*SP), na));
+       value = (I32)do_exec(SvPVx(sv_mortalcopy(*SP), PL_na));
 #endif
     }
     SP = ORIGMARK;
@@ -3420,18 +3420,18 @@ PP(pp_tms)
     EXTEND(SP, 4);
 
 #ifndef VMS
-    (void)PerlProc_times(&timesbuf);
+    (void)PerlProc_times(&PL_timesbuf);
 #else
     (void)PerlProc_times((tbuffer_t *)&timesbuf);  /* time.h uses different name for */
                                                    /* struct tms, though same data   */
                                                    /* is returned.                   */
 #endif
 
-    PUSHs(sv_2mortal(newSVnv(((double)timesbuf.tms_utime)/HZ)));
+    PUSHs(sv_2mortal(newSVnv(((double)PL_timesbuf.tms_utime)/HZ)));
     if (GIMME == G_ARRAY) {
-       PUSHs(sv_2mortal(newSVnv(((double)timesbuf.tms_stime)/HZ)));
-       PUSHs(sv_2mortal(newSVnv(((double)timesbuf.tms_cutime)/HZ)));
-       PUSHs(sv_2mortal(newSVnv(((double)timesbuf.tms_cstime)/HZ)));
+       PUSHs(sv_2mortal(newSVnv(((double)PL_timesbuf.tms_stime)/HZ)));
+       PUSHs(sv_2mortal(newSVnv(((double)PL_timesbuf.tms_cutime)/HZ)));
+       PUSHs(sv_2mortal(newSVnv(((double)PL_timesbuf.tms_cstime)/HZ)));
     }
     RETURN;
 #endif /* HAS_TIMES */
@@ -3730,22 +3730,22 @@ PP(pp_ghostent)
     }
 
     if (hent) {
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, (char*)hent->h_name);
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        for (elem = hent->h_aliases; elem && *elem; elem++) {
            sv_catpv(sv, *elem);
            if (elem[1])
                sv_catpvn(sv, " ", 1);
        }
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setiv(sv, (IV)hent->h_addrtype);
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        len = hent->h_length;
        sv_setiv(sv, (IV)len);
 #ifdef h_addr
        for (elem = hent->h_addr_list; elem && *elem; elem++) {
-           XPUSHs(sv = sv_mortalcopy(&sv_no));
+           XPUSHs(sv = sv_mortalcopy(&PL_sv_no));
            sv_setpvn(sv, *elem, len);
        }
 #else
@@ -3827,17 +3827,17 @@ PP(pp_gnetent)
     }
 
     if (nent) {
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, nent->n_name);
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        for (elem = nent->n_aliases; elem && *elem; elem++) {
            sv_catpv(sv, *elem);
            if (elem[1])
                sv_catpvn(sv, " ", 1);
        }
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setiv(sv, (IV)nent->n_addrtype);
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setiv(sv, (IV)nent->n_net);
     }
 
@@ -3911,15 +3911,15 @@ PP(pp_gprotoent)
     }
 
     if (pent) {
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, pent->p_name);
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        for (elem = pent->p_aliases; elem && *elem; elem++) {
            sv_catpv(sv, *elem);
            if (elem[1])
                sv_catpvn(sv, " ", 1);
        }
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setiv(sv, (IV)pent->p_proto);
     }
 
@@ -4012,21 +4012,21 @@ PP(pp_gservent)
     }
 
     if (sent) {
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, sent->s_name);
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        for (elem = sent->s_aliases; elem && *elem; elem++) {
            sv_catpv(sv, *elem);
            if (elem[1])
                sv_catpvn(sv, " ", 1);
        }
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
 #ifdef HAS_NTOHS
        sv_setiv(sv, (IV)PerlSock_ntohs(sent->s_port));
 #else
        sv_setiv(sv, (IV)(sent->s_port));
 #endif
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, sent->s_proto);
     }
 
@@ -4174,22 +4174,22 @@ PP(pp_gpwent)
     }
 
     if (pwent) {
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, pwent->pw_name);
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
 #ifdef PWPASSWD
        sv_setpv(sv, pwent->pw_passwd);
 #endif
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setiv(sv, (IV)pwent->pw_uid);
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setiv(sv, (IV)pwent->pw_gid);
 
        /* pw_change, pw_quota, and pw_age are mutually exclusive. */
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
 #ifdef PWCHANGE
        sv_setiv(sv, (IV)pwent->pw_change);
 #else
@@ -4203,7 +4203,7 @@ PP(pp_gpwent)
 #endif
 
        /* pw_class and pw_comment are mutually exclusive. */
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
 #ifdef PWCLASS
        sv_setpv(sv, pwent->pw_class);
 #else
@@ -4212,7 +4212,7 @@ PP(pp_gpwent)
 #   endif
 #endif
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
 #ifdef PWGECOS
        sv_setpv(sv, pwent->pw_gecos);
 #endif
@@ -4221,10 +4221,10 @@ PP(pp_gpwent)
        SvTAINTED_on(sv);
 #endif
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, pwent->pw_dir);
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, pwent->pw_shell);
 
 #ifdef PWEXPIRE
@@ -4307,18 +4307,18 @@ PP(pp_ggrent)
     }
 
     if (grent) {
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setpv(sv, grent->gr_name);
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
 #ifdef GRPASSWD
        sv_setpv(sv, grent->gr_passwd);
 #endif
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        sv_setiv(sv, (IV)grent->gr_gid);
 
-       PUSHs(sv = sv_mortalcopy(&sv_no));
+       PUSHs(sv = sv_mortalcopy(&PL_sv_no));
        for (elem = grent->gr_mem; elem && *elem; elem++) {
            sv_catpv(sv, *elem);
            if (elem[1])
@@ -4381,7 +4381,7 @@ PP(pp_syscall)
     I32 retval = -1;
     MAGIC *mg;
 
-    if (tainting) {
+    if (PL_tainting) {
        while (++MARK <= SP) {
            if (SvTAINTED(*MARK)) {
                TAINT;
@@ -4399,10 +4399,10 @@ PP(pp_syscall)
     while (++MARK <= SP) {
        if (SvNIOK(*MARK) || !i)
            a[i++] = SvIV(*MARK);
-       else if (*MARK == &sv_undef)
+       else if (*MARK == &PL_sv_undef)
            a[i++] = 0;
        else 
-           a[i++] = (unsigned long)SvPV_force(*MARK, na);
+           a[i++] = (unsigned long)SvPV_force(*MARK, PL_na);
        if (i > 15)
            break;
     }
index 01f84a9..41c42fa 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -449,7 +449,7 @@ study_chunk(regnode **scanp, I32 *deltap, regnode *last, scan_data_t *data, U32
                                        ? (flags & ~SCF_DO_SUBSTR) : flags);
                if (!scan)              /* It was not CURLYX, but CURLY. */
                    scan = next;
-               if (dowarn && (minnext + deltanext == 0) 
+               if (PL_dowarn && (minnext + deltanext == 0) 
                    && !(data->flags & (SF_HAS_PAR|SF_IN_PAR))
                    && maxcount <= 10000) /* Complement check for big count */
                    warn("Strange *+?{} on zero-length expression");
@@ -677,20 +677,20 @@ STATIC I32
 add_data(I32 n, char *s)
 {
     dTHR;
-    if (regcomp_rx->data) {
-       Renewc(regcomp_rx->data, 
-              sizeof(*regcomp_rx->data) + sizeof(void*) * (regcomp_rx->data->count + n - 1), 
+    if (PL_regcomp_rx->data) {
+       Renewc(PL_regcomp_rx->data, 
+              sizeof(*PL_regcomp_rx->data) + sizeof(void*) * (PL_regcomp_rx->data->count + n - 1), 
               char, struct reg_data);
-       Renew(regcomp_rx->data->what, regcomp_rx->data->count + n, U8);
-       regcomp_rx->data->count += n;
+       Renew(PL_regcomp_rx->data->what, PL_regcomp_rx->data->count + n, U8);
+       PL_regcomp_rx->data->count += n;
     } else {
-       Newc(1207, regcomp_rx->data, sizeof(*regcomp_rx->data) + sizeof(void*) * (n - 1),
+       Newc(1207, PL_regcomp_rx->data, sizeof(*PL_regcomp_rx->data) + sizeof(void*) * (n - 1),
             char, struct reg_data);
-       New(1208, regcomp_rx->data->what, n, U8);
-       regcomp_rx->data->count = n;
+       New(1208, PL_regcomp_rx->data->what, n, U8);
+       PL_regcomp_rx->data->count = n;
     }
-    Copy(s, regcomp_rx->data->what + regcomp_rx->data->count - n, n, U8);
-    return regcomp_rx->data->count - n;
+    Copy(s, PL_regcomp_rx->data->what + PL_regcomp_rx->data->count - n, n, U8);
+    return PL_regcomp_rx->data->count - n;
 }
 
 /*
@@ -726,94 +726,94 @@ pregcomp(char *exp, char *xend, PMOP *pm)
     if (exp == NULL)
        FAIL("NULL regexp argument");
 
-    regprecomp = savepvn(exp, xend - exp);
+    PL_regprecomp = savepvn(exp, xend - exp);
     DEBUG_r(PerlIO_printf(Perl_debug_log, "compiling RE `%*s'\n",
-                         xend - exp, regprecomp));
-    regflags = pm->op_pmflags;
-    regsawback = 0;
+                         xend - exp, PL_regprecomp));
+    PL_regflags = pm->op_pmflags;
+    PL_regsawback = 0;
 
-    regseen = 0;
-    seen_zerolen = *exp == '^' ? -1 : 0;
-    seen_evals = 0;
-    extralen = 0;
+    PL_regseen = 0;
+    PL_seen_zerolen = *exp == '^' ? -1 : 0;
+    PL_seen_evals = 0;
+    PL_extralen = 0;
 
     /* First pass: determine size, legality. */
-    regcomp_parse = exp;
-    regxend = xend;
-    regnaughty = 0;
-    regnpar = 1;
-    regsize = 0L;
-    regcode = &regdummy;
-    regc((U8)MAGIC, (char*)regcode);
+    PL_regcomp_parse = exp;
+    PL_regxend = xend;
+    PL_regnaughty = 0;
+    PL_regnpar = 1;
+    PL_regsize = 0L;
+    PL_regcode = &PL_regdummy;
+    regc((U8)MAGIC, (char*)PL_regcode);
     if (reg(0, &flags) == NULL) {
-       Safefree(regprecomp);
-       regprecomp = Nullch;
+       Safefree(PL_regprecomp);
+       PL_regprecomp = Nullch;
        return(NULL);
     }
-    DEBUG_r(PerlIO_printf(Perl_debug_log, "size %d ", regsize));
+    DEBUG_r(PerlIO_printf(Perl_debug_log, "size %d ", PL_regsize));
 
     DEBUG_r(
-       if (!colorset) {
+       if (!PL_colorset) {
            int i = 0;
            char *s = PerlEnv_getenv("TERMCAP_COLORS");
            
-           colorset = 1;
+           PL_colorset = 1;
            if (s) {
-               colors[0] = s = savepv(s);
+               PL_colors[0] = s = savepv(s);
                while (++i < 4) {
                    s = strchr(s, '\t');
                    if (!s) 
                        FAIL("Not enough TABs in TERMCAP_COLORS");
                    *s = '\0';
-                   colors[i] = ++s;
+                   PL_colors[i] = ++s;
                }
            } else {
                while (i < 4) 
-                   colors[i++] = "";
+                   PL_colors[i++] = "";
            }
            /* Reset colors: */
            PerlIO_printf(Perl_debug_log, "%s%s%s%s", 
-                         colors[0],colors[1],colors[2],colors[3]);
+                         PL_colors[0],PL_colors[1],PL_colors[2],PL_colors[3]);
        }
        );
 
     /* Small enough for pointer-storage convention?
        If extralen==0, this means that we will not need long jumps. */
-    if (regsize >= 0x10000L && extralen)
-        regsize += extralen;
+    if (PL_regsize >= 0x10000L && PL_extralen)
+        PL_regsize += PL_extralen;
     else
-       extralen = 0;
+       PL_extralen = 0;
 
     /* Allocate space and initialize. */
-    Newc(1001, r, sizeof(regexp) + (unsigned)regsize * sizeof(regnode),
+    Newc(1001, r, sizeof(regexp) + (unsigned)PL_regsize * sizeof(regnode),
         char, regexp);
     if (r == NULL)
        FAIL("regexp out of space");
     r->refcnt = 1;
     r->prelen = xend - exp;
-    r->precomp = regprecomp;
+    r->precomp = PL_regprecomp;
     r->subbeg = r->subbase = NULL;
-    r->nparens = regnpar - 1;          /* set early to validate backrefs */
-    regcomp_rx = r;
+    r->nparens = PL_regnpar - 1;               /* set early to validate backrefs */
+    PL_regcomp_rx = r;
 
     /* Second pass: emit code. */
-    regcomp_parse = exp;
-    regxend = xend;
-    regnaughty = 0;
-    regnpar = 1;
-    regcode = r->program;
+    PL_regcomp_parse = exp;
+    PL_regxend = xend;
+    PL_regnaughty = 0;
+    PL_regnpar = 1;
+    PL_regcode = r->program;
     /* Store the count of eval-groups for security checks: */
-    regcode->next_off = ((seen_evals > U16_MAX) ? U16_MAX : seen_evals);
-    regc((U8)MAGIC, (char*) regcode++);
+    PL_regcode->next_off = ((PL_seen_evals > U16_MAX) ? U16_MAX : PL_seen_evals);
+    regc((U8)MAGIC, (char*) PL_regcode++);
     r->data = 0;
     if (reg(0, &flags) == NULL)
        return(NULL);
 
     /* Dig out information for optimizations. */
     r->reganch = pm->op_pmflags & PMf_COMPILETIME;
-    pm->op_pmflags = regflags;
+    pm->op_pmflags = PL_regflags;
     r->regstclass = NULL;
-    r->naughty = regnaughty >= 10;     /* Probably an expensive pattern. */
+    r->naughty = PL_regnaughty >= 10;  /* Probably an expensive pattern. */
     scan = r->program + 1;             /* First BRANCH. */
 
     /* XXXX To minimize changes to RE engine we always allocate
@@ -867,7 +867,7 @@ pregcomp(char *exp, char *xend, PMOP *pm)
            first = NEXTOPER(first);
            goto again;
        }
-       if (sawplus && (!sawopen || !regsawback))
+       if (sawplus && (!sawopen || !PL_regsawback))
            r->reganch |= ROPT_SKIP;    /* x+ must match 1st of run */
 
        /* Scan is after the zeroth branch, first is atomic matcher. */
@@ -892,12 +892,12 @@ pregcomp(char *exp, char *xend, PMOP *pm)
        data.longest = &(data.longest_fixed);
        first = scan;
        
-       minlen = study_chunk(&first, &fake, scan + regsize, /* Up to end */
+       minlen = study_chunk(&first, &fake, scan + PL_regsize, /* Up to end */
                             &data, SCF_DO_SUBSTR);
-       if ( regnpar == 1 && data.longest == &(data.longest_fixed)
+       if ( PL_regnpar == 1 && data.longest == &(data.longest_fixed)
             && data.last_start_min == 0 && data.last_end > 0 
-            && !seen_zerolen
-            && (!(regseen & REG_SEEN_GPOS) || (r->reganch & ROPT_ANCH_GPOS)))
+            && !PL_seen_zerolen
+            && (!(PL_regseen & REG_SEEN_GPOS) || (r->reganch & ROPT_ANCH_GPOS)))
            r->reganch |= ROPT_CHECK_ALL;
        scan_commit(&data);
        SvREFCNT_dec(data.last_found);
@@ -906,7 +906,7 @@ pregcomp(char *exp, char *xend, PMOP *pm)
        if (longest_float_length
            || (data.flags & SF_FL_BEFORE_EOL
                && (!(data.flags & SF_FL_BEFORE_MEOL)
-                   || (regflags & PMf_MULTILINE)))) {
+                   || (PL_regflags & PMf_MULTILINE)))) {
            if (SvCUR(data.longest_fixed) 
                && data.offset_fixed == data.offset_float_min)
                goto remove;            /* Like in (a)+. */
@@ -918,7 +918,7 @@ pregcomp(char *exp, char *xend, PMOP *pm)
            BmUSEFUL(r->float_substr) = 100;
            if (data.flags & SF_FL_BEFORE_EOL /* Cannot have SEOL and MULTI */
                && (!(data.flags & SF_FL_BEFORE_MEOL)
-                   || (regflags & PMf_MULTILINE))) 
+                   || (PL_regflags & PMf_MULTILINE))) 
                SvTAIL_on(r->float_substr);
        } else {
          remove:
@@ -931,14 +931,14 @@ pregcomp(char *exp, char *xend, PMOP *pm)
        if (longest_fixed_length
            || (data.flags & SF_FIX_BEFORE_EOL /* Cannot have SEOL and MULTI */
                && (!(data.flags & SF_FIX_BEFORE_MEOL)
-                   || (regflags & PMf_MULTILINE)))) {
+                   || (PL_regflags & PMf_MULTILINE)))) {
            r->anchored_substr = data.longest_fixed;
            r->anchored_offset = data.offset_fixed;
            fbm_compile(r->anchored_substr, 0);
            BmUSEFUL(r->anchored_substr) = 100;
            if (data.flags & SF_FIX_BEFORE_EOL /* Cannot have SEOL and MULTI */
                && (!(data.flags & SF_FIX_BEFORE_MEOL)
-                   || (regflags & PMf_MULTILINE)))
+                   || (PL_regflags & PMf_MULTILINE)))
                SvTAIL_on(r->anchored_substr);
        } else {
            r->anchored_substr = Nullsv;
@@ -963,19 +963,19 @@ pregcomp(char *exp, char *xend, PMOP *pm)
        
        DEBUG_r(PerlIO_printf(Perl_debug_log, "\n"));
        scan = r->program + 1;
-       minlen = study_chunk(&scan, &fake, scan + regsize, NULL, 0);
+       minlen = study_chunk(&scan, &fake, scan + PL_regsize, NULL, 0);
        r->check_substr = r->anchored_substr = r->float_substr = Nullsv;
     }
 
     r->minlen = minlen;
-    if (regseen & REG_SEEN_GPOS) 
+    if (PL_regseen & REG_SEEN_GPOS) 
        r->reganch |= ROPT_GPOS_SEEN;
-    if (regseen & REG_SEEN_LOOKBEHIND)
+    if (PL_regseen & REG_SEEN_LOOKBEHIND)
        r->reganch |= ROPT_LOOKBEHIND_SEEN;
-    if (regseen & REG_SEEN_EVAL)
+    if (PL_regseen & REG_SEEN_EVAL)
        r->reganch |= ROPT_EVAL_SEEN;
-    Newz(1002, r->startp, regnpar, char*);
-    Newz(1002, r->endp, regnpar, char*);
+    Newz(1002, r->startp, PL_regnpar, char*);
+    Newz(1002, r->endp, PL_regnpar, char*);
     DEBUG_r(regdump(r));
     return(r);
 }
@@ -999,31 +999,31 @@ reg(I32 paren, I32 *flagp)
     register regnode *lastbr;
     register regnode *ender = 0;
     register I32 parno = 0;
-    I32 flags, oregflags = regflags, have_branch = 0, open = 0;
+    I32 flags, oregflags = PL_regflags, have_branch = 0, open = 0;
     char c;
 
     *flagp = 0;                                /* Tentatively. */
 
     /* Make an OPEN node, if parenthesized. */
     if (paren) {
-       if (*regcomp_parse == '?') {
+       if (*PL_regcomp_parse == '?') {
            U16 posflags = 0, negflags = 0;
            U16 *flagsp = &posflags;
 
-           regcomp_parse++;
-           paren = *regcomp_parse++;
+           PL_regcomp_parse++;
+           paren = *PL_regcomp_parse++;
            ret = NULL;                 /* For look-ahead/behind. */
            switch (paren) {
            case '<':
-               regseen |= REG_SEEN_LOOKBEHIND;
-               if (*regcomp_parse == '!') 
+               PL_regseen |= REG_SEEN_LOOKBEHIND;
+               if (*PL_regcomp_parse == '!') 
                    paren = ',';
-               if (*regcomp_parse != '=' && *regcomp_parse != '!') 
+               if (*PL_regcomp_parse != '=' && *PL_regcomp_parse != '!') 
                    goto unknown;
-               regcomp_parse++;
+               PL_regcomp_parse++;
            case '=':
            case '!':
-               seen_zerolen++;
+               PL_seen_zerolen++;
            case ':':
            case '>':
                break;
@@ -1032,9 +1032,9 @@ reg(I32 paren, I32 *flagp)
                FAIL2("Sequence (?%c...) not implemented", (int)paren);
                break;
            case '#':
-               while (*regcomp_parse && *regcomp_parse != ')')
-                   regcomp_parse++;
-               if (*regcomp_parse != ')')
+               while (*PL_regcomp_parse && *PL_regcomp_parse != ')')
+                   PL_regcomp_parse++;
+               if (*PL_regcomp_parse != ')')
                    FAIL("Sequence (?#... not terminated");
                nextchar();
                *flagp = TRYAGAIN;
@@ -1044,44 +1044,44 @@ reg(I32 paren, I32 *flagp)
                dTHR;
                I32 count = 1, n = 0;
                char c;
-               char *s = regcomp_parse;
+               char *s = PL_regcomp_parse;
                SV *sv;
                OP_4tree *sop, *rop;
 
-               seen_zerolen++;
-               regseen |= REG_SEEN_EVAL;
-               while (count && (c = *regcomp_parse)) {
-                   if (c == '\\' && regcomp_parse[1])
-                       regcomp_parse++;
+               PL_seen_zerolen++;
+               PL_regseen |= REG_SEEN_EVAL;
+               while (count && (c = *PL_regcomp_parse)) {
+                   if (c == '\\' && PL_regcomp_parse[1])
+                       PL_regcomp_parse++;
                    else if (c == '{') 
                        count++;
                    else if (c == '}') 
                        count--;
-                   regcomp_parse++;
+                   PL_regcomp_parse++;
                }
-               if (*regcomp_parse != ')')
+               if (*PL_regcomp_parse != ')')
                    FAIL("Sequence (?{...}) not terminated or not {}-balanced");
                if (!SIZE_ONLY) {
                    AV *av;
                    
-                   if (regcomp_parse - 1 - s) 
-                       sv = newSVpv(s, regcomp_parse - 1 - s);
+                   if (PL_regcomp_parse - 1 - s) 
+                       sv = newSVpv(s, PL_regcomp_parse - 1 - s);
                    else
                        sv = newSVpv("", 0);
 
                    rop = sv_compile_2op(sv, &sop, "re", &av);
 
                    n = add_data(3, "nso");
-                   regcomp_rx->data->data[n] = (void*)rop;
-                   regcomp_rx->data->data[n+1] = (void*)av;
-                   regcomp_rx->data->data[n+2] = (void*)sop;
+                   PL_regcomp_rx->data->data[n] = (void*)rop;
+                   PL_regcomp_rx->data->data[n+1] = (void*)av;
+                   PL_regcomp_rx->data->data[n+2] = (void*)sop;
                    SvREFCNT_dec(sv);
                } else {                /* First pass */
-                   if (reginterp_cnt < ++seen_evals && curcop != &compiling)
+                   if (PL_reginterp_cnt < ++PL_seen_evals && PL_curcop != &PL_compiling)
                        /* No compiled RE interpolated, has runtime
                           components ===> unsafe.  */
                        FAIL("Eval-group not allowed at runtime, use re 'eval'");
-                   if (tainted)
+                   if (PL_tainted)
                        FAIL("Eval-group in insecure regular expression");
                }
                
@@ -1090,21 +1090,21 @@ reg(I32 paren, I32 *flagp)
            }
            case '(':
            {
-               if (regcomp_parse[0] == '?') {
-                   if (regcomp_parse[1] == '=' || regcomp_parse[1] == '!' 
-                       || regcomp_parse[1] == '<' 
-                       || regcomp_parse[1] == '{') { /* Lookahead or eval. */
+               if (PL_regcomp_parse[0] == '?') {
+                   if (PL_regcomp_parse[1] == '=' || PL_regcomp_parse[1] == '!' 
+                       || PL_regcomp_parse[1] == '<' 
+                       || PL_regcomp_parse[1] == '{') { /* Lookahead or eval. */
                        I32 flag;
                        
                        ret = reg_node(LOGICAL);
                        regtail(ret, reg(1, &flag));
                        goto insert_if;
                    } 
-               } else if (regcomp_parse[0] >= '1' && regcomp_parse[0] <= '9' ) {
-                   parno = atoi(regcomp_parse++);
+               } else if (PL_regcomp_parse[0] >= '1' && PL_regcomp_parse[0] <= '9' ) {
+                   parno = atoi(PL_regcomp_parse++);
 
-                   while (isDIGIT(*regcomp_parse))
-                       regcomp_parse++;
+                   while (isDIGIT(*PL_regcomp_parse))
+                       PL_regcomp_parse++;
                    ret = reganode(GROUPP, parno);
                    if ((c = *nextchar()) != ')')
                        FAIL2("Switch (?(number%c not recognized", c);
@@ -1134,43 +1134,43 @@ reg(I32 paren, I32 *flagp)
                        regtail(ret, ender);
                    return ret;
                } else {
-                   FAIL2("Unknown condition for (?(%.2s", regcomp_parse);
+                   FAIL2("Unknown condition for (?(%.2s", PL_regcomp_parse);
                }
            }
             case 0:
                 FAIL("Sequence (? incomplete");
                 break;
            default:
-               --regcomp_parse;
+               --PL_regcomp_parse;
              parse_flags:
-               while (*regcomp_parse && strchr("iogcmsx", *regcomp_parse)) {
-                   if (*regcomp_parse != 'o')
-                       pmflag(flagsp, *regcomp_parse);
-                   ++regcomp_parse;
+               while (*PL_regcomp_parse && strchr("iogcmsx", *PL_regcomp_parse)) {
+                   if (*PL_regcomp_parse != 'o')
+                       pmflag(flagsp, *PL_regcomp_parse);
+                   ++PL_regcomp_parse;
                }
-               if (*regcomp_parse == '-') {
+               if (*PL_regcomp_parse == '-') {
                    flagsp = &negflags;
-                   ++regcomp_parse;
+                   ++PL_regcomp_parse;
                    goto parse_flags;
                }
-               regflags |= posflags;
-               regflags &= ~negflags;
-               if (*regcomp_parse == ':') {
-                   regcomp_parse++;
+               PL_regflags |= posflags;
+               PL_regflags &= ~negflags;
+               if (*PL_regcomp_parse == ':') {
+                   PL_regcomp_parse++;
                    paren = ':';
                    break;
                }               
              unknown:
-               if (*regcomp_parse != ')')
-                   FAIL2("Sequence (?%c...) not recognized", *regcomp_parse);
+               if (*PL_regcomp_parse != ')')
+                   FAIL2("Sequence (?%c...) not recognized", *PL_regcomp_parse);
                nextchar();
                *flagp = TRYAGAIN;
                return NULL;
            }
        }
        else {
-           parno = regnpar;
-           regnpar++;
+           parno = PL_regnpar;
+           PL_regnpar++;
            ret = reganode(OPEN, parno);
            open = 1;
        }
@@ -1181,14 +1181,14 @@ reg(I32 paren, I32 *flagp)
     br = regbranch(&flags, 1);
     if (br == NULL)
        return(NULL);
-    if (*regcomp_parse == '|') {
-       if (!SIZE_ONLY && extralen) {
+    if (*PL_regcomp_parse == '|') {
+       if (!SIZE_ONLY && PL_extralen) {
            reginsert(BRANCHJ, br);
        } else
            reginsert(BRANCH, br);
        have_branch = 1;
        if (SIZE_ONLY)
-           extralen += 1;              /* For BRANCHJ-BRANCH. */
+           PL_extralen += 1;           /* For BRANCHJ-BRANCH. */
     } else if (paren == ':') {
        *flagp |= flags&SIMPLE;
     }
@@ -1200,13 +1200,13 @@ reg(I32 paren, I32 *flagp)
        *flagp |= HASWIDTH;
     *flagp |= flags&SPSTART;
     lastbr = br;
-    while (*regcomp_parse == '|') {
-       if (!SIZE_ONLY && extralen) {
+    while (*PL_regcomp_parse == '|') {
+       if (!SIZE_ONLY && PL_extralen) {
            ender = reganode(LONGJMP,0);
            regtail(NEXTOPER(NEXTOPER(lastbr)), ender); /* Append to the previous. */
        }
        if (SIZE_ONLY)
-           extralen += 2;              /* Account for LONGJMP. */
+           PL_extralen += 2;           /* Account for LONGJMP. */
        nextchar();
        br = regbranch(&flags, 0);
        if (br == NULL)
@@ -1267,17 +1267,17 @@ reg(I32 paren, I32 *flagp)
     }
 
     /* Check for proper termination. */
-    if (paren && (regcomp_parse >= regxend || *nextchar() != ')')) {
+    if (paren && (PL_regcomp_parse >= PL_regxend || *nextchar() != ')')) {
        FAIL("unmatched () in regexp");
-    } else if (!paren && regcomp_parse < regxend) {
-       if (*regcomp_parse == ')') {
+    } else if (!paren && PL_regcomp_parse < PL_regxend) {
+       if (*PL_regcomp_parse == ')') {
            FAIL("unmatched () in regexp");
        } else
            FAIL("junk on end of regexp");      /* "Can't happen". */
        /* NOTREACHED */
     }
     if (paren != 0) {
-       regflags = oregflags;
+       PL_regflags = oregflags;
     }
 
     return(ret);
@@ -1300,20 +1300,20 @@ regbranch(I32 *flagp, I32 first)
     if (first) 
        ret = NULL;
     else {
-       if (!SIZE_ONLY && extralen) 
+       if (!SIZE_ONLY && PL_extralen) 
            ret = reganode(BRANCHJ,0);
        else
            ret = reg_node(BRANCH);
     }
        
     if (!first && SIZE_ONLY) 
-       extralen += 1;                  /* BRANCHJ */
+       PL_extralen += 1;                       /* BRANCHJ */
     
     *flagp = WORST;                    /* Tentatively. */
 
-    regcomp_parse--;
+    PL_regcomp_parse--;
     nextchar();
-    while (regcomp_parse < regxend && *regcomp_parse != '|' && *regcomp_parse != ')') {
+    while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != '|' && *PL_regcomp_parse != ')') {
        flags &= ~TRYAGAIN;
        latest = regpiece(&flags);
        if (latest == NULL) {
@@ -1326,7 +1326,7 @@ regbranch(I32 *flagp, I32 first)
        if (chain == NULL)      /* First piece. */
            *flagp |= flags&SPSTART;
        else {
-           regnaughty++;
+           PL_regnaughty++;
            regtail(chain, latest);
        }
        chain = latest;
@@ -1361,7 +1361,7 @@ regpiece(I32 *flagp)
     register char op;
     register char *next;
     I32 flags;
-    char *origparse = regcomp_parse;
+    char *origparse = PL_regcomp_parse;
     char *maxpos;
     I32 min;
     I32 max = REG_INFTY;
@@ -1373,10 +1373,10 @@ regpiece(I32 *flagp)
        return(NULL);
     }
 
-    op = *regcomp_parse;
+    op = *PL_regcomp_parse;
 
-    if (op == '{' && regcurly(regcomp_parse)) {
-       next = regcomp_parse + 1;
+    if (op == '{' && regcurly(PL_regcomp_parse)) {
+       next = PL_regcomp_parse + 1;
        maxpos = Nullch;
        while (isDIGIT(*next) || *next == ',') {
            if (*next == ',') {
@@ -1390,39 +1390,39 @@ regpiece(I32 *flagp)
        if (*next == '}') {             /* got one */
            if (!maxpos)
                maxpos = next;
-           regcomp_parse++;
-           min = atoi(regcomp_parse);
+           PL_regcomp_parse++;
+           min = atoi(PL_regcomp_parse);
            if (*maxpos == ',')
                maxpos++;
            else
-               maxpos = regcomp_parse;
+               maxpos = PL_regcomp_parse;
            max = atoi(maxpos);
            if (!max && *maxpos != '0')
                max = REG_INFTY;                /* meaning "infinity" */
            else if (max >= REG_INFTY)
                FAIL2("Quantifier in {,} bigger than %d", REG_INFTY - 1);
-           regcomp_parse = next;
+           PL_regcomp_parse = next;
            nextchar();
 
        do_curly:
            if ((flags&SIMPLE)) {
-               regnaughty += 2 + regnaughty / 2;
+               PL_regnaughty += 2 + PL_regnaughty / 2;
                reginsert(CURLY, ret);
            }
            else {
-               regnaughty += 4 + regnaughty;   /* compound interest */
+               PL_regnaughty += 4 + PL_regnaughty;     /* compound interest */
                regtail(ret, reg_node(WHILEM));
-               if (!SIZE_ONLY && extralen) {
+               if (!SIZE_ONLY && PL_extralen) {
                    reginsert(LONGJMP,ret);
                    reginsert(NOTHING,ret);
                    NEXT_OFF(ret) = 3;  /* Go over LONGJMP. */
                }
                reginsert(CURLYX,ret);
-               if (!SIZE_ONLY && extralen)
+               if (!SIZE_ONLY && PL_extralen)
                    NEXT_OFF(ret) = 3;  /* Go over NOTHING to LONGJMP. */
                regtail(ret, reg_node(NOTHING));
                if (SIZE_ONLY)
-                   extralen += 3;
+                   PL_extralen += 3;
            }
            ret->flags = 0;
 
@@ -1458,7 +1458,7 @@ regpiece(I32 *flagp)
     if (op == '*' && (flags&SIMPLE)) {
        reginsert(STAR, ret);
        ret->flags = 0;
-       regnaughty += 4;
+       PL_regnaughty += 4;
     }
     else if (op == '*') {
        min = 0;
@@ -1466,7 +1466,7 @@ regpiece(I32 *flagp)
     } else if (op == '+' && (flags&SIMPLE)) {
        reginsert(PLUS, ret);
        ret->flags = 0;
-       regnaughty += 3;
+       PL_regnaughty += 3;
     }
     else if (op == '+') {
        min = 1;
@@ -1476,17 +1476,17 @@ regpiece(I32 *flagp)
        goto do_curly;
     }
   nest_check:
-    if (dowarn && !SIZE_ONLY && !(flags&HASWIDTH) && max > 10000) {
+    if (PL_dowarn && !SIZE_ONLY && !(flags&HASWIDTH) && max > 10000) {
        warn("%.*s matches null string many times",
-           regcomp_parse - origparse, origparse);
+           PL_regcomp_parse - origparse, origparse);
     }
 
-    if (*regcomp_parse == '?') {
+    if (*PL_regcomp_parse == '?') {
        nextchar();
        reginsert(MINMOD, ret);
        regtail(ret, ret + NODE_STEP_REGNODE);
     }
-    if (ISMULT2(regcomp_parse))
+    if (ISMULT2(PL_regcomp_parse))
        FAIL("nested *?+ in regexp");
 
     return(ret);
@@ -1512,39 +1512,39 @@ regatom(I32 *flagp)
     *flagp = WORST;            /* Tentatively. */
 
 tryagain:
-    switch (*regcomp_parse) {
+    switch (*PL_regcomp_parse) {
     case '^':
-       seen_zerolen++;
+       PL_seen_zerolen++;
        nextchar();
-       if (regflags & PMf_MULTILINE)
+       if (PL_regflags & PMf_MULTILINE)
            ret = reg_node(MBOL);
-       else if (regflags & PMf_SINGLELINE)
+       else if (PL_regflags & PMf_SINGLELINE)
            ret = reg_node(SBOL);
        else
            ret = reg_node(BOL);
        break;
     case '$':
-       if (regcomp_parse[1]) 
-           seen_zerolen++;
+       if (PL_regcomp_parse[1]) 
+           PL_seen_zerolen++;
        nextchar();
-       if (regflags & PMf_MULTILINE)
+       if (PL_regflags & PMf_MULTILINE)
            ret = reg_node(MEOL);
-       else if (regflags & PMf_SINGLELINE)
+       else if (PL_regflags & PMf_SINGLELINE)
            ret = reg_node(SEOL);
        else
            ret = reg_node(EOL);
        break;
     case '.':
        nextchar();
-       if (regflags & PMf_SINGLELINE)
+       if (PL_regflags & PMf_SINGLELINE)
            ret = reg_node(SANY);
        else
            ret = reg_node(ANY);
-       regnaughty++;
+       PL_regnaughty++;
        *flagp |= HASWIDTH|SIMPLE;
        break;
     case '[':
-       regcomp_parse++;
+       PL_regcomp_parse++;
        ret = regclass();
        *flagp |= HASWIDTH|SIMPLE;
        break;
@@ -1564,12 +1564,12 @@ tryagain:
            *flagp |= TRYAGAIN;
            return NULL;
        }
-       FAIL2("internal urp in regexp at /%s/", regcomp_parse);
+       FAIL2("internal urp in regexp at /%s/", PL_regcomp_parse);
                                /* Supposed to be caught earlier. */
        break;
     case '{':
-       if (!regcurly(regcomp_parse)) {
-           regcomp_parse++;
+       if (!regcurly(PL_regcomp_parse)) {
+           PL_regcomp_parse++;
            goto defchar;
        }
        /* FALL THROUGH */
@@ -1579,16 +1579,16 @@ tryagain:
        FAIL("?+*{} follows nothing in regexp");
        break;
     case '\\':
-       switch (*++regcomp_parse) {
+       switch (*++PL_regcomp_parse) {
        case 'A':
-           seen_zerolen++;
+           PL_seen_zerolen++;
            ret = reg_node(SBOL);
            *flagp |= SIMPLE;
            nextchar();
            break;
        case 'G':
            ret = reg_node(GPOS);
-           regseen |= REG_SEEN_GPOS;
+           PL_regseen |= REG_SEEN_GPOS;
            *flagp |= SIMPLE;
            nextchar();
            break;
@@ -1600,38 +1600,38 @@ tryagain:
        case 'z':
            ret = reg_node(EOS);
            *flagp |= SIMPLE;
-           seen_zerolen++;             /* Do not optimize RE away */
+           PL_seen_zerolen++;          /* Do not optimize RE away */
            nextchar();
            break;
        case 'w':
-           ret = reg_node((regflags & PMf_LOCALE) ? ALNUML : ALNUM);
+           ret = reg_node((PL_regflags & PMf_LOCALE) ? ALNUML : ALNUM);
            *flagp |= HASWIDTH|SIMPLE;
            nextchar();
            break;
        case 'W':
-           ret = reg_node((regflags & PMf_LOCALE) ? NALNUML : NALNUM);
+           ret = reg_node((PL_regflags & PMf_LOCALE) ? NALNUML : NALNUM);
            *flagp |= HASWIDTH|SIMPLE;
            nextchar();
            break;
        case 'b':
-           seen_zerolen++;
-           ret = reg_node((regflags & PMf_LOCALE) ? BOUNDL : BOUND);
+           PL_seen_zerolen++;
+           ret = reg_node((PL_regflags & PMf_LOCALE) ? BOUNDL : BOUND);
            *flagp |= SIMPLE;
            nextchar();
            break;
        case 'B':
-           seen_zerolen++;
-           ret = reg_node((regflags & PMf_LOCALE) ? NBOUNDL : NBOUND);
+           PL_seen_zerolen++;
+           ret = reg_node((PL_regflags & PMf_LOCALE) ? NBOUNDL : NBOUND);
            *flagp |= SIMPLE;
            nextchar();
            break;
        case 's':
-           ret = reg_node((regflags & PMf_LOCALE) ? SPACEL : SPACE);
+           ret = reg_node((PL_regflags & PMf_LOCALE) ? SPACEL : SPACE);
            *flagp |= HASWIDTH|SIMPLE;
            nextchar();
            break;
        case 'S':
-           ret = reg_node((regflags & PMf_LOCALE) ? NSPACEL : NSPACE);
+           ret = reg_node((PL_regflags & PMf_LOCALE) ? NSPACEL : NSPACE);
            *flagp |= HASWIDTH|SIMPLE;
            nextchar();
            break;
@@ -1658,27 +1658,27 @@ tryagain:
        case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
            {
-               I32 num = atoi(regcomp_parse);
+               I32 num = atoi(PL_regcomp_parse);
 
-               if (num > 9 && num >= regnpar)
+               if (num > 9 && num >= PL_regnpar)
                    goto defchar;
                else {
-                   if (!SIZE_ONLY && num > regcomp_rx->nparens)
+                   if (!SIZE_ONLY && num > PL_regcomp_rx->nparens)
                        FAIL("reference to nonexistent group");
-                   regsawback = 1;
-                   ret = reganode((regflags & PMf_FOLD)
-                                  ? ((regflags & PMf_LOCALE) ? REFFL : REFF)
+                   PL_regsawback = 1;
+                   ret = reganode((PL_regflags & PMf_FOLD)
+                                  ? ((PL_regflags & PMf_LOCALE) ? REFFL : REFF)
                                   : REF, num);
                    *flagp |= HASWIDTH;
-                   while (isDIGIT(*regcomp_parse))
-                       regcomp_parse++;
-                   regcomp_parse--;
+                   while (isDIGIT(*PL_regcomp_parse))
+                       PL_regcomp_parse++;
+                   PL_regcomp_parse--;
                    nextchar();
                }
            }
            break;
        case '\0':
-           if (regcomp_parse >= regxend)
+           if (PL_regcomp_parse >= PL_regxend)
                FAIL("trailing \\ in regexp");
            /* FALL THROUGH */
        default:
@@ -1687,9 +1687,9 @@ tryagain:
        break;
 
     case '#':
-       if (regflags & PMf_EXTENDED) {
-           while (regcomp_parse < regxend && *regcomp_parse != '\n') regcomp_parse++;
-           if (regcomp_parse < regxend)
+       if (PL_regflags & PMf_EXTENDED) {
+           while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != '\n') PL_regcomp_parse++;
+           if (PL_regcomp_parse < PL_regxend)
                goto tryagain;
        }
        /* FALL THROUGH */
@@ -1701,22 +1701,22 @@ tryagain:
            char *oldp, *s;
            I32 numlen;
 
-           regcomp_parse++;
+           PL_regcomp_parse++;
 
        defchar:
-           ret = reg_node((regflags & PMf_FOLD)
-                         ? ((regflags & PMf_LOCALE) ? EXACTFL : EXACTF)
+           ret = reg_node((PL_regflags & PMf_FOLD)
+                         ? ((PL_regflags & PMf_LOCALE) ? EXACTFL : EXACTF)
                          : EXACT);
            s = (char *) OPERAND(ret);
            regc(0, s++);               /* save spot for len */
-           for (len = 0, p = regcomp_parse - 1;
-             len < 127 && p < regxend;
+           for (len = 0, p = PL_regcomp_parse - 1;
+             len < 127 && p < PL_regxend;
              len++)
            {
                oldp = p;
 
-               if (regflags & PMf_EXTENDED)
-                   p = regwhite(p, regxend);
+               if (PL_regflags & PMf_EXTENDED)
+                   p = regwhite(p, PL_regxend);
                switch (*p) {
                case '^':
                case '$':
@@ -1778,7 +1778,7 @@ tryagain:
                    case '0': case '1': case '2': case '3':case '4':
                    case '5': case '6': case '7': case '8':case '9':
                        if (*p == '0' ||
-                         (isDIGIT(p[1]) && atoi(p) >= regnpar) ) {
+                         (isDIGIT(p[1]) && atoi(p) >= PL_regnpar) ) {
                            ender = scan_oct(p, 3, &numlen);
                            p += numlen;
                        }
@@ -1788,7 +1788,7 @@ tryagain:
                        }
                        break;
                    case '\0':
-                       if (p >= regxend)
+                       if (p >= PL_regxend)
                            FAIL("trailing \\ in regexp");
                        /* FALL THROUGH */
                    default:
@@ -1800,8 +1800,8 @@ tryagain:
                    ender = *p++;
                    break;
                }
-               if (regflags & PMf_EXTENDED)
-                   p = regwhite(p, regxend);
+               if (PL_regflags & PMf_EXTENDED)
+                   p = regwhite(p, PL_regxend);
                if (ISMULT2(p)) { /* Back off on ?+*. */
                    if (len)
                        p = oldp;
@@ -1814,7 +1814,7 @@ tryagain:
                regc(ender, s++);
            }
        loopdone:
-           regcomp_parse = p - 1;
+           PL_regcomp_parse = p - 1;
            nextchar();
            if (len < 0)
                FAIL("internal disaster in regexp");
@@ -1826,9 +1826,9 @@ tryagain:
                *OPERAND(ret) = len;
            regc('\0', s++);
            if (SIZE_ONLY) {
-               regsize += (len + 2 + sizeof(regnode) - 1) / sizeof(regnode);
+               PL_regsize += (len + 2 + sizeof(regnode) - 1) / sizeof(regnode);
            } else {
-               regcode += (len + 2 + sizeof(regnode) - 1) / sizeof(regnode);
+               PL_regcode += (len + 2 + sizeof(regnode) - 1) / sizeof(regnode);
            }
        }
        break;
@@ -1866,60 +1866,60 @@ regclass(void)
     register I32 def;
     I32 numlen;
 
-    s = opnd = (char *) OPERAND(regcode);
+    s = opnd = (char *) OPERAND(PL_regcode);
     ret = reg_node(ANYOF);
     for (Class = 0; Class < 33; Class++)
        regc(0, s++);
-    if (*regcomp_parse == '^') {       /* Complement of range. */
-       regnaughty++;
-       regcomp_parse++;
+    if (*PL_regcomp_parse == '^') {    /* Complement of range. */
+       PL_regnaughty++;
+       PL_regcomp_parse++;
        if (!SIZE_ONLY)
            *opnd |= ANYOF_INVERT;
     }
     if (!SIZE_ONLY) {
-       regcode += ANY_SKIP;
-       if (regflags & PMf_FOLD)
+       PL_regcode += ANY_SKIP;
+       if (PL_regflags & PMf_FOLD)
            *opnd |= ANYOF_FOLD;
-       if (regflags & PMf_LOCALE)
+       if (PL_regflags & PMf_LOCALE)
            *opnd |= ANYOF_LOCALE;
     } else {
-       regsize += ANY_SKIP;
+       PL_regsize += ANY_SKIP;
     }
-    if (*regcomp_parse == ']' || *regcomp_parse == '-')
+    if (*PL_regcomp_parse == ']' || *PL_regcomp_parse == '-')
        goto skipcond;          /* allow 1st char to be ] or - */
-    while (regcomp_parse < regxend && *regcomp_parse != ']') {
+    while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != ']') {
        skipcond:
-       Class = UCHARAT(regcomp_parse++);
-       if (Class == '[' && regcomp_parse + 1 < regxend &&
+       Class = UCHARAT(PL_regcomp_parse++);
+       if (Class == '[' && PL_regcomp_parse + 1 < PL_regxend &&
            /* I smell either [: or [= or [. -- POSIX has been here, right? */
-           (*regcomp_parse == ':' || *regcomp_parse == '=' || *regcomp_parse == '.')) {
-           char  posixccc = *regcomp_parse;
-           char* posixccs = regcomp_parse++;
+           (*PL_regcomp_parse == ':' || *PL_regcomp_parse == '=' || *PL_regcomp_parse == '.')) {
+           char  posixccc = *PL_regcomp_parse;
+           char* posixccs = PL_regcomp_parse++;
            
-           while (regcomp_parse < regxend && *regcomp_parse != posixccc)
-               regcomp_parse++;
-           if (regcomp_parse == regxend)
+           while (PL_regcomp_parse < PL_regxend && *PL_regcomp_parse != posixccc)
+               PL_regcomp_parse++;
+           if (PL_regcomp_parse == PL_regxend)
                /* Grandfather lone [:, [=, [. */
-               regcomp_parse = posixccs;
+               PL_regcomp_parse = posixccs;
            else {
-               regcomp_parse++; /* skip over the posixccc */
-               if (*regcomp_parse == ']') {
+               PL_regcomp_parse++; /* skip over the posixccc */
+               if (*PL_regcomp_parse == ']') {
                    /* Not Implemented Yet.
                     * (POSIX Extended Character Classes, that is)
                     * The text between e.g. [: and :] would start
                     * at posixccs + 1 and stop at regcomp_parse - 2. */
-                   if (dowarn && !SIZE_ONLY)
+                   if (PL_dowarn && !SIZE_ONLY)
                        warn("Character class syntax [%c %c] is reserved for future extensions", posixccc, posixccc);
-                   regcomp_parse++; /* skip over the ending ] */
+                   PL_regcomp_parse++; /* skip over the ending ] */
                }
            }
        }
        if (Class == '\\') {
-           Class = UCHARAT(regcomp_parse++);
+           Class = UCHARAT(PL_regcomp_parse++);
            switch (Class) {
            case 'w':
                if (!SIZE_ONLY) {
-                   if (regflags & PMf_LOCALE)
+                   if (PL_regflags & PMf_LOCALE)
                        *opnd |= ANYOF_ALNUML;
                    else {
                        for (Class = 0; Class < 256; Class++)
@@ -1931,7 +1931,7 @@ regclass(void)
                continue;
            case 'W':
                if (!SIZE_ONLY) {
-                   if (regflags & PMf_LOCALE)
+                   if (PL_regflags & PMf_LOCALE)
                        *opnd |= ANYOF_NALNUML;
                    else {
                        for (Class = 0; Class < 256; Class++)
@@ -1943,7 +1943,7 @@ regclass(void)
                continue;
            case 's':
                if (!SIZE_ONLY) {
-                   if (regflags & PMf_LOCALE)
+                   if (PL_regflags & PMf_LOCALE)
                        *opnd |= ANYOF_SPACEL;
                    else {
                        for (Class = 0; Class < 256; Class++)
@@ -1955,7 +1955,7 @@ regclass(void)
                continue;
            case 'S':
                if (!SIZE_ONLY) {
-                   if (regflags & PMf_LOCALE)
+                   if (PL_regflags & PMf_LOCALE)
                        *opnd |= ANYOF_NSPACEL;
                    else {
                        for (Class = 0; Class < 256; Class++)
@@ -2003,17 +2003,17 @@ regclass(void)
                Class = '\007';
                break;
            case 'x':
-               Class = scan_hex(regcomp_parse, 2, &numlen);
-               regcomp_parse += numlen;
+               Class = scan_hex(PL_regcomp_parse, 2, &numlen);
+               PL_regcomp_parse += numlen;
                break;
            case 'c':
-               Class = UCHARAT(regcomp_parse++);
+               Class = UCHARAT(PL_regcomp_parse++);
                Class = toCTRL(Class);
                break;
            case '0': case '1': case '2': case '3': case '4':
            case '5': case '6': case '7': case '8': case '9':
-               Class = scan_oct(--regcomp_parse, 3, &numlen);
-               regcomp_parse += numlen;
+               Class = scan_oct(--PL_regcomp_parse, 3, &numlen);
+               PL_regcomp_parse += numlen;
                break;
            }
        }
@@ -2024,9 +2024,9 @@ regclass(void)
        }
        else {
            lastclass = Class;
-           if (*regcomp_parse == '-' && regcomp_parse+1 < regxend &&
-             regcomp_parse[1] != ']') {
-               regcomp_parse++;
+           if (*PL_regcomp_parse == '-' && PL_regcomp_parse+1 < PL_regxend &&
+             PL_regcomp_parse[1] != ']') {
+               PL_regcomp_parse++;
                range = 1;
                continue;       /* do it next time */
            }
@@ -2037,7 +2037,7 @@ regclass(void)
        }
        lastclass = Class;
     }
-    if (*regcomp_parse != ']')
+    if (*PL_regcomp_parse != ']')
        FAIL("unmatched [] in regexp");
     nextchar();
     /* optimize case-insensitive simple patterns (e.g. /[a-z]/i) */
@@ -2063,25 +2063,25 @@ STATIC char*
 nextchar(void)
 {
     dTHR;
-    char* retval = regcomp_parse++;
+    char* retval = PL_regcomp_parse++;
 
     for (;;) {
-       if (*regcomp_parse == '(' && regcomp_parse[1] == '?' &&
-               regcomp_parse[2] == '#') {
-           while (*regcomp_parse && *regcomp_parse != ')')
-               regcomp_parse++;
-           regcomp_parse++;
+       if (*PL_regcomp_parse == '(' && PL_regcomp_parse[1] == '?' &&
+               PL_regcomp_parse[2] == '#') {
+           while (*PL_regcomp_parse && *PL_regcomp_parse != ')')
+               PL_regcomp_parse++;
+           PL_regcomp_parse++;
            continue;
        }
-       if (regflags & PMf_EXTENDED) {
-           if (isSPACE(*regcomp_parse)) {
-               regcomp_parse++;
+       if (PL_regflags & PMf_EXTENDED) {
+           if (isSPACE(*PL_regcomp_parse)) {
+               PL_regcomp_parse++;
                continue;
            }
-           else if (*regcomp_parse == '#') {
-               while (*regcomp_parse && *regcomp_parse != '\n')
-                   regcomp_parse++;
-               regcomp_parse++;
+           else if (*PL_regcomp_parse == '#') {
+               while (*PL_regcomp_parse && *PL_regcomp_parse != '\n')
+                   PL_regcomp_parse++;
+               PL_regcomp_parse++;
                continue;
            }
        }
@@ -2099,17 +2099,17 @@ reg_node(U8 op)
     register regnode *ret;
     register regnode *ptr;
 
-    ret = regcode;
+    ret = PL_regcode;
     if (SIZE_ONLY) {
        SIZE_ALIGN(regsize);
-       regsize += 1;
+       PL_regsize += 1;
        return(ret);
     }
 
     NODE_ALIGN_FILL(ret);
     ptr = ret;
     FILL_ADVANCE_NODE(ptr, op);
-    regcode = ptr;
+    PL_regcode = ptr;
 
     return(ret);
 }
@@ -2124,17 +2124,17 @@ reganode(U8 op, U32 arg)
     register regnode *ret;
     register regnode *ptr;
 
-    ret = regcode;
+    ret = PL_regcode;
     if (SIZE_ONLY) {
        SIZE_ALIGN(regsize);
-       regsize += 2;
+       PL_regsize += 2;
        return(ret);
     }
 
     NODE_ALIGN_FILL(ret);
     ptr = ret;
     FILL_ADVANCE_NODE_ARG(ptr, op, arg);
-    regcode = ptr;
+    PL_regcode = ptr;
 
     return(ret);
 }
@@ -2167,13 +2167,13 @@ reginsert(U8 op, regnode *opnd)
 /* (regkind[(U8)op] == CURLY ? EXTRA_STEP_2ARGS : 0); */
 
     if (SIZE_ONLY) {
-       regsize += NODE_STEP_REGNODE + offset;
+       PL_regsize += NODE_STEP_REGNODE + offset;
        return;
     }
 
-    src = regcode;
-    regcode += NODE_STEP_REGNODE + offset;
-    dst = regcode;
+    src = PL_regcode;
+    PL_regcode += NODE_STEP_REGNODE + offset;
+    dst = PL_regcode;
     while (src > opnd)
        StructCopy(--src, --dst, regnode);
 
@@ -2332,16 +2332,16 @@ regdump(regexp *r)
     /* Header fields of interest. */
     if (r->anchored_substr)
        PerlIO_printf(Perl_debug_log, "anchored `%s%s%s'%s at %d ", 
-                     colors[0],
+                     PL_colors[0],
                      SvPVX(r->anchored_substr), 
-                     colors[1],
+                     PL_colors[1],
                      SvTAIL(r->anchored_substr) ? "$" : "",
                      r->anchored_offset);
     if (r->float_substr)
        PerlIO_printf(Perl_debug_log, "floating `%s%s%s'%s at %d..%u ", 
-                     colors[0],
+                     PL_colors[0],
                      SvPVX(r->float_substr), 
-                     colors[1],
+                     PL_colors[1],
                      SvTAIL(r->float_substr) ? "$" : "",
                      r->float_min_offset, r->float_max_offset);
     if (r->check_substr)
@@ -2428,13 +2428,13 @@ regprop(SV *sv, regnode *o)
        p = "BRANCH";
        break;
     case EXACT:
-       sv_catpvf(sv, "EXACT <%s%s%s>", colors[0], OPERAND(o) + 1, colors[1]);
+       sv_catpvf(sv, "EXACT <%s%s%s>", PL_colors[0], OPERAND(o) + 1, PL_colors[1]);
        break;
     case EXACTF:
-       sv_catpvf(sv, "EXACTF <%s%s%s>", colors[0], OPERAND(o) + 1, colors[1]);
+       sv_catpvf(sv, "EXACTF <%s%s%s>", PL_colors[0], OPERAND(o) + 1, PL_colors[1]);
        break;
     case EXACTFL:
-       sv_catpvf(sv, "EXACTFL <%s%s%s>", colors[0], OPERAND(o) + 1, colors[1]);
+       sv_catpvf(sv, "EXACTFL <%s%s%s>", PL_colors[0], OPERAND(o) + 1, PL_colors[1]);
        break;
     case NOTHING:
        p = "NOTHING";
@@ -2630,7 +2630,7 @@ regnext(register regnode *p)
     dTHR;
     register I32 offset;
 
-    if (p == &regdummy)
+    if (p == &PL_regdummy)
        return(NULL);
 
     offset = (reg_off_by_arg[OP(p)] ? ARG(p) : NEXT_OFF(p));
index 6a01eec..727a4e5 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -152,7 +152,7 @@ struct regnode_2 {
 
 #define MAGIC 0234
 
-#define SIZE_ONLY (regcode == &regdummy)
+#define SIZE_ONLY (PL_regcode == &PL_regdummy)
 
 /* Flags for first parameter byte of ANYOF */
 #define ANYOF_INVERT   0x40
@@ -186,8 +186,8 @@ struct regnode_2 {
 #define UCHARAT(p)     regdummy
 #endif /* lint */
 
-#define        FAIL(m)         croak    ("/%.127s/: %s",  regprecomp,m)
-#define        FAIL2(pat,m)    re_croak2("/%.127s/: ",pat,regprecomp,m)
+#define        FAIL(m)         croak    ("/%.127s/: %s",  PL_regprecomp,m)
+#define        FAIL2(pat,m)    re_croak2("/%.127s/: ",pat,PL_regprecomp,m)
 
 #define EXTRA_SIZE(guy) ((sizeof(guy)-1)/sizeof(struct regnode))
 
index c1cd8db..f8c790b 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -108,20 +108,20 @@ STATIC CHECKPOINT
 regcppush(I32 parenfloor)
 {
     dTHR;
-    int retval = savestack_ix;
-    int i = (regsize - parenfloor) * 4;
+    int retval = PL_savestack_ix;
+    int i = (PL_regsize - parenfloor) * 4;
     int p;
 
     SSCHECK(i + 5);
-    for (p = regsize; p > parenfloor; p--) {
-       SSPUSHPTR(regendp[p]);
-       SSPUSHPTR(regstartp[p]);
-       SSPUSHPTR(reg_start_tmp[p]);
+    for (p = PL_regsize; p > parenfloor; p--) {
+       SSPUSHPTR(PL_regendp[p]);
+       SSPUSHPTR(PL_regstartp[p]);
+       SSPUSHPTR(PL_reg_start_tmp[p]);
        SSPUSHINT(p);
     }
-    SSPUSHINT(regsize);
-    SSPUSHINT(*reglastparen);
-    SSPUSHPTR(reginput);
+    SSPUSHINT(PL_regsize);
+    SSPUSHINT(*PL_reglastparen);
+    SSPUSHPTR(PL_reginput);
     SSPUSHINT(i + 3);
     SSPUSHINT(SAVEt_REGCONTEXT);
     return retval;
@@ -130,12 +130,12 @@ regcppush(I32 parenfloor)
 /* These are needed since we do not localize EVAL nodes: */
 #  define REGCP_SET  DEBUG_r(PerlIO_printf(Perl_debug_log,             \
                             "  Setting an EVAL scope, savestack=%i\n", \
-                            savestack_ix)); lastcp = savestack_ix
+                            PL_savestack_ix)); lastcp = PL_savestack_ix
 
-#  define REGCP_UNWIND  DEBUG_r(lastcp != savestack_ix ?               \
+#  define REGCP_UNWIND  DEBUG_r(lastcp != PL_savestack_ix ?            \
                                PerlIO_printf(Perl_debug_log,           \
                                "  Clearing an EVAL scope, savestack=%i..%i\n", \
-                               lastcp, savestack_ix) : 0); regcpblow(lastcp)
+                               lastcp, PL_savestack_ix) : 0); regcpblow(lastcp)
 
 STATIC char *
 regcppop(void)
@@ -148,35 +148,35 @@ regcppop(void)
     assert(i == SAVEt_REGCONTEXT);
     i = SSPOPINT;
     input = (char *) SSPOPPTR;
-    *reglastparen = SSPOPINT;
-    regsize = SSPOPINT;
+    *PL_reglastparen = SSPOPINT;
+    PL_regsize = SSPOPINT;
     for (i -= 3; i > 0; i -= 4) {
        paren = (U32)SSPOPINT;
-       reg_start_tmp[paren] = (char *) SSPOPPTR;
-       regstartp[paren] = (char *) SSPOPPTR;
+       PL_reg_start_tmp[paren] = (char *) SSPOPPTR;
+       PL_regstartp[paren] = (char *) SSPOPPTR;
        tmps = (char*)SSPOPPTR;
-       if (paren <= *reglastparen)
-           regendp[paren] = tmps;
+       if (paren <= *PL_reglastparen)
+           PL_regendp[paren] = tmps;
        DEBUG_r(
            PerlIO_printf(Perl_debug_log,
                          "     restoring \\%d to %d(%d)..%d%s\n",
-                         paren, regstartp[paren] - regbol, 
-                         reg_start_tmp[paren] - regbol,
-                         regendp[paren] - regbol, 
-                         (paren > *reglastparen ? "(no)" : ""));
+                         paren, PL_regstartp[paren] - PL_regbol, 
+                         PL_reg_start_tmp[paren] - PL_regbol,
+                         PL_regendp[paren] - PL_regbol, 
+                         (paren > *PL_reglastparen ? "(no)" : ""));
        );
     }
     DEBUG_r(
-       if (*reglastparen + 1 <= regnpar) {
+       if (*PL_reglastparen + 1 <= PL_regnpar) {
            PerlIO_printf(Perl_debug_log,
                          "     restoring \\%d..\\%d to undef\n",
-                         *reglastparen + 1, regnpar);
+                         *PL_reglastparen + 1, PL_regnpar);
        }
     );
-    for (paren = *reglastparen + 1; paren <= regnpar; paren++) {
-       if (paren > regsize)
-           regstartp[paren] = Nullch;
-       regendp[paren] = Nullch;
+    for (paren = *PL_reglastparen + 1; paren <= PL_regnpar; paren++) {
+       if (paren > PL_regsize)
+           PL_regstartp[paren] = Nullch;
+       PL_regendp[paren] = Nullch;
     }
     return input;
 }
@@ -228,16 +228,16 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
     I32 end_shift = 0;                 /* Same for the end. */
     I32 scream_pos = -1;               /* Internal iterator of scream. */
     char *scream_olds;
-    SV* oreplsv = GvSV(replgv);
+    SV* oreplsv = GvSV(PL_replgv);
 
     cc.cur = 0;
     cc.oldcc = 0;
-    regcc = &cc;
+    PL_regcc = &cc;
 
-    regprecomp = prog->precomp;                /* Needed for error messages. */
+    PL_regprecomp = prog->precomp;             /* Needed for error messages. */
 #ifdef DEBUGGING
-    regnarrate = debug & 512;
-    regprogram = prog->program;
+    PL_regnarrate = PL_debug & 512;
+    PL_regprogram = prog->program;
 #endif
 
     /* Be paranoid... */
@@ -250,11 +250,11 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
     if (strend - startpos < minlen) goto phooey;
 
     if (startpos == strbeg)    /* is ^ valid at stringarg? */
-       regprev = '\n';
+       PL_regprev = '\n';
     else {
-       regprev = stringarg[-1];
-       if (!multiline && regprev == '\n')
-           regprev = '\0';             /* force ^ to NOT match */
+       PL_regprev = stringarg[-1];
+       if (!PL_multiline && PL_regprev == '\n')
+           PL_regprev = '\0';          /* force ^ to NOT match */
     }
 
     /* Check validity of program. */
@@ -262,9 +262,9 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
        FAIL("corrupted regexp program");
     }
 
-    regnpar = prog->nparens;
-    reg_flags = 0;
-    reg_eval_set = 0;
+    PL_regnpar = prog->nparens;
+    PL_reg_flags = 0;
+    PL_reg_eval_set = 0;
 
     /* If there is a "must appear" string, look for it. */
     s = startpos;
@@ -272,13 +272,13 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
        && prog->check_substr != Nullsv &&
        !(prog->reganch & ROPT_ANCH_GPOS) &&
        (!(prog->reganch & (ROPT_ANCH_BOL | ROPT_ANCH_MBOL))
-        || (multiline && prog->check_substr == prog->anchored_substr)) )
+        || (PL_multiline && prog->check_substr == prog->anchored_substr)) )
     {
        start_shift = prog->check_offset_min;
        /* Should be nonnegative! */
        end_shift = minlen - start_shift - SvCUR(prog->check_substr);
        if (screamer) {
-           if (screamfirst[BmRARE(prog->check_substr)] >= 0)
+           if (PL_screamfirst[BmRARE(prog->check_substr)] >= 0)
                    s = screaminstr(screamer, prog->check_substr, 
                                    start_shift + (stringarg - strbeg),
                                    end_shift, &scream_pos, 0);
@@ -307,14 +307,14 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
     }
 
     /* Mark beginning of line for ^ and lookbehind. */
-    regbol = startpos;
-    bostr  = strbeg;
+    PL_regbol = startpos;
+    PL_bostr  = strbeg;
 
     /* Mark end of line for $ (and such) */
-    regeol = strend;
+    PL_regeol = strend;
 
     /* see how far we have to get to not match where we matched before */
-    regtill = startpos+minend;
+    PL_regtill = startpos+minend;
 
     DEBUG_r(
        PerlIO_printf(Perl_debug_log, 
@@ -332,7 +332,7 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
        if (regtry(prog, startpos))
            goto got_it;
        else if (!(prog->reganch & ROPT_ANCH_GPOS) &&
-                (multiline || (prog->reganch & ROPT_IMPLICIT)
+                (PL_multiline || (prog->reganch & ROPT_IMPLICIT)
                  || (prog->reganch & ROPT_ANCH_MBOL)))
        {
            if (minlen)
@@ -432,12 +432,12 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
            }
            break;
        case BOUNDL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case BOUND:
            if (minlen)
                dontbother++,strend--;
-           tmp = (s != startpos) ? UCHARAT(s - 1) : regprev;
+           tmp = (s != startpos) ? UCHARAT(s - 1) : PL_regprev;
            tmp = ((OP(c) == BOUND ? isALNUM(tmp) : isALNUM_LC(tmp)) != 0);
            while (s < strend) {
                if (tmp == !(OP(c) == BOUND ? isALNUM(*s) : isALNUM_LC(*s))) {
@@ -451,12 +451,12 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
                goto got_it;
            break;
        case NBOUNDL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case NBOUND:
            if (minlen)
                dontbother++,strend--;
-           tmp = (s != startpos) ? UCHARAT(s - 1) : regprev;
+           tmp = (s != startpos) ? UCHARAT(s - 1) : PL_regprev;
            tmp = ((OP(c) == NBOUND ? isALNUM(tmp) : isALNUM_LC(tmp)) != 0);
            while (s < strend) {
                if (tmp == !(OP(c) == NBOUND ? isALNUM(*s) : isALNUM_LC(*s)))
@@ -482,7 +482,7 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
            }
            break;
        case ALNUML:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            while (s < strend) {
                if (isALNUM_LC(*s)) {
                    if (tmp && regtry(prog, s))
@@ -509,7 +509,7 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
            }
            break;
        case NALNUML:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            while (s < strend) {
                if (!isALNUM_LC(*s)) {
                    if (tmp && regtry(prog, s))
@@ -536,7 +536,7 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
            }
            break;
        case SPACEL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            while (s < strend) {
                if (isSPACE_LC(*s)) {
                    if (tmp && regtry(prog, s))
@@ -563,7 +563,7 @@ regexec_flags(register regexp *prog, char *stringarg, register char *strend,
            }
            break;
        case NSPACEL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            while (s < strend) {
                if (!isSPACE_LC(*s)) {
                    if (tmp && regtry(prog, s))
@@ -641,7 +641,7 @@ got_it:
     strend += dontbother;      /* uncheat */
     prog->subbeg = strbeg;
     prog->subend = strend;
-    RX_MATCH_TAINTED_set(prog, reg_flags & RF_tainted);
+    RX_MATCH_TAINTED_set(prog, PL_reg_flags & RF_tainted);
 
     /* make sure $`, $&, $', and $digit will work later */
     if (strbeg != prog->subbase) {     /* second+ //g match.  */
@@ -668,8 +668,8 @@ got_it:
        }
     }
     /* Preserve the current value of $^R */
-    if (oreplsv != GvSV(replgv)) {
-       sv_setsv(oreplsv, GvSV(replgv));/* So that when GvSV(replgv) is
+    if (oreplsv != GvSV(PL_replgv)) {
+       sv_setsv(oreplsv, GvSV(PL_replgv));/* So that when GvSV(replgv) is
                                           restored, the value remains
                                           the same. */
     }
@@ -691,37 +691,37 @@ regtry(regexp *prog, char *startpos)
     register char **ep;
     CHECKPOINT lastcp;
 
-    if ((prog->reganch & ROPT_EVAL_SEEN) && !reg_eval_set) {
-       reg_eval_set = RS_init;
+    if ((prog->reganch & ROPT_EVAL_SEEN) && !PL_reg_eval_set) {
+       PL_reg_eval_set = RS_init;
        DEBUG_r(DEBUG_s(
            PerlIO_printf(Perl_debug_log, "  setting stack tmpbase at %i\n",
-                         stack_sp - stack_base);
+                         PL_stack_sp - PL_stack_base);
            ));
        SAVEINT(cxstack[cxstack_ix].blk_oldsp);
-       cxstack[cxstack_ix].blk_oldsp = stack_sp - stack_base;
+       cxstack[cxstack_ix].blk_oldsp = PL_stack_sp - PL_stack_base;
        /* Otherwise OP_NEXTSTATE will free whatever on stack now.  */
        SAVETMPS;
        /* Apparently this is not needed, judging by wantarray. */
        /* SAVEINT(cxstack[cxstack_ix].blk_gimme);
           cxstack[cxstack_ix].blk_gimme = G_SCALAR; */
     }
-    reginput = startpos;
-    regstartp = prog->startp;
-    regendp = prog->endp;
-    reglastparen = &prog->lastparen;
+    PL_reginput = startpos;
+    PL_regstartp = prog->startp;
+    PL_regendp = prog->endp;
+    PL_reglastparen = &prog->lastparen;
     prog->lastparen = 0;
-    regsize = 0;
-    if (reg_start_tmpl <= prog->nparens) {
-       reg_start_tmpl = prog->nparens*3/2 + 3;
-        if(reg_start_tmp)
-            Renew(reg_start_tmp, reg_start_tmpl, char*);
+    PL_regsize = 0;
+    if (PL_reg_start_tmpl <= prog->nparens) {
+       PL_reg_start_tmpl = prog->nparens*3/2 + 3;
+        if(PL_reg_start_tmp)
+            Renew(PL_reg_start_tmp, PL_reg_start_tmpl, char*);
         else
-            New(22,reg_start_tmp, reg_start_tmpl, char*);
+            New(22,PL_reg_start_tmp, PL_reg_start_tmpl, char*);
     }
 
     sp = prog->startp;
     ep = prog->endp;
-    regdata = prog->data;
+    PL_regdata = prog->data;
     if (prog->nparens) {
        for (i = prog->nparens; i >= 0; i--) {
            *sp++ = NULL;
@@ -731,7 +731,7 @@ regtry(regexp *prog, char *startpos)
     REGCP_SET;
     if (regmatch(prog->program + 1)) {
        prog->startp[0] = startpos;
-       prog->endp[0] = reginput;
+       prog->endp[0] = PL_reginput;
        return 1;
     }
     REGCP_UNWIND;
@@ -764,11 +764,11 @@ regmatch(regnode *prog)
     register I32 n;            /* no or next */
     register I32 ln;           /* len or last */
     register char *s;          /* operand or save */
-    register char *locinput = reginput;
+    register char *locinput = PL_reginput;
     register I32 c1, c2, paren;        /* case fold search, parenth */
     int minmod = 0, sw = 0, logical = 0;
 #ifdef DEBUGGING
-    regindent++;
+    PL_regindent++;
 #endif
 
     nextchr = UCHARAT(locinput);
@@ -787,25 +787,25 @@ regmatch(regnode *prog)
 #endif
        DEBUG_r( {
            SV *prop = sv_newmortal();
-           int docolor = *colors[0];
+           int docolor = *PL_colors[0];
            int taill = (docolor ? 10 : 7); /* 3 chars for "> <" */
-           int l = (regeol - locinput > taill ? taill : regeol - locinput);
-           int pref_len = (locinput - bostr > (5 + taill) - l 
-                           ? (5 + taill) - l : locinput - bostr);
+           int l = (PL_regeol - locinput > taill ? taill : PL_regeol - locinput);
+           int pref_len = (locinput - PL_bostr > (5 + taill) - l 
+                           ? (5 + taill) - l : locinput - PL_bostr);
 
-           if (l + pref_len < (5 + taill) && l < regeol - locinput)
-               l = ( regeol - locinput > (5 + taill) - pref_len 
-                     ? (5 + taill) - pref_len : regeol - locinput);
+           if (l + pref_len < (5 + taill) && l < PL_regeol - locinput)
+               l = ( PL_regeol - locinput > (5 + taill) - pref_len 
+                     ? (5 + taill) - pref_len : PL_regeol - locinput);
            regprop(prop, scan);
            PerlIO_printf(Perl_debug_log, 
                          "%4i <%s%.*s%s%s%s%.*s%s>%*s|%3d:%*s%s\n",
-                         locinput - bostr, 
-                         colors[2], pref_len, locinput - pref_len, colors[3],
+                         locinput - PL_bostr, 
+                         PL_colors[2], pref_len, locinput - pref_len, PL_colors[3],
                          (docolor ? "" : "> <"),
-                         colors[0], l, locinput, colors[1],
+                         PL_colors[0], l, locinput, PL_colors[1],
                          15 - l - pref_len + 1,
                          "",
-                         scan - regprogram, regindent*2, "",
+                         scan - PL_regprogram, PL_regindent*2, "",
                          SvPVX(prop));
        } );
 
@@ -815,59 +815,59 @@ regmatch(regnode *prog)
 
        switch (OP(scan)) {
        case BOL:
-           if (locinput == bostr
-               ? regprev == '\n'
-               : (multiline && 
-                  (nextchr || locinput < regeol) && locinput[-1] == '\n') )
+           if (locinput == PL_bostr
+               ? PL_regprev == '\n'
+               : (PL_multiline && 
+                  (nextchr || locinput < PL_regeol) && locinput[-1] == '\n') )
            {
                /* regtill = regbol; */
                break;
            }
            sayNO;
        case MBOL:
-           if (locinput == bostr
-               ? regprev == '\n'
-               : ((nextchr || locinput < regeol) && locinput[-1] == '\n') )
+           if (locinput == PL_bostr
+               ? PL_regprev == '\n'
+               : ((nextchr || locinput < PL_regeol) && locinput[-1] == '\n') )
            {
                break;
            }
            sayNO;
        case SBOL:
-           if (locinput == regbol && regprev == '\n')
+           if (locinput == PL_regbol && PL_regprev == '\n')
                break;
            sayNO;
        case GPOS:
-           if (locinput == regbol)
+           if (locinput == PL_regbol)
                break;
            sayNO;
        case EOL:
-           if (multiline)
+           if (PL_multiline)
                goto meol;
            else
                goto seol;
        case MEOL:
          meol:
-           if ((nextchr || locinput < regeol) && nextchr != '\n')
+           if ((nextchr || locinput < PL_regeol) && nextchr != '\n')
                sayNO;
            break;
        case SEOL:
          seol:
-           if ((nextchr || locinput < regeol) && nextchr != '\n')
+           if ((nextchr || locinput < PL_regeol) && nextchr != '\n')
                sayNO;
-           if (regeol - locinput > 1)
+           if (PL_regeol - locinput > 1)
                sayNO;
            break;
        case EOS:
-           if (regeol != locinput)
+           if (PL_regeol != locinput)
                sayNO;
            break;
        case SANY:
-           if (!nextchr && locinput >= regeol)
+           if (!nextchr && locinput >= PL_regeol)
                sayNO;
            nextchr = UCHARAT(++locinput);
            break;
        case ANY:
-           if (!nextchr && locinput >= regeol || nextchr == '\n')
+           if (!nextchr && locinput >= PL_regeol || nextchr == '\n')
                sayNO;
            nextchr = UCHARAT(++locinput);
            break;
@@ -877,7 +877,7 @@ regmatch(regnode *prog)
            /* Inline the first character, for speed. */
            if (UCHARAT(s) != nextchr)
                sayNO;
-           if (regeol - locinput < ln)
+           if (PL_regeol - locinput < ln)
                sayNO;
            if (ln > 1 && memNE(s, locinput, ln))
                sayNO;
@@ -885,7 +885,7 @@ regmatch(regnode *prog)
            nextchr = UCHARAT(locinput);
            break;
        case EXACTFL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case EXACTF:
            s = (char *) OPERAND(scan);
@@ -895,7 +895,7 @@ regmatch(regnode *prog)
                UCHARAT(s) != ((OP(scan) == EXACTF)
                               ? fold : fold_locale)[nextchr])
                sayNO;
-           if (regeol - locinput < ln)
+           if (PL_regeol - locinput < ln)
                sayNO;
            if (ln > 1 && (OP(scan) == EXACTF
                           ? ibcmp(s, locinput, ln)
@@ -910,12 +910,12 @@ regmatch(regnode *prog)
                nextchr = UCHARAT(locinput);
            if (!REGINCLASS(s, nextchr))
                sayNO;
-           if (!nextchr && locinput >= regeol)
+           if (!nextchr && locinput >= PL_regeol)
                sayNO;
            nextchr = UCHARAT(++locinput);
            break;
        case ALNUML:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case ALNUM:
            if (!nextchr)
@@ -926,10 +926,10 @@ regmatch(regnode *prog)
            nextchr = UCHARAT(++locinput);
            break;
        case NALNUML:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case NALNUM:
-           if (!nextchr && locinput >= regeol)
+           if (!nextchr && locinput >= PL_regeol)
                sayNO;
            if (OP(scan) == NALNUM
                ? isALNUM(nextchr) : isALNUM_LC(nextchr))
@@ -938,12 +938,12 @@ regmatch(regnode *prog)
            break;
        case BOUNDL:
        case NBOUNDL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case BOUND:
        case NBOUND:
            /* was last char in word? */
-           ln = (locinput != regbol) ? UCHARAT(locinput - 1) : regprev;
+           ln = (locinput != PL_regbol) ? UCHARAT(locinput - 1) : PL_regprev;
            if (OP(scan) == BOUND || OP(scan) == NBOUND) {
                ln = isALNUM(ln);
                n = isALNUM(nextchr);
@@ -956,10 +956,10 @@ regmatch(regnode *prog)
                sayNO;
            break;
        case SPACEL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case SPACE:
-           if (!nextchr && locinput >= regeol)
+           if (!nextchr && locinput >= PL_regeol)
                sayNO;
            if (!(OP(scan) == SPACE
                  ? isSPACE(nextchr) : isSPACE_LC(nextchr)))
@@ -967,7 +967,7 @@ regmatch(regnode *prog)
            nextchr = UCHARAT(++locinput);
            break;
        case NSPACEL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
        case NSPACE:
            if (!nextchr)
@@ -983,22 +983,22 @@ regmatch(regnode *prog)
            nextchr = UCHARAT(++locinput);
            break;
        case NDIGIT:
-           if (!nextchr && locinput >= regeol)
+           if (!nextchr && locinput >= PL_regeol)
                sayNO;
            if (isDIGIT(nextchr))
                sayNO;
            nextchr = UCHARAT(++locinput);
            break;
        case REFFL:
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            /* FALL THROUGH */
         case REF:
        case REFF:
            n = ARG(scan);  /* which paren pair */
-           s = regstartp[n];
-           if (*reglastparen < n || !s)
+           s = PL_regstartp[n];
+           if (*PL_reglastparen < n || !s)
                sayNO;                  /* Do not match unless seen CLOSEn. */
-           if (s == regendp[n])
+           if (s == PL_regendp[n])
                break;
            /* Inline the first character, for speed. */
            if (UCHARAT(s) != nextchr &&
@@ -1006,8 +1006,8 @@ regmatch(regnode *prog)
                 (UCHARAT(s) != ((OP(scan) == REFF
                                  ? fold : fold_locale)[nextchr]))))
                sayNO;
-           ln = regendp[n] - s;
-           if (locinput + ln > regeol)
+           ln = PL_regendp[n] - s;
+           if (locinput + ln > PL_regeol)
                sayNO;
            if (ln > 1 && (OP(scan) == REF
                           ? memNE(s, locinput, ln)
@@ -1028,14 +1028,14 @@ regmatch(regnode *prog)
        {
            dSP;
            OP_4tree *oop = op;
-           COP *ocurcop = curcop;
-           SV **ocurpad = curpad;
+           COP *ocurcop = PL_curcop;
+           SV **ocurpad = PL_curpad;
            SV *ret;
            
            n = ARG(scan);
-           op = (OP_4tree*)regdata->data[n];
+           op = (OP_4tree*)PL_regdata->data[n];
            DEBUG_r( PerlIO_printf(Perl_debug_log, "  re_eval 0x%x\n", op) );
-           curpad = AvARRAY((AV*)regdata->data[n + 1]);
+           PL_curpad = AvARRAY((AV*)PL_regdata->data[n + 1]);
 
            CALLRUNOPS();                       /* Scalar context. */
            SPAGAIN;
@@ -1046,28 +1046,28 @@ regmatch(regnode *prog)
                logical = 0;
                sw = SvTRUE(ret);
            } else
-               sv_setsv(save_scalar(replgv), ret);
+               sv_setsv(save_scalar(PL_replgv), ret);
            op = oop;
-           curpad = ocurpad;
-           curcop = ocurcop;
+           PL_curpad = ocurpad;
+           PL_curcop = ocurcop;
            break;
        }
        case OPEN:
            n = ARG(scan);  /* which paren pair */
-           reg_start_tmp[n] = locinput;
-           if (n > regsize)
-               regsize = n;
+           PL_reg_start_tmp[n] = locinput;
+           if (n > PL_regsize)
+               PL_regsize = n;
            break;
        case CLOSE:
            n = ARG(scan);  /* which paren pair */
-           regstartp[n] = reg_start_tmp[n];
-           regendp[n] = locinput;
-           if (n > *reglastparen)
-               *reglastparen = n;
+           PL_regstartp[n] = PL_reg_start_tmp[n];
+           PL_regendp[n] = locinput;
+           if (n > *PL_reglastparen)
+               *PL_reglastparen = n;
            break;
        case GROUPP:
            n = ARG(scan);  /* which paren pair */
-           sw = (*reglastparen >= n && regendp[n] != NULL);
+           sw = (*PL_reglastparen >= n && PL_regendp[n] != NULL);
            break;
        case IFTHEN:
            if (sw)
@@ -1083,13 +1083,13 @@ regmatch(regnode *prog)
            break;
        case CURLYX: {
                CURCUR cc;
-               CHECKPOINT cp = savestack_ix;
+               CHECKPOINT cp = PL_savestack_ix;
 
                if (OP(PREVOPER(next)) == NOTHING) /* LONGJMP */
                    next += ARG(next);
-               cc.oldcc = regcc;
-               regcc = &cc;
-               cc.parenfloor = *reglastparen;
+               cc.oldcc = PL_regcc;
+               PL_regcc = &cc;
+               cc.parenfloor = *PL_reglastparen;
                cc.cur = -1;
                cc.min = ARG1(scan);
                cc.max  = ARG2(scan);
@@ -1097,10 +1097,10 @@ regmatch(regnode *prog)
                cc.next = next;
                cc.minmod = minmod;
                cc.lastloc = 0;
-               reginput = locinput;
+               PL_reginput = locinput;
                n = regmatch(PREVOPER(next));   /* start on the WHILEM */
                regcpblow(cp);
-               regcc = cc.oldcc;
+               PL_regcc = cc.oldcc;
                saySAME(n);
            }
            /* NOT REACHED */
@@ -1115,16 +1115,16 @@ regmatch(regnode *prog)
                 */
 
                CHECKPOINT cp, lastcp;
-               CURCUR* cc = regcc;
+               CURCUR* cc = PL_regcc;
                char *lastloc = cc->lastloc; /* Detection of 0-len. */
                
                n = cc->cur + 1;        /* how many we know we matched */
-               reginput = locinput;
+               PL_reginput = locinput;
 
                DEBUG_r(
                    PerlIO_printf(Perl_debug_log, 
                                  "%*s  %ld out of %ld..%ld  cc=%lx\n", 
-                                 REPORT_CODE_OFF+regindent*2, "",
+                                 REPORT_CODE_OFF+PL_regindent*2, "",
                                  (long)n, (long)cc->min, 
                                  (long)cc->max, (long)cc)
                    );
@@ -1132,22 +1132,22 @@ regmatch(regnode *prog)
                /* If degenerate scan matches "", assume scan done. */
 
                if (locinput == cc->lastloc && n >= cc->min) {
-                   regcc = cc->oldcc;
-                   ln = regcc->cur;
+                   PL_regcc = cc->oldcc;
+                   ln = PL_regcc->cur;
                    DEBUG_r(
                        PerlIO_printf(Perl_debug_log,
                           "%*s  empty match detected, try continuation...\n",
-                          REPORT_CODE_OFF+regindent*2, "")
+                          REPORT_CODE_OFF+PL_regindent*2, "")
                        );
                    if (regmatch(cc->next))
                        sayYES;
                    DEBUG_r(
                        PerlIO_printf(Perl_debug_log,
                                      "%*s  failed...\n",
-                                     REPORT_CODE_OFF+regindent*2, "")
+                                     REPORT_CODE_OFF+PL_regindent*2, "")
                        );
-                   regcc->cur = ln;
-                   regcc = cc;
+                   PL_regcc->cur = ln;
+                   PL_regcc = cc;
                    sayNO;
                }
 
@@ -1163,7 +1163,7 @@ regmatch(regnode *prog)
                    DEBUG_r(
                        PerlIO_printf(Perl_debug_log,
                                      "%*s  failed...\n",
-                                     REPORT_CODE_OFF+regindent*2, "")
+                                     REPORT_CODE_OFF+PL_regindent*2, "")
                        );
                    sayNO;
                }
@@ -1171,8 +1171,8 @@ regmatch(regnode *prog)
                /* Prefer next over scan for minimal matching. */
 
                if (cc->minmod) {
-                   regcc = cc->oldcc;
-                   ln = regcc->cur;
+                   PL_regcc = cc->oldcc;
+                   ln = PL_regcc->cur;
                    cp = regcppush(cc->parenfloor);
                    REGCP_SET;
                    if (regmatch(cc->next)) {
@@ -1181,13 +1181,13 @@ regmatch(regnode *prog)
                    }
                    REGCP_UNWIND;
                    regcppop();
-                   regcc->cur = ln;
-                   regcc = cc;
+                   PL_regcc->cur = ln;
+                   PL_regcc = cc;
 
                    if (n >= cc->max) { /* Maximum greed exceeded? */
-                       if (dowarn && n >= REG_INFTY 
-                           && !(reg_flags & RF_warned)) {
-                           reg_flags |= RF_warned;
+                       if (PL_dowarn && n >= REG_INFTY 
+                           && !(PL_reg_flags & RF_warned)) {
+                           PL_reg_flags |= RF_warned;
                            warn("Complex regular subexpression recursion "
                                 "limit (%d) exceeded", REG_INFTY - 1);
                        }
@@ -1197,10 +1197,10 @@ regmatch(regnode *prog)
                    DEBUG_r(
                        PerlIO_printf(Perl_debug_log,
                                      "%*s  trying longer...\n",
-                                     REPORT_CODE_OFF+regindent*2, "")
+                                     REPORT_CODE_OFF+PL_regindent*2, "")
                        );
                    /* Try scanning more and see if it helps. */
-                   reginput = locinput;
+                   PL_reginput = locinput;
                    cc->cur = n;
                    cc->lastloc = locinput;
                    cp = regcppush(cc->parenfloor);
@@ -1212,7 +1212,7 @@ regmatch(regnode *prog)
                    DEBUG_r(
                        PerlIO_printf(Perl_debug_log,
                                      "%*s  failed...\n",
-                                     REPORT_CODE_OFF+regindent*2, "")
+                                     REPORT_CODE_OFF+PL_regindent*2, "")
                        );
                    REGCP_UNWIND;
                    regcppop();
@@ -1234,29 +1234,29 @@ regmatch(regnode *prog)
                    }
                    REGCP_UNWIND;
                    regcppop();         /* Restore some previous $<digit>s? */
-                   reginput = locinput;
+                   PL_reginput = locinput;
                    DEBUG_r(
                        PerlIO_printf(Perl_debug_log,
                                      "%*s  failed, try continuation...\n",
-                                     REPORT_CODE_OFF+regindent*2, "")
+                                     REPORT_CODE_OFF+PL_regindent*2, "")
                        );
                }
-               if (dowarn && n >= REG_INFTY && !(reg_flags & RF_warned)) {
-                   reg_flags |= RF_warned;
+               if (PL_dowarn && n >= REG_INFTY && !(PL_reg_flags & RF_warned)) {
+                   PL_reg_flags |= RF_warned;
                    warn("count exceeded %d", REG_INFTY - 1);
                }
 
                /* Failed deeper matches of scan, so see if this one works. */
-               regcc = cc->oldcc;
-               ln = regcc->cur;
+               PL_regcc = cc->oldcc;
+               ln = PL_regcc->cur;
                if (regmatch(cc->next))
                    sayYES;
                DEBUG_r(
                    PerlIO_printf(Perl_debug_log, "%*s  failed...\n",
-                                 REPORT_CODE_OFF+regindent*2, "")
+                                 REPORT_CODE_OFF+PL_regindent*2, "")
                    );
-               regcc->cur = ln;
-               regcc = cc;
+               PL_regcc->cur = ln;
+               PL_regcc = cc;
                cc->cur = n - 1;
                cc->lastloc = lastloc;
                sayNO;
@@ -1277,17 +1277,17 @@ regmatch(regnode *prog)
                if (OP(next) != c1)     /* No choice. */
                    next = inner;       /* Avoid recursion. */
                else {
-                   int lastparen = *reglastparen;
+                   int lastparen = *PL_reglastparen;
 
                    REGCP_SET;
                    do {
-                       reginput = locinput;
+                       PL_reginput = locinput;
                        if (regmatch(inner))
                            sayYES;
                        REGCP_UNWIND;
-                       for (n = *reglastparen; n > lastparen; n--)
-                           regendp[n] = 0;
-                       *reglastparen = n;
+                       for (n = *PL_reglastparen; n > lastparen; n--)
+                           PL_regendp[n] = 0;
+                       *PL_reglastparen = n;
                        scan = next;
                        /*SUPPRESS 560*/
                        if (n = (c1 == BRANCH ? NEXT_OFF(next) : ARG(next)))
@@ -1319,15 +1319,15 @@ regmatch(regnode *prog)
            n  = ARG2(scan);  /* max to match */
            paren = scan->flags;
            if (paren) {
-               if (paren > regsize)
-                   regsize = paren;
-               if (paren > *reglastparen)
-                   *reglastparen = paren;
+               if (paren > PL_regsize)
+                   PL_regsize = paren;
+               if (paren > *PL_reglastparen)
+                   *PL_reglastparen = paren;
            }
            scan = NEXTOPER(scan) + NODE_STEP_REGNODE;
            if (paren)
                scan += NEXT_OFF(scan); /* Skip former OPEN. */
-           reginput = locinput;
+           PL_reginput = locinput;
            if (minmod) {
                minmod = 0;
                if (ln && regrepeat_hard(scan, ln, &l) < ln)
@@ -1338,7 +1338,7 @@ regmatch(regnode *prog)
                       future execution. */
                    && !(paren && ln == 0))
                    ln = n;
-               locinput = reginput;
+               locinput = PL_reginput;
                if (regkind[(U8)OP(next)] == EXACT) {
                    c1 = UCHARAT(OPERAND(next) + 1);
                    if (OP(next) == EXACTF)
@@ -1354,25 +1354,25 @@ regmatch(regnode *prog)
                while (n >= ln || (n == REG_INFTY && ln > 0 && l)) { /* ln overflow ? */
                    /* If it could work, try it. */
                    if (c1 == -1000 ||
-                       UCHARAT(reginput) == c1 ||
-                       UCHARAT(reginput) == c2)
+                       UCHARAT(PL_reginput) == c1 ||
+                       UCHARAT(PL_reginput) == c2)
                    {
                        if (paren) {
                            if (n) {
-                               regstartp[paren] = reginput - l;
-                               regendp[paren] = reginput;
+                               PL_regstartp[paren] = PL_reginput - l;
+                               PL_regendp[paren] = PL_reginput;
                            } else
-                               regendp[paren] = NULL;
+                               PL_regendp[paren] = NULL;
                        }
                        if (regmatch(next))
                            sayYES;
                        REGCP_UNWIND;
                    }
                    /* Couldn't or didn't -- move forward. */
-                   reginput = locinput;
+                   PL_reginput = locinput;
                    if (regrepeat_hard(scan, 1, &l)) {
                        ln++;
-                       locinput = reginput;
+                       locinput = PL_reginput;
                    }
                    else
                        sayNO;
@@ -1385,11 +1385,11 @@ regmatch(regnode *prog)
                       future execution. */
                    && !(paren && ln == 0))
                    ln = n;
-               locinput = reginput;
+               locinput = PL_reginput;
                DEBUG_r(
                    PerlIO_printf(Perl_debug_log,
                                  "%*s  matched %ld times, len=%ld...\n",
-                                 REPORT_CODE_OFF+regindent*2, "", n, l)
+                                 REPORT_CODE_OFF+PL_regindent*2, "", n, l)
                    );
                if (n >= ln) {
                    if (regkind[(U8)OP(next)] == EXACT) {
@@ -1407,20 +1407,20 @@ regmatch(regnode *prog)
                while (n >= ln) {
                    /* If it could work, try it. */
                    if (c1 == -1000 ||
-                       UCHARAT(reginput) == c1 ||
-                       UCHARAT(reginput) == c2)
+                       UCHARAT(PL_reginput) == c1 ||
+                       UCHARAT(PL_reginput) == c2)
                        {
                            DEBUG_r(
                                PerlIO_printf(Perl_debug_log,
                                              "%*s  trying tail with n=%ld...\n",
-                                             REPORT_CODE_OFF+regindent*2, "", n)
+                                             REPORT_CODE_OFF+PL_regindent*2, "", n)
                                );
                            if (paren) {
                                if (n) {
-                                   regstartp[paren] = reginput - l;
-                                   regendp[paren] = reginput;
+                                   PL_regstartp[paren] = PL_reginput - l;
+                                   PL_regendp[paren] = PL_reginput;
                                } else
-                                   regendp[paren] = NULL;
+                                   PL_regendp[paren] = NULL;
                            }
                            if (regmatch(next))
                                sayYES;
@@ -1429,7 +1429,7 @@ regmatch(regnode *prog)
                    /* Couldn't or didn't -- back up. */
                    n--;
                    locinput -= l;
-                   reginput = locinput;
+                   PL_reginput = locinput;
                }
            }
            sayNO;
@@ -1437,10 +1437,10 @@ regmatch(regnode *prog)
        }
        case CURLYN:
            paren = scan->flags;        /* Which paren to set */
-           if (paren > regsize)
-               regsize = paren;
-           if (paren > *reglastparen)
-               *reglastparen = paren;
+           if (paren > PL_regsize)
+               PL_regsize = paren;
+           if (paren > *PL_reglastparen)
+               *PL_reglastparen = paren;
            ln = ARG1(scan);  /* min to match */
            n  = ARG2(scan);  /* max to match */
             scan = regnext(NEXTOPER(scan) + NODE_STEP_REGNODE);
@@ -1478,7 +1478,7 @@ regmatch(regnode *prog)
            }
            else
                c1 = c2 = -1000;
-           reginput = locinput;
+           PL_reginput = locinput;
            if (minmod) {
                CHECKPOINT lastcp;
                minmod = 0;
@@ -1488,25 +1488,25 @@ regmatch(regnode *prog)
                while (n >= ln || (n == REG_INFTY && ln > 0)) { /* ln overflow ? */
                    /* If it could work, try it. */
                    if (c1 == -1000 ||
-                       UCHARAT(reginput) == c1 ||
-                       UCHARAT(reginput) == c2)
+                       UCHARAT(PL_reginput) == c1 ||
+                       UCHARAT(PL_reginput) == c2)
                    {
                        if (paren) {
                            if (n) {
-                               regstartp[paren] = reginput - 1;
-                               regendp[paren] = reginput;
+                               PL_regstartp[paren] = PL_reginput - 1;
+                               PL_regendp[paren] = PL_reginput;
                            } else
-                               regendp[paren] = NULL;
+                               PL_regendp[paren] = NULL;
                        }
                        if (regmatch(next))
                            sayYES;
                        REGCP_UNWIND;
                    }
                    /* Couldn't or didn't -- move forward. */
-                   reginput = locinput + ln;
+                   PL_reginput = locinput + ln;
                    if (regrepeat(scan, 1)) {
                        ln++;
-                       reginput = locinput + ln;
+                       PL_reginput = locinput + ln;
                    } else
                        sayNO;
                }
@@ -1515,22 +1515,22 @@ regmatch(regnode *prog)
                CHECKPOINT lastcp;
                n = regrepeat(scan, n);
                if (ln < n && regkind[(U8)OP(next)] == EOL &&
-                   (!multiline  || OP(next) == SEOL))
+                   (!PL_multiline  || OP(next) == SEOL))
                    ln = n;                     /* why back off? */
                REGCP_SET;
                if (paren) {
                    while (n >= ln) {
                        /* If it could work, try it. */
                        if (c1 == -1000 ||
-                           UCHARAT(reginput) == c1 ||
-                           UCHARAT(reginput) == c2)
+                           UCHARAT(PL_reginput) == c1 ||
+                           UCHARAT(PL_reginput) == c2)
                            {
                                if (paren && n) {
                                    if (n) {
-                                       regstartp[paren] = reginput - 1;
-                                       regendp[paren] = reginput;
+                                       PL_regstartp[paren] = PL_reginput - 1;
+                                       PL_regendp[paren] = PL_reginput;
                                    } else
-                                       regendp[paren] = NULL;
+                                       PL_regendp[paren] = NULL;
                                }
                                if (regmatch(next))
                                    sayYES;
@@ -1538,14 +1538,14 @@ regmatch(regnode *prog)
                            }
                        /* Couldn't or didn't -- back up. */
                        n--;
-                       reginput = locinput + n;
+                       PL_reginput = locinput + n;
                    }
                } else {
                    while (n >= ln) {
                        /* If it could work, try it. */
                        if (c1 == -1000 ||
-                           UCHARAT(reginput) == c1 ||
-                           UCHARAT(reginput) == c2)
+                           UCHARAT(PL_reginput) == c1 ||
+                           UCHARAT(PL_reginput) == c2)
                            {
                                if (regmatch(next))
                                    sayYES;
@@ -1553,33 +1553,33 @@ regmatch(regnode *prog)
                            }
                        /* Couldn't or didn't -- back up. */
                        n--;
-                       reginput = locinput + n;
+                       PL_reginput = locinput + n;
                    }
                }
            }
            sayNO;
            break;
        case END:
-           if (locinput < regtill)
+           if (locinput < PL_regtill)
                sayNO;                  /* Cannot match: too short. */
            /* Fall through */
        case SUCCEED:
-           reginput = locinput;        /* put where regtry can find it */
+           PL_reginput = locinput;     /* put where regtry can find it */
            sayYES;                     /* Success! */
        case SUSPEND:
            n = 1;
            goto do_ifmatch;        
        case UNLESSM:
            n = 0;
-           if (locinput < bostr + scan->flags) 
+           if (locinput < PL_bostr + scan->flags) 
                goto say_yes;
            goto do_ifmatch;
        case IFMATCH:
            n = 1;
-           if (locinput < bostr + scan->flags) 
+           if (locinput < PL_bostr + scan->flags) 
                goto say_no;
          do_ifmatch:
-           reginput = locinput - scan->flags;
+           PL_reginput = locinput - scan->flags;
            inner = NEXTOPER(NEXTOPER(scan));
            if (regmatch(inner) != n) {
              say_no:
@@ -1596,7 +1596,7 @@ regmatch(regnode *prog)
                sw = 1;
            }
            if (OP(scan) == SUSPEND) {
-               locinput = reginput;
+               locinput = PL_reginput;
                nextchr = UCHARAT(locinput);
            }
            /* FALL THROUGH. */
@@ -1624,13 +1624,13 @@ regmatch(regnode *prog)
 
 yes:
 #ifdef DEBUGGING
-    regindent--;
+    PL_regindent--;
 #endif
     return 1;
 
 no:
 #ifdef DEBUGGING
-    regindent--;
+    PL_regindent--;
 #endif
     return 0;
 }
@@ -1650,9 +1650,9 @@ regrepeat(regnode *p, I32 max)
     register char *scan;
     register char *opnd;
     register I32 c;
-    register char *loceol = regeol;
+    register char *loceol = PL_regeol;
 
-    scan = reginput;
+    scan = PL_reginput;
     if (max != REG_INFTY && max < loceol - scan)
       loceol = scan + max;
     opnd = (char *) OPERAND(p);
@@ -1676,7 +1676,7 @@ regrepeat(regnode *p, I32 max)
            scan++;
        break;
     case EXACTFL:      /* length of string is 1 */
-       reg_flags |= RF_tainted;
+       PL_reg_flags |= RF_tainted;
        c = UCHARAT(++opnd);
        while (scan < loceol &&
               (UCHARAT(scan) == c || UCHARAT(scan) == fold_locale[c]))
@@ -1691,7 +1691,7 @@ regrepeat(regnode *p, I32 max)
            scan++;
        break;
     case ALNUML:
-       reg_flags |= RF_tainted;
+       PL_reg_flags |= RF_tainted;
        while (scan < loceol && isALNUM_LC(*scan))
            scan++;
        break;
@@ -1700,7 +1700,7 @@ regrepeat(regnode *p, I32 max)
            scan++;
        break;
     case NALNUML:
-       reg_flags |= RF_tainted;
+       PL_reg_flags |= RF_tainted;
        while (scan < loceol && !isALNUM_LC(*scan))
            scan++;
        break;
@@ -1709,7 +1709,7 @@ regrepeat(regnode *p, I32 max)
            scan++;
        break;
     case SPACEL:
-       reg_flags |= RF_tainted;
+       PL_reg_flags |= RF_tainted;
        while (scan < loceol && isSPACE_LC(*scan))
            scan++;
        break;
@@ -1718,7 +1718,7 @@ regrepeat(regnode *p, I32 max)
            scan++;
        break;
     case NSPACEL:
-       reg_flags |= RF_tainted;
+       PL_reg_flags |= RF_tainted;
        while (scan < loceol && !isSPACE_LC(*scan))
            scan++;
        break;
@@ -1734,8 +1734,8 @@ regrepeat(regnode *p, I32 max)
        break;          /* So match right here or not at all. */
     }
 
-    c = scan - reginput;
-    reginput = scan;
+    c = scan - PL_reginput;
+    PL_reginput = scan;
 
     DEBUG_r( 
        {
@@ -1762,13 +1762,13 @@ regrepeat_hard(regnode *p, I32 max, I32 *lp)
     dTHR;
     register char *scan;
     register char *start;
-    register char *loceol = regeol;
+    register char *loceol = PL_regeol;
     I32 l = -1;
 
-    start = reginput;
-    while (reginput < loceol && (scan = reginput, regmatch(p))) {
+    start = PL_reginput;
+    while (PL_reginput < loceol && (scan = PL_reginput, regmatch(p))) {
        if (l == -1) {
-           *lp = l = reginput - start;
+           *lp = l = PL_reginput - start;
            if (max != REG_INFTY && l*max < loceol - scan)
                loceol = scan + l*max;
            if (l == 0) {
@@ -1776,10 +1776,10 @@ regrepeat_hard(regnode *p, I32 max, I32 *lp)
            }
        }
     }
-    if (reginput < loceol)
-       reginput = scan;
+    if (PL_reginput < loceol)
+       PL_reginput = scan;
     else
-       scan = reginput;
+       scan = PL_reginput;
     
     return (scan - start)/l;
 }
@@ -1801,7 +1801,7 @@ reginclass(register char *p, register I32 c)
     else if (flags & ANYOF_FOLD) {
        I32 cf;
        if (flags & ANYOF_LOCALE) {
-           reg_flags |= RF_tainted;
+           PL_reg_flags |= RF_tainted;
            cf = fold_locale[c];
        }
        else
@@ -1811,7 +1811,7 @@ reginclass(register char *p, register I32 c)
     }
 
     if (!match && (flags & ANYOF_ISA)) {
-       reg_flags |= RF_tainted;
+       PL_reg_flags |= RF_tainted;
 
        if (((flags & ANYOF_ALNUML)  && isALNUM_LC(c))  ||
            ((flags & ANYOF_NALNUML) && !isALNUM_LC(c)) ||
diff --git a/run.c b/run.c
index 144ba6b..9753a66 100644 (file)
--- a/run.c
+++ b/run.c
@@ -55,7 +55,7 @@ runops_debug(void)
     }
 
     do {
-       if (debug) {
+       if (PL_debug) {
            if (watchaddr != 0 && *watchaddr != watchok)
                PerlIO_printf(Perl_debug_log, "WARNING: %lx changed from %lx to %lx\n",
                    (long)watchaddr, (long)watchok, (long)*watchaddr);
@@ -87,7 +87,7 @@ debop(OP *o)
        if (cGVOPo->op_gv) {
            sv = NEWSV(0,0);
            gv_fullname3(sv, cGVOPo->op_gv, Nullch);
-           PerlIO_printf(Perl_debug_log, "(%s)", SvPV(sv, na));
+           PerlIO_printf(Perl_debug_log, "(%s)", SvPV(sv, PL_na));
            SvREFCNT_dec(sv);
        }
        else
@@ -116,9 +116,9 @@ STATIC void
 debprof(OP *o)
 {
 #ifdef DEBUGGING
-    if (!profiledata)
-       Newz(000, profiledata, MAXO, U32);
-    ++profiledata[o->op_type];
+    if (!PL_profiledata)
+       Newz(000, PL_profiledata, MAXO, U32);
+    ++PL_profiledata[o->op_type];
 #endif /* DEBUGGING */
 }
 
@@ -127,12 +127,12 @@ debprofdump(void)
 {
 #ifdef DEBUGGING
     unsigned i;
-    if (!profiledata)
+    if (!PL_profiledata)
        return;
     for (i = 0; i < MAXO; i++) {
-       if (profiledata[i])
+       if (PL_profiledata[i])
            PerlIO_printf(Perl_debug_log,
-                         "%5lu %s\n", (unsigned long)profiledata[i],
+                         "%5lu %s\n", (unsigned long)PL_profiledata[i],
                                        op_name[i]);
     }
 #endif /* DEBUGGING */
diff --git a/scope.c b/scope.c
index 548ebdc..6edda19 100644 (file)
--- a/scope.c
+++ b/scope.c
@@ -24,16 +24,16 @@ stack_grow(SV **sp, SV **p, int n)
     if (growing++)
       abort();
 #endif
-    stack_sp = sp;
+    PL_stack_sp = sp;
 #ifndef STRESS_REALLOC
-    av_extend(curstack, (p - stack_base) + (n) + 128);
+    av_extend(PL_curstack, (p - PL_stack_base) + (n) + 128);
 #else
     av_extend(curstack, (p - stack_base) + (n) + 1);
 #endif
 #if defined(DEBUGGING) && !defined(USE_THREADS)
     growing--;
 #endif
-    return stack_sp;
+    return PL_stack_sp;
 }
 
 #ifndef STRESS_REALLOC
@@ -51,7 +51,7 @@ new_stackinfo(I32 stitems, I32 cxitems)
     si->si_stack = newAV();
     AvREAL_off(si->si_stack);
     av_extend(si->si_stack, stitems > 0 ? stitems-1 : 0);
-    AvALLOC(si->si_stack)[0] = &sv_undef;
+    AvALLOC(si->si_stack)[0] = &PL_sv_undef;
     AvFILLp(si->si_stack) = 0;
     si->si_prev = 0;
     si->si_next = 0;
@@ -75,19 +75,19 @@ void
 push_return(OP *retop)
 {
     dTHR;
-    if (retstack_ix == retstack_max) {
-       retstack_max = GROW(retstack_max);
-       Renew(retstack, retstack_max, OP*);
+    if (PL_retstack_ix == PL_retstack_max) {
+       PL_retstack_max = GROW(PL_retstack_max);
+       Renew(PL_retstack, PL_retstack_max, OP*);
     }
-    retstack[retstack_ix++] = retop;
+    PL_retstack[PL_retstack_ix++] = retop;
 }
 
 OP *
 pop_return(void)
 {
     dTHR;
-    if (retstack_ix > 0)
-       return retstack[--retstack_ix];
+    if (PL_retstack_ix > 0)
+       return PL_retstack[--PL_retstack_ix];
     else
        return Nullop;
 }
@@ -96,11 +96,11 @@ void
 push_scope(void)
 {
     dTHR;
-    if (scopestack_ix == scopestack_max) {
-       scopestack_max = GROW(scopestack_max);
-       Renew(scopestack, scopestack_max, I32);
+    if (PL_scopestack_ix == PL_scopestack_max) {
+       PL_scopestack_max = GROW(PL_scopestack_max);
+       Renew(PL_scopestack, PL_scopestack_max, I32);
     }
-    scopestack[scopestack_ix++] = savestack_ix;
+    PL_scopestack[PL_scopestack_ix++] = PL_savestack_ix;
 
 }
 
@@ -108,7 +108,7 @@ void
 pop_scope(void)
 {
     dTHR;
-    I32 oldsave = scopestack[--scopestack_ix];
+    I32 oldsave = PL_scopestack[--PL_scopestack_ix];
     LEAVE_SCOPE(oldsave);
 }
 
@@ -116,20 +116,20 @@ void
 markstack_grow(void)
 {
     dTHR;
-    I32 oldmax = markstack_max - markstack;
+    I32 oldmax = PL_markstack_max - PL_markstack;
     I32 newmax = GROW(oldmax);
 
-    Renew(markstack, newmax, I32);
-    markstack_ptr = markstack + oldmax;
-    markstack_max = markstack + newmax;
+    Renew(PL_markstack, newmax, I32);
+    PL_markstack_ptr = PL_markstack + oldmax;
+    PL_markstack_max = PL_markstack + newmax;
 }
 
 void
 savestack_grow(void)
 {
     dTHR;
-    savestack_max = GROW(savestack_max) + 4; 
-    Renew(savestack, savestack_max, ANY);
+    PL_savestack_max = GROW(PL_savestack_max) + 4; 
+    Renew(PL_savestack, PL_savestack_max, ANY);
 }
 
 #undef GROW
@@ -139,10 +139,10 @@ free_tmps(void)
 {
     dTHR;
     /* XXX should tmps_floor live in cxstack? */
-    I32 myfloor = tmps_floor;
-    while (tmps_ix > myfloor) {      /* clean up after last statement */
-       SV* sv = tmps_stack[tmps_ix];
-       tmps_stack[tmps_ix--] = Nullsv;
+    I32 myfloor = PL_tmps_floor;
+    while (PL_tmps_ix > myfloor) {      /* clean up after last statement */
+       SV* sv = PL_tmps_stack[PL_tmps_ix];
+       PL_tmps_stack[PL_tmps_ix--] = Nullsv;
        if (sv) {
 #ifdef DEBUGGING
            SvTEMP_off(sv);
@@ -164,21 +164,21 @@ save_scalar_at(SV **sptr)
        sv_upgrade(sv, SvTYPE(osv));
        if (SvGMAGICAL(osv)) {
            MAGIC* mg;
-           bool oldtainted = tainted;
+           bool oldtainted = PL_tainted;
            mg_get(osv);
-           if (tainting && tainted && (mg = mg_find(osv, 't'))) {
+           if (PL_tainting && PL_tainted && (mg = mg_find(osv, 't'))) {
                SAVESPTR(mg->mg_obj);
                mg->mg_obj = osv;
            }
            SvFLAGS(osv) |= (SvFLAGS(osv) &
                (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
-           tainted = oldtainted;
+           PL_tainted = oldtainted;
        }
        SvMAGIC(sv) = SvMAGIC(osv);
        SvFLAGS(sv) |= SvMAGICAL(osv);
-       localizing = 1;
+       PL_localizing = 1;
        SvSETMAGIC(sv);
-       localizing = 0;
+       PL_localizing = 0;
     }
     return sv;
 }
@@ -224,11 +224,11 @@ save_gp(GV *gv, I32 empty)
        register GP *gp;
 
        if (GvCVu(gv))
-           sub_generation++;   /* taking a method out of circulation */
+           PL_sub_generation++;        /* taking a method out of circulation */
        Newz(602, gp, 1, GP);
        GvGP(gv) = gp_ref(gp);
        GvSV(gv) = NEWSV(72,0);
-       GvLINE(gv) = curcop->cop_line;
+       GvLINE(gv) = PL_curcop->cop_line;
        GvEGV(gv) = gv;
     }
     else {
@@ -258,9 +258,9 @@ save_ary(GV *gv)
        SvFLAGS(av) |= SvMAGICAL(oav);
        SvMAGICAL_off(oav);
        SvMAGIC(oav) = 0;
-       localizing = 1;
+       PL_localizing = 1;
        SvSETMAGIC((SV*)av);
-       localizing = 0;
+       PL_localizing = 0;
     }
     return av;
 }
@@ -283,9 +283,9 @@ save_hash(GV *gv)
        SvFLAGS(hv) |= SvMAGICAL(ohv);
        SvMAGICAL_off(ohv);
        SvMAGIC(ohv) = 0;
-       localizing = 1;
+       PL_localizing = 1;
        SvSETMAGIC((SV*)hv);
-       localizing = 0;
+       PL_localizing = 0;
     }
     return hv;
 }
@@ -453,7 +453,7 @@ save_clearsv(SV **svp)
 {
     dTHR;
     SSCHECK(2);
-    SSPUSHLONG((long)(svp-curpad));
+    SSPUSHLONG((long)(svp-PL_curpad));
     SSPUSHINT(SAVEt_CLEARSV);
 }
 
@@ -546,15 +546,15 @@ leave_scope(I32 base)
 
     if (base < -1)
        croak("panic: corrupt saved stack index");
-    while (savestack_ix > base) {
+    while (PL_savestack_ix > base) {
        switch (SSPOPINT) {
        case SAVEt_ITEM:                        /* normal string */
            value = (SV*)SSPOPPTR;
            sv = (SV*)SSPOPPTR;
            sv_replace(sv,value);
-           localizing = 2;
+           PL_localizing = 2;
            SvSETMAGIC(sv);
-           localizing = 0;
+           PL_localizing = 0;
            break;
         case SAVEt_SV:                         /* scalar reference */
            value = (SV*)SSPOPPTR;
@@ -589,9 +589,9 @@ leave_scope(I32 base)
            }
             SvREFCNT_dec(sv);
            *(SV**)ptr = value;
-           localizing = 2;
+           PL_localizing = 2;
            SvSETMAGIC(value);
-           localizing = 0;
+           PL_localizing = 0;
            SvREFCNT_dec(value);
             break;
         case SAVEt_AV:                         /* array reference */
@@ -607,9 +607,9 @@ leave_scope(I32 base)
            }
             GvAV(gv) = av;
            if (SvMAGICAL(av)) {
-               localizing = 2;
+               PL_localizing = 2;
                SvSETMAGIC((SV*)av);
-               localizing = 0;
+               PL_localizing = 0;
            }
             break;
         case SAVEt_HV:                         /* hash reference */
@@ -625,9 +625,9 @@ leave_scope(I32 base)
            }
             GvHV(gv) = hv;
            if (SvMAGICAL(hv)) {
-               localizing = 2;
+               PL_localizing = 2;
                SvSETMAGIC((SV*)hv);
-               localizing = 0;
+               PL_localizing = 0;
            }
             break;
        case SAVEt_INT:                         /* int reference */
@@ -682,7 +682,7 @@ leave_scope(I32 base)
             gp_free(gv);
             GvGP(gv) = (GP*)ptr;
            if (GvCVu(gv))
-               sub_generation++;  /* putting a method back into circulation */
+               PL_sub_generation++;  /* putting a method back into circulation */
            SvREFCNT_dec(gv);
             break;
        case SAVEt_FREESV:
@@ -691,8 +691,8 @@ leave_scope(I32 base)
            break;
        case SAVEt_FREEOP:
            ptr = SSPOPPTR;
-           if (comppad)
-               curpad = AvARRAY(comppad);
+           if (PL_comppad)
+               PL_curpad = AvARRAY(PL_comppad);
            op_free((OP*)ptr);
            break;
        case SAVEt_FREEPV:
@@ -700,7 +700,7 @@ leave_scope(I32 base)
            Safefree((char*)ptr);
            break;
        case SAVEt_CLEARSV:
-           ptr = (void*)&curpad[SSPOPLONG];
+           ptr = (void*)&PL_curpad[SSPOPLONG];
            sv = *(SV**)ptr;
            /* Can clear pad variable in place? */
            if (SvREFCNT(sv) <= 1 && !SvOBJECT(sv)) {
@@ -760,11 +760,11 @@ leave_scope(I32 base)
            break;
        case SAVEt_REGCONTEXT:
            i = SSPOPINT;
-           savestack_ix -= i;          /* regexp must have croaked */
+           PL_savestack_ix -= i;       /* regexp must have croaked */
            break;
        case SAVEt_STACK_POS:           /* Position on Perl stack */
            i = SSPOPINT;
-           stack_sp = stack_base + i;
+           PL_stack_sp = PL_stack_base + i;
            break;
        case SAVEt_AELEM:               /* array element */
            value = (SV*)SSPOPPTR;
@@ -773,7 +773,7 @@ leave_scope(I32 base)
            ptr = av_fetch(av,i,1);
            if (ptr) {
                sv = *(SV**)ptr;
-               if (sv && sv != &sv_undef) {
+               if (sv && sv != &PL_sv_undef) {
                    if (SvRMAGICAL(av) && mg_find((SV*)av, 'P'))
                        (void)SvREFCNT_inc(sv);
                    SvREFCNT_dec(av);
@@ -790,7 +790,7 @@ leave_scope(I32 base)
            ptr = hv_fetch_ent(hv, sv, 1, 0);
            if (ptr) {
                SV *oval = HeVAL((HE*)ptr);
-               if (oval && oval != &sv_undef) {
+               if (oval && oval != &PL_sv_undef) {
                    ptr = &HeVAL((HE*)ptr);
                    if (SvRMAGICAL(hv) && mg_find((SV*)hv, 'P'))
                        (void)SvREFCNT_inc(*(SV**)ptr);
@@ -807,11 +807,11 @@ leave_scope(I32 base)
            op = (OP*)SSPOPPTR;
            break;
        case SAVEt_HINTS:
-           if (GvHV(hintgv)) {
-               SvREFCNT_dec((SV*)GvHV(hintgv));
-               GvHV(hintgv) = NULL;
+           if (GvHV(PL_hintgv)) {
+               SvREFCNT_dec((SV*)GvHV(PL_hintgv));
+               GvHV(PL_hintgv) = NULL;
            }
-           *(I32*)&hints = (I32)SSPOPINT;
+           *(I32*)&PL_hints = (I32)SSPOPINT;
            break;
        default:
            croak("panic: leave_scope inconsistency");
diff --git a/scope.h b/scope.h
index 3ac4a59..24d98e4 100644 (file)
--- a/scope.h
+++ b/scope.h
 #define SAVEt_OP       26
 #define SAVEt_HINTS    27
 
-#define SSCHECK(need) if (savestack_ix + need > savestack_max) savestack_grow()
-#define SSPUSHINT(i) (savestack[savestack_ix++].any_i32 = (I32)(i))
-#define SSPUSHLONG(i) (savestack[savestack_ix++].any_long = (long)(i))
-#define SSPUSHIV(i) (savestack[savestack_ix++].any_iv = (IV)(i))
-#define SSPUSHPTR(p) (savestack[savestack_ix++].any_ptr = (void*)(p))
-#define SSPUSHDPTR(p) (savestack[savestack_ix++].any_dptr = (p))
-#define SSPOPINT (savestack[--savestack_ix].any_i32)
-#define SSPOPLONG (savestack[--savestack_ix].any_long)
-#define SSPOPIV (savestack[--savestack_ix].any_iv)
-#define SSPOPPTR (savestack[--savestack_ix].any_ptr)
-#define SSPOPDPTR (savestack[--savestack_ix].any_dptr)
+#define SSCHECK(need) if (PL_savestack_ix + need > PL_savestack_max) savestack_grow()
+#define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i))
+#define SSPUSHLONG(i) (PL_savestack[PL_savestack_ix++].any_long = (long)(i))
+#define SSPUSHIV(i) (PL_savestack[PL_savestack_ix++].any_iv = (IV)(i))
+#define SSPUSHPTR(p) (PL_savestack[PL_savestack_ix++].any_ptr = (void*)(p))
+#define SSPUSHDPTR(p) (PL_savestack[PL_savestack_ix++].any_dptr = (p))
+#define SSPOPINT (PL_savestack[--PL_savestack_ix].any_i32)
+#define SSPOPLONG (PL_savestack[--PL_savestack_ix].any_long)
+#define SSPOPIV (PL_savestack[--PL_savestack_ix].any_iv)
+#define SSPOPPTR (PL_savestack[--PL_savestack_ix].any_ptr)
+#define SSPOPDPTR (PL_savestack[--PL_savestack_ix].any_dptr)
 
-#define SAVETMPS save_int((int*)&tmps_floor), tmps_floor = tmps_ix
-#define FREETMPS if (tmps_ix > tmps_floor) free_tmps()
+#define SAVETMPS save_int((int*)&PL_tmps_floor), PL_tmps_floor = PL_tmps_ix
+#define FREETMPS if (PL_tmps_ix > PL_tmps_floor) free_tmps()
 
 #ifdef DEBUGGING
 #define ENTER                                                  \
     STMT_START {                                               \
        push_scope();                                           \
        DEBUG_l(WITH_THR(deb("ENTER scope %ld at %s:%d\n",      \
-                   scopestack_ix, __FILE__, __LINE__)));       \
+                   PL_scopestack_ix, __FILE__, __LINE__)));    \
     } STMT_END
 #define LEAVE                                                  \
     STMT_START {                                               \
        DEBUG_l(WITH_THR(deb("LEAVE scope %ld at %s:%d\n",      \
-                   scopestack_ix, __FILE__, __LINE__)));       \
+                   PL_scopestack_ix, __FILE__, __LINE__)));    \
        pop_scope();                                            \
     } STMT_END
 #else
 #define ENTER push_scope()
 #define LEAVE pop_scope()
 #endif
-#define LEAVE_SCOPE(old) if (savestack_ix > old) leave_scope(old)
+#define LEAVE_SCOPE(old) if (PL_savestack_ix > old) leave_scope(old)
 
 /*
  * Not using SOFT_CAST on SAVEFREESV and SAVEFREESV
@@ -93,7 +93,7 @@
 #define SAVESTACK_POS() \
     STMT_START {                               \
        SSCHECK(2);                             \
-       SSPUSHINT(stack_sp - stack_base);       \
+       SSPUSHINT(PL_stack_sp - PL_stack_base); \
        SSPUSHINT(SAVEt_STACK_POS);             \
     } STMT_END
 
 
 #define SAVEHINTS() \
     STMT_START {                               \
-       if (hints & HINT_LOCALIZE_HH)           \
+       if (PL_hints & HINT_LOCALIZE_HH)        \
            save_hints();                       \
        else {                                  \
            SSCHECK(2);                         \
-           SSPUSHINT(hints);                   \
+           SSPUSHINT(PL_hints);                \
            SSPUSHINT(SAVEt_HINTS);             \
        }                                       \
     } STMT_END
@@ -145,27 +145,27 @@ typedef struct jmpenv JMPENV;
 #define dJMPENV                JMPENV cur_env
 #define JMPENV_PUSH(v) \
     STMT_START {                                       \
-       cur_env.je_prev = top_env;                      \
+       cur_env.je_prev = PL_top_env;                   \
        OP_REG_TO_MEM;                                  \
        cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, 1);    \
        OP_MEM_TO_REG;                                  \
-       top_env = &cur_env;                             \
+       PL_top_env = &cur_env;                          \
        cur_env.je_mustcatch = FALSE;                   \
        (v) = cur_env.je_ret;                           \
     } STMT_END
 #define JMPENV_POP \
-    STMT_START { top_env = cur_env.je_prev; } STMT_END
+    STMT_START { PL_top_env = cur_env.je_prev; } STMT_END
 #define JMPENV_JUMP(v) \
     STMT_START {                                               \
        OP_REG_TO_MEM;                                          \
-       if (top_env->je_prev)                                   \
-           PerlProc_longjmp(top_env->je_buf, (v));                     \
+       if (PL_top_env->je_prev)                                        \
+           PerlProc_longjmp(PL_top_env->je_buf, (v));                  \
        if ((v) == 2)                                           \
            PerlProc_exit(STATUS_NATIVE_EXPORT);                                \
        PerlIO_printf(PerlIO_stderr(), "panic: top_env\n");     \
        PerlProc_exit(1);                                               \
     } STMT_END
    
-#define CATCH_GET      (top_env->je_mustcatch)
-#define CATCH_SET(v)   (top_env->je_mustcatch = (v))
+#define CATCH_GET      (PL_top_env->je_mustcatch)
+#define CATCH_SET(v)   (PL_top_env->je_mustcatch = (v))
    
diff --git a/sv.c b/sv.c
index 29c45fd..86e7f50 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -121,7 +121,7 @@ static void
 reg_add(sv)
 SV* sv;
 {
-    if (sv_count >= (registry_size >> 1))
+    if (PL_sv_count >= (registry_size >> 1))
     {
        SV **oldreg = registry;
        I32 oldsize = registry_size;
@@ -142,7 +142,7 @@ SV* sv;
     }
 
     REG_ADD(sv);
-    ++sv_count;
+    ++PL_sv_count;
 }
 
 static void
@@ -150,7 +150,7 @@ reg_remove(sv)
 SV* sv;
 {
     REG_REMOVE(sv);
-    --sv_count;
+    --PL_sv_count;
 }
 
 static void
@@ -184,23 +184,23 @@ U32 flags;
 
 #define plant_SV(p)                    \
     do {                               \
-       SvANY(p) = (void *)sv_root;     \
+       SvANY(p) = (void *)PL_sv_root;  \
        SvFLAGS(p) = SVTYPEMASK;        \
-       sv_root = (p);                  \
-       --sv_count;                     \
+       PL_sv_root = (p);                       \
+       --PL_sv_count;                  \
     } while (0)
 
 /* sv_mutex must be held while calling uproot_SV() */
 #define uproot_SV(p)                   \
     do {                               \
-       (p) = sv_root;                  \
-       sv_root = (SV*)SvANY(p);        \
-       ++sv_count;                     \
+       (p) = PL_sv_root;                       \
+       PL_sv_root = (SV*)SvANY(p);     \
+       ++PL_sv_count;                  \
     } while (0)
 
 #define new_SV(p)      do {    \
        LOCK_SV_MUTEX;          \
-       if (sv_root)            \
+       if (PL_sv_root)         \
            uproot_SV(p);       \
        else                    \
            (p) = more_sv();    \
@@ -211,7 +211,7 @@ U32 flags;
 
 #define del_SV(p)      do {    \
        LOCK_SV_MUTEX;          \
-       if (debug & 32768)      \
+       if (PL_debug & 32768)   \
            del_sv(p);          \
        else                    \
            plant_SV(p);        \
@@ -221,12 +221,12 @@ U32 flags;
 STATIC void
 del_sv(SV *p)
 {
-    if (debug & 32768) {
+    if (PL_debug & 32768) {
        SV* sva;
        SV* sv;
        SV* svend;
        int ok = 0;
-       for (sva = sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
+       for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
            sv = sva + 1;
            svend = &sva[SvREFCNT(sva)];
            if (p >= sv && p < svend)
@@ -255,12 +255,12 @@ sv_add_arena(char *ptr, U32 size, U32 flags)
     Zero(sva, size, char);
 
     /* The first SV in an arena isn't an SV. */
-    SvANY(sva) = (void *) sv_arenaroot;                /* ptr to next arena */
+    SvANY(sva) = (void *) PL_sv_arenaroot;             /* ptr to next arena */
     SvREFCNT(sva) = size / sizeof(SV);         /* number of SV slots */
     SvFLAGS(sva) = flags;                      /* FAKE if not to be freed */
 
-    sv_arenaroot = sva;
-    sv_root = sva + 1;
+    PL_sv_arenaroot = sva;
+    PL_sv_root = sva + 1;
 
     svend = &sva[SvREFCNT(sva) - 1];
     sv = sva + 1;
@@ -279,9 +279,9 @@ more_sv(void)
 {
     register SV* sv;
 
-    if (nice_chunk) {
-       sv_add_arena(nice_chunk, nice_chunk_size, 0);
-       nice_chunk = Nullch;
+    if (PL_nice_chunk) {
+       sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
+       PL_nice_chunk = Nullch;
     }
     else {
        char *chunk;                /* must use New here to match call to */
@@ -299,7 +299,7 @@ visit(SVFUNC f)
     SV* sv;
     register SV* svend;
 
-    for (sva = sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
+    for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
        svend = &sva[SvREFCNT(sva)];
        for (sv = sva + 1; sv < svend; ++sv) {
            if (SvTYPE(sv) != SVTYPEMASK)
@@ -362,13 +362,13 @@ do_clean_named_objs(SV *sv)
 void
 sv_clean_objs(void)
 {
-    in_clean_objs = TRUE;
+    PL_in_clean_objs = TRUE;
     visit(FUNC_NAME_TO_PTR(do_clean_objs));
 #ifndef DISABLE_DESTRUCTOR_KLUDGE
     /* some barnacles may yet remain, clinging to typeglobs */
     visit(FUNC_NAME_TO_PTR(do_clean_named_objs));
 #endif
-    in_clean_objs = FALSE;
+    PL_in_clean_objs = FALSE;
 }
 
 STATIC void
@@ -382,9 +382,9 @@ do_clean_all(SV *sv)
 void
 sv_clean_all(void)
 {
-    in_clean_all = TRUE;
+    PL_in_clean_all = TRUE;
     visit(FUNC_NAME_TO_PTR(do_clean_all));
-    in_clean_all = FALSE;
+    PL_in_clean_all = FALSE;
 }
 
 void
@@ -396,7 +396,7 @@ sv_free_arenas(void)
     /* Free arenas here, but be careful about fake ones.  (We assume
        contiguity of the fake ones with the corresponding real ones.) */
 
-    for (sva = sv_arenaroot; sva; sva = svanext) {
+    for (sva = PL_sv_arenaroot; sva; sva = svanext) {
        svanext = (SV*) SvANY(sva);
        while (svanext && SvFAKE(svanext))
            svanext = (SV*) SvANY(svanext);
@@ -405,24 +405,24 @@ sv_free_arenas(void)
            Safefree((void *)sva);
     }
 
-    if (nice_chunk)
-       Safefree(nice_chunk);
-    nice_chunk = Nullch;
-    nice_chunk_size = 0;
-    sv_arenaroot = 0;
-    sv_root = 0;
+    if (PL_nice_chunk)
+       Safefree(PL_nice_chunk);
+    PL_nice_chunk = Nullch;
+    PL_nice_chunk_size = 0;
+    PL_sv_arenaroot = 0;
+    PL_sv_root = 0;
 }
 
 STATIC XPVIV*
 new_xiv(void)
 {
     IV* xiv;
-    if (xiv_root) {
-       xiv = xiv_root;
+    if (PL_xiv_root) {
+       xiv = PL_xiv_root;
        /*
         * See comment in more_xiv() -- RAM.
         */
-       xiv_root = *(IV**)xiv;
+       PL_xiv_root = *(IV**)xiv;
        return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
     }
     return more_xiv();
@@ -432,8 +432,8 @@ STATIC void
 del_xiv(XPVIV *p)
 {
     IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
-    *(IV**)xiv = xiv_root;
-    xiv_root = xiv;
+    *(IV**)xiv = PL_xiv_root;
+    PL_xiv_root = xiv;
 }
 
 STATIC XPVIV*
@@ -443,13 +443,13 @@ more_xiv(void)
     register IV* xivend;
     XPV* ptr;
     New(705, ptr, 1008/sizeof(XPV), XPV);
-    ptr->xpv_pv = (char*)xiv_arenaroot;                /* linked list of xiv arenas */
-    xiv_arenaroot = ptr;                       /* to keep Purify happy */
+    ptr->xpv_pv = (char*)PL_xiv_arenaroot;             /* linked list of xiv arenas */
+    PL_xiv_arenaroot = ptr;                    /* to keep Purify happy */
 
     xiv = (IV*) ptr;
     xivend = &xiv[1008 / sizeof(IV) - 1];
     xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1;   /* fudge by size of XPV */
-    xiv_root = xiv;
+    PL_xiv_root = xiv;
     while (xiv < xivend) {
        *(IV**)xiv = (IV *)(xiv + 1);
        xiv++;
@@ -462,9 +462,9 @@ STATIC XPVNV*
 new_xnv(void)
 {
     double* xnv;
-    if (xnv_root) {
-       xnv = xnv_root;
-       xnv_root = *(double**)xnv;
+    if (PL_xnv_root) {
+       xnv = PL_xnv_root;
+       PL_xnv_root = *(double**)xnv;
        return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
     }
     return more_xnv();
@@ -474,8 +474,8 @@ STATIC void
 del_xnv(XPVNV *p)
 {
     double* xnv = (double*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
-    *(double**)xnv = xnv_root;
-    xnv_root = xnv;
+    *(double**)xnv = PL_xnv_root;
+    PL_xnv_root = xnv;
 }
 
 STATIC XPVNV*
@@ -486,7 +486,7 @@ more_xnv(void)
     New(711, xnv, 1008/sizeof(double), double);
     xnvend = &xnv[1008 / sizeof(double) - 1];
     xnv += (sizeof(XPVIV) - 1) / sizeof(double) + 1; /* fudge by sizeof XPVIV */
-    xnv_root = xnv;
+    PL_xnv_root = xnv;
     while (xnv < xnvend) {
        *(double**)xnv = (double*)(xnv + 1);
        xnv++;
@@ -499,9 +499,9 @@ STATIC XRV*
 new_xrv(void)
 {
     XRV* xrv;
-    if (xrv_root) {
-       xrv = xrv_root;
-       xrv_root = (XRV*)xrv->xrv_rv;
+    if (PL_xrv_root) {
+       xrv = PL_xrv_root;
+       PL_xrv_root = (XRV*)xrv->xrv_rv;
        return xrv;
     }
     return more_xrv();
@@ -510,8 +510,8 @@ new_xrv(void)
 STATIC void
 del_xrv(XRV *p)
 {
-    p->xrv_rv = (SV*)xrv_root;
-    xrv_root = p;
+    p->xrv_rv = (SV*)PL_xrv_root;
+    PL_xrv_root = p;
 }
 
 STATIC XRV*
@@ -519,8 +519,8 @@ more_xrv(void)
 {
     register XRV* xrv;
     register XRV* xrvend;
-    New(712, xrv_root, 1008/sizeof(XRV), XRV);
-    xrv = xrv_root;
+    New(712, PL_xrv_root, 1008/sizeof(XRV), XRV);
+    xrv = PL_xrv_root;
     xrvend = &xrv[1008 / sizeof(XRV) - 1];
     while (xrv < xrvend) {
        xrv->xrv_rv = (SV*)(xrv + 1);
@@ -534,9 +534,9 @@ STATIC XPV*
 new_xpv(void)
 {
     XPV* xpv;
-    if (xpv_root) {
-       xpv = xpv_root;
-       xpv_root = (XPV*)xpv->xpv_pv;
+    if (PL_xpv_root) {
+       xpv = PL_xpv_root;
+       PL_xpv_root = (XPV*)xpv->xpv_pv;
        return xpv;
     }
     return more_xpv();
@@ -545,8 +545,8 @@ new_xpv(void)
 STATIC void
 del_xpv(XPV *p)
 {
-    p->xpv_pv = (char*)xpv_root;
-    xpv_root = p;
+    p->xpv_pv = (char*)PL_xpv_root;
+    PL_xpv_root = p;
 }
 
 STATIC XPV*
@@ -554,8 +554,8 @@ more_xpv(void)
 {
     register XPV* xpv;
     register XPV* xpvend;
-    New(713, xpv_root, 1008/sizeof(XPV), XPV);
-    xpv = xpv_root;
+    New(713, PL_xpv_root, 1008/sizeof(XPV), XPV);
+    xpv = PL_xpv_root;
     xpvend = &xpv[1008 / sizeof(XPV) - 1];
     while (xpv < xpvend) {
        xpv->xpv_pv = (char*)(xpv + 1);
@@ -936,15 +936,15 @@ sv_peek(SV *sv)
        sv_catpv(t, "WILD");
        goto finish;
     }
-    else if (sv == &sv_undef || sv == &sv_no || sv == &sv_yes) {
-       if (sv == &sv_undef) {
+    else if (sv == &PL_sv_undef || sv == &PL_sv_no || sv == &PL_sv_yes) {
+       if (sv == &PL_sv_undef) {
            sv_catpv(t, "SV_UNDEF");
            if (!(SvFLAGS(sv) & (SVf_OK|SVf_OOK|SVs_OBJECT|
                                 SVs_GMG|SVs_SMG|SVs_RMG)) &&
                SvREADONLY(sv))
                goto finish;
        }
-       else if (sv == &sv_no) {
+       else if (sv == &PL_sv_no) {
            sv_catpv(t, "SV_NO");
            if (!(SvFLAGS(sv) & (SVf_ROK|SVf_OOK|SVs_OBJECT|
                                 SVs_GMG|SVs_SMG|SVs_RMG)) &&
@@ -1062,7 +1062,7 @@ sv_peek(SV *sv)
        while (unref--)
            sv_catpv(t, ")");
     }
-    return SvPV(t, na);
+    return SvPV(t, PL_na);
 #else  /* DEBUGGING */
     return "";
 #endif /* DEBUGGING */
@@ -1313,9 +1313,9 @@ sv_2iv(register SV *sv)
        if (SvPOKp(sv) && SvLEN(sv))
            return asIV(sv);
        if (!SvROK(sv)) {
-           if (dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
+           if (PL_dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
                dTHR;
-               if (!localizing)
+               if (!PL_localizing)
                    warn(warn_uninit);
            }
            return 0;
@@ -1339,7 +1339,7 @@ sv_2iv(register SV *sv)
            }
            if (SvPOKp(sv) && SvLEN(sv))
                return asIV(sv);
-           if (dowarn)
+           if (PL_dowarn)
                warn(warn_uninit);
            return 0;
        }
@@ -1368,7 +1368,7 @@ sv_2iv(register SV *sv)
     }
     else  {
        dTHR;
-       if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
+       if (PL_dowarn && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
            warn(warn_uninit);
        return 0;
     }
@@ -1391,9 +1391,9 @@ sv_2uv(register SV *sv)
        if (SvPOKp(sv) && SvLEN(sv))
            return asUV(sv);
        if (!SvROK(sv)) {
-           if (dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
+           if (PL_dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
                dTHR;
-               if (!localizing)
+               if (!PL_localizing)
                    warn(warn_uninit);
            }
            return 0;
@@ -1414,7 +1414,7 @@ sv_2uv(register SV *sv)
            }
            if (SvPOKp(sv) && SvLEN(sv))
                return asUV(sv);
-           if (dowarn)
+           if (PL_dowarn)
                warn(warn_uninit);
            return 0;
        }
@@ -1439,9 +1439,9 @@ sv_2uv(register SV *sv)
        SvUVX(sv) = asUV(sv);
     }
     else  {
-       if (dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
+       if (PL_dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
            dTHR;
-           if (!localizing)
+           if (!PL_localizing)
                warn(warn_uninit);
        }
        return 0;
@@ -1461,7 +1461,7 @@ sv_2nv(register SV *sv)
        if (SvNOKp(sv))
            return SvNVX(sv);
        if (SvPOKp(sv) && SvLEN(sv)) {
-           if (dowarn && !SvIOKp(sv) && !looks_like_number(sv))
+           if (PL_dowarn && !SvIOKp(sv) && !looks_like_number(sv))
                not_a_number(sv);
            SET_NUMERIC_STANDARD();
            return atof(SvPVX(sv));
@@ -1469,9 +1469,9 @@ sv_2nv(register SV *sv)
        if (SvIOKp(sv))
            return (double)SvIVX(sv);
         if (!SvROK(sv)) {
-           if (dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
+           if (PL_dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
                dTHR;
-               if (!localizing)
+               if (!PL_localizing)
                    warn(warn_uninit);
            }
             return 0;
@@ -1488,14 +1488,14 @@ sv_2nv(register SV *sv)
        }
        if (SvREADONLY(sv)) {
            if (SvPOKp(sv) && SvLEN(sv)) {
-               if (dowarn && !SvIOKp(sv) && !looks_like_number(sv))
+               if (PL_dowarn && !SvIOKp(sv) && !looks_like_number(sv))
                    not_a_number(sv);
                SET_NUMERIC_STANDARD();
                return atof(SvPVX(sv));
            }
            if (SvIOKp(sv))
                return (double)SvIVX(sv);
-           if (dowarn)
+           if (PL_dowarn)
                warn(warn_uninit);
            return 0.0;
        }
@@ -1517,14 +1517,14 @@ sv_2nv(register SV *sv)
        SvNVX(sv) = (double)SvIVX(sv);
     }
     else if (SvPOKp(sv) && SvLEN(sv)) {
-       if (dowarn && !SvIOKp(sv) && !looks_like_number(sv))
+       if (PL_dowarn && !SvIOKp(sv) && !looks_like_number(sv))
            not_a_number(sv);
        SET_NUMERIC_STANDARD();
        SvNVX(sv) = atof(SvPVX(sv));
     }
     else  {
        dTHR;
-       if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
+       if (PL_dowarn && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
            warn(warn_uninit);
        return 0.0;
     }
@@ -1543,7 +1543,7 @@ asIV(SV *sv)
 
     if (numtype == 1)
        return atol(SvPVX(sv));
-    if (!numtype && dowarn)
+    if (!numtype && PL_dowarn)
        not_a_number(sv);
     SET_NUMERIC_STANDARD();
     d = atof(SvPVX(sv));
@@ -1562,7 +1562,7 @@ asUV(SV *sv)
     if (numtype == 1)
        return strtoul(SvPVX(sv), Null(char**), 10);
 #endif
-    if (!numtype && dowarn)
+    if (!numtype && PL_dowarn)
        not_a_number(sv);
     SET_NUMERIC_STANDARD();
     return U_V(atof(SvPVX(sv)));
@@ -1677,9 +1677,9 @@ sv_2pv(register SV *sv, STRLEN *lp)
            goto tokensave;
        }
         if (!SvROK(sv)) {
-           if (dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
+           if (PL_dowarn && !(SvFLAGS(sv) & SVs_PADTMP)) {
                dTHR;
-               if (!localizing)
+               if (!PL_localizing)
                    warn(warn_uninit);
            }
             *lp = 0;
@@ -1740,7 +1740,7 @@ sv_2pv(register SV *sv, STRLEN *lp)
                            mg->mg_ptr[mg->mg_len - 1] = ')';
                            mg->mg_ptr[mg->mg_len] = 0;
                        }
-                       reginterp_cnt += re->program[0].next_off;
+                       PL_reginterp_cnt += re->program[0].next_off;
                        *lp = mg->mg_len;
                        return mg->mg_ptr;
                    }
@@ -1785,7 +1785,7 @@ sv_2pv(register SV *sv, STRLEN *lp)
                tsv = Nullsv;
                goto tokensave;
            }
-           if (dowarn)
+           if (PL_dowarn)
                warn(warn_uninit);
            *lp = 0;
            return "";
@@ -1833,7 +1833,7 @@ sv_2pv(register SV *sv, STRLEN *lp)
     }
     else {
        dTHR;
-       if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
+       if (PL_dowarn && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
            warn(warn_uninit);
        *lp = 0;
        return "";
@@ -1943,7 +1943,7 @@ sv_setsv(SV *dstr, register SV *sstr)
        return;
     SV_CHECK_THINKFIRST(dstr);
     if (!sstr)
-       sstr = &sv_undef;
+       sstr = &PL_sv_undef;
     stype = SvTYPE(sstr);
     dtype = SvTYPE(dstr);
 
@@ -2015,7 +2015,7 @@ sv_setsv(SV *dstr, register SV *sstr)
                 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
            sstr = SvRV(sstr);
            if (sstr == dstr) {
-               if (curcop->cop_stash != GvSTASH(dstr))
+               if (PL_curcop->cop_stash != GvSTASH(dstr))
                    GvIMPORTED_on(dstr);
                GvMULTI_on(dstr);
                return;
@@ -2061,8 +2061,8 @@ sv_setsv(SV *dstr, register SV *sstr)
                SvFAKE_on(dstr);        /* can coerce to non-glob */
            }
            /* ahem, death to those who redefine active sort subs */
-           else if (curstackinfo->si_type == PERLSI_SORT
-                    && GvCV(dstr) && sortcop == CvSTART(GvCV(dstr)))
+           else if (PL_curstackinfo->si_type == PERLSI_SORT
+                    && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
                croak("Can't redefine active sort subroutine %s",
                      GvNAME(dstr));
            (void)SvOK_off(dstr);
@@ -2070,7 +2070,7 @@ sv_setsv(SV *dstr, register SV *sstr)
            gp_free((GV*)dstr);
            GvGP(dstr) = gp_ref(GvGP(sstr));
            SvTAINT(dstr);
-           if (curcop->cop_stash != GvSTASH(dstr))
+           if (PL_curcop->cop_stash != GvSTASH(dstr))
                GvIMPORTED_on(dstr);
            GvMULTI_on(dstr);
            return;
@@ -2109,7 +2109,7 @@ sv_setsv(SV *dstr, register SV *sstr)
                    Newz(602,gp, 1, GP);
                    GvGP(dstr) = gp_ref(gp);
                    GvSV(dstr) = NEWSV(72,0);
-                   GvLINE(dstr) = curcop->cop_line;
+                   GvLINE(dstr) = PL_curcop->cop_line;
                    GvEGV(dstr) = (GV*)dstr;
                }
                GvMULTI_on(dstr);
@@ -2120,7 +2120,7 @@ sv_setsv(SV *dstr, register SV *sstr)
                    else
                        dref = (SV*)GvAV(dstr);
                    GvAV(dstr) = (AV*)sref;
-                   if (curcop->cop_stash != GvSTASH(dstr))
+                   if (PL_curcop->cop_stash != GvSTASH(dstr))
                        GvIMPORTED_AV_on(dstr);
                    break;
                case SVt_PVHV:
@@ -2129,7 +2129,7 @@ sv_setsv(SV *dstr, register SV *sstr)
                    else
                        dref = (SV*)GvHV(dstr);
                    GvHV(dstr) = (HV*)sref;
-                   if (curcop->cop_stash != GvSTASH(dstr))
+                   if (PL_curcop->cop_stash != GvSTASH(dstr))
                        GvIMPORTED_HV_on(dstr);
                    break;
                case SVt_PVCV:
@@ -2138,7 +2138,7 @@ sv_setsv(SV *dstr, register SV *sstr)
                            SvREFCNT_dec(GvCV(dstr));
                            GvCV(dstr) = Nullcv;
                            GvCVGEN(dstr) = 0; /* Switch off cacheness. */
-                           sub_generation++;
+                           PL_sub_generation++;
                        }
                        SAVESPTR(GvCV(dstr));
                    }
@@ -2158,12 +2158,12 @@ sv_setsv(SV *dstr, register SV *sstr)
                                                       Nullcv));
                                /* ahem, death to those who redefine
                                 * active sort subs */
-                               if (curstackinfo->si_type == PERLSI_SORT &&
-                                     sortcop == CvSTART(cv))
+                               if (PL_curstackinfo->si_type == PERLSI_SORT &&
+                                     PL_sortcop == CvSTART(cv))
                                    croak(
                                    "Can't redefine active sort subroutine %s",
                                          GvENAME((GV*)dstr));
-                               if (dowarn || (const_changed && const_sv)) {
+                               if (PL_dowarn || (const_changed && const_sv)) {
                                    if (!(CvGV(cv) && GvSTASH(CvGV(cv))
                                          && HvNAME(GvSTASH(CvGV(cv)))
                                          && strEQ(HvNAME(GvSTASH(CvGV(cv))),
@@ -2180,9 +2180,9 @@ sv_setsv(SV *dstr, register SV *sstr)
                        GvCV(dstr) = (CV*)sref;
                        GvCVGEN(dstr) = 0; /* Switch off cacheness. */
                        GvASSUMECV_on(dstr);
-                       sub_generation++;
+                       PL_sub_generation++;
                    }
-                   if (curcop->cop_stash != GvSTASH(dstr))
+                   if (PL_curcop->cop_stash != GvSTASH(dstr))
                        GvIMPORTED_CV_on(dstr);
                    break;
                case SVt_PVIO:
@@ -2198,7 +2198,7 @@ sv_setsv(SV *dstr, register SV *sstr)
                    else
                        dref = (SV*)GvSV(dstr);
                    GvSV(dstr) = sref;
-                   if (curcop->cop_stash != GvSTASH(dstr))
+                   if (PL_curcop->cop_stash != GvSTASH(dstr))
                        GvIMPORTED_SV_on(dstr);
                    break;
                }
@@ -2297,7 +2297,7 @@ sv_setsv(SV *dstr, register SV *sstr)
     }
     else {
        if (dtype == SVt_PVGV) {
-           if (dowarn)
+           if (PL_dowarn)
                warn("Undefined value assigned to typeglob");
        }
        else
@@ -2411,7 +2411,7 @@ sv_check_thinkfirst(register SV *sv)
 {
     if (SvREADONLY(sv)) {
        dTHR;
-       if (curcop != &compiling)
+       if (PL_curcop != &PL_compiling)
            croak(no_modify);
     }
     if (SvROK(sv))
@@ -2537,7 +2537,7 @@ sv_magic(register SV *sv, SV *obj, int how, char *name, I32 namlen)
     
     if (SvREADONLY(sv)) {
        dTHR;
-       if (curcop != &compiling && !strchr("gBf", how))
+       if (PL_curcop != &PL_compiling && !strchr("gBf", how))
            croak(no_modify);
     }
     if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
@@ -2834,7 +2834,7 @@ sv_clear(register SV *sv)
 
     if (SvOBJECT(sv)) {
        dTHR;
-       if (defstash) {         /* Still have a symbol table? */
+       if (PL_defstash) {              /* Still have a symbol table? */
            djSP;
            GV* destructor;
            SV tmpref;
@@ -2871,10 +2871,10 @@ sv_clear(register SV *sv)
            SvREFCNT_dec(SvSTASH(sv));  /* possibly of changed persuasion */
            SvOBJECT_off(sv);   /* Curse the object. */
            if (SvTYPE(sv) != SVt_PVIO)
-               --sv_objcount;  /* XXX Might want something more general */
+               --PL_sv_objcount;       /* XXX Might want something more general */
        }
        if (SvREFCNT(sv)) {
-               if (in_clean_objs)
+               if (PL_in_clean_objs)
                    croak("DESTROY created new reference to dead object");
                /* DESTROY gave object new lease on life */
                return;
@@ -3015,7 +3015,7 @@ sv_free(SV *sv)
     if (SvREFCNT(sv) == 0) {
        if (SvFLAGS(sv) & SVf_BREAK)
            return;
-       if (in_clean_all) /* All is fair */
+       if (PL_in_clean_all) /* All is fair */
            return;
        if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
            /* make sure SvREFCNT(sv)==0 happens very seldom */
@@ -3121,7 +3121,7 @@ sv_cmp_locale(register SV *sv1, register SV *sv2)
     STRLEN len1, len2;
     I32 retval;
 
-    if (collation_standard)
+    if (PL_collation_standard)
        goto raw_compare;
 
     len1 = 0;
@@ -3173,7 +3173,7 @@ sv_collxfrm(SV *sv, STRLEN *nxp)
     MAGIC *mg;
 
     mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
-    if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != collation_ix) {
+    if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
        char *s, *xf;
        STRLEN len, xlen;
 
@@ -3184,7 +3184,7 @@ sv_collxfrm(SV *sv, STRLEN *nxp)
            if (SvREADONLY(sv)) {
                SAVEFREEPV(xf);
                *nxp = xlen;
-               return xf + sizeof(collation_ix);
+               return xf + sizeof(PL_collation_ix);
            }
            if (! mg) {
                sv_magic(sv, 0, 'o', 0, 0);
@@ -3203,7 +3203,7 @@ sv_collxfrm(SV *sv, STRLEN *nxp)
     }
     if (mg && mg->mg_ptr) {
        *nxp = mg->mg_len;
-       return mg->mg_ptr + sizeof(collation_ix);
+       return mg->mg_ptr + sizeof(PL_collation_ix);
     }
     else {
        *nxp = 0;
@@ -3228,16 +3228,16 @@ sv_gets(register SV *sv, register PerlIO *fp, I32 append)
     (void)SvUPGRADE(sv, SVt_PV);
     SvSCREAM_off(sv);
 
-    if (RsSNARF(rs)) {
+    if (RsSNARF(PL_rs)) {
        rsptr = NULL;
        rslen = 0;
     }
-    else if (RsRECORD(rs)) {
+    else if (RsRECORD(PL_rs)) {
       I32 recsize, bytesread;
       char *buffer;
 
       /* Grab the size of the record we're getting */
-      recsize = SvIV(SvRV(rs));
+      recsize = SvIV(SvRV(PL_rs));
       (void)SvPOK_only(sv);    /* Validate pointer */
       /* Make sure we've got the room to yank in the whole thing */
       if (SvLEN(sv) <= recsize + 3) {
@@ -3257,15 +3257,15 @@ sv_gets(register SV *sv, register PerlIO *fp, I32 append)
       SvCUR_set(sv, bytesread);
       return(SvCUR(sv) ? SvPVX(sv) : Nullch);
     }
-    else if (RsPARA(rs)) {
+    else if (RsPARA(PL_rs)) {
        rsptr = "\n\n";
        rslen = 2;
     }
     else
-       rsptr = SvPV(rs, rslen);
+       rsptr = SvPV(PL_rs, rslen);
     rslast = rslen ? rsptr[rslen - 1] : '\0';
 
-    if (RsPARA(rs)) {          /* have to do this both before and after */
+    if (RsPARA(PL_rs)) {               /* have to do this both before and after */
        do {                    /* to make sure file boundaries work right */
            if (PerlIO_eof(fp))
                return 0;
@@ -3462,7 +3462,7 @@ screamer2:
        }
     }
 
-    if (RsPARA(rs)) {          /* have to do this both before and after */  
+    if (RsPARA(PL_rs)) {               /* have to do this both before and after */  
         while (i != EOF) {     /* to make sure file boundaries work right */
            i = PerlIO_getc(fp);
            if (i != '\n') {
@@ -3491,7 +3491,7 @@ sv_inc(register SV *sv)
     if (SvTHINKFIRST(sv)) {
        if (SvREADONLY(sv)) {
            dTHR;
-           if (curcop != &compiling)
+           if (PL_curcop != &PL_compiling)
                croak(no_modify);
        }
        if (SvROK(sv)) {
@@ -3571,7 +3571,7 @@ sv_dec(register SV *sv)
     if (SvTHINKFIRST(sv)) {
        if (SvREADONLY(sv)) {
            dTHR;
-           if (curcop != &compiling)
+           if (PL_curcop != &PL_compiling)
                croak(no_modify);
        }
        if (SvROK(sv)) {
@@ -3621,8 +3621,8 @@ STATIC void
 sv_mortalgrow(void)
 {
     dTHR;
-    tmps_max += (tmps_max < 512) ? 128 : 512;
-    Renew(tmps_stack, tmps_max, SV*);
+    PL_tmps_max += (PL_tmps_max < 512) ? 128 : 512;
+    Renew(PL_tmps_stack, PL_tmps_max, SV*);
 }
 
 SV *
@@ -3636,9 +3636,9 @@ sv_mortalcopy(SV *oldstr)
     SvREFCNT(sv) = 1;
     SvFLAGS(sv) = 0;
     sv_setsv(sv,oldstr);
-    if (++tmps_ix >= tmps_max)
+    if (++PL_tmps_ix >= PL_tmps_max)
        sv_mortalgrow();
-    tmps_stack[tmps_ix] = sv;
+    PL_tmps_stack[PL_tmps_ix] = sv;
     SvTEMP_on(sv);
     return sv;
 }
@@ -3653,9 +3653,9 @@ sv_newmortal(void)
     SvANY(sv) = 0;
     SvREFCNT(sv) = 1;
     SvFLAGS(sv) = SVs_TEMP;
-    if (++tmps_ix >= tmps_max)
+    if (++PL_tmps_ix >= PL_tmps_max)
        sv_mortalgrow();
-    tmps_stack[tmps_ix] = sv;
+    PL_tmps_stack[PL_tmps_ix] = sv;
     return sv;
 }
 
@@ -3669,9 +3669,9 @@ sv_2mortal(register SV *sv)
        return sv;
     if (SvREADONLY(sv) && SvIMMORTAL(sv))
        return sv;
-    if (++tmps_ix >= tmps_max)
+    if (++PL_tmps_ix >= PL_tmps_max)
        sv_mortalgrow();
-    tmps_stack[tmps_ix] = sv;
+    PL_tmps_stack[PL_tmps_ix] = sv;
     SvTEMP_on(sv);
     return sv;
 }
@@ -3854,7 +3854,7 @@ sv_reset(register char *s, HV *stash)
                if (GvHV(gv) && !HvNAME(GvHV(gv))) {
                    hv_clear(GvHV(gv));
 #ifndef VMS  /* VMS has no environ array */
-                   if (gv == envgv)
+                   if (gv == PL_envgv)
                        environ[0] = Nullch;
 #endif
                }
@@ -3884,13 +3884,13 @@ sv_2io(SV *sv)
            croak(no_usym, "filehandle");
        if (SvROK(sv))
            return sv_2io(SvRV(sv));
-       gv = gv_fetchpv(SvPV(sv,na), FALSE, SVt_PVIO);
+       gv = gv_fetchpv(SvPV(sv,PL_na), FALSE, SVt_PVIO);
        if (gv)
            io = GvIO(gv);
        else
            io = 0;
        if (!io)
-           croak("Bad filehandle: %s", SvPV(sv,na));
+           croak("Bad filehandle: %s", SvPV(sv,PL_na));
        break;
     }
     return io;
@@ -3933,7 +3933,7 @@ sv_2cv(SV *sv, HV **st, GV **gvp, I32 lref)
        if (isGV(sv))
            gv = (GV*)sv;
        else
-           gv = gv_fetchpv(SvPV(sv, na), lref, SVt_PVCV);
+           gv = gv_fetchpv(SvPV(sv, PL_na), lref, SVt_PVCV);
        *gvp = gv;
        if (!gv)
            return Nullcv;
@@ -3950,7 +3950,7 @@ sv_2cv(SV *sv, HV **st, GV **gvp, I32 lref)
                   Nullop);
            LEAVE;
            if (!GvCVu(gv))
-               croak("Unable to create sub named \"%s\"", SvPV(sv,na));
+               croak("Unable to create sub named \"%s\"", SvPV(sv,PL_na));
        }
        return GvCVu(gv);
     }
@@ -4025,7 +4025,7 @@ sv_pvn_force(SV *sv, STRLEN *lp)
 
     if (SvREADONLY(sv)) {
        dTHR;
-       if (curcop != &compiling)
+       if (PL_curcop != &PL_compiling)
            croak(no_modify);
     }
     
@@ -4164,7 +4164,7 @@ SV*
 sv_setref_pv(SV *rv, char *classname, void *pv)
 {
     if (!pv) {
-       sv_setsv(rv, &sv_undef);
+       sv_setsv(rv, &PL_sv_undef);
        SvSETMAGIC(rv);
     }
     else
@@ -4206,13 +4206,13 @@ sv_bless(SV *sv, HV *stash)
            croak(no_modify);
        if (SvOBJECT(tmpRef)) {
            if (SvTYPE(tmpRef) != SVt_PVIO)
-               --sv_objcount;
+               --PL_sv_objcount;
            SvREFCNT_dec(SvSTASH(tmpRef));
        }
     }
     SvOBJECT_on(tmpRef);
     if (SvTYPE(tmpRef) != SVt_PVIO)
-       ++sv_objcount;
+       ++PL_sv_objcount;
     (void)SvUPGRADE(tmpRef, SVt_PVMG);
     SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
 
@@ -4803,7 +4803,7 @@ sv_vcatpvfn(SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs,
 
        default:
       unknown:
-           if (!args && dowarn &&
+           if (!args && PL_dowarn &&
                  (op->op_type == OP_PRTF || op->op_type == OP_SPRINTF)) {
                SV *msg = sv_newmortal();
                sv_setpvf(msg, "Invalid conversion in %s: ",
@@ -5069,7 +5069,7 @@ sv_dump(SV *sv)
        break;
     case SVt_PVCV:
        if (SvPOK(sv))
-           PerlIO_printf(Perl_debug_log, "  PROTOTYPE = \"%s\"\n", SvPV(sv,na));
+           PerlIO_printf(Perl_debug_log, "  PROTOTYPE = \"%s\"\n", SvPV(sv,PL_na));
        /* FALL THROUGH */
     case SVt_PVFM:
        PerlIO_printf(Perl_debug_log, "  STASH = 0x%lx\n", (long)CvSTASH(sv));
diff --git a/sv.h b/sv.h
index d75ec5a..00d9546 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -394,7 +394,7 @@ struct xpvio {
         (HV_AMAGICmb(stash) && \
          ((!HV_AMAGICbad(stash) && HV_AMAGIC(stash)) || Gv_AMupdate(stash)))
 */
-#define Gv_AMG(stash)           (amagic_generation && Gv_AMupdate(stash))
+#define Gv_AMG(stash)           (PL_amagic_generation && Gv_AMupdate(stash))
 #endif /* OVERLOAD */
 
 #define SvTHINKFIRST(sv)       (SvFLAGS(sv) & SVf_THINKFIRST)
@@ -503,14 +503,14 @@ struct xpvio {
 #define IoFLAGS(sv)    ((XPVIO*)  SvANY(sv))->xio_flags
 
 #define SvTAINTED(sv)    (SvMAGICAL(sv) && sv_tainted(sv))
-#define SvTAINTED_on(sv)  STMT_START{ if(tainting){sv_taint(sv);}   }STMT_END
-#define SvTAINTED_off(sv) STMT_START{ if(tainting){sv_untaint(sv);} }STMT_END
+#define SvTAINTED_on(sv)  STMT_START{ if(PL_tainting){sv_taint(sv);}   }STMT_END
+#define SvTAINTED_off(sv) STMT_START{ if(PL_tainting){sv_untaint(sv);} }STMT_END
 
 #define SvTAINT(sv)                    \
     STMT_START {                       \
-       if (tainting) {                 \
+       if (PL_tainting) {              \
            dTHR;                       \
-           if (tainted)                \
+           if (PL_tainted)             \
                SvTAINTED_on(sv);       \
        }                               \
     } STMT_END
@@ -652,9 +652,9 @@ struct xpvio {
 
 #define SvPEEK(sv) sv_peek(sv)
 
-#define SvIMMORTAL(sv) ((sv)==&sv_undef || (sv)==&sv_yes || (sv)==&sv_no)
+#define SvIMMORTAL(sv) ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || (sv)==&PL_sv_no)
 
-#define boolSV(b) ((b) ? &sv_yes : &sv_no)
+#define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
 
 #define isGV(sv) (SvTYPE(sv) == SVt_PVGV)
 
diff --git a/taint.c b/taint.c
index 3ce0942..88ca8a5 100644 (file)
--- a/taint.c
+++ b/taint.c
@@ -14,18 +14,18 @@ taint_proper(const char *f, char *s)
     char *ug;
 
     DEBUG_u(PerlIO_printf(Perl_debug_log,
-            "%s %d %d %d\n", s, tainted, uid, euid));
+            "%s %d %d %d\n", s, PL_tainted, PL_uid, PL_euid));
 
-    if (tainted) {
-       if (euid != uid)
+    if (PL_tainted) {
+       if (PL_euid != PL_uid)
            ug = " while running setuid";
-       else if (egid != gid)
+       else if (PL_egid != PL_gid)
            ug = " while running setgid";
        else
            ug = " while running with -T switch";
-       if (!unsafe)
+       if (!PL_unsafe)
            croak(f, s, ug);
-       else if (dowarn)
+       else if (PL_dowarn)
            warn(f, s, ug);
     }
 }
@@ -68,7 +68,7 @@ taint_env(void)
     }
 #endif /* VMS */
 
-    svp = hv_fetch(GvHVn(envgv),"PATH",4,FALSE);
+    svp = hv_fetch(GvHVn(PL_envgv),"PATH",4,FALSE);
     if (svp && *svp) {
        if (SvTAINTED(*svp)) {
            dTHR;
@@ -84,13 +84,13 @@ taint_env(void)
 
 #ifndef VMS
     /* tainted $TERM is okay if it contains no metachars */
-    svp = hv_fetch(GvHVn(envgv),"TERM",4,FALSE);
+    svp = hv_fetch(GvHVn(PL_envgv),"TERM",4,FALSE);
     if (svp && *svp && SvTAINTED(*svp)) {
        dTHR;   /* just for taint */
-       bool was_tainted = tainted;
-       char *t = SvPV(*svp, na);
-       char *e = t + na;
-       tainted = was_tainted;
+       bool was_tainted = PL_tainted;
+       char *t = SvPV(*svp, PL_na);
+       char *e = t + PL_na;
+       PL_tainted = was_tainted;
        if (t < e && isALNUM(*t))
            t++;
        while (t < e && (isALNUM(*t) || *t == '-' || *t == ':'))
@@ -103,8 +103,8 @@ taint_env(void)
 #endif /* !VMS */
 
     for (e = misc_env; *e; e++) {
-       svp = hv_fetch(GvHVn(envgv), *e, strlen(*e), FALSE);
-       if (svp && *svp != &sv_undef && SvTAINTED(*svp)) {
+       svp = hv_fetch(GvHVn(PL_envgv), *e, strlen(*e), FALSE);
+       if (svp && *svp != &PL_sv_undef && SvTAINTED(*svp)) {
            dTHR;       /* just for taint */
            TAINT;
            taint_proper("Insecure $ENV{%s}%s", *e);
index 20e79cc..4ca3ccb 100644 (file)
--- a/thrdvar.h
+++ b/thrdvar.h
@@ -82,7 +82,7 @@ PERLVAR(Tdefstash,    HV *)           /* main symbol table */
 PERLVAR(Tcurstash,     HV *)           /* symbol table for current package */
 
 PERLVAR(Trestartop,    OP *)           /* propagating an error from croak? */
-PERLVARI(Tcurcop,      COP * VOL,      &compiling)
+PERLVARI(Tcurcop,      COP * VOL,      &PL_compiling)
 PERLVAR(Tin_eval,      VOL int)        /* trap "fatal" errors? */
 PERLVAR(Tdelaymagic,   int)            /* ($<,$>) = ... */
 PERLVAR(Tdirty,                bool)           /* in the middle of tearing things down? */
diff --git a/toke.c b/toke.c
index 9685fc3..a4feb01 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -99,52 +99,52 @@ static char ident_too_long[] = "Identifier too long";
 #ifdef CLINE
 #undef CLINE
 #endif
-#define CLINE (copline = (curcop->cop_line < copline ? curcop->cop_line : copline))
-
-#define TOKEN(retval) return (bufptr = s,(int)retval)
-#define OPERATOR(retval) return (expect = XTERM,bufptr = s,(int)retval)
-#define AOPERATOR(retval) return ao((expect = XTERM,bufptr = s,(int)retval))
-#define PREBLOCK(retval) return (expect = XBLOCK,bufptr = s,(int)retval)
-#define PRETERMBLOCK(retval) return (expect = XTERMBLOCK,bufptr = s,(int)retval)
-#define PREREF(retval) return (expect = XREF,bufptr = s,(int)retval)
-#define TERM(retval) return (CLINE, expect = XOPERATOR,bufptr = s,(int)retval)
-#define LOOPX(f) return(yylval.ival=f,expect = XTERM,bufptr = s,(int)LOOPEX)
-#define FTST(f) return(yylval.ival=f,expect = XTERM,bufptr = s,(int)UNIOP)
-#define FUN0(f) return(yylval.ival = f,expect = XOPERATOR,bufptr = s,(int)FUNC0)
-#define FUN1(f) return(yylval.ival = f,expect = XOPERATOR,bufptr = s,(int)FUNC1)
-#define BOop(f) return ao((yylval.ival=f,expect = XTERM,bufptr = s,(int)BITOROP))
-#define BAop(f) return ao((yylval.ival=f,expect = XTERM,bufptr = s,(int)BITANDOP))
-#define SHop(f) return ao((yylval.ival=f,expect = XTERM,bufptr = s,(int)SHIFTOP))
-#define PWop(f) return ao((yylval.ival=f,expect = XTERM,bufptr = s,(int)POWOP))
-#define PMop(f) return(yylval.ival=f,expect = XTERM,bufptr = s,(int)MATCHOP)
-#define Aop(f) return ao((yylval.ival=f,expect = XTERM,bufptr = s,(int)ADDOP))
-#define Mop(f) return ao((yylval.ival=f,expect = XTERM,bufptr = s,(int)MULOP))
-#define Eop(f) return(yylval.ival=f,expect = XTERM,bufptr = s,(int)EQOP)
-#define Rop(f) return(yylval.ival=f,expect = XTERM,bufptr = s,(int)RELOP)
+#define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
+
+#define TOKEN(retval) return (PL_bufptr = s,(int)retval)
+#define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
+#define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
+#define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
+#define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
+#define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
+#define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
+#define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
+#define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
+#define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
+#define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
+#define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
+#define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
+#define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
+#define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
+#define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
+#define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
+#define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
+#define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
+#define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
 
 /* This bit of chicanery makes a unary function followed by
  * a parenthesis into a function with one argument, highest precedence.
  */
 #define UNI(f) return(yylval.ival = f, \
-       expect = XTERM, \
-       bufptr = s, \
-       last_uni = oldbufptr, \
-       last_lop_op = f, \
+       PL_expect = XTERM, \
+       PL_bufptr = s, \
+       PL_last_uni = PL_oldbufptr, \
+       PL_last_lop_op = f, \
        (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
 
 #define UNIBRACK(f) return(yylval.ival = f, \
-       bufptr = s, \
-       last_uni = oldbufptr, \
+       PL_bufptr = s, \
+       PL_last_uni = PL_oldbufptr, \
        (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
 
 /* grandfather return to old style */
-#define OLDLOP(f) return(yylval.ival=f,expect = XTERM,bufptr = s,(int)LSTOP)
+#define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
 
 STATIC int
 ao(int toketype)
 {
-    if (*bufptr == '=') {
-       bufptr++;
+    if (*PL_bufptr == '=') {
+       PL_bufptr++;
        if (toketype == ANDAND)
            yylval.ival = OP_ANDASSIGN;
        else if (toketype == OROR)
@@ -157,24 +157,24 @@ ao(int toketype)
 STATIC void
 no_op(char *what, char *s)
 {
-    char *oldbp = bufptr;
-    bool is_first = (oldbufptr == linestart);
+    char *oldbp = PL_bufptr;
+    bool is_first = (PL_oldbufptr == PL_linestart);
 
-    bufptr = s;
+    PL_bufptr = s;
     yywarn(form("%s found where operator expected", what));
     if (is_first)
        warn("\t(Missing semicolon on previous line?)\n");
-    else if (oldoldbufptr && isIDFIRST(*oldoldbufptr)) {
+    else if (PL_oldoldbufptr && isIDFIRST(*PL_oldoldbufptr)) {
        char *t;
-       for (t = oldoldbufptr; *t && (isALNUM(*t) || *t == ':'); t++) ;
-       if (t < bufptr && isSPACE(*t))
+       for (t = PL_oldoldbufptr; *t && (isALNUM(*t) || *t == ':'); t++) ;
+       if (t < PL_bufptr && isSPACE(*t))
            warn("\t(Do you need to predeclare %.*s?)\n",
-               t - oldoldbufptr, oldoldbufptr);
+               t - PL_oldoldbufptr, PL_oldoldbufptr);
 
     }
     else
        warn("\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
-    bufptr = oldbp;
+    PL_bufptr = oldbp;
 }
 
 STATIC void
@@ -187,15 +187,15 @@ missingterm(char *s)
        if (nl)
            *nl = '\0';
     }
-    else if (multi_close < 32 || multi_close == 127) {
+    else if (PL_multi_close < 32 || PL_multi_close == 127) {
        *tmpbuf = '^';
-       tmpbuf[1] = toCTRL(multi_close);
+       tmpbuf[1] = toCTRL(PL_multi_close);
        s = "\\n";
        tmpbuf[2] = '\0';
        s = tmpbuf;
     }
     else {
-       *tmpbuf = multi_close;
+       *tmpbuf = PL_multi_close;
        tmpbuf[1] = '\0';
        s = tmpbuf;
     }
@@ -206,7 +206,7 @@ missingterm(char *s)
 void
 deprecate(char *s)
 {
-    if (dowarn)
+    if (PL_dowarn)
        warn("Use of %s is deprecated", s);
 }
 
@@ -236,68 +236,68 @@ lex_start(SV *line)
     char *s;
     STRLEN len;
 
-    SAVEI32(lex_dojoin);
-    SAVEI32(lex_brackets);
-    SAVEI32(lex_fakebrack);
-    SAVEI32(lex_casemods);
-    SAVEI32(lex_starts);
-    SAVEI32(lex_state);
-    SAVESPTR(lex_inpat);
-    SAVEI32(lex_inwhat);
-    SAVEI16(curcop->cop_line);
-    SAVEPPTR(bufptr);
-    SAVEPPTR(bufend);
-    SAVEPPTR(oldbufptr);
-    SAVEPPTR(oldoldbufptr);
-    SAVEPPTR(linestart);
-    SAVESPTR(linestr);
-    SAVEPPTR(lex_brackstack);
-    SAVEPPTR(lex_casestack);
-    SAVEDESTRUCTOR(restore_rsfp, rsfp);
-    SAVESPTR(lex_stuff);
-    SAVEI32(lex_defer);
-    SAVESPTR(lex_repl);
-    SAVEDESTRUCTOR(restore_expect, tokenbuf + expect); /* encode as pointer */
-    SAVEDESTRUCTOR(restore_lex_expect, tokenbuf + expect);
-
-    lex_state = LEX_NORMAL;
-    lex_defer = 0;
-    expect = XSTATE;
-    lex_brackets = 0;
-    lex_fakebrack = 0;
-    New(899, lex_brackstack, 120, char);
-    New(899, lex_casestack, 12, char);
-    SAVEFREEPV(lex_brackstack);
-    SAVEFREEPV(lex_casestack);
-    lex_casemods = 0;
-    *lex_casestack = '\0';
-    lex_dojoin = 0;
-    lex_starts = 0;
-    lex_stuff = Nullsv;
-    lex_repl = Nullsv;
-    lex_inpat = 0;
-    lex_inwhat = 0;
-    linestr = line;
-    if (SvREADONLY(linestr))
-       linestr = sv_2mortal(newSVsv(linestr));
-    s = SvPV(linestr, len);
+    SAVEI32(PL_lex_dojoin);
+    SAVEI32(PL_lex_brackets);
+    SAVEI32(PL_lex_fakebrack);
+    SAVEI32(PL_lex_casemods);
+    SAVEI32(PL_lex_starts);
+    SAVEI32(PL_lex_state);
+    SAVESPTR(PL_lex_inpat);
+    SAVEI32(PL_lex_inwhat);
+    SAVEI16(PL_curcop->cop_line);
+    SAVEPPTR(PL_bufptr);
+    SAVEPPTR(PL_bufend);
+    SAVEPPTR(PL_oldbufptr);
+    SAVEPPTR(PL_oldoldbufptr);
+    SAVEPPTR(PL_linestart);
+    SAVESPTR(PL_linestr);
+    SAVEPPTR(PL_lex_brackstack);
+    SAVEPPTR(PL_lex_casestack);
+    SAVEDESTRUCTOR(restore_rsfp, PL_rsfp);
+    SAVESPTR(PL_lex_stuff);
+    SAVEI32(PL_lex_defer);
+    SAVESPTR(PL_lex_repl);
+    SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
+    SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect);
+
+    PL_lex_state = LEX_NORMAL;
+    PL_lex_defer = 0;
+    PL_expect = XSTATE;
+    PL_lex_brackets = 0;
+    PL_lex_fakebrack = 0;
+    New(899, PL_lex_brackstack, 120, char);
+    New(899, PL_lex_casestack, 12, char);
+    SAVEFREEPV(PL_lex_brackstack);
+    SAVEFREEPV(PL_lex_casestack);
+    PL_lex_casemods = 0;
+    *PL_lex_casestack = '\0';
+    PL_lex_dojoin = 0;
+    PL_lex_starts = 0;
+    PL_lex_stuff = Nullsv;
+    PL_lex_repl = Nullsv;
+    PL_lex_inpat = 0;
+    PL_lex_inwhat = 0;
+    PL_linestr = line;
+    if (SvREADONLY(PL_linestr))
+       PL_linestr = sv_2mortal(newSVsv(PL_linestr));
+    s = SvPV(PL_linestr, len);
     if (len && s[len-1] != ';') {
-       if (!(SvFLAGS(linestr) & SVs_TEMP))
-           linestr = sv_2mortal(newSVsv(linestr));
-       sv_catpvn(linestr, "\n;", 2);
+       if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
+           PL_linestr = sv_2mortal(newSVsv(PL_linestr));
+       sv_catpvn(PL_linestr, "\n;", 2);
     }
-    SvTEMP_off(linestr);
-    oldoldbufptr = oldbufptr = bufptr = linestart = SvPVX(linestr);
-    bufend = bufptr + SvCUR(linestr);
-    SvREFCNT_dec(rs);
-    rs = newSVpv("\n", 1);
-    rsfp = 0;
+    SvTEMP_off(PL_linestr);
+    PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
+    PL_bufend = PL_bufptr + SvCUR(PL_linestr);
+    SvREFCNT_dec(PL_rs);
+    PL_rs = newSVpv("\n", 1);
+    PL_rsfp = 0;
 }
 
 void
 lex_end(void)
 {
-    doextract = FALSE;
+    PL_doextract = FALSE;
 }
 
 STATIC void
@@ -305,25 +305,25 @@ restore_rsfp(void *f)
 {
     PerlIO *fp = (PerlIO*)f;
 
-    if (rsfp == PerlIO_stdin())
-       PerlIO_clearerr(rsfp);
-    else if (rsfp && (rsfp != fp))
-       PerlIO_close(rsfp);
-    rsfp = fp;
+    if (PL_rsfp == PerlIO_stdin())
+       PerlIO_clearerr(PL_rsfp);
+    else if (PL_rsfp && (PL_rsfp != fp))
+       PerlIO_close(PL_rsfp);
+    PL_rsfp = fp;
 }
 
 STATIC void
 restore_expect(void *e)
 {
     /* a safe way to store a small integer in a pointer */
-    expect = (expectation)((char *)e - tokenbuf);
+    PL_expect = (expectation)((char *)e - PL_tokenbuf);
 }
 
 STATIC void
 restore_lex_expect(void *e)
 {
     /* a safe way to store a small integer in a pointer */
-    lex_expect = (expectation)((char *)e - tokenbuf);
+    PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);
 }
 
 STATIC void
@@ -335,7 +335,7 @@ incline(char *s)
     char ch;
     int sawline = 0;
 
-    curcop->cop_line++;
+    PL_curcop->cop_line++;
     if (*s++ != '#')
        return;
     while (*s == ' ' || *s == '\t') s++;
@@ -360,65 +360,65 @@ incline(char *s)
     ch = *t;
     *t = '\0';
     if (t - s > 0)
-       curcop->cop_filegv = gv_fetchfile(s);
+       PL_curcop->cop_filegv = gv_fetchfile(s);
     else
-       curcop->cop_filegv = gv_fetchfile(origfilename);
+       PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
     *t = ch;
-    curcop->cop_line = atoi(n)-1;
+    PL_curcop->cop_line = atoi(n)-1;
 }
 
 STATIC char *
 skipspace(register char *s)
 {
     dTHR;
-    if (lex_formbrack && lex_brackets <= lex_formbrack) {
-       while (s < bufend && (*s == ' ' || *s == '\t'))
+    if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
+       while (s < PL_bufend && (*s == ' ' || *s == '\t'))
            s++;
        return s;
     }
     for (;;) {
        STRLEN prevlen;
-       while (s < bufend && isSPACE(*s))
+       while (s < PL_bufend && isSPACE(*s))
            s++;
-       if (s < bufend && *s == '#') {
-           while (s < bufend && *s != '\n')
+       if (s < PL_bufend && *s == '#') {
+           while (s < PL_bufend && *s != '\n')
                s++;
-           if (s < bufend)
+           if (s < PL_bufend)
                s++;
        }
-       if (s < bufend || !rsfp || lex_state != LEX_NORMAL)
+       if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL)
            return s;
-       if ((s = filter_gets(linestr, rsfp, (prevlen = SvCUR(linestr)))) == Nullch) {
-           if (minus_n || minus_p) {
-               sv_setpv(linestr,minus_p ?
+       if ((s = filter_gets(PL_linestr, PL_rsfp, (prevlen = SvCUR(PL_linestr)))) == Nullch) {
+           if (PL_minus_n || PL_minus_p) {
+               sv_setpv(PL_linestr,PL_minus_p ?
                         ";}continue{print or die qq(-p destination: $!\\n)" :
                         "");
-               sv_catpv(linestr,";}");
-               minus_n = minus_p = 0;
+               sv_catpv(PL_linestr,";}");
+               PL_minus_n = PL_minus_p = 0;
            }
            else
-               sv_setpv(linestr,";");
-           oldoldbufptr = oldbufptr = bufptr = s = linestart = SvPVX(linestr);
-           bufend = SvPVX(linestr) + SvCUR(linestr);
-           if (preprocess && !in_eval)
-               (void)PerlProc_pclose(rsfp);
-           else if ((PerlIO*)rsfp == PerlIO_stdin())
-               PerlIO_clearerr(rsfp);
+               sv_setpv(PL_linestr,";");
+           PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
+           PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+           if (PL_preprocess && !PL_in_eval)
+               (void)PerlProc_pclose(PL_rsfp);
+           else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
+               PerlIO_clearerr(PL_rsfp);
            else
-               (void)PerlIO_close(rsfp);
-           rsfp = Nullfp;
+               (void)PerlIO_close(PL_rsfp);
+           PL_rsfp = Nullfp;
            return s;
        }
-       linestart = bufptr = s + prevlen;
-       bufend = s + SvCUR(linestr);
-       s = bufptr;
+       PL_linestart = PL_bufptr = s + prevlen;
+       PL_bufend = s + SvCUR(PL_linestr);
+       s = PL_bufptr;
        incline(s);
-       if (PERLDB_LINE && curstash != debstash) {
+       if (PERLDB_LINE && PL_curstash != PL_debstash) {
            SV *sv = NEWSV(85,0);
 
            sv_upgrade(sv, SVt_PVMG);
-           sv_setpvn(sv,bufptr,bufend-bufptr);
-           av_store(GvAV(curcop->cop_filegv),(I32)curcop->cop_line,sv);
+           sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
+           av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
        }
     }
 }
@@ -429,16 +429,16 @@ check_uni(void) {
     char ch;
     char *t;
 
-    if (oldoldbufptr != last_uni)
+    if (PL_oldoldbufptr != PL_last_uni)
        return;
-    while (isSPACE(*last_uni))
-       last_uni++;
-    for (s = last_uni; isALNUM(*s) || *s == '-'; s++) ;
-    if ((t = strchr(s, '(')) && t < bufptr)
+    while (isSPACE(*PL_last_uni))
+       PL_last_uni++;
+    for (s = PL_last_uni; isALNUM(*s) || *s == '-'; s++) ;
+    if ((t = strchr(s, '(')) && t < PL_bufptr)
        return;
     ch = *s;
     *s = '\0';
-    warn("Warning: Use of \"%s\" without parens is ambiguous", last_uni);
+    warn("Warning: Use of \"%s\" without parens is ambiguous", PL_last_uni);
     *s = ch;
 }
 
@@ -451,8 +451,8 @@ STATIC int
 uni(I32 f, char *s)
 {
     yylval.ival = f;
-    expect = XTERM;
-    bufptr = s;
+    PL_expect = XTERM;
+    PL_bufptr = s;
     last_uni = oldbufptr;
     last_lop_op = f;
     if (*s == '(')
@@ -474,11 +474,11 @@ lop(I32 f, expectation x, char *s)
     dTHR;
     yylval.ival = f;
     CLINE;
-    expect = x;
-    bufptr = s;
-    last_lop = oldbufptr;
-    last_lop_op = f;
-    if (nexttoke)
+    PL_expect = x;
+    PL_bufptr = s;
+    PL_last_lop = PL_oldbufptr;
+    PL_last_lop_op = f;
+    if (PL_nexttoke)
        return LSTOP;
     if (*s == '(')
        return FUNC;
@@ -492,12 +492,12 @@ lop(I32 f, expectation x, char *s)
 STATIC void 
 force_next(I32 type)
 {
-    nexttype[nexttoke] = type;
-    nexttoke++;
-    if (lex_state != LEX_KNOWNEXT) {
-       lex_defer = lex_state;
-       lex_expect = expect;
-       lex_state = LEX_KNOWNEXT;
+    PL_nexttype[PL_nexttoke] = type;
+    PL_nexttoke++;
+    if (PL_lex_state != LEX_KNOWNEXT) {
+       PL_lex_defer = PL_lex_state;
+       PL_lex_expect = PL_expect;
+       PL_lex_state = LEX_KNOWNEXT;
     }
 }
 
@@ -513,21 +513,21 @@ force_word(register char *start, int token, int check_keyword, int allow_pack, i
        (allow_pack && *s == ':') ||
        (allow_initial_tick && *s == '\'') )
     {
-       s = scan_word(s, tokenbuf, sizeof tokenbuf, allow_pack, &len);
-       if (check_keyword && keyword(tokenbuf, len))
+       s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
+       if (check_keyword && keyword(PL_tokenbuf, len))
            return start;
        if (token == METHOD) {
            s = skipspace(s);
            if (*s == '(')
-               expect = XTERM;
+               PL_expect = XTERM;
            else {
-               expect = XOPERATOR;
+               PL_expect = XOPERATOR;
                force_next(')');
                force_next('(');
            }
        }
-       nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(tokenbuf,0));
-       nextval[nexttoke].opval->op_private |= OPpCONST_BARE;
+       PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
+       PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
        force_next(token);
     }
     return s;
@@ -538,7 +538,7 @@ force_ident(register char *s, int kind)
 {
     if (s && *s) {
        OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
-       nextval[nexttoke].opval = o;
+       PL_nextval[PL_nexttoke].opval = o;
        force_next(WORD);
        if (kind) {
            dTHR;               /* just for in_eval */
@@ -546,7 +546,7 @@ force_ident(register char *s, int kind)
            /* XXX see note in pp_entereval() for why we forgo typo
               warnings if the symbol must be introduced in an eval.
               GSAR 96-10-12 */
-           gv_fetchpv(s, in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
+           gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
                kind == '$' ? SVt_PV :
                kind == '@' ? SVt_PVAV :
                kind == '%' ? SVt_PVHV :
@@ -577,7 +577,7 @@ force_version(char *s)
     }
 
     /* NOTE: The parser sees the package name and the VERSION swapped */
-    nextval[nexttoke].opval = version;
+    PL_nextval[PL_nexttoke].opval = version;
     force_next(WORD); 
 
     return (s);
@@ -604,7 +604,7 @@ tokeq(SV *sv)
     if (s == send)
        goto finish;
     d = s;
-    if ( hints & HINT_NEW_STRING )
+    if ( PL_hints & HINT_NEW_STRING )
        pv = sv_2mortal(newSVpv(SvPVX(pv), len));
     while (s < send) {
        if (*s == '\\') {
@@ -616,7 +616,7 @@ tokeq(SV *sv)
     *d = '\0';
     SvCUR_set(sv, d - SvPVX(sv));
   finish:
-    if ( hints & HINT_NEW_STRING )
+    if ( PL_hints & HINT_NEW_STRING )
        return new_constant(NULL, 0, "q", sv, pv, "q");
     return sv;
 }
@@ -627,12 +627,12 @@ sublex_start(void)
     register I32 op_type = yylval.ival;
 
     if (op_type == OP_NULL) {
-       yylval.opval = lex_op;
-       lex_op = Nullop;
+       yylval.opval = PL_lex_op;
+       PL_lex_op = Nullop;
        return THING;
     }
     if (op_type == OP_CONST || op_type == OP_READLINE) {
-       SV *sv = tokeq(lex_stuff);
+       SV *sv = tokeq(PL_lex_stuff);
 
        if (SvTYPE(sv) == SVt_PVIV) {
            /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
@@ -646,19 +646,19 @@ sublex_start(void)
            sv = nsv;
        } 
        yylval.opval = (OP*)newSVOP(op_type, 0, sv);
-       lex_stuff = Nullsv;
+       PL_lex_stuff = Nullsv;
        return THING;
     }
 
-    sublex_info.super_state = lex_state;
-    sublex_info.sub_inwhat = op_type;
-    sublex_info.sub_op = lex_op;
-    lex_state = LEX_INTERPPUSH;
+    PL_sublex_info.super_state = PL_lex_state;
+    PL_sublex_info.sub_inwhat = op_type;
+    PL_sublex_info.sub_op = PL_lex_op;
+    PL_lex_state = LEX_INTERPPUSH;
 
-    expect = XTERM;
-    if (lex_op) {
-       yylval.opval = lex_op;
-       lex_op = Nullop;
+    PL_expect = XTERM;
+    if (PL_lex_op) {
+       yylval.opval = PL_lex_op;
+       PL_lex_op = Nullop;
        return PMFUNC;
     }
     else
@@ -671,49 +671,49 @@ sublex_push(void)
     dTHR;
     ENTER;
 
-    lex_state = sublex_info.super_state;
-    SAVEI32(lex_dojoin);
-    SAVEI32(lex_brackets);
-    SAVEI32(lex_fakebrack);
-    SAVEI32(lex_casemods);
-    SAVEI32(lex_starts);
-    SAVEI32(lex_state);
-    SAVESPTR(lex_inpat);
-    SAVEI32(lex_inwhat);
-    SAVEI16(curcop->cop_line);
-    SAVEPPTR(bufptr);
-    SAVEPPTR(oldbufptr);
-    SAVEPPTR(oldoldbufptr);
-    SAVEPPTR(linestart);
-    SAVESPTR(linestr);
-    SAVEPPTR(lex_brackstack);
-    SAVEPPTR(lex_casestack);
-
-    linestr = lex_stuff;
-    lex_stuff = Nullsv;
-
-    bufend = bufptr = oldbufptr = oldoldbufptr = linestart = SvPVX(linestr);
-    bufend += SvCUR(linestr);
-    SAVEFREESV(linestr);
-
-    lex_dojoin = FALSE;
-    lex_brackets = 0;
-    lex_fakebrack = 0;
-    New(899, lex_brackstack, 120, char);
-    New(899, lex_casestack, 12, char);
-    SAVEFREEPV(lex_brackstack);
-    SAVEFREEPV(lex_casestack);
-    lex_casemods = 0;
-    *lex_casestack = '\0';
-    lex_starts = 0;
-    lex_state = LEX_INTERPCONCAT;
-    curcop->cop_line = multi_start;
-
-    lex_inwhat = sublex_info.sub_inwhat;
-    if (lex_inwhat == OP_MATCH || lex_inwhat == OP_QR || lex_inwhat == OP_SUBST)
-       lex_inpat = sublex_info.sub_op;
+    PL_lex_state = PL_sublex_info.super_state;
+    SAVEI32(PL_lex_dojoin);
+    SAVEI32(PL_lex_brackets);
+    SAVEI32(PL_lex_fakebrack);
+    SAVEI32(PL_lex_casemods);
+    SAVEI32(PL_lex_starts);
+    SAVEI32(PL_lex_state);
+    SAVESPTR(PL_lex_inpat);
+    SAVEI32(PL_lex_inwhat);
+    SAVEI16(PL_curcop->cop_line);
+    SAVEPPTR(PL_bufptr);
+    SAVEPPTR(PL_oldbufptr);
+    SAVEPPTR(PL_oldoldbufptr);
+    SAVEPPTR(PL_linestart);
+    SAVESPTR(PL_linestr);
+    SAVEPPTR(PL_lex_brackstack);
+    SAVEPPTR(PL_lex_casestack);
+
+    PL_linestr = PL_lex_stuff;
+    PL_lex_stuff = Nullsv;
+
+    PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
+    PL_bufend += SvCUR(PL_linestr);
+    SAVEFREESV(PL_linestr);
+
+    PL_lex_dojoin = FALSE;
+    PL_lex_brackets = 0;
+    PL_lex_fakebrack = 0;
+    New(899, PL_lex_brackstack, 120, char);
+    New(899, PL_lex_casestack, 12, char);
+    SAVEFREEPV(PL_lex_brackstack);
+    SAVEFREEPV(PL_lex_casestack);
+    PL_lex_casemods = 0;
+    *PL_lex_casestack = '\0';
+    PL_lex_starts = 0;
+    PL_lex_state = LEX_INTERPCONCAT;
+    PL_curcop->cop_line = PL_multi_start;
+
+    PL_lex_inwhat = PL_sublex_info.sub_inwhat;
+    if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
+       PL_lex_inpat = PL_sublex_info.sub_op;
     else
-       lex_inpat = Nullop;
+       PL_lex_inpat = Nullop;
 
     return '(';
 }
@@ -721,44 +721,44 @@ sublex_push(void)
 STATIC I32
 sublex_done(void)
 {
-    if (!lex_starts++) {
-       expect = XOPERATOR;
+    if (!PL_lex_starts++) {
+       PL_expect = XOPERATOR;
        yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv("",0));
        return THING;
     }
 
-    if (lex_casemods) {                /* oops, we've got some unbalanced parens */
-       lex_state = LEX_INTERPCASEMOD;
+    if (PL_lex_casemods) {             /* oops, we've got some unbalanced parens */
+       PL_lex_state = LEX_INTERPCASEMOD;
        return yylex();
     }
 
     /* Is there a right-hand side to take care of? */
-    if (lex_repl && (lex_inwhat == OP_SUBST || lex_inwhat == OP_TRANS)) {
-       linestr = lex_repl;
-       lex_inpat = 0;
-       bufend = bufptr = oldbufptr = oldoldbufptr = linestart = SvPVX(linestr);
-       bufend += SvCUR(linestr);
-       SAVEFREESV(linestr);
-       lex_dojoin = FALSE;
-       lex_brackets = 0;
-       lex_fakebrack = 0;
-       lex_casemods = 0;
-       *lex_casestack = '\0';
-       lex_starts = 0;
-       if (SvCOMPILED(lex_repl)) {
-           lex_state = LEX_INTERPNORMAL;
-           lex_starts++;
+    if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
+       PL_linestr = PL_lex_repl;
+       PL_lex_inpat = 0;
+       PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
+       PL_bufend += SvCUR(PL_linestr);
+       SAVEFREESV(PL_linestr);
+       PL_lex_dojoin = FALSE;
+       PL_lex_brackets = 0;
+       PL_lex_fakebrack = 0;
+       PL_lex_casemods = 0;
+       *PL_lex_casestack = '\0';
+       PL_lex_starts = 0;
+       if (SvCOMPILED(PL_lex_repl)) {
+           PL_lex_state = LEX_INTERPNORMAL;
+           PL_lex_starts++;
        }
        else
-           lex_state = LEX_INTERPCONCAT;
-       lex_repl = Nullsv;
+           PL_lex_state = LEX_INTERPCONCAT;
+       PL_lex_repl = Nullsv;
        return ',';
     }
     else {
        LEAVE;
-       bufend = SvPVX(linestr);
-       bufend += SvCUR(linestr);
-       expect = XOPERATOR;
+       PL_bufend = SvPVX(PL_linestr);
+       PL_bufend += SvCUR(PL_linestr);
+       PL_expect = XOPERATOR;
        return ')';
     }
 }
@@ -769,8 +769,8 @@ sublex_done(void)
   Extracts a pattern, double-quoted string, or transliteration.  This
   is terrifying code.
 
-  It looks at lex_inwhat and lex_inpat to find out whether it's
-  processing a pattern (lex_inpat is true), a transliteration
+  It looks at lex_inwhat and PL_lex_inpat to find out whether it's
+  processing a pattern (PL_lex_inpat is true), a transliteration
   (lex_inwhat & OP_TRANS is true), or a double-quoted string.
 
   Returns a pointer to the character scanned up to. Iff this is
@@ -839,7 +839,7 @@ sublex_done(void)
 STATIC char *
 scan_const(char *start)
 {
-    register char *send = bufend;              /* end of the constant */
+    register char *send = PL_bufend;           /* end of the constant */
     SV *sv = NEWSV(93, send - start);          /* sv for the constant */
     register char *s = start;                  /* start of the constant */
     register char *d = SvPVX(sv);              /* destination for copies */
@@ -848,13 +848,13 @@ scan_const(char *start)
 
     /* leaveit is the set of acceptably-backslashed characters */
     char *leaveit =
-       lex_inpat
+       PL_lex_inpat
            ? "\\.^$@AGZdDwWsSbB+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
            : "";
 
     while (s < send || dorange) {
         /* get transliterations out of the way (they're most literal) */
-       if (lex_inwhat == OP_TRANS) {
+       if (PL_lex_inwhat == OP_TRANS) {
            /* expand a range A-Z to the full set of characters.  AIE! */
            if (dorange) {
                I32 i;                          /* current expanded character */
@@ -885,7 +885,7 @@ scan_const(char *start)
        /* if we get here, we're not doing a transliteration */
 
        /* skip for regexp comments /(?#comment)/ */
-       else if (*s == '(' && lex_inpat && s[1] == '?') {
+       else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
            if (s[2] == '#') {
                while (s < send && *s != ')')
                    *d++ = *s++;
@@ -913,8 +913,8 @@ scan_const(char *start)
        }
 
        /* likewise skip #-initiated comments in //x patterns */
-       else if (*s == '#' && lex_inpat &&
-         ((PMOP*)lex_inpat)->op_pmflags & PMf_EXTENDED) {
+       else if (*s == '#' && PL_lex_inpat &&
+         ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
            while (s+1 < send && *s != '\n')
                *d++ = *s++;
        }
@@ -927,7 +927,7 @@ scan_const(char *start)
           variable.
         */
        else if (*s == '$') {
-           if (!lex_inpat)     /* not a regexp, so $ must be var */
+           if (!PL_lex_inpat)  /* not a regexp, so $ must be var */
                break;
            if (s + 1 < send && !strchr("()| \n\t", s[1]))
                break;          /* in regexp, $ might be tail anchor */
@@ -945,17 +945,17 @@ scan_const(char *start)
            }
 
            /* deprecate \1 in strings and substitution replacements */
-           if (lex_inwhat == OP_SUBST && !lex_inpat &&
+           if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
                isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
            {
-               if (dowarn)
+               if (PL_dowarn)
                    warn("\\%c better written as $%c", *s, *s);
                *--s = '$';
                break;
            }
 
            /* string-change backslash escapes */
-           if (lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
+           if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
                --s;
                break;
            }
@@ -965,7 +965,7 @@ scan_const(char *start)
 
            /* quoted - in transliterations */
            case '-':
-               if (lex_inwhat == OP_TRANS) {
+               if (PL_lex_inwhat == OP_TRANS) {
                    *d++ = *s++;
                    continue;
                }
@@ -1038,13 +1038,13 @@ scan_const(char *start)
     }
 
     /* return the substring (via yylval) only if we parsed anything */
-    if (s > bufptr) {
-       if ( hints & ( lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
-           sv = new_constant(start, s - start, (lex_inpat ? "qr" : "q"), 
+    if (s > PL_bufptr) {
+       if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
+           sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"), 
                              sv, Nullsv,
-                             ( lex_inwhat == OP_TRANS 
+                             ( PL_lex_inwhat == OP_TRANS 
                                ? "tr"
-                               : ( (lex_inwhat == OP_SUBST && !lex_inpat)
+                               : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
                                    ? "s"
                                    : "qq")));
        yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
@@ -1057,13 +1057,13 @@ scan_const(char *start)
 STATIC int
 intuit_more(register char *s)
 {
-    if (lex_brackets)
+    if (PL_lex_brackets)
        return TRUE;
     if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
        return TRUE;
     if (*s != '{' && *s != '[')
        return FALSE;
-    if (!lex_inpat)
+    if (!PL_lex_inpat)
        return TRUE;
 
     /* In a pattern, so maybe we have {n,m}. */
@@ -1093,7 +1093,7 @@ intuit_more(register char *s)
        char seen[256];
        unsigned char un_char = 255, last_un_char;
        char *send = strchr(s,']');
-       char tmpbuf[sizeof tokenbuf * 4];
+       char tmpbuf[sizeof PL_tokenbuf * 4];
 
        if (!send)              /* has to be an expression */
            return TRUE;
@@ -1188,7 +1188,7 @@ STATIC int
 intuit_method(char *start, GV *gv)
 {
     char *s = start + (*start == '$');
-    char tmpbuf[sizeof tokenbuf];
+    char tmpbuf[sizeof PL_tokenbuf];
     STRLEN len;
     GV* indirgv;
 
@@ -1209,11 +1209,11 @@ intuit_method(char *start, GV *gv)
     }
     s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
     if (*start == '$') {
-       if (gv || last_lop_op == OP_PRINT || isUPPER(*tokenbuf))
+       if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
            return 0;
        s = skipspace(s);
-       bufptr = start;
-       expect = XREF;
+       PL_bufptr = start;
+       PL_expect = XREF;
        return *s == '(' ? FUNCMETH : METHOD;
     }
     if (!keyword(tmpbuf, len)) {
@@ -1228,15 +1228,15 @@ intuit_method(char *start, GV *gv)
        /* filehandle or package name makes it a method */
        if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
            s = skipspace(s);
-           if ((bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
+           if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
                return 0;       /* no assumptions -- "=>" quotes bearword */
       bare_package:
-           nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
+           PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
                                                   newSVpv(tmpbuf,0));
-           nextval[nexttoke].opval->op_private = OPpCONST_BARE;
-           expect = XTERM;
+           PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
+           PL_expect = XTERM;
            force_next(WORD);
-           bufptr = s;
+           PL_bufptr = s;
            return *s == '(' ? FUNCMETH : METHOD;
        }
     }
@@ -1246,7 +1246,7 @@ intuit_method(char *start, GV *gv)
 STATIC char*
 incl_perldb(void)
 {
-    if (perldb) {
+    if (PL_perldb) {
        char *pdb = PerlEnv_getenv("PERL5DB");
 
        if (pdb)
@@ -1282,17 +1282,17 @@ filter_add(filter_t funcp, SV *datasv)
        filter_debug = atoi((char*)datasv);
        return NULL;
     }
-    if (!rsfp_filters)
-       rsfp_filters = newAV();
+    if (!PL_rsfp_filters)
+       PL_rsfp_filters = newAV();
     if (!datasv)
        datasv = NEWSV(255,0);
     if (!SvUPGRADE(datasv, SVt_PVIO))
         die("Can't upgrade filter_add data to SVt_PVIO");
     IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
     if (filter_debug)
-       warn("filter_add func %p (%s)", funcp, SvPV(datasv,na));
-    av_unshift(rsfp_filters, 1);
-    av_store(rsfp_filters, 0, datasv) ;
+       warn("filter_add func %p (%s)", funcp, SvPV(datasv,PL_na));
+    av_unshift(PL_rsfp_filters, 1);
+    av_store(PL_rsfp_filters, 0, datasv) ;
     return(datasv);
 }
  
@@ -1303,11 +1303,11 @@ filter_del(filter_t funcp)
 {
     if (filter_debug)
        warn("filter_del func %p", funcp);
-    if (!rsfp_filters || AvFILLp(rsfp_filters)<0)
+    if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
        return;
     /* if filter is on top of stack (usual case) just pop it off */
-    if (IoDIRP(FILTER_DATA(AvFILLp(rsfp_filters))) == (void*)funcp){
-       sv_free(av_pop(rsfp_filters));
+    if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (void*)funcp){
+       sv_free(av_pop(PL_rsfp_filters));
 
         return;
     }
@@ -1326,9 +1326,9 @@ filter_read(int idx, SV *buf_sv, int maxlen)
     filter_t funcp;
     SV *datasv = NULL;
 
-    if (!rsfp_filters)
+    if (!PL_rsfp_filters)
        return -1;
-    if (idx > AvFILLp(rsfp_filters)){       /* Any more filters?       */
+    if (idx > AvFILLp(PL_rsfp_filters)){       /* Any more filters?    */
        /* Provide a default input filter to make life easy.    */
        /* Note that we append to the line. This is handy.      */
        if (filter_debug)
@@ -1340,8 +1340,8 @@ filter_read(int idx, SV *buf_sv, int maxlen)
 
            /* ensure buf_sv is large enough */
            SvGROW(buf_sv, old_len + maxlen) ;
-           if ((len = PerlIO_read(rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
-               if (PerlIO_error(rsfp))
+           if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
+               if (PerlIO_error(PL_rsfp))
                    return -1;          /* error */
                else
                    return 0 ;          /* end of file */
@@ -1349,8 +1349,8 @@ filter_read(int idx, SV *buf_sv, int maxlen)
            SvCUR_set(buf_sv, old_len + len) ;
        } else {
            /* Want a line */
-            if (sv_gets(buf_sv, rsfp, SvCUR(buf_sv)) == NULL) {
-               if (PerlIO_error(rsfp))
+            if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
+               if (PerlIO_error(PL_rsfp))
                    return -1;          /* error */
                else
                    return 0 ;          /* end of file */
@@ -1359,7 +1359,7 @@ filter_read(int idx, SV *buf_sv, int maxlen)
        return SvCUR(buf_sv);
     }
     /* Skip this filter slot if filter has been deleted        */
-    if ( (datasv = FILTER_DATA(idx)) == &sv_undef){
+    if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
        if (filter_debug)
            warn("filter_read %d: skipped (filter deleted)\n", idx);
        return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
@@ -1368,7 +1368,7 @@ filter_read(int idx, SV *buf_sv, int maxlen)
     funcp = (filter_t)IoDIRP(datasv);
     if (filter_debug)
        warn("filter_read %d: via function %p (%s)\n",
-               idx, funcp, SvPV(datasv,na));
+               idx, funcp, SvPV(datasv,PL_na));
     /* Call function. The function is expected to      */
     /* call "FILTER_READ(idx+1, buf_sv)" first.                */
     /* Return: <0:error, =0:eof, >0:not eof            */
@@ -1379,11 +1379,11 @@ STATIC char *
 filter_gets(register SV *sv, register PerlIO *fp, STRLEN append)
 {
 #ifdef WIN32FILTER
-    if (!rsfp_filters) {
+    if (!PL_rsfp_filters) {
        filter_add(win32_textfilter,NULL);
     }
 #endif
-    if (rsfp_filters) {
+    if (PL_rsfp_filters) {
 
        if (!append)
             SvCUR_set(sv, 0);  /* start with empty line        */
@@ -1441,10 +1441,10 @@ yylex(void)
     GV **gvp = 0;
 
     /* check if there's an identifier for us to look at */
-    if (pending_ident) {
+    if (PL_pending_ident) {
         /* pit holds the identifier we read and pending_ident is reset */
-       char pit = pending_ident;
-       pending_ident = 0;
+       char pit = PL_pending_ident;
+       PL_pending_ident = 0;
 
        /* if we're in a my(), we can't allow dynamics here.
           $foo'bar has already been turned into $foo::bar, so
@@ -1452,12 +1452,12 @@ yylex(void)
 
           if it's a legal name, the OP is a PADANY.
        */
-       if (in_my) {
-           if (strchr(tokenbuf,':'))
-               croak(no_myglob,tokenbuf);
+       if (PL_in_my) {
+           if (strchr(PL_tokenbuf,':'))
+               croak(no_myglob,PL_tokenbuf);
 
            yylval.opval = newOP(OP_PADANY, 0);
-           yylval.opval->op_targ = pad_allocmy(tokenbuf);
+           yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
            return PRIVATEREF;
        }
 
@@ -1473,32 +1473,32 @@ yylex(void)
           (although why you'd do that is anyone's guess).
        */
 
-       if (!strchr(tokenbuf,':')) {
+       if (!strchr(PL_tokenbuf,':')) {
 #ifdef USE_THREADS
            /* Check for single character per-thread SVs */
-           if (tokenbuf[0] == '$' && tokenbuf[2] == '\0'
-               && !isALPHA(tokenbuf[1]) /* Rule out obvious non-threadsvs */
-               && (tmp = find_threadsv(&tokenbuf[1])) != NOT_IN_PAD)
+           if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
+               && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
+               && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
            {
                yylval.opval = newOP(OP_THREADSV, 0);
                yylval.opval->op_targ = tmp;
                return PRIVATEREF;
            }
 #endif /* USE_THREADS */
-           if ((tmp = pad_findmy(tokenbuf)) != NOT_IN_PAD) {
+           if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
                /* if it's a sort block and they're naming $a or $b */
-               if (last_lop_op == OP_SORT &&
-                   tokenbuf[0] == '$' &&
-                   (tokenbuf[1] == 'a' || tokenbuf[1] == 'b')
-                   && !tokenbuf[2])
+               if (PL_last_lop_op == OP_SORT &&
+                   PL_tokenbuf[0] == '$' &&
+                   (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
+                   && !PL_tokenbuf[2])
                {
-                   for (d = in_eval ? oldoldbufptr : linestart;
-                        d < bufend && *d != '\n';
+                   for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
+                        d < PL_bufend && *d != '\n';
                         d++)
                    {
                        if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
                            croak("Can't use \"my %s\" in sort comparison",
-                                 tokenbuf);
+                                 PL_tokenbuf);
                        }
                    }
                }
@@ -1514,26 +1514,26 @@ yylex(void)
           and @foo isn't a variable we can find in the symbol
           table.
        */
-       if (pit == '@' && lex_state != LEX_NORMAL && !lex_brackets) {
-           GV *gv = gv_fetchpv(tokenbuf+1, FALSE, SVt_PVAV);
-           if (!gv || ((tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
+       if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
+           GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
+           if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
                yyerror(form("In string, %s now must be written as \\%s",
-                            tokenbuf, tokenbuf));
+                            PL_tokenbuf, PL_tokenbuf));
        }
 
        /* build ops for a bareword */
-       yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(tokenbuf+1, 0));
+       yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
        yylval.opval->op_private = OPpCONST_ENTERED;
-       gv_fetchpv(tokenbuf+1, in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
-                  ((tokenbuf[0] == '$') ? SVt_PV
-                   : (tokenbuf[0] == '@') ? SVt_PVAV
+       gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
+                  ((PL_tokenbuf[0] == '$') ? SVt_PV
+                   : (PL_tokenbuf[0] == '@') ? SVt_PVAV
                    : SVt_PVHV));
        return WORD;
     }
 
     /* no identifier pending identification */
 
-    switch (lex_state) {
+    switch (PL_lex_state) {
 #ifdef COMMENTARY
     case LEX_NORMAL:           /* Some compilers will produce faster */
     case LEX_INTERPNORMAL:     /* code if we comment these out. */
@@ -1542,82 +1542,82 @@ yylex(void)
 
     /* when we're already built the next token, just pull it out the queue */
     case LEX_KNOWNEXT:
-       nexttoke--;
-       yylval = nextval[nexttoke];
-       if (!nexttoke) {
-           lex_state = lex_defer;
-           expect = lex_expect;
-           lex_defer = LEX_NORMAL;
+       PL_nexttoke--;
+       yylval = PL_nextval[PL_nexttoke];
+       if (!PL_nexttoke) {
+           PL_lex_state = PL_lex_defer;
+           PL_expect = PL_lex_expect;
+           PL_lex_defer = LEX_NORMAL;
        }
-       return(nexttype[nexttoke]);
+       return(PL_nexttype[PL_nexttoke]);
 
     /* interpolated case modifiers like \L \U, including \Q and \E.
-       when we get here, bufptr is at the \
+       when we get here, PL_bufptr is at the \
     */
     case LEX_INTERPCASEMOD:
 #ifdef DEBUGGING
-       if (bufptr != bufend && *bufptr != '\\')
+       if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
            croak("panic: INTERPCASEMOD");
 #endif
        /* handle \E or end of string */
-               if (bufptr == bufend || bufptr[1] == 'E') {
+               if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
            char oldmod;
 
            /* if at a \E */
-           if (lex_casemods) {
-               oldmod = lex_casestack[--lex_casemods];
-               lex_casestack[lex_casemods] = '\0';
+           if (PL_lex_casemods) {
+               oldmod = PL_lex_casestack[--PL_lex_casemods];
+               PL_lex_casestack[PL_lex_casemods] = '\0';
 
-               if (bufptr != bufend && strchr("LUQ", oldmod)) {
-                   bufptr += 2;
-                   lex_state = LEX_INTERPCONCAT;
+               if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
+                   PL_bufptr += 2;
+                   PL_lex_state = LEX_INTERPCONCAT;
                }
                return ')';
            }
-           if (bufptr != bufend)
-               bufptr += 2;
-           lex_state = LEX_INTERPCONCAT;
+           if (PL_bufptr != PL_bufend)
+               PL_bufptr += 2;
+           PL_lex_state = LEX_INTERPCONCAT;
            return yylex();
        }
        else {
-           s = bufptr + 1;
+           s = PL_bufptr + 1;
            if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
                tmp = *s, *s = s[2], s[2] = tmp;        /* misordered... */
            if (strchr("LU", *s) &&
-               (strchr(lex_casestack, 'L') || strchr(lex_casestack, 'U')))
+               (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
            {
-               lex_casestack[--lex_casemods] = '\0';
+               PL_lex_casestack[--PL_lex_casemods] = '\0';
                return ')';
            }
-           if (lex_casemods > 10) {
-               char* newlb = Renew(lex_casestack, lex_casemods + 2, char);
-               if (newlb != lex_casestack) {
+           if (PL_lex_casemods > 10) {
+               char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
+               if (newlb != PL_lex_casestack) {
                    SAVEFREEPV(newlb);
-                   lex_casestack = newlb;
+                   PL_lex_casestack = newlb;
                }
            }
-           lex_casestack[lex_casemods++] = *s;
-           lex_casestack[lex_casemods] = '\0';
-           lex_state = LEX_INTERPCONCAT;
-           nextval[nexttoke].ival = 0;
+           PL_lex_casestack[PL_lex_casemods++] = *s;
+           PL_lex_casestack[PL_lex_casemods] = '\0';
+           PL_lex_state = LEX_INTERPCONCAT;
+           PL_nextval[PL_nexttoke].ival = 0;
            force_next('(');
            if (*s == 'l')
-               nextval[nexttoke].ival = OP_LCFIRST;
+               PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
            else if (*s == 'u')
-               nextval[nexttoke].ival = OP_UCFIRST;
+               PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
            else if (*s == 'L')
-               nextval[nexttoke].ival = OP_LC;
+               PL_nextval[PL_nexttoke].ival = OP_LC;
            else if (*s == 'U')
-               nextval[nexttoke].ival = OP_UC;
+               PL_nextval[PL_nexttoke].ival = OP_UC;
            else if (*s == 'Q')
-               nextval[nexttoke].ival = OP_QUOTEMETA;
+               PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
            else
                croak("panic: yylex");
-           bufptr = s + 1;
+           PL_bufptr = s + 1;
            force_next(FUNC);
-           if (lex_starts) {
-               s = bufptr;
-               lex_starts = 0;
+           if (PL_lex_starts) {
+               s = PL_bufptr;
+               PL_lex_starts = 0;
                Aop(OP_CONCAT);
            }
            else
@@ -1628,13 +1628,13 @@ yylex(void)
         return sublex_push();
 
     case LEX_INTERPSTART:
-       if (bufptr == bufend)
+       if (PL_bufptr == PL_bufend)
            return sublex_done();
-       expect = XTERM;
-       lex_dojoin = (*bufptr == '@');
-       lex_state = LEX_INTERPNORMAL;
-       if (lex_dojoin) {
-           nextval[nexttoke].ival = 0;
+       PL_expect = XTERM;
+       PL_lex_dojoin = (*PL_bufptr == '@');
+       PL_lex_state = LEX_INTERPNORMAL;
+       if (PL_lex_dojoin) {
+           PL_nextval[PL_nexttoke].ival = 0;
            force_next(',');
 #ifdef USE_THREADS
            nextval[nexttoke].opval = newOP(OP_THREADSV, 0);
@@ -1643,84 +1643,84 @@ yylex(void)
 #else
            force_ident("\"", '$');
 #endif /* USE_THREADS */
-           nextval[nexttoke].ival = 0;
+           PL_nextval[PL_nexttoke].ival = 0;
            force_next('$');
-           nextval[nexttoke].ival = 0;
+           PL_nextval[PL_nexttoke].ival = 0;
            force_next('(');
-           nextval[nexttoke].ival = OP_JOIN;   /* emulate join($", ...) */
+           PL_nextval[PL_nexttoke].ival = OP_JOIN;     /* emulate join($", ...) */
            force_next(FUNC);
        }
-       if (lex_starts++) {
-           s = bufptr;
+       if (PL_lex_starts++) {
+           s = PL_bufptr;
            Aop(OP_CONCAT);
        }
        return yylex();
 
     case LEX_INTERPENDMAYBE:
-       if (intuit_more(bufptr)) {
-           lex_state = LEX_INTERPNORMAL;       /* false alarm, more expr */
+       if (intuit_more(PL_bufptr)) {
+           PL_lex_state = LEX_INTERPNORMAL;    /* false alarm, more expr */
            break;
        }
        /* FALL THROUGH */
 
     case LEX_INTERPEND:
-       if (lex_dojoin) {
-           lex_dojoin = FALSE;
-           lex_state = LEX_INTERPCONCAT;
+       if (PL_lex_dojoin) {
+           PL_lex_dojoin = FALSE;
+           PL_lex_state = LEX_INTERPCONCAT;
            return ')';
        }
        /* FALLTHROUGH */
     case LEX_INTERPCONCAT:
 #ifdef DEBUGGING
-       if (lex_brackets)
+       if (PL_lex_brackets)
            croak("panic: INTERPCONCAT");
 #endif
-       if (bufptr == bufend)
+       if (PL_bufptr == PL_bufend)
            return sublex_done();
 
-       if (SvIVX(linestr) == '\'') {
-           SV *sv = newSVsv(linestr);
-           if (!lex_inpat)
+       if (SvIVX(PL_linestr) == '\'') {
+           SV *sv = newSVsv(PL_linestr);
+           if (!PL_lex_inpat)
                sv = tokeq(sv);
-           else if ( hints & HINT_NEW_RE )
+           else if ( PL_hints & HINT_NEW_RE )
                sv = new_constant(NULL, 0, "qr", sv, sv, "q");
            yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
-           s = bufend;
+           s = PL_bufend;
        }
        else {
-           s = scan_const(bufptr);
+           s = scan_const(PL_bufptr);
            if (*s == '\\')
-               lex_state = LEX_INTERPCASEMOD;
+               PL_lex_state = LEX_INTERPCASEMOD;
            else
-               lex_state = LEX_INTERPSTART;
+               PL_lex_state = LEX_INTERPSTART;
        }
 
-       if (s != bufptr) {
-           nextval[nexttoke] = yylval;
-           expect = XTERM;
+       if (s != PL_bufptr) {
+           PL_nextval[PL_nexttoke] = yylval;
+           PL_expect = XTERM;
            force_next(THING);
-           if (lex_starts++)
+           if (PL_lex_starts++)
                Aop(OP_CONCAT);
            else {
-               bufptr = s;
+               PL_bufptr = s;
                return yylex();
            }
        }
 
        return yylex();
     case LEX_FORMLINE:
-       lex_state = LEX_NORMAL;
-       s = scan_formline(bufptr);
-       if (!lex_formbrack)
+       PL_lex_state = LEX_NORMAL;
+       s = scan_formline(PL_bufptr);
+       if (!PL_lex_formbrack)
            goto rightbracket;
        OPERATOR(';');
     }
 
-    s = bufptr;
-    oldoldbufptr = oldbufptr;
-    oldbufptr = s;
+    s = PL_bufptr;
+    PL_oldoldbufptr = PL_oldbufptr;
+    PL_oldbufptr = s;
     DEBUG_p( {
-       PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[expect], s);
+       PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
     } )
 
   retry:
@@ -1731,129 +1731,129 @@ yylex(void)
     case 26:
        goto fake_eof;                  /* emulate EOF on ^D or ^Z */
     case 0:
-       if (!rsfp) {
-           last_uni = 0;
-           last_lop = 0;
-           if (lex_brackets)
+       if (!PL_rsfp) {
+           PL_last_uni = 0;
+           PL_last_lop = 0;
+           if (PL_lex_brackets)
                yyerror("Missing right bracket");
            TOKEN(0);
        }
-       if (s++ < bufend)
+       if (s++ < PL_bufend)
            goto retry;                 /* ignore stray nulls */
-       last_uni = 0;
-       last_lop = 0;
-       if (!in_eval && !preambled) {
-           preambled = TRUE;
-           sv_setpv(linestr,incl_perldb());
-           if (SvCUR(linestr))
-               sv_catpv(linestr,";");
-           if (preambleav){
-               while(AvFILLp(preambleav) >= 0) {
-                   SV *tmpsv = av_shift(preambleav);
-                   sv_catsv(linestr, tmpsv);
-                   sv_catpv(linestr, ";");
+       PL_last_uni = 0;
+       PL_last_lop = 0;
+       if (!PL_in_eval && !PL_preambled) {
+           PL_preambled = TRUE;
+           sv_setpv(PL_linestr,incl_perldb());
+           if (SvCUR(PL_linestr))
+               sv_catpv(PL_linestr,";");
+           if (PL_preambleav){
+               while(AvFILLp(PL_preambleav) >= 0) {
+                   SV *tmpsv = av_shift(PL_preambleav);
+                   sv_catsv(PL_linestr, tmpsv);
+                   sv_catpv(PL_linestr, ";");
                    sv_free(tmpsv);
                }
-               sv_free((SV*)preambleav);
-               preambleav = NULL;
+               sv_free((SV*)PL_preambleav);
+               PL_preambleav = NULL;
            }
-           if (minus_n || minus_p) {
-               sv_catpv(linestr, "LINE: while (<>) {");
-               if (minus_l)
-                   sv_catpv(linestr,"chomp;");
-               if (minus_a) {
+           if (PL_minus_n || PL_minus_p) {
+               sv_catpv(PL_linestr, "LINE: while (<>) {");
+               if (PL_minus_l)
+                   sv_catpv(PL_linestr,"chomp;");
+               if (PL_minus_a) {
                    GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
                    if (gv)
                        GvIMPORTED_AV_on(gv);
-                   if (minus_F) {
-                       if (strchr("/'\"", *splitstr)
-                             && strchr(splitstr + 1, *splitstr))
-                           sv_catpvf(linestr, "@F=split(%s);", splitstr);
+                   if (PL_minus_F) {
+                       if (strchr("/'\"", *PL_splitstr)
+                             && strchr(PL_splitstr + 1, *PL_splitstr))
+                           sv_catpvf(PL_linestr, "@F=split(%s);", PL_splitstr);
                        else {
                            char delim;
                            s = "'~#\200\1'"; /* surely one char is unused...*/
-                           while (s[1] && strchr(splitstr, *s))  s++;
+                           while (s[1] && strchr(PL_splitstr, *s))  s++;
                            delim = *s;
-                           sv_catpvf(linestr, "@F=split(%s%c",
+                           sv_catpvf(PL_linestr, "@F=split(%s%c",
                                      "q" + (delim == '\''), delim);
-                           for (s = splitstr; *s; s++) {
+                           for (s = PL_splitstr; *s; s++) {
                                if (*s == '\\')
-                                   sv_catpvn(linestr, "\\", 1);
-                               sv_catpvn(linestr, s, 1);
+                                   sv_catpvn(PL_linestr, "\\", 1);
+                               sv_catpvn(PL_linestr, s, 1);
                            }
-                           sv_catpvf(linestr, "%c);", delim);
+                           sv_catpvf(PL_linestr, "%c);", delim);
                        }
                    }
                    else
-                       sv_catpv(linestr,"@F=split(' ');");
+                       sv_catpv(PL_linestr,"@F=split(' ');");
                }
            }
-           sv_catpv(linestr, "\n");
-           oldoldbufptr = oldbufptr = s = linestart = SvPVX(linestr);
-           bufend = SvPVX(linestr) + SvCUR(linestr);
-           if (PERLDB_LINE && curstash != debstash) {
+           sv_catpv(PL_linestr, "\n");
+           PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
+           PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+           if (PERLDB_LINE && PL_curstash != PL_debstash) {
                SV *sv = NEWSV(85,0);
 
                sv_upgrade(sv, SVt_PVMG);
-               sv_setsv(sv,linestr);
-               av_store(GvAV(curcop->cop_filegv),(I32)curcop->cop_line,sv);
+               sv_setsv(sv,PL_linestr);
+               av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
            }
            goto retry;
        }
        do {
-           if ((s = filter_gets(linestr, rsfp, 0)) == Nullch) {
+           if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
              fake_eof:
-               if (rsfp) {
-                   if (preprocess && !in_eval)
-                       (void)PerlProc_pclose(rsfp);
-                   else if ((PerlIO *)rsfp == PerlIO_stdin())
-                       PerlIO_clearerr(rsfp);
+               if (PL_rsfp) {
+                   if (PL_preprocess && !PL_in_eval)
+                       (void)PerlProc_pclose(PL_rsfp);
+                   else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
+                       PerlIO_clearerr(PL_rsfp);
                    else
-                       (void)PerlIO_close(rsfp);
-                   rsfp = Nullfp;
+                       (void)PerlIO_close(PL_rsfp);
+                   PL_rsfp = Nullfp;
                }
-               if (!in_eval && (minus_n || minus_p)) {
-                   sv_setpv(linestr,minus_p ? ";}continue{print" : "");
-                   sv_catpv(linestr,";}");
-                   oldoldbufptr = oldbufptr = s = linestart = SvPVX(linestr);
-                   bufend = SvPVX(linestr) + SvCUR(linestr);
-                   minus_n = minus_p = 0;
+               if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
+                   sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
+                   sv_catpv(PL_linestr,";}");
+                   PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
+                   PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+                   PL_minus_n = PL_minus_p = 0;
                    goto retry;
                }
-               oldoldbufptr = oldbufptr = s = linestart = SvPVX(linestr);
-               sv_setpv(linestr,"");
+               PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
+               sv_setpv(PL_linestr,"");
                TOKEN(';');     /* not infinite loop because rsfp is NULL now */
            }
-           if (doextract) {
+           if (PL_doextract) {
                if (*s == '#' && s[1] == '!' && instr(s,"perl"))
-                   doextract = FALSE;
+                   PL_doextract = FALSE;
 
                /* Incest with pod. */
                if (*s == '=' && strnEQ(s, "=cut", 4)) {
-                   sv_setpv(linestr, "");
-                   oldoldbufptr = oldbufptr = s = linestart = SvPVX(linestr);
-                   bufend = SvPVX(linestr) + SvCUR(linestr);
-                   doextract = FALSE;
+                   sv_setpv(PL_linestr, "");
+                   PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
+                   PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+                   PL_doextract = FALSE;
                }
            }
            incline(s);
-       } while (doextract);
-       oldoldbufptr = oldbufptr = bufptr = linestart = s;
-       if (PERLDB_LINE && curstash != debstash) {
+       } while (PL_doextract);
+       PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
+       if (PERLDB_LINE && PL_curstash != PL_debstash) {
            SV *sv = NEWSV(85,0);
 
            sv_upgrade(sv, SVt_PVMG);
-           sv_setsv(sv,linestr);
-           av_store(GvAV(curcop->cop_filegv),(I32)curcop->cop_line,sv);
+           sv_setsv(sv,PL_linestr);
+           av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
        }
-       bufend = SvPVX(linestr) + SvCUR(linestr);
-       if (curcop->cop_line == 1) {
-           while (s < bufend && isSPACE(*s))
+       PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+       if (PL_curcop->cop_line == 1) {
+           while (s < PL_bufend && isSPACE(*s))
                s++;
            if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
                s++;
            d = Nullch;
-           if (!in_eval) {
+           if (!PL_in_eval) {
                if (*s == '#' && *(s+1) == '!')
                    d = s + 2;
 #ifdef ALTERNATE_SHEBANG
@@ -1922,34 +1922,34 @@ yylex(void)
                if (!d &&
                    *s == '#' &&
                    ipathend > ipath &&
-                   !minus_c &&
+                   !PL_minus_c &&
                    !instr(s,"indir") &&
-                   instr(origargv[0],"perl"))
+                   instr(PL_origargv[0],"perl"))
                {
                    char **newargv;
 
                    *ipathend = '\0';
                    s = ipathend + 1;
-                   while (s < bufend && isSPACE(*s))
+                   while (s < PL_bufend && isSPACE(*s))
                        s++;
-                   if (s < bufend) {
-                       Newz(899,newargv,origargc+3,char*);
+                   if (s < PL_bufend) {
+                       Newz(899,newargv,PL_origargc+3,char*);
                        newargv[1] = s;
-                       while (s < bufend && !isSPACE(*s))
+                       while (s < PL_bufend && !isSPACE(*s))
                            s++;
                        *s = '\0';
-                       Copy(origargv+1, newargv+2, origargc+1, char*);
+                       Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
                    }
                    else
-                       newargv = origargv;
+                       newargv = PL_origargv;
                    newargv[0] = ipath;
                    execv(ipath, newargv);
                    croak("Can't exec %s", ipath);
                }
                if (d) {
-                   U32 oldpdb = perldb;
-                   bool oldn = minus_n;
-                   bool oldp = minus_p;
+                   U32 oldpdb = PL_perldb;
+                   bool oldn = PL_minus_n;
+                   bool oldp = PL_minus_p;
 
                    while (*d && !isSPACE(*d)) d++;
                    while (*d == ' ' || *d == '\t') d++;
@@ -1965,25 +1965,25 @@ yylex(void)
                            d = moreswitches(d);
                        } while (d);
                        if (PERLDB_LINE && !oldpdb ||
-                           ( minus_n || minus_p ) && !(oldn || oldp) )
+                           ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
                              /* if we have already added "LINE: while (<>) {",
                                 we must not do it again */
                        {
-                           sv_setpv(linestr, "");
-                           oldoldbufptr = oldbufptr = s = linestart = SvPVX(linestr);
-                           bufend = SvPVX(linestr) + SvCUR(linestr);
-                           preambled = FALSE;
+                           sv_setpv(PL_linestr, "");
+                           PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
+                           PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+                           PL_preambled = FALSE;
                            if (PERLDB_LINE)
-                               (void)gv_fetchfile(origfilename);
+                               (void)gv_fetchfile(PL_origfilename);
                            goto retry;
                        }
                    }
                }
            }
        }
-       if (lex_formbrack && lex_brackets <= lex_formbrack) {
-           bufptr = s;
-           lex_state = LEX_FORMLINE;
+       if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
+           PL_bufptr = s;
+           PL_lex_state = LEX_FORMLINE;
            return yylex();
        }
        goto retry;
@@ -1998,39 +1998,39 @@ yylex(void)
        goto retry;
     case '#':
     case '\n':
-       if (lex_state != LEX_NORMAL || (in_eval && !rsfp)) {
-           d = bufend;
+       if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
+           d = PL_bufend;
            while (s < d && *s != '\n')
                s++;
            if (s < d)
                s++;
            incline(s);
-           if (lex_formbrack && lex_brackets <= lex_formbrack) {
-               bufptr = s;
-               lex_state = LEX_FORMLINE;
+           if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
+               PL_bufptr = s;
+               PL_lex_state = LEX_FORMLINE;
                return yylex();
            }
        }
        else {
            *s = '\0';
-           bufend = s;
+           PL_bufend = s;
        }
        goto retry;
     case '-':
        if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
            s++;
-           bufptr = s;
+           PL_bufptr = s;
            tmp = *s++;
 
-           while (s < bufend && (*s == ' ' || *s == '\t'))
+           while (s < PL_bufend && (*s == ' ' || *s == '\t'))
                s++;
 
            if (strnEQ(s,"=>",2)) {
-               s = force_word(bufptr,WORD,FALSE,FALSE,FALSE);
+               s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
                OPERATOR('-');          /* unary minus */
            }
-           last_uni = oldbufptr;
-           last_lop_op = OP_FTEREAD;   /* good enough */
+           PL_last_uni = PL_oldbufptr;
+           PL_last_lop_op = OP_FTEREAD;        /* good enough */
            switch (tmp) {
            case 'r': FTST(OP_FTEREAD);
            case 'w': FTST(OP_FTEWRITE);
@@ -2067,7 +2067,7 @@ yylex(void)
        tmp = *s++;
        if (*s == tmp) {
            s++;
-           if (expect == XOPERATOR)
+           if (PL_expect == XOPERATOR)
                TERM(POSTDEC);
            else
                OPERATOR(PREDEC);
@@ -2084,10 +2084,10 @@ yylex(void)
            else
                TERM(ARROW);
        }
-       if (expect == XOPERATOR)
+       if (PL_expect == XOPERATOR)
            Aop(OP_SUBTRACT);
        else {
-           if (isSPACE(*s) || !isSPACE(*bufptr))
+           if (isSPACE(*s) || !isSPACE(*PL_bufptr))
                check_uni();
            OPERATOR('-');              /* unary minus */
        }
@@ -2096,25 +2096,25 @@ yylex(void)
        tmp = *s++;
        if (*s == tmp) {
            s++;
-           if (expect == XOPERATOR)
+           if (PL_expect == XOPERATOR)
                TERM(POSTINC);
            else
                OPERATOR(PREINC);
        }
-       if (expect == XOPERATOR)
+       if (PL_expect == XOPERATOR)
            Aop(OP_ADD);
        else {
-           if (isSPACE(*s) || !isSPACE(*bufptr))
+           if (isSPACE(*s) || !isSPACE(*PL_bufptr))
                check_uni();
            OPERATOR('+');
        }
 
     case '*':
-       if (expect != XOPERATOR) {
-           s = scan_ident(s, bufend, tokenbuf, sizeof tokenbuf, TRUE);
-           expect = XOPERATOR;
-           force_ident(tokenbuf, '*');
-           if (!*tokenbuf)
+       if (PL_expect != XOPERATOR) {
+           s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
+           PL_expect = XOPERATOR;
+           force_ident(PL_tokenbuf, '*');
+           if (!*PL_tokenbuf)
                PREREF('*');
            TERM('*');
        }
@@ -2126,25 +2126,25 @@ yylex(void)
        Mop(OP_MULTIPLY);
 
     case '%':
-       if (expect == XOPERATOR) {
+       if (PL_expect == XOPERATOR) {
            ++s;
            Mop(OP_MODULO);
        }
-       tokenbuf[0] = '%';
-       s = scan_ident(s, bufend, tokenbuf + 1, sizeof tokenbuf - 1, TRUE);
-       if (!tokenbuf[1]) {
-           if (s == bufend)
+       PL_tokenbuf[0] = '%';
+       s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
+       if (!PL_tokenbuf[1]) {
+           if (s == PL_bufend)
                yyerror("Final % should be \\% or %name");
            PREREF('%');
        }
-       pending_ident = '%';
+       PL_pending_ident = '%';
        TERM('%');
 
     case '^':
        s++;
        BOop(OP_BIT_XOR);
     case '[':
-       lex_brackets++;
+       PL_lex_brackets++;
        /* FALL THROUGH */
     case '~':
     case ',':
@@ -2159,14 +2159,14 @@ yylex(void)
        OPERATOR(':');
     case '(':
        s++;
-       if (last_lop == oldoldbufptr || last_uni == oldoldbufptr)
-           oldbufptr = oldoldbufptr;           /* allow print(STDOUT 123) */
+       if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
+           PL_oldbufptr = PL_oldoldbufptr;             /* allow print(STDOUT 123) */
        else
-           expect = XTERM;
+           PL_expect = XTERM;
        TOKEN('(');
     case ';':
-       if (curcop->cop_line < copline)
-           copline = curcop->cop_line;
+       if (PL_curcop->cop_line < PL_copline)
+           PL_copline = PL_curcop->cop_line;
        tmp = *s++;
        OPERATOR(tmp);
     case ')':
@@ -2177,56 +2177,56 @@ yylex(void)
        TERM(tmp);
     case ']':
        s++;
-       if (lex_brackets <= 0)
+       if (PL_lex_brackets <= 0)
            yyerror("Unmatched right bracket");
        else
-           --lex_brackets;
-       if (lex_state == LEX_INTERPNORMAL) {
-           if (lex_brackets == 0) {
+           --PL_lex_brackets;
+       if (PL_lex_state == LEX_INTERPNORMAL) {
+           if (PL_lex_brackets == 0) {
                if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
-                   lex_state = LEX_INTERPEND;
+                   PL_lex_state = LEX_INTERPEND;
            }
        }
        TERM(']');
     case '{':
       leftbracket:
        s++;
-       if (lex_brackets > 100) {
-           char* newlb = Renew(lex_brackstack, lex_brackets + 1, char);
-           if (newlb != lex_brackstack) {
+       if (PL_lex_brackets > 100) {
+           char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
+           if (newlb != PL_lex_brackstack) {
                SAVEFREEPV(newlb);
-               lex_brackstack = newlb;
+               PL_lex_brackstack = newlb;
            }
        }
-       switch (expect) {
+       switch (PL_expect) {
        case XTERM:
-           if (lex_formbrack) {
+           if (PL_lex_formbrack) {
                s--;
                PRETERMBLOCK(DO);
            }
-           if (oldoldbufptr == last_lop)
-               lex_brackstack[lex_brackets++] = XTERM;
+           if (PL_oldoldbufptr == PL_last_lop)
+               PL_lex_brackstack[PL_lex_brackets++] = XTERM;
            else
-               lex_brackstack[lex_brackets++] = XOPERATOR;
+               PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
            OPERATOR(HASHBRACK);
        case XOPERATOR:
-           while (s < bufend && (*s == ' ' || *s == '\t'))
+           while (s < PL_bufend && (*s == ' ' || *s == '\t'))
                s++;
            d = s;
-           tokenbuf[0] = '\0';
-           if (d < bufend && *d == '-') {
-               tokenbuf[0] = '-';
+           PL_tokenbuf[0] = '\0';
+           if (d < PL_bufend && *d == '-') {
+               PL_tokenbuf[0] = '-';
                d++;
-               while (d < bufend && (*d == ' ' || *d == '\t'))
+               while (d < PL_bufend && (*d == ' ' || *d == '\t'))
                    d++;
            }
-           if (d < bufend && isIDFIRST(*d)) {
-               d = scan_word(d, tokenbuf + 1, sizeof tokenbuf - 1,
+           if (d < PL_bufend && isIDFIRST(*d)) {
+               d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
                              FALSE, &len);
-               while (d < bufend && (*d == ' ' || *d == '\t'))
+               while (d < PL_bufend && (*d == ' ' || *d == '\t'))
                    d++;
                if (*d == '}') {
-                   char minus = (tokenbuf[0] == '-');
+                   char minus = (PL_tokenbuf[0] == '-');
                    s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
                    if (minus)
                        force_next('-');
@@ -2234,19 +2234,19 @@ yylex(void)
            }
            /* FALL THROUGH */
        case XBLOCK:
-           lex_brackstack[lex_brackets++] = XSTATE;
-           expect = XSTATE;
+           PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
+           PL_expect = XSTATE;
            break;
        case XTERMBLOCK:
-           lex_brackstack[lex_brackets++] = XOPERATOR;
-           expect = XSTATE;
+           PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
+           PL_expect = XSTATE;
            break;
        default: {
                char *t;
-               if (oldoldbufptr == last_lop)
-                   lex_brackstack[lex_brackets++] = XTERM;
+               if (PL_oldoldbufptr == PL_last_lop)
+                   PL_lex_brackstack[PL_lex_brackets++] = XTERM;
                else
-                   lex_brackstack[lex_brackets++] = XOPERATOR;
+                   PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
                s = skipspace(s);
                if (*s == '}')
                    OPERATOR(HASHBRACK);
@@ -2268,21 +2268,21 @@ yylex(void)
                t = s;
                if (*s == '\'' || *s == '"' || *s == '`') {
                    /* common case: get past first string, handling escapes */
-                   for (t++; t < bufend && *t != *s;)
+                   for (t++; t < PL_bufend && *t != *s;)
                        if (*t++ == '\\' && (*t == '\\' || *t == *s))
                            t++;
                    t++;
                }
                else if (*s == 'q') {
-                   if (++t < bufend
+                   if (++t < PL_bufend
                        && (!isALNUM(*t)
-                           || ((*t == 'q' || *t == 'x') && ++t < bufend
+                           || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
                                && !isALNUM(*t)))) {
                        char *tmps;
                        char open, close, term;
                        I32 brackets = 1;
 
-                       while (t < bufend && isSPACE(*t))
+                       while (t < PL_bufend && isSPACE(*t))
                            t++;
                        term = *t;
                        open = term;
@@ -2290,15 +2290,15 @@ yylex(void)
                            term = tmps[5];
                        close = term;
                        if (open == close)
-                           for (t++; t < bufend; t++) {
-                               if (*t == '\\' && t+1 < bufend && open != '\\')
+                           for (t++; t < PL_bufend; t++) {
+                               if (*t == '\\' && t+1 < PL_bufend && open != '\\')
                                    t++;
                                else if (*t == open)
                                    break;
                            }
                        else
-                           for (t++; t < bufend; t++) {
-                               if (*t == '\\' && t+1 < bufend)
+                           for (t++; t < PL_bufend; t++) {
+                               if (*t == '\\' && t+1 < PL_bufend)
                                    t++;
                                else if (*t == close && --brackets <= 0)
                                    break;
@@ -2309,53 +2309,53 @@ yylex(void)
                    t++;
                }
                else if (isALPHA(*s)) {
-                   for (t++; t < bufend && isALNUM(*t); t++) ;
+                   for (t++; t < PL_bufend && isALNUM(*t); t++) ;
                }
-               while (t < bufend && isSPACE(*t))
+               while (t < PL_bufend && isSPACE(*t))
                    t++;
                /* if comma follows first term, call it an anon hash */
                /* XXX it could be a comma expression with loop modifiers */
-               if (t < bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
+               if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
                                   || (*t == '=' && t[1] == '>')))
                    OPERATOR(HASHBRACK);
-               if (expect == XREF)
-                   expect = XTERM;
+               if (PL_expect == XREF)
+                   PL_expect = XTERM;
                else {
-                   lex_brackstack[lex_brackets-1] = XSTATE;
-                   expect = XSTATE;
+                   PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
+                   PL_expect = XSTATE;
                }
            }
            break;
        }
-       yylval.ival = curcop->cop_line;
+       yylval.ival = PL_curcop->cop_line;
        if (isSPACE(*s) || *s == '#')
-           copline = NOLINE;   /* invalidate current command line number */
+           PL_copline = NOLINE;   /* invalidate current command line number */
        TOKEN('{');
     case '}':
       rightbracket:
        s++;
-       if (lex_brackets <= 0)
+       if (PL_lex_brackets <= 0)
            yyerror("Unmatched right bracket");
        else
-           expect = (expectation)lex_brackstack[--lex_brackets];
-       if (lex_brackets < lex_formbrack)
-           lex_formbrack = 0;
-       if (lex_state == LEX_INTERPNORMAL) {
-           if (lex_brackets == 0) {
-               if (lex_fakebrack) {
-                   lex_state = LEX_INTERPEND;
-                   bufptr = s;
+           PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
+       if (PL_lex_brackets < PL_lex_formbrack)
+           PL_lex_formbrack = 0;
+       if (PL_lex_state == LEX_INTERPNORMAL) {
+           if (PL_lex_brackets == 0) {
+               if (PL_lex_fakebrack) {
+                   PL_lex_state = LEX_INTERPEND;
+                   PL_bufptr = s;
                    return yylex();             /* ignore fake brackets */
                }
                if (*s == '-' && s[1] == '>')
-                   lex_state = LEX_INTERPENDMAYBE;
+                   PL_lex_state = LEX_INTERPENDMAYBE;
                else if (*s != '[' && *s != '{')
-                   lex_state = LEX_INTERPEND;
+                   PL_lex_state = LEX_INTERPEND;
            }
        }
-       if (lex_brackets < lex_fakebrack) {
-           bufptr = s;
-           lex_fakebrack = 0;
+       if (PL_lex_brackets < PL_lex_fakebrack) {
+           PL_bufptr = s;
+           PL_lex_fakebrack = 0;
            return yylex();             /* ignore fake brackets */
        }
        force_next('}');
@@ -2366,19 +2366,19 @@ yylex(void)
        if (tmp == '&')
            AOPERATOR(ANDAND);
        s--;
-       if (expect == XOPERATOR) {
-           if (dowarn && isALPHA(*s) && bufptr == linestart) {
-               curcop->cop_line--;
+       if (PL_expect == XOPERATOR) {
+           if (PL_dowarn && isALPHA(*s) && PL_bufptr == PL_linestart) {
+               PL_curcop->cop_line--;
                warn(warn_nosemi);
-               curcop->cop_line++;
+               PL_curcop->cop_line++;
            }
            BAop(OP_BIT_AND);
        }
 
-       s = scan_ident(s - 1, bufend, tokenbuf, sizeof tokenbuf, TRUE);
-       if (*tokenbuf) {
-           expect = XOPERATOR;
-           force_ident(tokenbuf, '&');
+       s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
+       if (*PL_tokenbuf) {
+           PL_expect = XOPERATOR;
+           force_ident(PL_tokenbuf, '&');
        }
        else
            PREREF('&');
@@ -2401,14 +2401,14 @@ yylex(void)
            OPERATOR(',');
        if (tmp == '~')
            PMop(OP_MATCH);
-       if (dowarn && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
+       if (PL_dowarn && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
            warn("Reversed %c= operator",(int)tmp);
        s--;
-       if (expect == XSTATE && isALPHA(tmp) &&
-               (s == linestart+1 || s[-2] == '\n') )
+       if (PL_expect == XSTATE && isALPHA(tmp) &&
+               (s == PL_linestart+1 || s[-2] == '\n') )
        {
-           if (in_eval && !rsfp) {
-               d = bufend;
+           if (PL_in_eval && !PL_rsfp) {
+               d = PL_bufend;
                while (s < d) {
                    if (*s++ == '\n') {
                        incline(s);
@@ -2425,16 +2425,16 @@ yylex(void)
                }
                goto retry;
            }
-           s = bufend;
-           doextract = TRUE;
+           s = PL_bufend;
+           PL_doextract = TRUE;
            goto retry;
        }
-       if (lex_brackets < lex_formbrack) {
+       if (PL_lex_brackets < PL_lex_formbrack) {
            char *t;
            for (t = s; *t == ' ' || *t == '\t'; t++) ;
            if (*t == '\n' || *t == '#') {
                s--;
-               expect = XBLOCK;
+               PL_expect = XBLOCK;
                goto leftbracket;
            }
        }
@@ -2450,7 +2450,7 @@ yylex(void)
        s--;
        OPERATOR('!');
     case '<':
-       if (expect != XOPERATOR) {
+       if (PL_expect != XOPERATOR) {
            if (s[1] != '<' && !strchr(s,'>'))
                check_uni();
            if (s[1] == '<')
@@ -2485,72 +2485,72 @@ yylex(void)
     case '$':
        CLINE;
 
-       if (expect == XOPERATOR) {
-           if (lex_formbrack && lex_brackets == lex_formbrack) {
-               expect = XTERM;
+       if (PL_expect == XOPERATOR) {
+           if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
+               PL_expect = XTERM;
                depcom();
                return ','; /* grandfather non-comma-format format */
            }
        }
 
        if (s[1] == '#' && (isALPHA(s[2]) || strchr("_{$:", s[2]))) {
-           if (expect == XOPERATOR)
-               no_op("Array length", bufptr);
-           tokenbuf[0] = '@';
-           s = scan_ident(s + 1, bufend, tokenbuf + 1, sizeof tokenbuf - 1,
+           if (PL_expect == XOPERATOR)
+               no_op("Array length", PL_bufptr);
+           PL_tokenbuf[0] = '@';
+           s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
                           FALSE);
-           if (!tokenbuf[1])
+           if (!PL_tokenbuf[1])
                PREREF(DOLSHARP);
-           expect = XOPERATOR;
-           pending_ident = '#';
+           PL_expect = XOPERATOR;
+           PL_pending_ident = '#';
            TOKEN(DOLSHARP);
        }
 
-       if (expect == XOPERATOR)
-           no_op("Scalar", bufptr);
-       tokenbuf[0] = '$';
-       s = scan_ident(s, bufend, tokenbuf + 1, sizeof tokenbuf - 1, FALSE);
-       if (!tokenbuf[1]) {
-           if (s == bufend)
+       if (PL_expect == XOPERATOR)
+           no_op("Scalar", PL_bufptr);
+       PL_tokenbuf[0] = '$';
+       s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
+       if (!PL_tokenbuf[1]) {
+           if (s == PL_bufend)
                yyerror("Final $ should be \\$ or $name");
            PREREF('$');
        }
 
        /* This kludge not intended to be bulletproof. */
-       if (tokenbuf[1] == '[' && !tokenbuf[2]) {
+       if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
            yylval.opval = newSVOP(OP_CONST, 0,
-                                  newSViv((IV)compiling.cop_arybase));
+                                  newSViv((IV)PL_compiling.cop_arybase));
            yylval.opval->op_private = OPpCONST_ARYBASE;
            TERM(THING);
        }
 
        d = s;
-       if (lex_state == LEX_NORMAL)
+       if (PL_lex_state == LEX_NORMAL)
            s = skipspace(s);
 
-       if ((expect != XREF || oldoldbufptr == last_lop) && intuit_more(s)) {
+       if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
            char *t;
            if (*s == '[') {
-               tokenbuf[0] = '@';
-               if (dowarn) {
+               PL_tokenbuf[0] = '@';
+               if (PL_dowarn) {
                    for(t = s + 1;
                        isSPACE(*t) || isALNUM(*t) || *t == '$';
                        t++) ;
                    if (*t++ == ',') {
-                       bufptr = skipspace(bufptr);
-                       while (t < bufend && *t != ']')
+                       PL_bufptr = skipspace(PL_bufptr);
+                       while (t < PL_bufend && *t != ']')
                            t++;
                        warn("Multidimensional syntax %.*s not supported",
-                            (t - bufptr) + 1, bufptr);
+                            (t - PL_bufptr) + 1, PL_bufptr);
                    }
                }
            }
            else if (*s == '{') {
-               tokenbuf[0] = '%';
-               if (dowarn && strEQ(tokenbuf+1, "SIG") &&
+               PL_tokenbuf[0] = '%';
+               if (PL_dowarn && strEQ(PL_tokenbuf+1, "SIG") &&
                    (t = strchr(s, '}')) && (t = strchr(t, '=')))
                {
-                   char tmpbuf[sizeof tokenbuf];
+                   char tmpbuf[sizeof PL_tokenbuf];
                    STRLEN len;
                    for (t++; isSPACE(*t); t++) ;
                    if (isIDFIRST(*t)) {
@@ -2562,17 +2562,17 @@ yylex(void)
            }
        }
 
-       expect = XOPERATOR;
-       if (lex_state == LEX_NORMAL && isSPACE(*d)) {
-           bool islop = (last_lop == oldoldbufptr);
-           if (!islop || last_lop_op == OP_GREPSTART)
-               expect = XOPERATOR;
+       PL_expect = XOPERATOR;
+       if (PL_lex_state == LEX_NORMAL && isSPACE(*d)) {
+           bool islop = (PL_last_lop == PL_oldoldbufptr);
+           if (!islop || PL_last_lop_op == OP_GREPSTART)
+               PL_expect = XOPERATOR;
            else if (strchr("$@\"'`q", *s))
-               expect = XTERM;         /* e.g. print $fh "foo" */
+               PL_expect = XTERM;              /* e.g. print $fh "foo" */
            else if (strchr("&*<%", *s) && isIDFIRST(s[1]))
-               expect = XTERM;         /* e.g. print $fh &sub */
+               PL_expect = XTERM;              /* e.g. print $fh &sub */
            else if (isIDFIRST(*s)) {
-               char tmpbuf[sizeof tokenbuf];
+               char tmpbuf[sizeof PL_tokenbuf];
                scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
                if (tmp = keyword(tmpbuf, len)) {
                    /* binary operators exclude handle interpretations */
@@ -2587,69 +2587,69 @@ yylex(void)
                    case -KEY_cmp:
                        break;
                    default:
-                       expect = XTERM; /* e.g. print $fh length() */
+                       PL_expect = XTERM;      /* e.g. print $fh length() */
                        break;
                    }
                }
                else {
                    GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
                    if (gv && GvCVu(gv))
-                       expect = XTERM; /* e.g. print $fh subr() */
+                       PL_expect = XTERM;      /* e.g. print $fh subr() */
                }
            }
            else if (isDIGIT(*s))
-               expect = XTERM;         /* e.g. print $fh 3 */
+               PL_expect = XTERM;              /* e.g. print $fh 3 */
            else if (*s == '.' && isDIGIT(s[1]))
-               expect = XTERM;         /* e.g. print $fh .3 */
+               PL_expect = XTERM;              /* e.g. print $fh .3 */
            else if (strchr("/?-+", *s) && !isSPACE(s[1]))
-               expect = XTERM;         /* e.g. print $fh -1 */
+               PL_expect = XTERM;              /* e.g. print $fh -1 */
            else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]))
-               expect = XTERM;         /* print $fh <<"EOF" */
+               PL_expect = XTERM;              /* print $fh <<"EOF" */
        }
-       pending_ident = '$';
+       PL_pending_ident = '$';
        TOKEN('$');
 
     case '@':
-       if (expect == XOPERATOR)
+       if (PL_expect == XOPERATOR)
            no_op("Array", s);
-       tokenbuf[0] = '@';
-       s = scan_ident(s, bufend, tokenbuf + 1, sizeof tokenbuf - 1, FALSE);
-       if (!tokenbuf[1]) {
-           if (s == bufend)
+       PL_tokenbuf[0] = '@';
+       s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
+       if (!PL_tokenbuf[1]) {
+           if (s == PL_bufend)
                yyerror("Final @ should be \\@ or @name");
            PREREF('@');
        }
-       if (lex_state == LEX_NORMAL)
+       if (PL_lex_state == LEX_NORMAL)
            s = skipspace(s);
-       if ((expect != XREF || oldoldbufptr == last_lop) && intuit_more(s)) {
+       if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
            if (*s == '{')
-               tokenbuf[0] = '%';
+               PL_tokenbuf[0] = '%';
 
            /* Warn about @ where they meant $. */
-           if (dowarn) {
+           if (PL_dowarn) {
                if (*s == '[' || *s == '{') {
                    char *t = s + 1;
                    while (*t && (isALNUM(*t) || strchr(" \t$#+-'\"", *t)))
                        t++;
                    if (*t == '}' || *t == ']') {
                        t++;
-                       bufptr = skipspace(bufptr);
+                       PL_bufptr = skipspace(PL_bufptr);
                        warn("Scalar value %.*s better written as $%.*s",
-                           t-bufptr, bufptr, t-bufptr-1, bufptr+1);
+                           t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
                    }
                }
            }
        }
-       pending_ident = '@';
+       PL_pending_ident = '@';
        TERM('@');
 
     case '/':                  /* may either be division or pattern */
     case '?':                  /* may either be conditional or pattern */
-       if (expect != XOPERATOR) {
+       if (PL_expect != XOPERATOR) {
            /* Disable warning on "study /blah/" */
-           if (oldoldbufptr == last_uni 
-               && (*last_uni != 's' || s - last_uni < 5 
-                   || memNE(last_uni, "study", 5) || isALNUM(last_uni[5])))
+           if (PL_oldoldbufptr == PL_last_uni 
+               && (*PL_last_uni != 's' || s - PL_last_uni < 5 
+                   || memNE(PL_last_uni, "study", 5) || isALNUM(PL_last_uni[5])))
                check_uni();
            s = scan_pat(s,OP_MATCH);
            TERM(sublex_start());
@@ -2660,13 +2660,13 @@ yylex(void)
        OPERATOR(tmp);
 
     case '.':
-       if (lex_formbrack && lex_brackets == lex_formbrack && s[1] == '\n' &&
-               (s == linestart || s[-1] == '\n') ) {
-           lex_formbrack = 0;
-           expect = XSTATE;
+       if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack && s[1] == '\n' &&
+               (s == PL_linestart || s[-1] == '\n') ) {
+           PL_lex_formbrack = 0;
+           PL_expect = XSTATE;
            goto rightbracket;
        }
-       if (expect == XOPERATOR || !isDIGIT(s[1])) {
+       if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
            tmp = *s++;
            if (*s == tmp) {
                s++;
@@ -2678,7 +2678,7 @@ yylex(void)
                    yylval.ival = 0;
                OPERATOR(DOTDOT);
            }
-           if (expect != XOPERATOR)
+           if (PL_expect != XOPERATOR)
                check_uni();
            Aop(OP_CONCAT);
        }
@@ -2686,15 +2686,15 @@ yylex(void)
     case '0': case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
        s = scan_num(s);
-       if (expect == XOPERATOR)
+       if (PL_expect == XOPERATOR)
            no_op("Number",s);
        TERM(THING);
 
     case '\'':
        s = scan_str(s);
-       if (expect == XOPERATOR) {
-           if (lex_formbrack && lex_brackets == lex_formbrack) {
-               expect = XTERM;
+       if (PL_expect == XOPERATOR) {
+           if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
+               PL_expect = XTERM;
                depcom();
                return ',';     /* grandfather non-comma-format format */
            }
@@ -2708,9 +2708,9 @@ yylex(void)
 
     case '"':
        s = scan_str(s);
-       if (expect == XOPERATOR) {
-           if (lex_formbrack && lex_brackets == lex_formbrack) {
-               expect = XTERM;
+       if (PL_expect == XOPERATOR) {
+           if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
+               PL_expect = XTERM;
                depcom();
                return ',';     /* grandfather non-comma-format format */
            }
@@ -2720,7 +2720,7 @@ yylex(void)
        if (!s)
            missingterm((char*)0);
        yylval.ival = OP_CONST;
-       for (d = SvPV(lex_stuff, len); len; len--, d++) {
+       for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
            if (*d == '$' || *d == '@' || *d == '\\') {
                yylval.ival = OP_STRINGIFY;
                break;
@@ -2730,7 +2730,7 @@ yylex(void)
 
     case '`':
        s = scan_str(s);
-       if (expect == XOPERATOR)
+       if (PL_expect == XOPERATOR)
            no_op("Backticks",s);
        if (!s)
            missingterm((char*)0);
@@ -2740,14 +2740,14 @@ yylex(void)
 
     case '\\':
        s++;
-       if (dowarn && lex_inwhat && isDIGIT(*s))
+       if (PL_dowarn && PL_lex_inwhat && isDIGIT(*s))
            warn("Can't use \\%c to mean $%c in expression", *s, *s);
-       if (expect == XOPERATOR)
+       if (PL_expect == XOPERATOR)
            no_op("Backslash",s);
        OPERATOR(REFGEN);
 
     case 'x':
-       if (isDIGIT(s[1]) && expect == XOPERATOR) {
+       if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
            s++;
            Mop(OP_REPEAT);
        }
@@ -2785,39 +2785,39 @@ yylex(void)
        gv = Nullgv;
        gvp = 0;
 
-       bufptr = s;
-       s = scan_word(s, tokenbuf, sizeof tokenbuf, FALSE, &len);
+       PL_bufptr = s;
+       s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
 
        /* Some keywords can be followed by any delimiter, including ':' */
-       tmp = (len == 1 && strchr("msyq", tokenbuf[0]) ||
-              len == 2 && ((tokenbuf[0] == 't' && tokenbuf[1] == 'r') ||
-                           (tokenbuf[0] == 'q' &&
-                            strchr("qwxr", tokenbuf[1]))));
+       tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
+              len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
+                           (PL_tokenbuf[0] == 'q' &&
+                            strchr("qwxr", PL_tokenbuf[1]))));
 
        /* x::* is just a word, unless x is "CORE" */
-       if (!tmp && *s == ':' && s[1] == ':' && strNE(tokenbuf, "CORE"))
+       if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
            goto just_a_word;
 
        d = s;
-       while (d < bufend && isSPACE(*d))
+       while (d < PL_bufend && isSPACE(*d))
                d++;    /* no comments skipped here, or s### is misparsed */
 
        /* Is this a label? */
-       if (!tmp && expect == XSTATE
-             && d < bufend && *d == ':' && *(d + 1) != ':') {
+       if (!tmp && PL_expect == XSTATE
+             && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
            s = d + 1;
-           yylval.pval = savepv(tokenbuf);
+           yylval.pval = savepv(PL_tokenbuf);
            CLINE;
            TOKEN(LABEL);
        }
 
        /* Check for keywords */
-       tmp = keyword(tokenbuf, len);
+       tmp = keyword(PL_tokenbuf, len);
 
        /* Is this a word before a => operator? */
        if (strnEQ(d,"=>",2)) {
            CLINE;
-           yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(tokenbuf,0));
+           yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
            yylval.opval->op_private = OPpCONST_BARE;
            TERM(WORD);
        }
@@ -2825,9 +2825,9 @@ yylex(void)
        if (tmp < 0) {                  /* second-class keyword? */
            GV *ogv = Nullgv;   /* override (winner) */
            GV *hgv = Nullgv;   /* hidden (loser) */
-           if (expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
+           if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
                CV *cv;
-               if ((gv = gv_fetchpv(tokenbuf, FALSE, SVt_PVCV)) &&
+               if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
                    (cv = GvCVu(gv)))
                {
                    if (GvIMPORTED_CV(gv))
@@ -2836,8 +2836,8 @@ yylex(void)
                        hgv = gv;
                }
                if (!ogv &&
-                   (gvp = (GV**)hv_fetch(globalstash,tokenbuf,len,FALSE)) &&
-                   (gv = *gvp) != (GV*)&sv_undef &&
+                   (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
+                   (gv = *gvp) != (GV*)&PL_sv_undef &&
                    GvCVu(gv) && GvIMPORTED_CV(gv))
                {
                    ogv = gv;
@@ -2848,7 +2848,7 @@ yylex(void)
            }
            else if (gv && !gvp
                     && -tmp==KEY_lock  /* XXX generalizable kludge */
-                    && !hv_fetch(GvHVn(incgv), "Thread.pm", 9, FALSE))
+                    && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
            {
                tmp = 0;                /* any sub overrides "weak" keyword */
            }
@@ -2856,7 +2856,7 @@ yylex(void)
                tmp = -tmp;
                gv = Nullgv;
                gvp = 0;
-               if (dowarn && hgv)
+               if (PL_dowarn && hgv)
                    warn("Ambiguous call resolved as CORE::%s(), "
                         "qualify as such or use &", GvENAME(hgv));
            }
@@ -2868,25 +2868,25 @@ yylex(void)
        default:                        /* not a keyword */
          just_a_word: {
                SV *sv;
-               char lastchar = (bufptr == oldoldbufptr ? 0 : bufptr[-1]);
+               char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
 
                /* Get the rest if it looks like a package qualifier */
 
                if (*s == '\'' || *s == ':' && s[1] == ':') {
                    STRLEN morelen;
-                   s = scan_word(s, tokenbuf + len, sizeof tokenbuf - len,
+                   s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
                                  TRUE, &morelen);
                    if (!morelen)
-                       croak("Bad name after %s%s", tokenbuf,
+                       croak("Bad name after %s%s", PL_tokenbuf,
                                *s == '\'' ? "'" : "::");
                    len += morelen;
                }
 
-               if (expect == XOPERATOR) {
-                   if (bufptr == linestart) {
-                       curcop->cop_line--;
+               if (PL_expect == XOPERATOR) {
+                   if (PL_bufptr == PL_linestart) {
+                       PL_curcop->cop_line--;
                        warn(warn_nosemi);
-                       curcop->cop_line++;
+                       PL_curcop->cop_line++;
                    }
                    else
                        no_op("Bareword",s);
@@ -2897,30 +2897,30 @@ yylex(void)
                   (and a package name). */
 
                if (len > 2 &&
-                   tokenbuf[len - 2] == ':' && tokenbuf[len - 1] == ':')
+                   PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
                {
-                   if (dowarn && ! gv_fetchpv(tokenbuf, FALSE, SVt_PVHV))
+                   if (PL_dowarn && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
                        warn("Bareword \"%s\" refers to nonexistent package",
-                            tokenbuf);
+                            PL_tokenbuf);
                    len -= 2;
-                   tokenbuf[len] = '\0';
+                   PL_tokenbuf[len] = '\0';
                    gv = Nullgv;
                    gvp = 0;
                }
                else {
                    len = 0;
                    if (!gv)
-                       gv = gv_fetchpv(tokenbuf, FALSE, SVt_PVCV);
+                       gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
                }
 
                /* if we saw a global override before, get the right name */
 
                if (gvp) {
                    sv = newSVpv("CORE::GLOBAL::",14);
-                   sv_catpv(sv,tokenbuf);
+                   sv_catpv(sv,PL_tokenbuf);
                }
                else
-                   sv = newSVpv(tokenbuf,0);
+                   sv = newSVpv(PL_tokenbuf,0);
 
                /* Presume this is going to be a bareword of some sort. */
 
@@ -2935,15 +2935,15 @@ yylex(void)
 
                /* See if it's the indirect object for a list operator. */
 
-               if (oldoldbufptr &&
-                   oldoldbufptr < bufptr &&
-                   (oldoldbufptr == last_lop || oldoldbufptr == last_uni) &&
+               if (PL_oldoldbufptr &&
+                   PL_oldoldbufptr < PL_bufptr &&
+                   (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
                    /* NO SKIPSPACE BEFORE HERE! */
-                   (expect == XREF 
-                    || ((opargs[last_lop_op] >> OASHIFT)& 7) == OA_FILEREF
-                    || (last_lop_op == OP_ENTERSUB 
-                        && last_proto 
-                        && last_proto[last_proto[0] == ';' ? 1 : 0] == '*')) )
+                   (PL_expect == XREF 
+                    || ((opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF
+                    || (PL_last_lop_op == OP_ENTERSUB 
+                        && PL_last_proto 
+                        && PL_last_proto[PL_last_proto[0] == ';' ? 1 : 0] == '*')) )
                {
                    bool immediate_paren = *s == '(';
 
@@ -2958,17 +2958,17 @@ yylex(void)
                    /* If not a declared subroutine, it's an indirect object. */
                    /* (But it's an indir obj regardless for sort.) */
 
-                   if ((last_lop_op == OP_SORT ||
+                   if ((PL_last_lop_op == OP_SORT ||
                          (!immediate_paren && (!gv || !GvCVu(gv))) ) &&
-                        (last_lop_op != OP_MAPSTART && last_lop_op != OP_GREPSTART)){
-                       expect = (last_lop == oldoldbufptr) ? XTERM : XOPERATOR;
+                        (PL_last_lop_op != OP_MAPSTART && PL_last_lop_op != OP_GREPSTART)){
+                       PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
                        goto bareword;
                    }
                }
 
                /* If followed by a paren, it's certainly a subroutine. */
 
-               expect = XOPERATOR;
+               PL_expect = XOPERATOR;
                s = skipspace(s);
                if (*s == '(') {
                    CLINE;
@@ -2979,8 +2979,8 @@ yylex(void)
                            goto its_constant;
                        }
                    }
-                   nextval[nexttoke].opval = yylval.opval;
-                   expect = XOPERATOR;
+                   PL_nextval[PL_nexttoke].opval = yylval.opval;
+                   PL_expect = XOPERATOR;
                    force_next(WORD);
                    yylval.ival = 0;
                    TOKEN('&');
@@ -2989,8 +2989,8 @@ yylex(void)
                /* If followed by var or block, call it a method (unless sub) */
 
                if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
-                   last_lop = oldbufptr;
-                   last_lop_op = OP_METHOD;
+                   PL_last_lop = PL_oldbufptr;
+                   PL_last_lop_op = OP_METHOD;
                    PREBLOCK(METHOD);
                }
 
@@ -3005,9 +3005,9 @@ yylex(void)
                    CV* cv;
                    if (lastchar == '-')
                        warn("Ambiguous use of -%s resolved as -&%s()",
-                               tokenbuf, tokenbuf);
-                   last_lop = oldbufptr;
-                   last_lop_op = OP_ENTERSUB;
+                               PL_tokenbuf, PL_tokenbuf);
+                   PL_last_lop = PL_oldbufptr;
+                   PL_last_lop_op = OP_ENTERSUB;
                    /* Check for a constant sub */
                    cv = GvCV(gv);
                    if ((sv = cv_const_sv(cv))) {
@@ -3024,52 +3024,52 @@ yylex(void)
                    /* Is there a prototype? */
                    if (SvPOK(cv)) {
                        STRLEN len;
-                       last_proto = SvPV((SV*)cv, len);
+                       PL_last_proto = SvPV((SV*)cv, len);
                        if (!len)
                            TERM(FUNC0SUB);
-                       if (strEQ(last_proto, "$"))
+                       if (strEQ(PL_last_proto, "$"))
                            OPERATOR(UNIOPSUB);
-                       if (*last_proto == '&' && *s == '{') {
-                           sv_setpv(subname,"__ANON__");
+                       if (*PL_last_proto == '&' && *s == '{') {
+                           sv_setpv(PL_subname,"__ANON__");
                            PREBLOCK(LSTOPSUB);
                        }
                    } else
-                       last_proto = NULL;
-                   nextval[nexttoke].opval = yylval.opval;
-                   expect = XTERM;
+                       PL_last_proto = NULL;
+                   PL_nextval[PL_nexttoke].opval = yylval.opval;
+                   PL_expect = XTERM;
                    force_next(WORD);
                    TOKEN(NOAMP);
                }
 
-               if (hints & HINT_STRICT_SUBS &&
+               if (PL_hints & HINT_STRICT_SUBS &&
                    lastchar != '-' &&
                    strnNE(s,"->",2) &&
-                   last_lop_op != OP_TRUNCATE &&  /* S/F prototype in opcode.pl */
-                   last_lop_op != OP_ACCEPT &&
-                   last_lop_op != OP_PIPE_OP &&
-                   last_lop_op != OP_SOCKPAIR)
+                   PL_last_lop_op != OP_TRUNCATE &&  /* S/F prototype in opcode.pl */
+                   PL_last_lop_op != OP_ACCEPT &&
+                   PL_last_lop_op != OP_PIPE_OP &&
+                   PL_last_lop_op != OP_SOCKPAIR)
                {
                    warn(
                     "Bareword \"%s\" not allowed while \"strict subs\" in use",
-                       tokenbuf);
-                   ++error_count;
+                       PL_tokenbuf);
+                   ++PL_error_count;
                }
 
                /* Call it a bare word */
 
            bareword:
-               if (dowarn) {
+               if (PL_dowarn) {
                    if (lastchar != '-') {
-                       for (d = tokenbuf; *d && isLOWER(*d); d++) ;
+                       for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
                        if (!*d)
-                           warn(warn_reserved, tokenbuf);
+                           warn(warn_reserved, PL_tokenbuf);
                    }
                }
 
            safe_bareword:
                if (lastchar && strchr("*%&", lastchar)) {
                    warn("Operator or semicolon missing before %c%s",
-                       lastchar, tokenbuf);
+                       lastchar, PL_tokenbuf);
                    warn("Ambiguous use of %c resolved as operator %c",
                        lastchar, lastchar);
                }
@@ -3078,19 +3078,19 @@ yylex(void)
 
        case KEY___FILE__:
            yylval.opval = (OP*)newSVOP(OP_CONST, 0,
-                                       newSVsv(GvSV(curcop->cop_filegv)));
+                                       newSVsv(GvSV(PL_curcop->cop_filegv)));
            TERM(THING);
 
        case KEY___LINE__:
            yylval.opval = (OP*)newSVOP(OP_CONST, 0,
-                                   newSVpvf("%ld", (long)curcop->cop_line));
+                                   newSVpvf("%ld", (long)PL_curcop->cop_line));
            TERM(THING);
 
        case KEY___PACKAGE__:
            yylval.opval = (OP*)newSVOP(OP_CONST, 0,
-                                       (curstash
-                                        ? newSVsv(curstname)
-                                        : &sv_undef));
+                                       (PL_curstash
+                                        ? newSVsv(PL_curstname)
+                                        : &PL_sv_undef));
            TERM(THING);
 
        case KEY___DATA__:
@@ -3098,30 +3098,30 @@ yylex(void)
            GV *gv;
 
            /*SUPPRESS 560*/
-           if (rsfp && (!in_eval || tokenbuf[2] == 'D')) {
+           if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
                char *pname = "main";
-               if (tokenbuf[2] == 'D')
-                   pname = HvNAME(curstash ? curstash : defstash);
+               if (PL_tokenbuf[2] == 'D')
+                   pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
                gv = gv_fetchpv(form("%s::DATA", pname), TRUE, SVt_PVIO);
                GvMULTI_on(gv);
                if (!GvIO(gv))
                    GvIOp(gv) = newIO();
-               IoIFP(GvIOp(gv)) = rsfp;
+               IoIFP(GvIOp(gv)) = PL_rsfp;
 #if defined(HAS_FCNTL) && defined(F_SETFD)
                {
-                   int fd = PerlIO_fileno(rsfp);
+                   int fd = PerlIO_fileno(PL_rsfp);
                    fcntl(fd,F_SETFD,fd >= 3);
                }
 #endif
                /* Mark this internal pseudo-handle as clean */
                IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
-               if (preprocess)
+               if (PL_preprocess)
                    IoTYPE(GvIOp(gv)) = '|';
-               else if ((PerlIO*)rsfp == PerlIO_stdin())
+               else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
                    IoTYPE(GvIOp(gv)) = '-';
                else
                    IoTYPE(GvIOp(gv)) = '<';
-               rsfp = Nullfp;
+               PL_rsfp = Nullfp;
            }
            goto fake_eof;
        }
@@ -3131,8 +3131,8 @@ yylex(void)
        case KEY_BEGIN:
        case KEY_END:
        case KEY_INIT:
-           if (expect == XSTATE) {
-               s = bufptr;
+           if (PL_expect == XSTATE) {
+               s = PL_bufptr;
                goto really_sub;
            }
            goto just_a_word;
@@ -3141,8 +3141,8 @@ yylex(void)
            if (*s == ':' && s[1] == ':') {
                s += 2;
                d = s;
-               s = scan_word(s, tokenbuf, sizeof tokenbuf, FALSE, &len);
-               tmp = keyword(tokenbuf, len);
+               s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
+               tmp = keyword(PL_tokenbuf, len);
                if (tmp < 0)
                    tmp = -tmp;
                goto reserved_word;
@@ -3203,8 +3203,8 @@ yylex(void)
            LOP(OP_CRYPT,XTERM);
 
        case KEY_chmod:
-           if (dowarn) {
-               for (d = s; d < bufend && (isSPACE(*d) || *d == '('); d++) ;
+           if (PL_dowarn) {
+               for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
                if (*d != '0' && isDIGIT(*d))
                    yywarn("chmod: mode argument is missing initial 0");
            }
@@ -3234,7 +3234,7 @@ yylex(void)
            OPERATOR(DO);
 
        case KEY_die:
-           hints |= HINT_BLOCK_SCOPE;
+           PL_hints |= HINT_BLOCK_SCOPE;
            LOP(OP_DIE,XTERM);
 
        case KEY_defined:
@@ -3258,7 +3258,7 @@ yylex(void)
            PREBLOCK(ELSE);
 
        case KEY_elsif:
-           yylval.ival = curcop->cop_line;
+           yylval.ival = PL_curcop->cop_line;
            OPERATOR(ELSIF);
 
        case KEY_eq:
@@ -3272,7 +3272,7 @@ yylex(void)
 
        case KEY_eval:
            s = skipspace(s);
-           expect = (*s == '{') ? XTERMBLOCK : XTERM;
+           PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
            UNIBRACK(OP_ENTEREVAL);
 
        case KEY_eof:
@@ -3308,11 +3308,11 @@ yylex(void)
 
        case KEY_for:
        case KEY_foreach:
-           yylval.ival = curcop->cop_line;
+           yylval.ival = PL_curcop->cop_line;
            s = skipspace(s);
-           if (expect == XSTATE && isIDFIRST(*s)) {
+           if (PL_expect == XSTATE && isIDFIRST(*s)) {
                char *p = s;
-               if ((bufend - p) >= 3 &&
+               if ((PL_bufend - p) >= 3 &&
                    strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
                    p += 2;
                p = skipspace(p);
@@ -3438,7 +3438,7 @@ yylex(void)
            UNI(OP_HEX);
 
        case KEY_if:
-           yylval.ival = curcop->cop_line;
+           yylval.ival = PL_curcop->cop_line;
            OPERATOR(IF);
 
        case KEY_index:
@@ -3522,15 +3522,15 @@ yylex(void)
            LOP(OP_MSGSND,XTERM);
 
        case KEY_my:
-           in_my = TRUE;
+           PL_in_my = TRUE;
            s = skipspace(s);
            if (isIDFIRST(*s)) {
-               s = scan_word(s, tokenbuf, sizeof tokenbuf, TRUE, &len);
-               in_my_stash = gv_stashpv(tokenbuf, FALSE);
-               if (!in_my_stash) {
+               s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
+               PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
+               if (!PL_in_my_stash) {
                    char tmpbuf[1024];
-                   bufptr = s;
-                   sprintf(tmpbuf, "No such class %.1000s", tokenbuf);
+                   PL_bufptr = s;
+                   sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
                    yyerror(tmpbuf);
                }
            }
@@ -3544,7 +3544,7 @@ yylex(void)
            Eop(OP_SNE);
 
        case KEY_no:
-           if (expect != XSTATE)
+           if (PL_expect != XSTATE)
                yyerror("\"no\" not allowed in expression");
            s = force_word(s,WORD,FALSE,TRUE,FALSE);
            s = force_version(s);
@@ -3580,11 +3580,11 @@ yylex(void)
            LOP(OP_OPEN_DIR,XTERM);
 
        case KEY_print:
-           checkcomma(s,tokenbuf,"filehandle");
+           checkcomma(s,PL_tokenbuf,"filehandle");
            LOP(OP_PRINT,XREF);
 
        case KEY_printf:
-           checkcomma(s,tokenbuf,"filehandle");
+           checkcomma(s,PL_tokenbuf,"filehandle");
            LOP(OP_PRTF,XREF);
 
        case KEY_prototype:
@@ -3623,8 +3623,8 @@ yylex(void)
            s = scan_str(s);
            if (!s)
                missingterm((char*)0);
-           if (dowarn && SvLEN(lex_stuff)) {
-               d = SvPV_force(lex_stuff, len);
+           if (PL_dowarn && SvLEN(PL_lex_stuff)) {
+               d = SvPV_force(PL_lex_stuff, len);
                for (; len; --len, ++d) {
                    if (*d == ',') {
                        warn("Possible attempt to separate words with commas");
@@ -3637,19 +3637,19 @@ yylex(void)
                }
            }
            force_next(')');
-           nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, tokeq(lex_stuff));
-           lex_stuff = Nullsv;
+           PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, tokeq(PL_lex_stuff));
+           PL_lex_stuff = Nullsv;
            force_next(THING);
            force_next(',');
-           nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(" ",1));
+           PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(" ",1));
            force_next(THING);
            force_next('(');
            yylval.ival = OP_SPLIT;
            CLINE;
-           expect = XTERM;
-           bufptr = s;
-           last_lop = oldbufptr;
-           last_lop_op = OP_SPLIT;
+           PL_expect = XTERM;
+           PL_bufptr = s;
+           PL_last_lop = PL_oldbufptr;
+           PL_last_lop_op = OP_SPLIT;
            return FUNC;
 
        case KEY_qq:
@@ -3657,8 +3657,8 @@ yylex(void)
            if (!s)
                missingterm((char*)0);
            yylval.ival = OP_STRINGIFY;
-           if (SvIVX(lex_stuff) == '\'')
-               SvIVX(lex_stuff) = 0;   /* qq'$foo' should intepolate */
+           if (SvIVX(PL_lex_stuff) == '\'')
+               SvIVX(PL_lex_stuff) = 0;        /* qq'$foo' should intepolate */
            TERM(sublex_start());
 
        case KEY_qr:
@@ -3677,10 +3677,10 @@ yylex(void)
            OLDLOP(OP_RETURN);
 
        case KEY_require:
-           *tokenbuf = '\0';
+           *PL_tokenbuf = '\0';
            s = force_word(s,WORD,TRUE,TRUE,FALSE);
-           if (isIDFIRST(*tokenbuf))
-               gv_stashpvn(tokenbuf, strlen(tokenbuf), TRUE);
+           if (isIDFIRST(*PL_tokenbuf))
+               gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
            else if (*s == '<')
                yyerror("<> should be quotes");
            UNI(OP_REQUIRE);
@@ -3825,11 +3825,11 @@ yylex(void)
            LOP(OP_SOCKPAIR,XTERM);
 
        case KEY_sort:
-           checkcomma(s,tokenbuf,"subroutine name");
+           checkcomma(s,PL_tokenbuf,"subroutine name");
            s = skipspace(s);
            if (*s == ';' || *s == ')')         /* probably a close */
                croak("sort is now a reserved word");
-           expect = XTERM;
+           PL_expect = XTERM;
            s = force_word(s,WORD,TRUE,TRUE,FALSE);
            LOP(OP_SORT,XREF);
 
@@ -3852,7 +3852,7 @@ yylex(void)
            UNI(OP_STAT);
 
        case KEY_study:
-           sawstudy++;
+           PL_sawstudy++;
            UNI(OP_STUDY);
 
        case KEY_substr:
@@ -3864,28 +3864,28 @@ yylex(void)
            s = skipspace(s);
 
            if (isIDFIRST(*s) || *s == '\'' || *s == ':') {
-               char tmpbuf[sizeof tokenbuf];
-               expect = XBLOCK;
+               char tmpbuf[sizeof PL_tokenbuf];
+               PL_expect = XBLOCK;
                d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
                if (strchr(tmpbuf, ':'))
-                   sv_setpv(subname, tmpbuf);
+                   sv_setpv(PL_subname, tmpbuf);
                else {
-                   sv_setsv(subname,curstname);
-                   sv_catpvn(subname,"::",2);
-                   sv_catpvn(subname,tmpbuf,len);
+                   sv_setsv(PL_subname,PL_curstname);
+                   sv_catpvn(PL_subname,"::",2);
+                   sv_catpvn(PL_subname,tmpbuf,len);
                }
                s = force_word(s,WORD,FALSE,TRUE,TRUE);
                s = skipspace(s);
            }
            else {
-               expect = XTERMBLOCK;
-               sv_setpv(subname,"?");
+               PL_expect = XTERMBLOCK;
+               sv_setpv(PL_subname,"?");
            }
 
            if (tmp == KEY_format) {
                s = skipspace(s);
                if (*s == '=')
-                   lex_formbrack = lex_brackets + 1;
+                   PL_lex_formbrack = PL_lex_brackets + 1;
                OPERATOR(FORMAT);
            }
 
@@ -3895,36 +3895,36 @@ yylex(void)
 
                s = scan_str(s);
                if (!s) {
-                   if (lex_stuff)
-                       SvREFCNT_dec(lex_stuff);
-                   lex_stuff = Nullsv;
+                   if (PL_lex_stuff)
+                       SvREFCNT_dec(PL_lex_stuff);
+                   PL_lex_stuff = Nullsv;
                    croak("Prototype not terminated");
                }
                /* strip spaces */
-               d = SvPVX(lex_stuff);
+               d = SvPVX(PL_lex_stuff);
                tmp = 0;
                for (p = d; *p; ++p) {
                    if (!isSPACE(*p))
                        d[tmp++] = *p;
                }
                d[tmp] = '\0';
-               SvCUR(lex_stuff) = tmp;
-
-               nexttoke++;
-               nextval[1] = nextval[0];
-               nexttype[1] = nexttype[0];
-               nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, lex_stuff);
-               nexttype[0] = THING;
-               if (nexttoke == 1) {
-                   lex_defer = lex_state;
-                   lex_expect = expect;
-                   lex_state = LEX_KNOWNEXT;
+               SvCUR(PL_lex_stuff) = tmp;
+
+               PL_nexttoke++;
+               PL_nextval[1] = PL_nextval[0];
+               PL_nexttype[1] = PL_nexttype[0];
+               PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
+               PL_nexttype[0] = THING;
+               if (PL_nexttoke == 1) {
+                   PL_lex_defer = PL_lex_state;
+                   PL_lex_expect = PL_expect;
+                   PL_lex_state = LEX_KNOWNEXT;
                }
-               lex_stuff = Nullsv;
+               PL_lex_stuff = Nullsv;
            }
 
-           if (*SvPV(subname,na) == '?') {
-               sv_setpv(subname,"__ANON__");
+           if (*SvPV(PL_subname,PL_na) == '?') {
+               sv_setpv(PL_subname,"__ANON__");
                TOKEN(ANONSUB);
            }
            PREBLOCK(SUB);
@@ -3986,11 +3986,11 @@ yylex(void)
            UNI(OP_UNTIE);
 
        case KEY_until:
-           yylval.ival = curcop->cop_line;
+           yylval.ival = PL_curcop->cop_line;
            OPERATOR(UNTIL);
 
        case KEY_unless:
-           yylval.ival = curcop->cop_line;
+           yylval.ival = PL_curcop->cop_line;
            OPERATOR(UNLESS);
 
        case KEY_unlink:
@@ -4006,8 +4006,8 @@ yylex(void)
            LOP(OP_UTIME,XTERM);
 
        case KEY_umask:
-           if (dowarn) {
-               for (d = s; d < bufend && (isSPACE(*d) || *d == '('); d++) ;
+           if (PL_dowarn) {
+               for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
                if (*d != '0' && isDIGIT(*d))
                    yywarn("umask: argument is missing initial 0");
            }
@@ -4017,13 +4017,13 @@ yylex(void)
            LOP(OP_UNSHIFT,XTERM);
 
        case KEY_use:
-           if (expect != XSTATE)
+           if (PL_expect != XSTATE)
                yyerror("\"use\" not allowed in expression");
            s = skipspace(s);
            if(isDIGIT(*s)) {
                s = force_version(s);
                if(*s == ';' || (s = skipspace(s), *s == ';')) {
-                   nextval[nexttoke].opval = Nullop;
+                   PL_nextval[PL_nexttoke].opval = Nullop;
                    force_next(WORD);
                }
            }
@@ -4038,15 +4038,15 @@ yylex(void)
            UNI(OP_VALUES);
 
        case KEY_vec:
-           sawvec = TRUE;
+           PL_sawvec = TRUE;
            LOP(OP_VEC,XTERM);
 
        case KEY_while:
-           yylval.ival = curcop->cop_line;
+           yylval.ival = PL_curcop->cop_line;
            OPERATOR(WHILE);
 
        case KEY_warn:
-           hints |= HINT_BLOCK_SCOPE;
+           PL_hints |= HINT_BLOCK_SCOPE;
            LOP(OP_WARN,XTERM);
 
        case KEY_wait:
@@ -4063,7 +4063,7 @@ yylex(void)
            UNI(OP_ENTERWRITE);
 
        case KEY_x:
-           if (expect == XOPERATOR)
+           if (PL_expect == XOPERATOR)
                Mop(OP_REPEAT);
            check_uni();
            goto just_a_word;
@@ -4703,7 +4703,7 @@ checkcomma(register char *s, char *name, char *what)
 {
     char *w;
 
-    if (dowarn && *s == ' ' && s[1] == '(') {  /* XXX gotta be a better way */
+    if (PL_dowarn && *s == ' ' && s[1] == '(') {       /* XXX gotta be a better way */
        int level = 1;
        for (w = s+2; *w && level; w++) {
            if (*w == '(')
@@ -4716,17 +4716,17 @@ checkcomma(register char *s, char *name, char *what)
        if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
            warn("%s (...) interpreted as function",name);
     }
-    while (s < bufend && isSPACE(*s))
+    while (s < PL_bufend && isSPACE(*s))
        s++;
     if (*s == '(')
        s++;
-    while (s < bufend && isSPACE(*s))
+    while (s < PL_bufend && isSPACE(*s))
        s++;
     if (isIDFIRST(*s)) {
        w = s++;
        while (isALNUM(*s))
            s++;
-       while (s < bufend && isSPACE(*s))
+       while (s < PL_bufend && isSPACE(*s))
            s++;
        if (*s == ',') {
            int kw;
@@ -4744,7 +4744,7 @@ STATIC SV *
 new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type) 
 {
     dSP;
-    HV *table = GvHV(hintgv);           /* ^H */
+    HV *table = GvHV(PL_hintgv);                /* ^H */
     BINOP myop;
     SV *res;
     bool oldcatch = CATCH_GET;
@@ -4769,7 +4769,7 @@ new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
     if (type)
        typesv = sv_2mortal(newSVpv(type, 0));
     else
-       typesv = &sv_undef;
+       typesv = &PL_sv_undef;
     CATCH_SET(TRUE);
     Zero(&myop, 1, BINOP);
     myop.op_last = (OP *) &myop;
@@ -4780,7 +4780,7 @@ new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
     ENTER;
     SAVEOP();
     op = (OP *) &myop;
-    if (PERLDB_SUB && curstash != debstash)
+    if (PERLDB_SUB && PL_curstash != PL_debstash)
        op->op_private |= OPpENTERSUB_DB;
     PUTBACK;
     pp_pushmark(ARGS);
@@ -4844,8 +4844,8 @@ scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I3
     char *bracket = 0;
     char funny = *s++;
 
-    if (lex_brackets == 0)
-       lex_fakebrack = 0;
+    if (PL_lex_brackets == 0)
+       PL_lex_fakebrack = 0;
     if (isSPACE(*s))
        s = skipspace(s);
     d = dest;
@@ -4879,14 +4879,14 @@ scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I3
     *d = '\0';
     d = dest;
     if (*d) {
-       if (lex_state != LEX_NORMAL)
-           lex_state = LEX_INTERPENDMAYBE;
+       if (PL_lex_state != LEX_NORMAL)
+           PL_lex_state = LEX_INTERPENDMAYBE;
        return s;
     }
     if (*s == '$' && s[1] &&
       (isALNUM(s[1]) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
     {
-       if (isDIGIT(s[1]) && lex_state == LEX_INTERPNORMAL)
+       if (isDIGIT(s[1]) && PL_lex_state == LEX_INTERPNORMAL)
            deprecate("\"$$<digit>\" to mean \"${$}<digit>\"");
        else
            return s;
@@ -4921,24 +4921,24 @@ scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I3
            *d = '\0';
            while (s < send && (*s == ' ' || *s == '\t')) s++;
            if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
-               if (dowarn && keyword(dest, d - dest)) {
+               if (PL_dowarn && keyword(dest, d - dest)) {
                    char *brack = *s == '[' ? "[...]" : "{...}";
                    warn("Ambiguous use of %c{%s%s} resolved to %c%s%s",
                        funny, dest, brack, funny, dest, brack);
                }
-               lex_fakebrack = lex_brackets+1;
+               PL_lex_fakebrack = PL_lex_brackets+1;
                bracket++;
-               lex_brackstack[lex_brackets++] = XOPERATOR;
+               PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
                return s;
            }
        }
        if (*s == '}') {
            s++;
-           if (lex_state == LEX_INTERPNORMAL && !lex_brackets)
-               lex_state = LEX_INTERPEND;
+           if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
+               PL_lex_state = LEX_INTERPEND;
            if (funny == '#')
                funny = '@';
-           if (dowarn && lex_state == LEX_NORMAL &&
+           if (PL_dowarn && PL_lex_state == LEX_NORMAL &&
              (keyword(dest, d - dest) || perl_get_cv(dest, FALSE)))
                warn("Ambiguous use of %c{%s} resolved to %c%s",
                    funny, dest, funny, dest);
@@ -4948,8 +4948,8 @@ scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I3
            *dest = '\0';
        }
     }
-    else if (lex_state == LEX_INTERPNORMAL && !lex_brackets && !intuit_more(s))
-       lex_state = LEX_INTERPEND;
+    else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
+       PL_lex_state = LEX_INTERPEND;
     return s;
 }
 
@@ -4979,14 +4979,14 @@ scan_pat(char *start, I32 type)
 
     s = scan_str(start);
     if (!s) {
-       if (lex_stuff)
-           SvREFCNT_dec(lex_stuff);
-       lex_stuff = Nullsv;
+       if (PL_lex_stuff)
+           SvREFCNT_dec(PL_lex_stuff);
+       PL_lex_stuff = Nullsv;
        croak("Search pattern not terminated");
     }
 
     pm = (PMOP*)newPMOP(type, 0);
-    if (multi_open == '?')
+    if (PL_multi_open == '?')
        pm->op_pmflags |= PMf_ONCE;
     if(type == OP_QR) {
        while (*s && strchr("iomsx", *s))
@@ -4998,7 +4998,7 @@ scan_pat(char *start, I32 type)
     }
     pm->op_pmpermflags = pm->op_pmflags;
 
-    lex_op = (OP*)pm;
+    PL_lex_op = (OP*)pm;
     yylval.ival = OP_MATCH;
     return s;
 }
@@ -5016,27 +5016,27 @@ scan_subst(char *start)
     s = scan_str(start);
 
     if (!s) {
-       if (lex_stuff)
-           SvREFCNT_dec(lex_stuff);
-       lex_stuff = Nullsv;
+       if (PL_lex_stuff)
+           SvREFCNT_dec(PL_lex_stuff);
+       PL_lex_stuff = Nullsv;
        croak("Substitution pattern not terminated");
     }
 
-    if (s[-1] == multi_open)
+    if (s[-1] == PL_multi_open)
        s--;
 
-    first_start = multi_start;
+    first_start = PL_multi_start;
     s = scan_str(s);
     if (!s) {
-       if (lex_stuff)
-           SvREFCNT_dec(lex_stuff);
-       lex_stuff = Nullsv;
-       if (lex_repl)
-           SvREFCNT_dec(lex_repl);
-       lex_repl = Nullsv;
+       if (PL_lex_stuff)
+           SvREFCNT_dec(PL_lex_stuff);
+       PL_lex_stuff = Nullsv;
+       if (PL_lex_repl)
+           SvREFCNT_dec(PL_lex_repl);
+       PL_lex_repl = Nullsv;
        croak("Substitution replacement not terminated");
     }
-    multi_start = first_start; /* so whole substitution is taken together */
+    PL_multi_start = first_start;      /* so whole substitution is taken together */
 
     pm = (PMOP*)newPMOP(OP_SUBST, 0);
     while (*s) {
@@ -5057,15 +5057,15 @@ scan_subst(char *start)
        while (es-- > 0)
            sv_catpv(repl, es ? "eval " : "do ");
        sv_catpvn(repl, "{ ", 2);
-       sv_catsv(repl, lex_repl);
+       sv_catsv(repl, PL_lex_repl);
        sv_catpvn(repl, " };", 2);
        SvCOMPILED_on(repl);
-       SvREFCNT_dec(lex_repl);
-       lex_repl = repl;
+       SvREFCNT_dec(PL_lex_repl);
+       PL_lex_repl = repl;
     }
 
     pm->op_pmpermflags = pm->op_pmflags;
-    lex_op = (OP*)pm;
+    PL_lex_op = (OP*)pm;
     yylval.ival = OP_SUBST;
     return s;
 }
@@ -5084,22 +5084,22 @@ scan_trans(char *start)
 
     s = scan_str(start);
     if (!s) {
-       if (lex_stuff)
-           SvREFCNT_dec(lex_stuff);
-       lex_stuff = Nullsv;
+       if (PL_lex_stuff)
+           SvREFCNT_dec(PL_lex_stuff);
+       PL_lex_stuff = Nullsv;
        croak("Transliteration pattern not terminated");
     }
-    if (s[-1] == multi_open)
+    if (s[-1] == PL_multi_open)
        s--;
 
     s = scan_str(s);
     if (!s) {
-       if (lex_stuff)
-           SvREFCNT_dec(lex_stuff);
-       lex_stuff = Nullsv;
-       if (lex_repl)
-           SvREFCNT_dec(lex_repl);
-       lex_repl = Nullsv;
+       if (PL_lex_stuff)
+           SvREFCNT_dec(PL_lex_stuff);
+       PL_lex_stuff = Nullsv;
+       if (PL_lex_repl)
+           SvREFCNT_dec(PL_lex_repl);
+       PL_lex_repl = Nullsv;
        croak("Transliteration replacement not terminated");
     }
 
@@ -5118,7 +5118,7 @@ scan_trans(char *start)
     }
     o->op_private = Delete|squash|complement;
 
-    lex_op = o;
+    PL_lex_op = o;
     yylval.ival = OP_TRANS;
     return s;
 }
@@ -5135,20 +5135,20 @@ scan_heredoc(register char *s)
     register char *d;
     register char *e;
     char *peek;
-    int outer = (rsfp && !(lex_inwhat == OP_SCALAR));
+    int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
 
     s += 2;
-    d = tokenbuf;
-    e = tokenbuf + sizeof tokenbuf - 1;
+    d = PL_tokenbuf;
+    e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
     if (!outer)
        *d++ = '\n';
     for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
     if (*peek && strchr("`'\"",*peek)) {
        s = peek;
        term = *s++;
-       s = delimcpy(d, e, s, bufend, term, &len);
+       s = delimcpy(d, e, s, PL_bufend, term, &len);
        d += len;
-       if (s < bufend)
+       if (s < PL_bufend)
            s++;
     }
     else {
@@ -5163,17 +5163,17 @@ scan_heredoc(register char *s)
                *d++ = *s;
        }
     }
-    if (d >= tokenbuf + sizeof tokenbuf - 1)
+    if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
        croak("Delimiter for here document is too long");
     *d++ = '\n';
     *d = '\0';
-    len = d - tokenbuf;
+    len = d - PL_tokenbuf;
 #ifdef TMP_CRLF_PATCH
     d = strchr(s, '\r');
     if (d) {
        char *olds = s;
        s = d;
-       while (s < bufend) {
+       while (s < PL_bufend) {
            if (*s == '\r') {
                *d++ = '\n';
                if (*++s == '\n')
@@ -5187,14 +5187,14 @@ scan_heredoc(register char *s)
                *d++ = *s++;
        }
        *d = '\0';
-       bufend = d;
-       SvCUR_set(linestr, bufend - SvPVX(linestr));
+       PL_bufend = d;
+       SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
        s = olds;
     }
 #endif
     d = "\n";
-    if (outer || !(d=ninstr(s,bufend,d,d+1)))
-       herewas = newSVpv(s,bufend-s);
+    if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
+       herewas = newSVpv(s,PL_bufend-s);
     else
        s--, herewas = newSVpv(s,d-s);
     s += SvCUR(herewas);
@@ -5211,79 +5211,79 @@ scan_heredoc(register char *s)
     }
 
     CLINE;
-    multi_start = curcop->cop_line;
-    multi_open = multi_close = '<';
-    term = *tokenbuf;
+    PL_multi_start = PL_curcop->cop_line;
+    PL_multi_open = PL_multi_close = '<';
+    term = *PL_tokenbuf;
     if (!outer) {
        d = s;
-       while (s < bufend &&
-         (*s != term || memNE(s,tokenbuf,len)) ) {
+       while (s < PL_bufend &&
+         (*s != term || memNE(s,PL_tokenbuf,len)) ) {
            if (*s++ == '\n')
-               curcop->cop_line++;
+               PL_curcop->cop_line++;
        }
-       if (s >= bufend) {
-           curcop->cop_line = multi_start;
-           missingterm(tokenbuf);
+       if (s >= PL_bufend) {
+           PL_curcop->cop_line = PL_multi_start;
+           missingterm(PL_tokenbuf);
        }
        sv_setpvn(tmpstr,d+1,s-d);
        s += len - 1;
-       curcop->cop_line++;     /* the preceding stmt passes a newline */
+       PL_curcop->cop_line++;  /* the preceding stmt passes a newline */
 
-       sv_catpvn(herewas,s,bufend-s);
-       sv_setsv(linestr,herewas);
-       oldoldbufptr = oldbufptr = bufptr = s = linestart = SvPVX(linestr);
-       bufend = SvPVX(linestr) + SvCUR(linestr);
+       sv_catpvn(herewas,s,PL_bufend-s);
+       sv_setsv(PL_linestr,herewas);
+       PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
+       PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
     }
     else
        sv_setpvn(tmpstr,"",0);   /* avoid "uninitialized" warning */
-    while (s >= bufend) {      /* multiple line string? */
+    while (s >= PL_bufend) {   /* multiple line string? */
        if (!outer ||
-        !(oldoldbufptr = oldbufptr = s = linestart = filter_gets(linestr, rsfp, 0))) {
-           curcop->cop_line = multi_start;
-           missingterm(tokenbuf);
+        !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
+           PL_curcop->cop_line = PL_multi_start;
+           missingterm(PL_tokenbuf);
        }
-       curcop->cop_line++;
-       bufend = SvPVX(linestr) + SvCUR(linestr);
+       PL_curcop->cop_line++;
+       PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
 #ifdef TMP_CRLF_PATCH
-       if (bufend - linestart >= 2) {
-           if (bufend[-2] == '\r' || bufend[-2] == '\n') {
-               bufend[-2] = '\n';
-               bufend--;
-               SvCUR_set(linestr, bufend - SvPVX(linestr));
+       if (PL_bufend - PL_linestart >= 2) {
+           if (PL_bufend[-2] == '\r' || PL_bufend[-2] == '\n') {
+               PL_bufend[-2] = '\n';
+               PL_bufend--;
+               SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
            }
-           else if (bufend[-1] == '\r')
-               bufend[-1] = '\n';
+           else if (PL_bufend[-1] == '\r')
+               PL_bufend[-1] = '\n';
        }
-       else if (bufend - linestart == 1 && bufend[-1] == '\r')
-           bufend[-1] = '\n';
+       else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
+           PL_bufend[-1] = '\n';
 #endif
-       if (PERLDB_LINE && curstash != debstash) {
+       if (PERLDB_LINE && PL_curstash != PL_debstash) {
            SV *sv = NEWSV(88,0);
 
            sv_upgrade(sv, SVt_PVMG);
-           sv_setsv(sv,linestr);
-           av_store(GvAV(curcop->cop_filegv),
-             (I32)curcop->cop_line,sv);
+           sv_setsv(sv,PL_linestr);
+           av_store(GvAV(PL_curcop->cop_filegv),
+             (I32)PL_curcop->cop_line,sv);
        }
-       if (*s == term && memEQ(s,tokenbuf,len)) {
-           s = bufend - 1;
+       if (*s == term && memEQ(s,PL_tokenbuf,len)) {
+           s = PL_bufend - 1;
            *s = ' ';
-           sv_catsv(linestr,herewas);
-           bufend = SvPVX(linestr) + SvCUR(linestr);
+           sv_catsv(PL_linestr,herewas);
+           PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
        }
        else {
-           s = bufend;
-           sv_catsv(tmpstr,linestr);
+           s = PL_bufend;
+           sv_catsv(tmpstr,PL_linestr);
        }
     }
-    multi_end = curcop->cop_line;
+    PL_multi_end = PL_curcop->cop_line;
     s++;
     if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
        SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
        Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
     }
     SvREFCNT_dec(herewas);
-    lex_stuff = tmpstr;
+    PL_lex_stuff = tmpstr;
     yylval.ival = op_type;
     return s;
 }
@@ -5312,17 +5312,17 @@ scan_inputsymbol(char *start)
     register char *e;
     I32 len;
 
-    d = tokenbuf;                      /* start of temp holding space */
-    e = tokenbuf + sizeof tokenbuf;    /* end of temp holding space */
-    s = delimcpy(d, e, s + 1, bufend, '>', &len);      /* extract until > */
+    d = PL_tokenbuf;                   /* start of temp holding space */
+    e = PL_tokenbuf + sizeof PL_tokenbuf;      /* end of temp holding space */
+    s = delimcpy(d, e, s + 1, PL_bufend, '>', &len);   /* extract until > */
 
     /* die if we didn't have space for the contents of the <>,
        or if it didn't end
     */
 
-    if (len >= sizeof tokenbuf)
+    if (len >= sizeof PL_tokenbuf)
        croak("Excessively long <> operator");
-    if (s >= bufend)
+    if (s >= PL_bufend)
        croak("Unterminated <> operator");
 
     s++;
@@ -5346,7 +5346,7 @@ scan_inputsymbol(char *start)
        as nothing more than a string.
     */
 
-    if (d - tokenbuf != len) {
+    if (d - PL_tokenbuf != len) {
        yylval.ival = OP_GLOB;
        set_csh();
        s = scan_str(start);
@@ -5356,7 +5356,7 @@ scan_inputsymbol(char *start)
     }
     else {
        /* we're in a filehandle read situation */
-       d = tokenbuf;
+       d = PL_tokenbuf;
 
        /* turn <> into <ARGV> */
        if (!len)
@@ -5374,11 +5374,11 @@ scan_inputsymbol(char *start)
            if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
                OP *o = newOP(OP_PADSV, 0);
                o->op_targ = tmp;
-               lex_op = (OP*)newUNOP(OP_READLINE, 0, newUNOP(OP_RV2GV, 0, o));
+               PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newUNOP(OP_RV2GV, 0, o));
            }
            else {
                GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
-               lex_op = (OP*)newUNOP(OP_READLINE, 0,
+               PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
                                        newUNOP(OP_RV2GV, 0,
                                            newUNOP(OP_RV2SV, 0,
                                                newGVOP(OP_GV, 0, gv))));
@@ -5391,7 +5391,7 @@ scan_inputsymbol(char *start)
           (<Foo::BAR> or <FOO>) so build a simple readline OP */
        else {
            GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
-           lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
+           PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
            yylval.ival = OP_NULL;
        }
     }
@@ -5461,13 +5461,13 @@ scan_str(char *start)
     /* after skipping whitespace, the next character is the terminator */
     term = *s;
     /* mark where we are */
-    multi_start = curcop->cop_line;
-    multi_open = term;
+    PL_multi_start = PL_curcop->cop_line;
+    PL_multi_open = term;
 
     /* find corresponding closing delimiter */
     if (term && (tmps = strchr("([{< )]}> )]}>",term)))
        term = tmps[5];
-    multi_close = term;
+    PL_multi_close = term;
 
     /* create a new SV to hold the contents.  87 is leak category, I'm
        assuming.  79 is the SV's initial length.  What a random number. */
@@ -5480,18 +5480,18 @@ scan_str(char *start)
     s++;
     for (;;) {
        /* extend sv if need be */
-       SvGROW(sv, SvCUR(sv) + (bufend - s) + 1);
+       SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
        /* set 'to' to the next character in the sv's string */
        to = SvPVX(sv)+SvCUR(sv);
        
        /* if open delimiter is the close delimiter read unbridle */
-       if (multi_open == multi_close) {
-           for (; s < bufend; s++,to++) {
+       if (PL_multi_open == PL_multi_close) {
+           for (; s < PL_bufend; s++,to++) {
                /* embedded newlines increment the current line number */
-               if (*s == '\n' && !rsfp)
-                   curcop->cop_line++;
+               if (*s == '\n' && !PL_rsfp)
+                   PL_curcop->cop_line++;
                /* handle quoted delimiters */
-               if (*s == '\\' && s+1 < bufend && term != '\\') {
+               if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
                    if (s[1] == term)
                        s++;
                /* any other quotes are simply copied straight through */
@@ -5512,21 +5512,21 @@ scan_str(char *start)
        */
        else {
            /* read until we run out of string, or we find the terminator */
-           for (; s < bufend; s++,to++) {
+           for (; s < PL_bufend; s++,to++) {
                /* embedded newlines increment the line count */
-               if (*s == '\n' && !rsfp)
-                   curcop->cop_line++;
+               if (*s == '\n' && !PL_rsfp)
+                   PL_curcop->cop_line++;
                /* backslashes can escape the open or closing characters */
-               if (*s == '\\' && s+1 < bufend) {
-                   if ((s[1] == multi_open) || (s[1] == multi_close))
+               if (*s == '\\' && s+1 < PL_bufend) {
+                   if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))
                        s++;
                    else
                        *to++ = *s++;
                }
                /* allow nested opens and closes */
-               else if (*s == multi_close && --brackets <= 0)
+               else if (*s == PL_multi_close && --brackets <= 0)
                    break;
-               else if (*s == multi_open)
+               else if (*s == PL_multi_open)
                    brackets++;
                *to = *s;
            }
@@ -5539,7 +5539,7 @@ scan_str(char *start)
         * this next chunk reads more into the buffer if we're not done yet
         */
 
-       if (s < bufend) break;  /* handle case where we are done yet :-) */
+       if (s < PL_bufend) break;       /* handle case where we are done yet :-) */
 
 #ifdef TMP_CRLF_PATCH
        if (to - SvPVX(sv) >= 2) {
@@ -5558,32 +5558,32 @@ scan_str(char *start)
        /* if we're out of file, or a read fails, bail and reset the current
           line marker so we can report where the unterminated string began
        */
-       if (!rsfp ||
-        !(oldoldbufptr = oldbufptr = s = linestart = filter_gets(linestr, rsfp, 0))) {
+       if (!PL_rsfp ||
+        !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
            sv_free(sv);
-           curcop->cop_line = multi_start;
+           PL_curcop->cop_line = PL_multi_start;
            return Nullch;
        }
        /* we read a line, so increment our line counter */
-       curcop->cop_line++;
+       PL_curcop->cop_line++;
        
        /* update debugger info */
-       if (PERLDB_LINE && curstash != debstash) {
+       if (PERLDB_LINE && PL_curstash != PL_debstash) {
            SV *sv = NEWSV(88,0);
 
            sv_upgrade(sv, SVt_PVMG);
-           sv_setsv(sv,linestr);
-           av_store(GvAV(curcop->cop_filegv),
-             (I32)curcop->cop_line, sv);
+           sv_setsv(sv,PL_linestr);
+           av_store(GvAV(PL_curcop->cop_filegv),
+             (I32)PL_curcop->cop_line, sv);
        }
        
-       /* having changed the buffer, we must update bufend */
-       bufend = SvPVX(linestr) + SvCUR(linestr);
+       /* having changed the buffer, we must update PL_bufend */
+       PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
     }
     
     /* at this point, we have successfully read the delimited string */
 
-    multi_end = curcop->cop_line;
+    PL_multi_end = PL_curcop->cop_line;
     s++;
 
     /* if we allocated too much space, give some back */
@@ -5596,10 +5596,10 @@ scan_str(char *start)
        for this op
     */
     
-    if (lex_stuff)
-       lex_repl = sv;
+    if (PL_lex_stuff)
+       PL_lex_repl = sv;
     else
-       lex_stuff = sv;
+       PL_lex_stuff = sv;
     return s;
 }
 
@@ -5617,7 +5617,7 @@ scan_str(char *start)
   Underbars (_) are allowed in decimal numbers.  If -w is on,
   underbars before a decimal point must be at three digit intervals.
 
-  Like most scan_ routines, it uses the tokenbuf buffer to hold the
+  Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
   thing it reads.
 
   If it reads a number without a decimal point or an exponent, it will
@@ -5717,7 +5717,7 @@ scan_num(char *start)
                  digit:
                    n = u << shift;     /* make room for the digit */
                    if (!overflowed && (n >> shift) != u
-                       && !(hints & HINT_NEW_BINARY)) {
+                       && !(PL_hints & HINT_NEW_BINARY)) {
                        warn("Integer overflow in %s number",
                             (shift == 4) ? "hex" : "octal");
                        overflowed = TRUE;
@@ -5733,7 +5733,7 @@ scan_num(char *start)
          out:
            sv = NEWSV(92,0);
            sv_setuv(sv, u);
-           if ( hints & HINT_NEW_BINARY)
+           if ( PL_hints & HINT_NEW_BINARY)
                sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
        }
        break;
@@ -5745,8 +5745,8 @@ scan_num(char *start)
     case '1': case '2': case '3': case '4': case '5':
     case '6': case '7': case '8': case '9': case '.':
       decimal:
-       d = tokenbuf;
-       e = tokenbuf + sizeof tokenbuf - 6; /* room for various punctuation */
+       d = PL_tokenbuf;
+       e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
        floatit = FALSE;
 
        /* read next group of digits and _ and copy into d */
@@ -5755,7 +5755,7 @@ scan_num(char *start)
               if -w is on
            */
            if (*s == '_') {
-               if (dowarn && lastub && s - lastub != 3)
+               if (PL_dowarn && lastub && s - lastub != 3)
                    warn("Misplaced _ in number");
                lastub = ++s;
            }
@@ -5769,7 +5769,7 @@ scan_num(char *start)
        }
 
        /* final misplaced underbar check */
-       if (dowarn && lastub && s - lastub != 3)
+       if (PL_dowarn && lastub && s - lastub != 3)
            warn("Misplaced _ in number");
 
        /* read a decimal portion if there is one.  avoid
@@ -5819,7 +5819,7 @@ scan_num(char *start)
        sv = NEWSV(92,0);
        /* reset numeric locale in case we were earlier left in Swaziland */
        SET_NUMERIC_STANDARD();
-       value = atof(tokenbuf);
+       value = atof(PL_tokenbuf);
 
        /* 
           See if we can make do with an integer value without loss of
@@ -5836,8 +5836,8 @@ scan_num(char *start)
            sv_setiv(sv, tryiv);
        else
            sv_setnv(sv, value);
-       if ( floatit ? (hints & HINT_NEW_FLOAT) : (hints & HINT_NEW_INTEGER) )
-           sv = new_constant(tokenbuf, d - tokenbuf, 
+       if ( floatit ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) )
+           sv = new_constant(PL_tokenbuf, d - PL_tokenbuf, 
                              (floatit ? "float" : "integer"), sv, Nullsv, NULL);
        break;
     }
@@ -5865,13 +5865,13 @@ scan_formline(register char *s)
            if (*t == '\n')
                break;
        }
-       if (in_eval && !rsfp) {
+       if (PL_in_eval && !PL_rsfp) {
            eol = strchr(s,'\n');
            if (!eol++)
-               eol = bufend;
+               eol = PL_bufend;
        }
        else
-           eol = bufend = SvPVX(linestr) + SvCUR(linestr);
+           eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
        if (*s != '#') {
            for (t = s; t < eol; t++) {
                if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
@@ -5884,12 +5884,12 @@ scan_formline(register char *s)
            sv_catpvn(stuff, s, eol-s);
        }
        s = eol;
-       if (rsfp) {
-           s = filter_gets(linestr, rsfp, 0);
-           oldoldbufptr = oldbufptr = bufptr = linestart = SvPVX(linestr);
-           bufend = bufptr + SvCUR(linestr);
+       if (PL_rsfp) {
+           s = filter_gets(PL_linestr, PL_rsfp, 0);
+           PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
+           PL_bufend = PL_bufptr + SvCUR(PL_linestr);
            if (!s) {
-               s = bufptr;
+               s = PL_bufptr;
                yyerror("Format not terminated");
                break;
            }
@@ -5898,23 +5898,23 @@ scan_formline(register char *s)
     }
   enough:
     if (SvCUR(stuff)) {
-       expect = XTERM;
+       PL_expect = XTERM;
        if (needargs) {
-           lex_state = LEX_NORMAL;
-           nextval[nexttoke].ival = 0;
+           PL_lex_state = LEX_NORMAL;
+           PL_nextval[PL_nexttoke].ival = 0;
            force_next(',');
        }
        else
-           lex_state = LEX_FORMLINE;
-       nextval[nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
+           PL_lex_state = LEX_FORMLINE;
+       PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
        force_next(THING);
-       nextval[nexttoke].ival = OP_FORMLINE;
+       PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
        force_next(LSTOP);
     }
     else {
        SvREFCNT_dec(stuff);
-       lex_formbrack = 0;
-       bufptr = s;
+       PL_lex_formbrack = 0;
+       PL_bufptr = s;
     }
     return s;
 }
@@ -5923,8 +5923,8 @@ STATIC void
 set_csh(void)
 {
 #ifdef CSH
-    if (!cshlen)
-       cshlen = strlen(cshname);
+    if (!PL_cshlen)
+       PL_cshlen = strlen(PL_cshname);
 #endif
 }
 
@@ -5932,37 +5932,37 @@ I32
 start_subparse(I32 is_format, U32 flags)
 {
     dTHR;
-    I32 oldsavestack_ix = savestack_ix;
-    CV* outsidecv = compcv;
+    I32 oldsavestack_ix = PL_savestack_ix;
+    CV* outsidecv = PL_compcv;
     AV* comppadlist;
 
-    if (compcv) {
-       assert(SvTYPE(compcv) == SVt_PVCV);
+    if (PL_compcv) {
+       assert(SvTYPE(PL_compcv) == SVt_PVCV);
     }
-    save_I32(&subline);
-    save_item(subname);
-    SAVEI32(padix);
-    SAVESPTR(curpad);
-    SAVESPTR(comppad);
-    SAVESPTR(comppad_name);
-    SAVESPTR(compcv);
-    SAVEI32(comppad_name_fill);
-    SAVEI32(min_intro_pending);
-    SAVEI32(max_intro_pending);
-    SAVEI32(pad_reset_pending);
-
-    compcv = (CV*)NEWSV(1104,0);
-    sv_upgrade((SV *)compcv, is_format ? SVt_PVFM : SVt_PVCV);
-    CvFLAGS(compcv) |= flags;
-
-    comppad = newAV();
-    av_push(comppad, Nullsv);
-    curpad = AvARRAY(comppad);
-    comppad_name = newAV();
-    comppad_name_fill = 0;
-    min_intro_pending = 0;
-    padix = 0;
-    subline = curcop->cop_line;
+    save_I32(&PL_subline);
+    save_item(PL_subname);
+    SAVEI32(PL_padix);
+    SAVESPTR(PL_curpad);
+    SAVESPTR(PL_comppad);
+    SAVESPTR(PL_comppad_name);
+    SAVESPTR(PL_compcv);
+    SAVEI32(PL_comppad_name_fill);
+    SAVEI32(PL_min_intro_pending);
+    SAVEI32(PL_max_intro_pending);
+    SAVEI32(PL_pad_reset_pending);
+
+    PL_compcv = (CV*)NEWSV(1104,0);
+    sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
+    CvFLAGS(PL_compcv) |= flags;
+
+    PL_comppad = newAV();
+    av_push(PL_comppad, Nullsv);
+    PL_curpad = AvARRAY(PL_comppad);
+    PL_comppad_name = newAV();
+    PL_comppad_name_fill = 0;
+    PL_min_intro_pending = 0;
+    PL_padix = 0;
+    PL_subline = PL_curcop->cop_line;
 #ifdef USE_THREADS
     av_store(comppad_name, 0, newSVpv("@_", 2));
     curpad[0] = (SV*)newAV();
@@ -5971,11 +5971,11 @@ start_subparse(I32 is_format, U32 flags)
 
     comppadlist = newAV();
     AvREAL_off(comppadlist);
-    av_store(comppadlist, 0, (SV*)comppad_name);
-    av_store(comppadlist, 1, (SV*)comppad);
+    av_store(comppadlist, 0, (SV*)PL_comppad_name);
+    av_store(comppadlist, 1, (SV*)PL_comppad);
 
-    CvPADLIST(compcv) = comppadlist;
-    CvOUTSIDE(compcv) = (CV*)SvREFCNT_inc(outsidecv);
+    CvPADLIST(PL_compcv) = comppadlist;
+    CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
 #ifdef USE_THREADS
     CvOWNER(compcv) = 0;
     New(666, CvMUTEXP(compcv), 1, perl_mutex);
@@ -5989,10 +5989,10 @@ int
 yywarn(char *s)
 {
     dTHR;
-    --error_count;
-    in_eval |= 2;
+    --PL_error_count;
+    PL_in_eval |= 2;
     yyerror(s);
-    in_eval &= ~2;
+    PL_in_eval &= ~2;
     return 0;
 }
 
@@ -6005,29 +6005,29 @@ yyerror(char *s)
     int contlen = -1;
     SV *msg;
 
-    if (!yychar || (yychar == ';' && !rsfp))
+    if (!yychar || (yychar == ';' && !PL_rsfp))
        where = "at EOF";
-    else if (bufptr > oldoldbufptr && bufptr - oldoldbufptr < 200 &&
-      oldoldbufptr != oldbufptr && oldbufptr != bufptr) {
-       while (isSPACE(*oldoldbufptr))
-           oldoldbufptr++;
-       context = oldoldbufptr;
-       contlen = bufptr - oldoldbufptr;
+    else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
+      PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
+       while (isSPACE(*PL_oldoldbufptr))
+           PL_oldoldbufptr++;
+       context = PL_oldoldbufptr;
+       contlen = PL_bufptr - PL_oldoldbufptr;
     }
-    else if (bufptr > oldbufptr && bufptr - oldbufptr < 200 &&
-      oldbufptr != bufptr) {
-       while (isSPACE(*oldbufptr))
-           oldbufptr++;
-       context = oldbufptr;
-       contlen = bufptr - oldbufptr;
+    else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
+      PL_oldbufptr != PL_bufptr) {
+       while (isSPACE(*PL_oldbufptr))
+           PL_oldbufptr++;
+       context = PL_oldbufptr;
+       contlen = PL_bufptr - PL_oldbufptr;
     }
     else if (yychar > 255)
        where = "next token ???";
     else if ((yychar & 127) == 127) {
-       if (lex_state == LEX_NORMAL ||
-          (lex_state == LEX_KNOWNEXT && lex_defer == LEX_NORMAL))
+       if (PL_lex_state == LEX_NORMAL ||
+          (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
            where = "at end of line";
-       else if (lex_inpat)
+       else if (PL_lex_inpat)
            where = "within pattern";
        else
            where = "within string";
@@ -6044,27 +6044,27 @@ yyerror(char *s)
     }
     msg = sv_2mortal(newSVpv(s, 0));
     sv_catpvf(msg, " at %_ line %ld, ",
-             GvSV(curcop->cop_filegv), (long)curcop->cop_line);
+             GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
     if (context)
        sv_catpvf(msg, "near \"%.*s\"\n", contlen, context);
     else
        sv_catpvf(msg, "%s\n", where);
-    if (multi_start < multi_end && (U32)(curcop->cop_line - multi_end) <= 1) {
+    if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
        sv_catpvf(msg,
        "  (Might be a runaway multi-line %c%c string starting on line %ld)\n",
-               (int)multi_open,(int)multi_close,(long)multi_start);
-        multi_end = 0;
+               (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
+        PL_multi_end = 0;
     }
-    if (in_eval & 2)
+    if (PL_in_eval & 2)
        warn("%_", msg);
-    else if (in_eval)
+    else if (PL_in_eval)
        sv_catsv(ERRSV, msg);
     else
        PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
-    if (++error_count >= 10)
-       croak("%_ has too many errors.\n", GvSV(curcop->cop_filegv));
-    in_my = 0;
-    in_my_stash = Nullhv;
+    if (++PL_error_count >= 10)
+       croak("%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
+    PL_in_my = 0;
+    PL_in_my_stash = Nullhv;
     return 0;
 }
 
index ef4f5b3..bf03261 100644 (file)
@@ -15,26 +15,26 @@ isa_lookup(HV *stash, char *name, int len, int level)
     HV* hv = Nullhv;
 
     if (!stash)
-       return &sv_undef;
+       return &PL_sv_undef;
 
     if(strEQ(HvNAME(stash), name))
-       return &sv_yes;
+       return &PL_sv_yes;
 
     if (level > 100)
        croak("Recursive inheritance detected in package '%s'", HvNAME(stash));
 
     gvp = (GV**)hv_fetch(stash, "::ISA::CACHE::", 14, FALSE);
 
-    if (gvp && (gv = *gvp) != (GV*)&sv_undef && (hv = GvHV(gv))) {
+    if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (hv = GvHV(gv))) {
        SV* sv;
        SV** svp = (SV**)hv_fetch(hv, name, len, FALSE);
-       if (svp && (sv = *svp) != (SV*)&sv_undef)
+       if (svp && (sv = *svp) != (SV*)&PL_sv_undef)
            return sv;
     }
 
     gvp = (GV**)hv_fetch(stash,"ISA",3,FALSE);
     
-    if (gvp && (gv = *gvp) != (GV*)&sv_undef && (av = GvAV(gv))) {
+    if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
        if(!hv) {
            gvp = (GV**)hv_fetch(stash, "::ISA::CACHE::", 14, TRUE);
 
@@ -53,17 +53,17 @@ isa_lookup(HV *stash, char *name, int len, int level)
                SV* sv = *svp++;
                HV* basestash = gv_stashsv(sv, FALSE);
                if (!basestash) {
-                   if (dowarn)
+                   if (PL_dowarn)
                        warn("Can't locate package %s for @%s::ISA",
                            SvPVX(sv), HvNAME(stash));
                    continue;
                }
-               if(&sv_yes == isa_lookup(basestash, name, len, level + 1)) {
-                   (void)hv_store(hv,name,len,&sv_yes,0);
-                   return &sv_yes;
+               if(&PL_sv_yes == isa_lookup(basestash, name, len, level + 1)) {
+                   (void)hv_store(hv,name,len,&PL_sv_yes,0);
+                   return &PL_sv_yes;
                }
            }
-           (void)hv_store(hv,name,len,&sv_no,0);
+           (void)hv_store(hv,name,len,&PL_sv_no,0);
        }
     }
 
@@ -94,7 +94,7 @@ sv_derived_from(SV *sv, char *name)
     }
  
     return (type && strEQ(type,name)) ||
-            (stash && isa_lookup(stash, name, strlen(name), 0) == &sv_yes)
+            (stash && isa_lookup(stash, name, strlen(name), 0) == &PL_sv_yes)
         ? TRUE
         : FALSE ;
  
@@ -117,7 +117,7 @@ XS(XS_UNIVERSAL_isa)
        croak("Usage: UNIVERSAL::isa(reference, kind)");
 
     sv = ST(0);
-    name = (char *)SvPV(ST(1),na);
+    name = (char *)SvPV(ST(1),PL_na);
 
     ST(0) = boolSV(sv_derived_from(sv, name));
     XSRETURN(1);
@@ -136,8 +136,8 @@ XS(XS_UNIVERSAL_can)
        croak("Usage: UNIVERSAL::can(object-ref, method)");
 
     sv = ST(0);
-    name = (char *)SvPV(ST(1),na);
-    rv = &sv_undef;
+    name = (char *)SvPV(ST(1),PL_na);
+    rv = &PL_sv_undef;
 
     if(SvROK(sv)) {
         sv = (SV*)SvRV(sv);
@@ -181,20 +181,20 @@ XS(XS_UNIVERSAL_VERSION)
 
     gvp = pkg ? (GV**)hv_fetch(pkg,"VERSION",7,FALSE) : Null(GV**);
 
-    if (gvp && (gv = *gvp) != (GV*)&sv_undef && (sv = GvSV(gv))) {
+    if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (sv = GvSV(gv))) {
         SV *nsv = sv_newmortal();
         sv_setsv(nsv, sv);
         sv = nsv;
         undef = Nullch;
     }
     else {
-        sv = (SV*)&sv_undef;
+        sv = (SV*)&PL_sv_undef;
         undef = "(undef)";
     }
 
     if (items > 1 && (undef || (req = SvNV(ST(1)), req > SvNV(sv))))
        croak("%s version %s required--this is only version %s",
-             HvNAME(pkg), SvPV(ST(1),na), undef ? undef : SvPV(sv,na));
+             HvNAME(pkg), SvPV(ST(1),PL_na), undef ? undef : SvPV(sv,PL_na));
 
     ST(0) = sv;
 
diff --git a/util.c b/util.c
index eb52ee5..2c3f411 100644 (file)
--- a/util.c
+++ b/util.c
@@ -88,13 +88,13 @@ safemalloc(MEM_SIZE size)
 #endif
     ptr = PerlMem_malloc(size?size:1); /* malloc(0) is NASTY on our system */
 #if !(defined(I286) || defined(atarist))
-    DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%x: (%05d) malloc %ld bytes\n",ptr,an++,(long)size));
+    DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%x: (%05d) malloc %ld bytes\n",ptr,PL_an++,(long)size));
 #else
     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%lx: (%05d) malloc %ld bytes\n",ptr,an++,(long)size));
 #endif
     if (ptr != Nullch)
        return ptr;
-    else if (nomemok)
+    else if (PL_nomemok)
        return Nullch;
     else {
        PerlIO_puts(PerlIO_stderr(),no_mem) FLUSH;
@@ -136,8 +136,8 @@ saferealloc(Malloc_t where,MEM_SIZE size)
 
 #if !(defined(I286) || defined(atarist))
     DEBUG_m( {
-       PerlIO_printf(Perl_debug_log, "0x%x: (%05d) rfree\n",where,an++);
-       PerlIO_printf(Perl_debug_log, "0x%x: (%05d) realloc %ld bytes\n",ptr,an++,(long)size);
+       PerlIO_printf(Perl_debug_log, "0x%x: (%05d) rfree\n",where,PL_an++);
+       PerlIO_printf(Perl_debug_log, "0x%x: (%05d) realloc %ld bytes\n",ptr,PL_an++,(long)size);
     } )
 #else
     DEBUG_m( {
@@ -148,7 +148,7 @@ saferealloc(Malloc_t where,MEM_SIZE size)
 
     if (ptr != Nullch)
        return ptr;
-    else if (nomemok)
+    else if (PL_nomemok)
        return Nullch;
     else {
        PerlIO_puts(PerlIO_stderr(),no_mem) FLUSH;
@@ -164,7 +164,7 @@ Free_t
 safefree(Malloc_t where)
 {
 #if !(defined(I286) || defined(atarist))
-    DEBUG_m( PerlIO_printf(Perl_debug_log, "0x%x: (%05d) free\n",(char *) where,an++));
+    DEBUG_m( PerlIO_printf(Perl_debug_log, "0x%x: (%05d) free\n",(char *) where,PL_an++));
 #else
     DEBUG_m( PerlIO_printf(Perl_debug_log, "0x%lx: (%05d) free\n",(char *) where,an++));
 #endif
@@ -195,7 +195,7 @@ safecalloc(MEM_SIZE count, MEM_SIZE size)
     size *= count;
     ptr = PerlMem_malloc(size?size:1); /* malloc(0) is NASTY on our system */
 #if !(defined(I286) || defined(atarist))
-    DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%x: (%05d) calloc %ld  x %ld bytes\n",ptr,an++,(long)count,(long)size));
+    DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%x: (%05d) calloc %ld  x %ld bytes\n",ptr,PL_an++,(long)count,(long)size));
 #else
     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%lx: (%05d) calloc %ld x %ld bytes\n",ptr,an++,(long)count,(long)size));
 #endif
@@ -203,7 +203,7 @@ safecalloc(MEM_SIZE count, MEM_SIZE size)
        memset((void*)ptr, 0, size);
        return ptr;
     }
-    else if (nomemok)
+    else if (PL_nomemok)
        return Nullch;
     else {
        PerlIO_puts(PerlIO_stderr(),no_mem) FLUSH;
@@ -505,22 +505,22 @@ perl_new_collate(char *newcoll)
 #ifdef USE_LOCALE_COLLATE
 
     if (! newcoll) {
-       if (collation_name) {
-           ++collation_ix;
-           Safefree(collation_name);
-           collation_name = NULL;
-           collation_standard = TRUE;
-           collxfrm_base = 0;
-           collxfrm_mult = 2;
+       if (PL_collation_name) {
+           ++PL_collation_ix;
+           Safefree(PL_collation_name);
+           PL_collation_name = NULL;
+           PL_collation_standard = TRUE;
+           PL_collxfrm_base = 0;
+           PL_collxfrm_mult = 2;
        }
        return;
     }
 
-    if (! collation_name || strNE(collation_name, newcoll)) {
-       ++collation_ix;
-       Safefree(collation_name);
-       collation_name = savepv(newcoll);
-       collation_standard = (strEQ(newcoll, "C") || strEQ(newcoll, "POSIX"));
+    if (! PL_collation_name || strNE(PL_collation_name, newcoll)) {
+       ++PL_collation_ix;
+       Safefree(PL_collation_name);
+       PL_collation_name = savepv(newcoll);
+       PL_collation_standard = (strEQ(newcoll, "C") || strEQ(newcoll, "POSIX"));
 
        {
          /*  2: at most so many chars ('a', 'b'). */
@@ -532,8 +532,8 @@ perl_new_collate(char *newcoll)
          SSize_t mult = fb - fa;
          if (mult < 1)
              croak("strxfrm() gets absurd");
-         collxfrm_base = (fa > mult) ? (fa - mult) : 0;
-         collxfrm_mult = mult;
+         PL_collxfrm_base = (fa > mult) ? (fa - mult) : 0;
+         PL_collxfrm_mult = mult;
        }
     }
 
@@ -549,20 +549,20 @@ perl_new_numeric(char *newnum)
 #ifdef USE_LOCALE_NUMERIC
 
     if (! newnum) {
-       if (numeric_name) {
-           Safefree(numeric_name);
-           numeric_name = NULL;
-           numeric_standard = TRUE;
-           numeric_local = TRUE;
+       if (PL_numeric_name) {
+           Safefree(PL_numeric_name);
+           PL_numeric_name = NULL;
+           PL_numeric_standard = TRUE;
+           PL_numeric_local = TRUE;
        }
        return;
     }
 
-    if (! numeric_name || strNE(numeric_name, newnum)) {
-       Safefree(numeric_name);
-       numeric_name = savepv(newnum);
-       numeric_standard = (strEQ(newnum, "C") || strEQ(newnum, "POSIX"));
-       numeric_local = TRUE;
+    if (! PL_numeric_name || strNE(PL_numeric_name, newnum)) {
+       Safefree(PL_numeric_name);
+       PL_numeric_name = savepv(newnum);
+       PL_numeric_standard = (strEQ(newnum, "C") || strEQ(newnum, "POSIX"));
+       PL_numeric_local = TRUE;
     }
 
 #endif /* USE_LOCALE_NUMERIC */
@@ -573,10 +573,10 @@ perl_set_numeric_standard(void)
 {
 #ifdef USE_LOCALE_NUMERIC
 
-    if (! numeric_standard) {
+    if (! PL_numeric_standard) {
        setlocale(LC_NUMERIC, "C");
-       numeric_standard = TRUE;
-       numeric_local = FALSE;
+       PL_numeric_standard = TRUE;
+       PL_numeric_local = FALSE;
     }
 
 #endif /* USE_LOCALE_NUMERIC */
@@ -587,10 +587,10 @@ perl_set_numeric_local(void)
 {
 #ifdef USE_LOCALE_NUMERIC
 
-    if (! numeric_local) {
-       setlocale(LC_NUMERIC, numeric_name);
-       numeric_standard = FALSE;
-       numeric_local = TRUE;
+    if (! PL_numeric_local) {
+       setlocale(LC_NUMERIC, PL_numeric_name);
+       PL_numeric_standard = FALSE;
+       PL_numeric_local = TRUE;
     }
 
 #endif /* USE_LOCALE_NUMERIC */
@@ -853,13 +853,13 @@ mem_collxfrm(const char *s, STRLEN len, STRLEN *xlen)
     /* the first sizeof(collationix) bytes are used by sv_collxfrm(). */
     /* the +1 is for the terminating NUL. */
 
-    xAlloc = sizeof(collation_ix) + collxfrm_base + (collxfrm_mult * len) + 1;
+    xAlloc = sizeof(PL_collation_ix) + PL_collxfrm_base + (PL_collxfrm_mult * len) + 1;
     New(171, xbuf, xAlloc, char);
     if (! xbuf)
        goto bad;
 
-    *(U32*)xbuf = collation_ix;
-    xout = sizeof(collation_ix);
+    *(U32*)xbuf = PL_collation_ix;
+    xout = sizeof(PL_collation_ix);
     for (xin = 0; xin < len; ) {
        SSize_t xused;
 
@@ -883,7 +883,7 @@ mem_collxfrm(const char *s, STRLEN len, STRLEN *xlen)
     }
 
     xbuf[xout] = '\0';
-    *xlen = xout - sizeof(collation_ix);
+    *xlen = xout - sizeof(PL_collation_ix);
     return xbuf;
 
   bad:
@@ -954,7 +954,7 @@ fbm_instr(unsigned char *big, register unsigned char *bigend, SV *littlestr, U32
        if (!len) {
            if (SvTAIL(littlestr)) {    /* Can be only 0-len constant
                                           substr => we can ignore SvVALID */
-               if (multiline) {
+               if (PL_multiline) {
                    char *t = "\n";
                    if ((s = (unsigned char*)ninstr((char*)big, (char*)bigend,
                                                    t, t + len))) {
@@ -972,7 +972,7 @@ fbm_instr(unsigned char *big, register unsigned char *bigend, SV *littlestr, U32
     }
 
     littlelen = SvCUR(littlestr);
-    if (SvTAIL(littlestr) && !multiline) {     /* tail anchored? */
+    if (SvTAIL(littlestr) && !PL_multiline) {  /* tail anchored? */
        if (littlelen > bigend - big)
            return Nullch;
        little = (unsigned char*)SvPVX(littlestr);
@@ -1074,8 +1074,8 @@ screaminstr(SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift, I32 *old_
     I32 found = 0;
 
     if (*old_posp == -1
-       ? (pos = screamfirst[BmRARE(littlestr)]) < 0
-       : (((pos = *old_posp), pos += screamnext[pos]) == 0))
+       ? (pos = PL_screamfirst[BmRARE(littlestr)]) < 0
+       : (((pos = *old_posp), pos += PL_screamnext[pos]) == 0))
        return Nullch;
     little = (unsigned char *)(SvPVX(littlestr));
     littleend = little + SvCUR(littlestr);
@@ -1087,7 +1087,7 @@ screaminstr(SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift, I32 *old_
     stop_pos = SvCUR(bigstr) - end_shift - (SvCUR(littlestr) - 1 - previous);
     if (previous + start_shift > stop_pos) return Nullch;
     while (pos < previous + start_shift) {
-       if (!(pos += screamnext[pos]))
+       if (!(pos += PL_screamnext[pos]))
            return Nullch;
     }
 #ifdef POINTERRIGOR
@@ -1125,7 +1125,7 @@ screaminstr(SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift, I32 *old_
            if (!last) return (char *)(big+pos);
            found = 1;
        }
-    } while ( pos += screamnext[pos] );
+    } while ( pos += PL_screamnext[pos] );
     return (last && found) ? (char *)(big+(*old_posp)) : Nullch;
 #endif /* POINTERRIGOR */
 }
@@ -1203,11 +1203,11 @@ form(const char* pat, ...)
 {
     va_list args;
     va_start(args, pat);
-    if (!mess_sv)
-       mess_sv = mess_alloc();
-    sv_vsetpvfn(mess_sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
+    if (!PL_mess_sv)
+       PL_mess_sv = mess_alloc();
+    sv_vsetpvfn(PL_mess_sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
     va_end(args);
-    return SvPVX(mess_sv);
+    return SvPVX(PL_mess_sv);
 }
 
 char *
@@ -1216,25 +1216,25 @@ mess(const char *pat, va_list *args)
     SV *sv;
     static char dgd[] = " during global destruction.\n";
 
-    if (!mess_sv)
-       mess_sv = mess_alloc();
-    sv = mess_sv;
+    if (!PL_mess_sv)
+       PL_mess_sv = mess_alloc();
+    sv = PL_mess_sv;
     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
     if (!SvCUR(sv) || *(SvEND(sv) - 1) != '\n') {
        dTHR;
-       if (dirty)
+       if (PL_dirty)
            sv_catpv(sv, dgd);
        else {
-           if (curcop->cop_line)
+           if (PL_curcop->cop_line)
                sv_catpvf(sv, " at %_ line %ld",
-                         GvSV(curcop->cop_filegv), (long)curcop->cop_line);
-           if (GvIO(last_in_gv) && IoLINES(GvIOp(last_in_gv))) {
-               bool line_mode = (RsSIMPLE(rs) &&
-                                 SvLEN(rs) == 1 && *SvPVX(rs) == '\n');
+                         GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
+           if (GvIO(PL_last_in_gv) && IoLINES(GvIOp(PL_last_in_gv))) {
+               bool line_mode = (RsSIMPLE(PL_rs) &&
+                                 SvLEN(PL_rs) == 1 && *SvPVX(PL_rs) == '\n');
                sv_catpvf(sv, ", <%s> %s %ld",
-                         last_in_gv == argvgv ? "" : GvNAME(last_in_gv),
+                         PL_last_in_gv == PL_argvgv ? "" : GvNAME(PL_last_in_gv),
                          line_mode ? "line" : "chunk", 
-                         (long)IoLINES(GvIOp(last_in_gv)));
+                         (long)IoLINES(GvIOp(PL_last_in_gv)));
            }
            sv_catpv(sv, ".\n");
        }
@@ -1248,7 +1248,7 @@ die(const char* pat, ...)
     dTHR;
     va_list args;
     char *message;
-    int was_in_eval = in_eval;
+    int was_in_eval = PL_in_eval;
     HV *stash;
     GV *gv;
     CV *cv;
@@ -1268,12 +1268,12 @@ die(const char* pat, ...)
                          "%p: die: message = %s\ndiehook = %p\n",
                          thr, message, diehook));
 #endif /* USE_THREADS */
-    if (diehook) {
+    if (PL_diehook) {
        /* sv_2cv might call croak() */
-       SV *olddiehook = diehook;
+       SV *olddiehook = PL_diehook;
        ENTER;
-       SAVESPTR(diehook);
-       diehook = Nullsv;
+       SAVESPTR(PL_diehook);
+       PL_diehook = Nullsv;
        cv = sv_2cv(olddiehook, &stash, &gv, 0);
        LEAVE;
        if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
@@ -1300,15 +1300,15 @@ die(const char* pat, ...)
        }
     }
 
-    restartop = die_where(message);
+    PL_restartop = die_where(message);
 #ifdef USE_THREADS
     DEBUG_L(PerlIO_printf(PerlIO_stderr(),
          "%p: die: restartop = %p, was_in_eval = %d, top_env = %p\n",
          thr, restartop, was_in_eval, top_env));
 #endif /* USE_THREADS */
-    if ((!restartop && was_in_eval) || top_env->je_prev)
+    if ((!PL_restartop && was_in_eval) || PL_top_env->je_prev)
        JMPENV_JUMP(3);
-    return restartop;
+    return PL_restartop;
 }
 
 void
@@ -1327,12 +1327,12 @@ croak(const char* pat, ...)
 #ifdef USE_THREADS
     DEBUG_L(PerlIO_printf(PerlIO_stderr(), "croak: 0x%lx %s", (unsigned long) thr, message));
 #endif /* USE_THREADS */
-    if (diehook) {
+    if (PL_diehook) {
        /* sv_2cv might call croak() */
-       SV *olddiehook = diehook;
+       SV *olddiehook = PL_diehook;
        ENTER;
-       SAVESPTR(diehook);
-       diehook = Nullsv;
+       SAVESPTR(PL_diehook);
+       PL_diehook = Nullsv;
        cv = sv_2cv(olddiehook, &stash, &gv, 0);
        LEAVE;
        if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
@@ -1353,8 +1353,8 @@ croak(const char* pat, ...)
            LEAVE;
        }
     }
-    if (in_eval) {
-       restartop = die_where(message);
+    if (PL_in_eval) {
+       PL_restartop = die_where(message);
        JMPENV_JUMP(3);
     }
     PerlIO_puts(PerlIO_stderr(),message);
@@ -1375,13 +1375,13 @@ warn(const char* pat,...)
     message = mess(pat, &args);
     va_end(args);
 
-    if (warnhook) {
+    if (PL_warnhook) {
        /* sv_2cv might call warn() */
        dTHR;
-       SV *oldwarnhook = warnhook;
+       SV *oldwarnhook = PL_warnhook;
        ENTER;
-       SAVESPTR(warnhook);
-       warnhook = Nullsv;
+       SAVESPTR(PL_warnhook);
+       PL_warnhook = Nullsv;
        cv = sv_2cv(oldwarnhook, &stash, &gv, 0);
        LEAVE;
        if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
@@ -1422,7 +1422,7 @@ my_setenv(char *nam, char *val)
 {
     register I32 i=setenv_getix(nam);          /* where does it go? */
 
-    if (environ == origenviron) {      /* need we copy environment? */
+    if (environ == PL_origenviron) {   /* need we copy environment? */
        I32 j;
        I32 max;
        char **tmpenv;
@@ -1814,7 +1814,7 @@ my_popen(char *cmd, char *mode)
 #endif 
     This = (*mode == 'w');
     that = !This;
-    if (doexec && tainting) {
+    if (doexec && PL_tainting) {
        taint_env();
        taint_proper("Insecure %s%s", "EXEC");
     }
@@ -1857,8 +1857,8 @@ my_popen(char *cmd, char *mode)
        /*SUPPRESS 560*/
        if (tmpgv = gv_fetchpv("$",TRUE, SVt_PV))
            sv_setiv(GvSV(tmpgv), (IV)getpid());
-       forkprocess = 0;
-       hv_clear(pidstatus);    /* we have no children */
+       PL_forkprocess = 0;
+       hv_clear(PL_pidstatus); /* we have no children */
        return Nullfp;
 #undef THIS
 #undef THAT
@@ -1870,10 +1870,10 @@ my_popen(char *cmd, char *mode)
        PerlLIO_close(p[This]);
        p[This] = p[that];
     }
-    sv = *av_fetch(fdpid,p[This],TRUE);
+    sv = *av_fetch(PL_fdpid,p[This],TRUE);
     (void)SvUPGRADE(sv,SVt_IV);
     SvIVX(sv) = pid;
-    forkprocess = pid;
+    PL_forkprocess = pid;
     return PerlIO_fdopen(p[This], mode);
 }
 #else
@@ -2067,10 +2067,10 @@ my_pclose(PerlIO *ptr)
     int saved_win32_errno;
 #endif
 
-    svp = av_fetch(fdpid,PerlIO_fileno(ptr),TRUE);
+    svp = av_fetch(PL_fdpid,PerlIO_fileno(ptr),TRUE);
     pid = (int)SvIVX(*svp);
     SvREFCNT_dec(*svp);
-    *svp = &sv_undef;
+    *svp = &PL_sv_undef;
 #ifdef OS2
     if (pid == -1) {                   /* Opened by popen. */
        return my_syspclose(ptr);
@@ -2117,23 +2117,23 @@ wait4pid(int pid, int *statusp, int flags)
        return -1;
     if (pid > 0) {
        sprintf(spid, "%d", pid);
-       svp = hv_fetch(pidstatus,spid,strlen(spid),FALSE);
-       if (svp && *svp != &sv_undef) {
+       svp = hv_fetch(PL_pidstatus,spid,strlen(spid),FALSE);
+       if (svp && *svp != &PL_sv_undef) {
            *statusp = SvIVX(*svp);
-           (void)hv_delete(pidstatus,spid,strlen(spid),G_DISCARD);
+           (void)hv_delete(PL_pidstatus,spid,strlen(spid),G_DISCARD);
            return pid;
        }
     }
     else {
        HE *entry;
 
-       hv_iterinit(pidstatus);
-       if (entry = hv_iternext(pidstatus)) {
+       hv_iterinit(PL_pidstatus);
+       if (entry = hv_iternext(PL_pidstatus)) {
            pid = atoi(hv_iterkey(entry,(I32*)statusp));
-           sv = hv_iterval(pidstatus,entry);
+           sv = hv_iterval(PL_pidstatus,entry);
            *statusp = SvIVX(sv);
            sprintf(spid, "%d", pid);
-           (void)hv_delete(pidstatus,spid,strlen(spid),G_DISCARD);
+           (void)hv_delete(PL_pidstatus,spid,strlen(spid),G_DISCARD);
            return pid;
        }
     }
@@ -2173,7 +2173,7 @@ pidgone(int pid, int status)
     char spid[TYPE_CHARS(int)];
 
     sprintf(spid, "%d", pid);
-    sv = *hv_fetch(pidstatus,spid,strlen(spid),TRUE);
+    sv = *hv_fetch(PL_pidstatus,spid,strlen(spid),TRUE);
     (void)SvUPGRADE(sv,SVt_IV);
     SvIVX(sv) = status;
     return;
@@ -2349,7 +2349,7 @@ scan_oct(char *start, I32 len, I32 *retlen)
        retval = n | (*s++ - '0');
        len--;
     }
-    if (dowarn && len && (*s == '8' || *s == '9'))
+    if (PL_dowarn && len && (*s == '8' || *s == '9'))
        warn("Illegal octal digit ignored");
     *retlen = s - start;
     return retval;
@@ -2363,16 +2363,16 @@ scan_hex(char *start, I32 len, I32 *retlen)
     bool overflowed = FALSE;
     char *tmp = s;
 
-    while (len-- && *s && (tmp = strchr((char *) hexdigit, *s))) {
+    while (len-- && *s && (tmp = strchr((char *) PL_hexdigit, *s))) {
        register UV n = retval << 4;
        if (!overflowed && (n >> 4) != retval) {
            warn("Integer overflow in hex number");
            overflowed = TRUE;
        }
-       retval = n | ((tmp - hexdigit) & 15);
+       retval = n | ((tmp - PL_hexdigit) & 15);
        s++;
     }
-    if (dowarn && !tmp) {
+    if (PL_dowarn && !tmp) {
        warn("Illegal hex digit ignored");
     }
     *retlen = s - start;
@@ -2504,8 +2504,8 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
                 && (s = PerlEnv_getenv("PATH"))) {
        bool seen_dot = 0;
        
-       bufend = s + strlen(s);
-       while (s < bufend) {
+       PL_bufend = s + strlen(s);
+       while (s < PL_bufend) {
 #if defined(atarist) || defined(DOSISH)
            for (len = 0; *s
 #  ifdef atarist
@@ -2518,11 +2518,11 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
            if (len < sizeof tmpbuf)
                tmpbuf[len] = '\0';
 #else  /* ! (atarist || DOSISH) */
-           s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, bufend,
+           s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, PL_bufend,
                        ':',
                        &len);
 #endif /* ! (atarist || DOSISH) */
-           if (s < bufend)
+           if (s < PL_bufend)
                s++;
            if (len + 1 + strlen(scriptname) + MAX_EXT_LEN >= sizeof tmpbuf)
                continue;       /* don't search dir with too-long name */
@@ -2545,7 +2545,7 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
            do {
 #endif
                DEBUG_p(PerlIO_printf(Perl_debug_log, "Looking for %s\n",tmpbuf));
-               retval = PerlLIO_stat(tmpbuf,&statbuf);
+               retval = PerlLIO_stat(tmpbuf,&PL_statbuf);
 #ifdef SEARCH_EXTS
            } while (  retval < 0               /* not there */
                    && extidx>=0 && ext[extidx] /* try an extension? */
@@ -2554,10 +2554,10 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
 #endif
            if (retval < 0)
                continue;
-           if (S_ISREG(statbuf.st_mode)
-               && cando(S_IRUSR,TRUE,&statbuf)
+           if (S_ISREG(PL_statbuf.st_mode)
+               && cando(S_IRUSR,TRUE,&PL_statbuf)
 #ifndef DOSISH
-               && cando(S_IXUSR,TRUE,&statbuf)
+               && cando(S_IXUSR,TRUE,&PL_statbuf)
 #endif
                )
            {
@@ -2568,7 +2568,7 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
                xfailed = savepv(tmpbuf);
        }
 #ifndef DOSISH
-       if (!xfound && !seen_dot && !xfailed && (PerlLIO_stat(scriptname,&statbuf) < 0))
+       if (!xfound && !seen_dot && !xfailed && (PerlLIO_stat(scriptname,&PL_statbuf) < 0))
 #endif
            seen_dot = 1;                       /* Disable message. */
        if (!xfound) {
@@ -2883,5 +2883,5 @@ get_opargs(void)
 SV **
 get_specialsv_list(void)
 {
- return specialsv_list;
+ return PL_specialsv_list;
 }