fix Liblist.pm to find entries that are plain pathnames on win32
[p5sagit/p5-mst-13.2.git] / perl.c
diff --git a/perl.c b/perl.c
index 7c42698..df306dc 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -124,20 +124,20 @@ perl_construct(register PerlInterpreter *sv_interp)
 #ifdef ALLOC_THREAD_KEY
         ALLOC_THREAD_KEY;
 #else
-       if (pthread_key_create(&thr_key, 0))
+       if (pthread_key_create(&PL_thr_key, 0))
            croak("panic: pthread_key_create");
 #endif
-       MUTEX_INIT(&sv_mutex);
+       MUTEX_INIT(&PL_sv_mutex);
        /*
         * Safe to use basic SV functions from now on (though
         * not things like mortals or tainting yet).
         */
-       MUTEX_INIT(&eval_mutex);
-       COND_INIT(&eval_cond);
-       MUTEX_INIT(&threads_mutex);
-       COND_INIT(&nthreads_cond);
+       MUTEX_INIT(&PL_eval_mutex);
+       COND_INIT(&PL_eval_cond);
+       MUTEX_INIT(&PL_threads_mutex);
+       COND_INIT(&PL_nthreads_cond);
 #ifdef EMULATE_ATOMIC_REFCOUNTS
-       MUTEX_INIT(&svref_mutex);
+       MUTEX_INIT(&PL_svref_mutex);
 #endif /* EMULATE_ATOMIC_REFCOUNTS */
        
        thr = init_main_thread();
@@ -166,7 +166,7 @@ perl_construct(register PerlInterpreter *sv_interp)
 
 #ifdef PERL_OBJECT
        /* TODO: */
-       /* sighandlerp = sighandler; */
+       /* PL_sighandlerp = sighandler; */
 #else
        PL_sighandlerp = sighandler;
 #endif
@@ -210,7 +210,7 @@ perl_construct(register PerlInterpreter *sv_interp)
                                + ((double) PATCHLEVEL / (double) 1000)
                                + ((double) SUBVERSION / (double) 100000));
 #else
-    sprintf(patchlevel, "%5.3f", (double) 5 +
+    sprintf(PL_patchlevel, "%5.3f", (double) 5 +
                                ((double) PATCHLEVEL / (double) 1000));
 #endif
 
@@ -255,10 +255,10 @@ perl_destruct(register PerlInterpreter *sv_interp)
 #ifndef FAKE_THREADS
     /* Pass 1 on any remaining threads: detach joinables, join zombies */
   retry_cleanup:
-    MUTEX_LOCK(&threads_mutex);
+    MUTEX_LOCK(&PL_threads_mutex);
     DEBUG_L(PerlIO_printf(PerlIO_stderr(),
                          "perl_destruct: waiting for %d threads...\n",
-                         nthreads - 1));
+                         PL_nthreads - 1));
     for (t = thr->next; t != thr; t = t->next) {
        MUTEX_LOCK(&t->mutex);
        switch (ThrSTATE(t)) {
@@ -268,14 +268,14 @@ perl_destruct(register PerlInterpreter *sv_interp)
                                  "perl_destruct: joining zombie %p\n", t));
            ThrSETSTATE(t, THRf_DEAD);
            MUTEX_UNLOCK(&t->mutex);
-           nthreads--;
+           PL_nthreads--;
            /*
             * The SvREFCNT_dec below may take a long time (e.g. av
             * may contain an object scalar whose destructor gets
             * called) so we have to unlock threads_mutex and start
             * all over again.
             */
-           MUTEX_UNLOCK(&threads_mutex);
+           MUTEX_UNLOCK(&PL_threads_mutex);
            JOIN(t, &av);
            SvREFCNT_dec((SV*)av);
            DEBUG_L(PerlIO_printf(PerlIO_stderr(),
@@ -291,7 +291,7 @@ perl_destruct(register PerlInterpreter *sv_interp)
             * deadlock if it panics. It's only a breach of good style
             * not a bug since they are unlocks not locks.
             */
-           MUTEX_UNLOCK(&threads_mutex);
+           MUTEX_UNLOCK(&PL_threads_mutex);
            DETACH(t);
            MUTEX_UNLOCK(&t->mutex);
            goto retry_cleanup;
@@ -306,18 +306,18 @@ perl_destruct(register PerlInterpreter *sv_interp)
     /* We leave the above "Pass 1" loop with threads_mutex still locked */
 
     /* Pass 2 on remaining threads: wait for the thread count to drop to one */
-    while (nthreads > 1)
+    while (PL_nthreads > 1)
     {
        DEBUG_L(PerlIO_printf(PerlIO_stderr(),
                              "perl_destruct: final wait for %d threads\n",
-                             nthreads - 1));
-       COND_WAIT(&nthreads_cond, &threads_mutex);
+                             PL_nthreads - 1));
+       COND_WAIT(&PL_nthreads_cond, &PL_threads_mutex);
     }
     /* At this point, we're the last thread */
-    MUTEX_UNLOCK(&threads_mutex);
+    MUTEX_UNLOCK(&PL_threads_mutex);
     DEBUG_L(PerlIO_printf(PerlIO_stderr(), "perl_destruct: armageddon has arrived\n"));
-    MUTEX_DESTROY(&threads_mutex);
-    COND_DESTROY(&nthreads_cond);
+    MUTEX_DESTROY(&PL_threads_mutex);
+    COND_DESTROY(&PL_nthreads_cond);
 #endif /* !defined(FAKE_THREADS) */
 #endif /* USE_THREADS */
 
@@ -553,20 +553,31 @@ perl_destruct(register PerlInterpreter *sv_interp)
     
     DEBUG_P(debprofdump());
 #ifdef USE_THREADS
-    MUTEX_DESTROY(&sv_mutex);
-    MUTEX_DESTROY(&eval_mutex);
-    COND_DESTROY(&eval_cond);
+    MUTEX_DESTROY(&PL_sv_mutex);
+    MUTEX_DESTROY(&PL_eval_mutex);
+    COND_DESTROY(&PL_eval_cond);
 
     /* As the penultimate thing, free the non-arena SV for thrsv */
-    Safefree(SvPVX(thrsv));
-    Safefree(SvANY(thrsv));
-    Safefree(thrsv);
-    thrsv = Nullsv;
+    Safefree(SvPVX(PL_thrsv));
+    Safefree(SvANY(PL_thrsv));
+    Safefree(PL_thrsv);
+    PL_thrsv = Nullsv;
 #endif /* USE_THREADS */
     
     /* As the absolutely last thing, free the non-arena SV for mess() */
 
     if (PL_mess_sv) {
+       /* it could have accumulated taint magic */
+       if (SvTYPE(PL_mess_sv) >= SVt_PVMG) {
+           MAGIC* mg;
+           MAGIC* moremagic;
+           for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
+               moremagic = mg->mg_moremagic;
+               if (mg->mg_ptr && mg->mg_type != 'g' && mg->mg_len >= 0)
+                   Safefree(mg->mg_ptr);
+               Safefree(mg);
+           }
+       }
        /* we know that type >= SVt_PV */
        SvOOK_off(PL_mess_sv);
        Safefree(SvPVX(PL_mess_sv));
@@ -791,7 +802,7 @@ setuid perl scripts securely.\n");
            if (*++s != ':')  {
                PL_Sv = newSVpv("print myconfig();",0);
 #ifdef VMS
-               sv_catpv(Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
+               sv_catpv(PL_Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
 #else
                sv_catpv(PL_Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
 #endif
@@ -801,7 +812,7 @@ setuid perl scripts securely.\n");
                sv_catpv(PL_Sv," DEBUGGING");
 #  endif
 #  ifdef NO_EMBED
-               sv_catpv(Sv," NO_EMBED");
+               sv_catpv(PL_Sv," NO_EMBED");
 #  endif
 #  ifdef MULTIPLICITY
                sv_catpv(PL_Sv," MULTIPLICITY");
@@ -823,7 +834,7 @@ setuid perl scripts securely.\n");
 #  ifdef __TIME__
                sv_catpvf(PL_Sv,",\"  Compiled at %s %s\\n\"",__DATE__,__TIME__);
 #  else
-               sv_catpvf(Sv,",\"  Compiled on %s\\n\"",__DATE__);
+               sv_catpvf(PL_Sv,",\"  Compiled on %s\\n\"",__DATE__);
 #  endif
 #endif
                sv_catpv(PL_Sv, "; \
@@ -923,12 +934,12 @@ print \"  \\@INC:\\n    @INC\\n\";");
     PL_min_intro_pending = 0;
     PL_padix = 0;
 #ifdef USE_THREADS
-    av_store(comppad_name, 0, newSVpv("@_", 2));
-    curpad[0] = (SV*)newAV();
-    SvPADMY_on(curpad[0]);     /* XXX Needed? */
-    CvOWNER(compcv) = 0;
-    New(666, CvMUTEXP(compcv), 1, perl_mutex);
-    MUTEX_INIT(CvMUTEXP(compcv));
+    av_store(PL_comppad_name, 0, newSVpv("@_", 2));
+    PL_curpad[0] = (SV*)newAV();
+    SvPADMY_on(PL_curpad[0]);  /* XXX Needed? */
+    CvOWNER(PL_compcv) = 0;
+    New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
+    MUTEX_INIT(CvMUTEXP(PL_compcv));
 #endif /* USE_THREADS */
 
     comppadlist = newAV();
@@ -1071,13 +1082,13 @@ perl_run(PerlInterpreter *sv_interp)
     /* do it */
 
     if (PL_restartop) {
-       op = PL_restartop;
+       PL_op = PL_restartop;
        PL_restartop = 0;
        CALLRUNOPS();
     }
     else if (PL_main_start) {
        CvDEPTH(PL_main_cv) = 1;
-       op = PL_main_start;
+       PL_op = PL_main_start;
        CALLRUNOPS();
     }
 
@@ -1177,13 +1188,13 @@ perl_call_method(char *methname, I32 flags)
 {
     dSP;
     OP myop;
-    if (!op)
-       op = &myop;
+    if (!PL_op)
+       PL_op = &myop;
     XPUSHs(sv_2mortal(newSVpv(methname,0)));
     PUTBACK;
     pp_method(ARGS);
-       if(op == &myop)
-               op = Nullop;
+       if(PL_op == &myop)
+               PL_op = Nullop;
     return perl_call_sv(*PL_stack_sp--, flags);
 }
 
@@ -1201,7 +1212,7 @@ perl_call_sv(SV *sv, I32 flags)
     bool oldcatch = CATCH_GET;
     dJMPENV;
     int ret;
-    OP* oldop = op;
+    OP* oldop = PL_op;
 
     if (flags & G_DISCARD) {
        ENTER;
@@ -1216,7 +1227,7 @@ perl_call_sv(SV *sv, I32 flags)
                      (flags & G_ARRAY) ? OPf_WANT_LIST :
                      OPf_WANT_SCALAR);
     SAVEOP();
-    op = (OP*)&myop;
+    PL_op = (OP*)&myop;
 
     EXTEND(PL_stack_sp, 1);
     *++PL_stack_sp = sv;
@@ -1230,10 +1241,10 @@ perl_call_sv(SV *sv, I32 flags)
            * curstash may be meaningless. */
          && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != PL_debstash)
          && !(flags & G_NODEBUG))
-       op->op_private |= OPpENTERSUB_DB;
+       PL_op->op_private |= OPpENTERSUB_DB;
 
     if (flags & G_EVAL) {
-       cLOGOP->op_other = op;
+       cLOGOP->op_other = PL_op;
        PL_markstack_ptr--;
        /* we're trying to emulate pp_entertry() here */
        {
@@ -1243,10 +1254,10 @@ perl_call_sv(SV *sv, I32 flags)
            ENTER;
            SAVETMPS;
            
-           push_return(op->op_next);
+           push_return(PL_op->op_next);
            PUSHBLOCK(cx, CXt_EVAL, PL_stack_sp);
            PUSHEVAL(cx, 0, 0);
-           PL_eval_root = op;             /* Only needed so that goto works right. */
+           PL_eval_root = PL_op;             /* Only needed so that goto works right. */
            
            PL_in_eval = 1;
            if (flags & G_KEEPERR)
@@ -1274,7 +1285,7 @@ perl_call_sv(SV *sv, I32 flags)
            /* NOTREACHED */
        case 3:
            if (PL_restartop) {
-               op = PL_restartop;
+               PL_op = PL_restartop;
                PL_restartop = 0;
                break;
            }
@@ -1291,9 +1302,9 @@ perl_call_sv(SV *sv, I32 flags)
     else
        CATCH_SET(TRUE);
 
-    if (op == (OP*)&myop)
-       op = pp_entersub(ARGS);
-    if (op)
+    if (PL_op == (OP*)&myop)
+       PL_op = pp_entersub(ARGS);
+    if (PL_op)
        CALLRUNOPS();
     retval = PL_stack_sp - (PL_stack_base + oldmark);
     if ((flags & G_EVAL) && !(flags & G_KEEPERR))
@@ -1325,7 +1336,7 @@ perl_call_sv(SV *sv, I32 flags)
        FREETMPS;
        LEAVE;
     }
-    op = oldop;
+    PL_op = oldop;
     return retval;
 }
 
@@ -1343,7 +1354,7 @@ perl_eval_sv(SV *sv, I32 flags)
     I32 oldscope;
     dJMPENV;
     int ret;
-    OP* oldop = op;
+    OP* oldop = PL_op;
 
     if (flags & G_DISCARD) {
        ENTER;
@@ -1351,8 +1362,8 @@ perl_eval_sv(SV *sv, I32 flags)
     }
 
     SAVEOP();
-    op = (OP*)&myop;
-    Zero(op, 1, UNOP);
+    PL_op = (OP*)&myop;
+    Zero(PL_op, 1, UNOP);
     EXTEND(PL_stack_sp, 1);
     *++PL_stack_sp = sv;
     oldscope = PL_scopestack_ix;
@@ -1385,7 +1396,7 @@ perl_eval_sv(SV *sv, I32 flags)
        /* NOTREACHED */
     case 3:
        if (PL_restartop) {
-           op = PL_restartop;
+           PL_op = PL_restartop;
            PL_restartop = 0;
            break;
        }
@@ -1399,9 +1410,9 @@ perl_eval_sv(SV *sv, I32 flags)
        goto cleanup;
     }
 
-    if (op == (OP*)&myop)
-       op = pp_entereval(ARGS);
-    if (op)
+    if (PL_op == (OP*)&myop)
+       PL_op = pp_entereval(ARGS);
+    if (PL_op)
        CALLRUNOPS();
     retval = PL_stack_sp - (PL_stack_base + oldmark);
     if (!(flags & G_KEEPERR))
@@ -1415,7 +1426,7 @@ perl_eval_sv(SV *sv, I32 flags)
        FREETMPS;
        LEAVE;
     }
-    op = oldop;
+    PL_op = oldop;
     return retval;
 }
 
@@ -1698,7 +1709,7 @@ moreswitches(char *s)
            PATCHLEVEL, SUBVERSION, ARCHNAME);
 #else
        printf("\nThis is perl, version %s built for %s",
-               patchlevel, ARCHNAME);
+               PL_patchlevel, ARCHNAME);
 #endif
 #if defined(LOCAL_PATCH_COUNT)
        if (LOCAL_PATCH_COUNT > 0)
@@ -1784,7 +1795,7 @@ my_unexec(void)
 
     prog = newSVpv(BIN_EXP, 0);
     sv_catpv(prog, "/perl");
-    file = newSVpv(origfilename, 0);
+    file = newSVpv(PL_origfilename, 0);
     sv_catpv(file, ".perldump");
 
     unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
@@ -1807,35 +1818,35 @@ init_interp(void)
 
 #ifdef PERL_OBJECT             /* XXX kludge */
 #define I_REINIT \
-  STMT_START {                 \
-    chopset    = " \n-";       \
-    copline    = NOLINE;       \
-    curcop     = &compiling;   \
-    curcopdb    = NULL;                \
-    dbargs     = 0;            \
-    dlmax      = 128;          \
-    laststatval        = -1;           \
-    laststype  = OP_STAT;      \
-    maxscream  = -1;           \
-    maxsysfd   = MAXSYSFD;     \
-    statname   = Nullsv;       \
-    tmps_floor = -1;           \
-    tmps_ix     = -1;          \
-    op_mask     = NULL;                \
-    dlmax       = 128;         \
-    laststatval = -1;          \
-    laststype   = OP_STAT;     \
-    mess_sv     = Nullsv;      \
-    splitstr    = " ";         \
-    generation  = 100;         \
-    exitlist    = NULL;                \
-    exitlistlen = 0;           \
-    regindent   = 0;           \
-    in_clean_objs = FALSE;     \
-    in_clean_all= FALSE;       \
-    profiledata = NULL;                \
-    rsfp       = Nullfp;       \
-    rsfp_filters= Nullav;      \
+  STMT_START {                         \
+    PL_chopset         = " \n-";       \
+    PL_copline         = NOLINE;       \
+    PL_curcop          = &PL_compiling;\
+    PL_curcopdb                = NULL;         \
+    PL_dbargs          = 0;            \
+    PL_dlmax           = 128;          \
+    PL_laststatval     = -1;           \
+    PL_laststype       = OP_STAT;      \
+    PL_maxscream       = -1;           \
+    PL_maxsysfd                = MAXSYSFD;     \
+    PL_statname                = Nullsv;       \
+    PL_tmps_floor      = -1;           \
+    PL_tmps_ix         = -1;           \
+    PL_op_mask         = NULL;         \
+    PL_dlmax           = 128;          \
+    PL_laststatval     = -1;           \
+    PL_laststype       = OP_STAT;      \
+    PL_mess_sv         = Nullsv;       \
+    PL_splitstr                = " ";          \
+    PL_generation      = 100;          \
+    PL_exitlist                = NULL;         \
+    PL_exitlistlen     = 0;            \
+    PL_regindent       = 0;            \
+    PL_in_clean_objs   = FALSE;        \
+    PL_in_clean_all    = FALSE;        \
+    PL_profiledata     = NULL;         \
+    PL_rsfp            = Nullfp;       \
+    PL_rsfp_filters    = Nullav;       \
   } STMT_END
     I_REINIT;
 #else
@@ -1852,8 +1863,8 @@ init_interp(void)
 #    undef PERLVARIC
 #    else
 #    define PERLVAR(var,type)
-#    define PERLVARI(var,type,init)    var = init;
-#    define PERLVARIC(var,type,init)   var = init;
+#    define PERLVARI(var,type,init)    PL_##var = init;
+#    define PERLVARIC(var,type,init)   PL_##var = init;
 #    include "intrpvar.h"
 #    ifndef USE_THREADS
 #      include "thrdvar.h"
@@ -1970,7 +1981,7 @@ sed %s -e \"/^[^#]/b\" \
  -e \"/^#[     ]*endif/b\" \
  -e \"s/^#.*//\" \
  %s | %_ -C %_ %s",
-         (doextract ? "-e \"1,/^#/d\n\"" : ""),
+         (PL_doextract ? "-e \"1,/^#/d\n\"" : ""),
 #else
        sv_setpvf(cmd, "\
 %s %s -e '/^[^#]/b' \
@@ -1995,21 +2006,21 @@ sed %s -e \"/^[^#]/b\" \
          scriptname, cpp, sv, CPPMINUS);
        PL_doextract = FALSE;
 #ifdef IAMSUID                         /* actually, this is caught earlier */
-       if (euid != uid && !euid) {     /* if running suidperl */
+       if (PL_euid != PL_uid && !PL_euid) {    /* if running suidperl */
 #ifdef HAS_SETEUID
-           (void)seteuid(uid);         /* musn't stay setuid root */
+           (void)seteuid(PL_uid);              /* musn't stay setuid root */
 #else
 #ifdef HAS_SETREUID
-           (void)setreuid((Uid_t)-1, uid);
+           (void)setreuid((Uid_t)-1, PL_uid);
 #else
 #ifdef HAS_SETRESUID
-           (void)setresuid((Uid_t)-1, uid, (Uid_t)-1);
+           (void)setresuid((Uid_t)-1, PL_uid, (Uid_t)-1);
 #else
-           PerlProc_setuid(uid);
+           PerlProc_setuid(PL_uid);
 #endif
 #endif
 #endif
-           if (PerlProc_geteuid() != uid)
+           if (PerlProc_geteuid() != PL_uid)
                croak("Can't do seteuid!\n");
        }
 #endif /* IAMSUID */
@@ -2031,10 +2042,12 @@ sed %s -e \"/^[^#]/b\" \
     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 &&
-         statbuf.st_mode & (S_ISUID|S_ISGID)) {
+       if (PL_euid &&
+           PerlLIO_stat(SvPVX(GvSV(PL_curcop->cop_filegv)),&PL_statbuf) >= 0 &&
+           PL_statbuf.st_mode & (S_ISUID|S_ISGID))
+       {
            /* try again */
-           PerlProc_execv(form("%s/sperl%s", BIN_EXP, patchlevel), origargv);
+           PerlProc_execv(form("%s/sperl%s", BIN_EXP, PL_patchlevel), PL_origargv);
            croak("Can't do setuid\n");
        }
 #endif
@@ -2073,9 +2086,9 @@ validate_suid(char *validarg, char *scriptname, int fdscript)
     dTHR;
     char *s, *s2;
 
-    if (PerlLIO_fstat(PerlIO_fileno(rsfp),&statbuf) < 0)       /* normal stat is insecure */
-       croak("Can't stat script \"%s\"",origfilename);
-    if (fdscript < 0 && statbuf.st_mode & (S_ISUID|S_ISGID)) {
+    if (PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf) < 0) /* normal stat is insecure */
+       croak("Can't stat script \"%s\"",PL_origfilename);
+    if (fdscript < 0 && PL_statbuf.st_mode & (S_ISUID|S_ISGID)) {
        I32 len;
 
 #ifdef IAMSUID
@@ -2088,7 +2101,7 @@ validate_suid(char *validarg, char *scriptname, int fdscript)
         * But I don't think it's too important.  The manual lies when
         * it says access() is useful in setuid programs.
         */
-       if (PerlLIO_access(SvPVX(GvSV(curcop->cop_filegv)),1))  /*double check*/
+       if (PerlLIO_access(SvPVX(GvSV(PL_curcop->cop_filegv)),1)) /*double check*/
            croak("Permission denied");
 #else
        /* If we can swap euid and uid, then we can determine access rights
@@ -2101,60 +2114,60 @@ validate_suid(char *validarg, char *scriptname, int fdscript)
 
            if (
 #ifdef HAS_SETREUID
-               setreuid(euid,uid) < 0
+               setreuid(PL_euid,PL_uid) < 0
 #else
 # if HAS_SETRESUID
-               setresuid(euid,uid,(Uid_t)-1) < 0
+               setresuid(PL_euid,PL_uid,(Uid_t)-1) < 0
 # endif
 #endif
-               || PerlProc_getuid() != euid || PerlProc_geteuid() != uid)
+               || PerlProc_getuid() != PL_euid || PerlProc_geteuid() != PL_uid)
                croak("Can't swap uid and euid");       /* really paranoid */
-           if (PerlLIO_stat(SvPVX(GvSV(curcop->cop_filegv)),&tmpstatbuf) < 0)
+           if (PerlLIO_stat(SvPVX(GvSV(PL_curcop->cop_filegv)),&tmpstatbuf) < 0)
                croak("Permission denied");     /* testing full pathname here */
-           if (tmpstatbuf.st_dev != statbuf.st_dev ||
-               tmpstatbuf.st_ino != statbuf.st_ino) {
-               (void)PerlIO_close(rsfp);
-               if (rsfp = PerlProc_popen("/bin/mail root","w")) {      /* heh, heh */
-                   PerlIO_printf(rsfp,
+           if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
+               tmpstatbuf.st_ino != PL_statbuf.st_ino) {
+               (void)PerlIO_close(PL_rsfp);
+               if (PL_rsfp = PerlProc_popen("/bin/mail root","w")) {   /* heh, heh */
+                   PerlIO_printf(PL_rsfp,
 "User %ld tried to run dev %ld ino %ld in place of dev %ld ino %ld!\n\
 (Filename of set-id script was %s, uid %ld gid %ld.)\n\nSincerely,\nperl\n",
-                       (long)uid,(long)tmpstatbuf.st_dev, (long)tmpstatbuf.st_ino,
-                       (long)statbuf.st_dev, (long)statbuf.st_ino,
-                       SvPVX(GvSV(curcop->cop_filegv)),
-                       (long)statbuf.st_uid, (long)statbuf.st_gid);
-                   (void)PerlProc_pclose(rsfp);
+                       (long)PL_uid,(long)tmpstatbuf.st_dev, (long)tmpstatbuf.st_ino,
+                       (long)PL_statbuf.st_dev, (long)PL_statbuf.st_ino,
+                       SvPVX(GvSV(PL_curcop->cop_filegv)),
+                       (long)PL_statbuf.st_uid, (long)PL_statbuf.st_gid);
+                   (void)PerlProc_pclose(PL_rsfp);
                }
                croak("Permission denied\n");
            }
            if (
 #ifdef HAS_SETREUID
-              setreuid(uid,euid) < 0
+              setreuid(PL_uid,PL_euid) < 0
 #else
 # if defined(HAS_SETRESUID)
-              setresuid(uid,euid,(Uid_t)-1) < 0
+              setresuid(PL_uid,PL_euid,(Uid_t)-1) < 0
 # endif
 #endif
-              || PerlProc_getuid() != uid || PerlProc_geteuid() != euid)
+              || PerlProc_getuid() != PL_uid || PerlProc_geteuid() != PL_euid)
                croak("Can't reswap uid and euid");
-           if (!cando(S_IXUSR,FALSE,&statbuf))         /* can real uid exec? */
+           if (!cando(S_IXUSR,FALSE,&PL_statbuf))              /* can real uid exec? */
                croak("Permission denied\n");
        }
 #endif /* HAS_SETREUID */
 #endif /* IAMSUID */
 
-       if (!S_ISREG(statbuf.st_mode))
+       if (!S_ISREG(PL_statbuf.st_mode))
            croak("Permission denied");
-       if (statbuf.st_mode & S_IWOTH)
+       if (PL_statbuf.st_mode & S_IWOTH)
            croak("Setuid/gid script is writable by world");
-       doswitches = FALSE;             /* -s is insecure in suid */
-       curcop->cop_line++;
-       if (sv_gets(linestr, rsfp, 0) == Nullch ||
-         strnNE(SvPV(linestr,na),"#!",2) )     /* required even on Sys V */
+       PL_doswitches = FALSE;          /* -s is insecure in suid */
+       PL_curcop->cop_line++;
+       if (sv_gets(PL_linestr, PL_rsfp, 0) == Nullch ||
+         strnNE(SvPV(PL_linestr,PL_na),"#!",2) )       /* required even on Sys V */
            croak("No #! line");
-       s = SvPV(linestr,na)+2;
+       s = SvPV(PL_linestr,PL_na)+2;
        if (*s == ' ') s++;
        while (!isSPACE(*s)) s++;
-       for (s2 = s;  (s2 > SvPV(linestr,na)+2 &&
+       for (s2 = s;  (s2 > SvPV(PL_linestr,PL_na)+2 &&
                       (isDIGIT(s2[-1]) || strchr("._-", s2[-1])));  s2--) ;
        if (strnNE(s2-4,"perl",4) && strnNE(s-9,"perl",4))  /* sanity check */
            croak("Not a perl script");
@@ -2170,80 +2183,80 @@ validate_suid(char *validarg, char *scriptname, int fdscript)
            croak("Args must match #! line");
 
 #ifndef IAMSUID
-       if (euid != uid && (statbuf.st_mode & S_ISUID) &&
-           euid == statbuf.st_uid)
-           if (!do_undump)
+       if (PL_euid != PL_uid && (PL_statbuf.st_mode & S_ISUID) &&
+           PL_euid == PL_statbuf.st_uid)
+           if (!PL_do_undump)
                croak("YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
 #endif /* IAMSUID */
 
-       if (euid) {     /* oops, we're not the setuid root perl */
-           (void)PerlIO_close(rsfp);
+       if (PL_euid) {  /* oops, we're not the setuid root perl */
+           (void)PerlIO_close(PL_rsfp);
 #ifndef IAMSUID
            /* try again */
-           PerlProc_execv(form("%s/sperl%s", BIN_EXP, patchlevel), origargv);
+           PerlProc_execv(form("%s/sperl%s", BIN_EXP, PL_patchlevel), PL_origargv);
 #endif
            croak("Can't do setuid\n");
        }
 
-       if (statbuf.st_mode & S_ISGID && statbuf.st_gid != egid) {
+       if (PL_statbuf.st_mode & S_ISGID && PL_statbuf.st_gid != PL_egid) {
 #ifdef HAS_SETEGID
-           (void)setegid(statbuf.st_gid);
+           (void)setegid(PL_statbuf.st_gid);
 #else
 #ifdef HAS_SETREGID
-           (void)setregid((Gid_t)-1,statbuf.st_gid);
+           (void)setregid((Gid_t)-1,PL_statbuf.st_gid);
 #else
 #ifdef HAS_SETRESGID
-           (void)setresgid((Gid_t)-1,statbuf.st_gid,(Gid_t)-1);
+           (void)setresgid((Gid_t)-1,PL_statbuf.st_gid,(Gid_t)-1);
 #else
-           PerlProc_setgid(statbuf.st_gid);
+           PerlProc_setgid(PL_statbuf.st_gid);
 #endif
 #endif
 #endif
-           if (PerlProc_getegid() != statbuf.st_gid)
+           if (PerlProc_getegid() != PL_statbuf.st_gid)
                croak("Can't do setegid!\n");
        }
-       if (statbuf.st_mode & S_ISUID) {
-           if (statbuf.st_uid != euid)
+       if (PL_statbuf.st_mode & S_ISUID) {
+           if (PL_statbuf.st_uid != PL_euid)
 #ifdef HAS_SETEUID
-               (void)seteuid(statbuf.st_uid);  /* all that for this */
+               (void)seteuid(PL_statbuf.st_uid);       /* all that for this */
 #else
 #ifdef HAS_SETREUID
-                (void)setreuid((Uid_t)-1,statbuf.st_uid);
+                (void)setreuid((Uid_t)-1,PL_statbuf.st_uid);
 #else
 #ifdef HAS_SETRESUID
-                (void)setresuid((Uid_t)-1,statbuf.st_uid,(Uid_t)-1);
+                (void)setresuid((Uid_t)-1,PL_statbuf.st_uid,(Uid_t)-1);
 #else
-               PerlProc_setuid(statbuf.st_uid);
+               PerlProc_setuid(PL_statbuf.st_uid);
 #endif
 #endif
 #endif
-           if (PerlProc_geteuid() != statbuf.st_uid)
+           if (PerlProc_geteuid() != PL_statbuf.st_uid)
                croak("Can't do seteuid!\n");
        }
-       else if (uid) {                 /* oops, mustn't run as root */
+       else if (PL_uid) {                      /* oops, mustn't run as root */
 #ifdef HAS_SETEUID
-          (void)seteuid((Uid_t)uid);
+          (void)seteuid((Uid_t)PL_uid);
 #else
 #ifdef HAS_SETREUID
-          (void)setreuid((Uid_t)-1,(Uid_t)uid);
+          (void)setreuid((Uid_t)-1,(Uid_t)PL_uid);
 #else
 #ifdef HAS_SETRESUID
-          (void)setresuid((Uid_t)-1,(Uid_t)uid,(Uid_t)-1);
+          (void)setresuid((Uid_t)-1,(Uid_t)PL_uid,(Uid_t)-1);
 #else
-          PerlProc_setuid((Uid_t)uid);
+          PerlProc_setuid((Uid_t)PL_uid);
 #endif
 #endif
 #endif
-           if (PerlProc_geteuid() != uid)
+           if (PerlProc_geteuid() != PL_uid)
                croak("Can't do seteuid!\n");
        }
        init_ids();
-       if (!cando(S_IXUSR,TRUE,&statbuf))
+       if (!cando(S_IXUSR,TRUE,&PL_statbuf))
            croak("Permission denied\n");       /* they can't do this */
     }
 #ifdef IAMSUID
-    else if (preprocess)
+    else if (PL_preprocess)
        croak("-P not allowed for setuid/setgid script\n");
     else if (fdscript >= 0)
        croak("fd script not allowed in suidperl\n");
@@ -2253,29 +2266,29 @@ FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
     /* We absolutely must clear out any saved ids here, so we */
     /* exec the real perl, substituting fd script for scriptname. */
     /* (We pass script name as "subdir" of fd, which perl will grok.) */
-    PerlIO_rewind(rsfp);
-    PerlLIO_lseek(PerlIO_fileno(rsfp),(Off_t)0,0);  /* just in case rewind didn't */
-    for (which = 1; origargv[which] && origargv[which] != scriptname; which++) ;
-    if (!origargv[which])
+    PerlIO_rewind(PL_rsfp);
+    PerlLIO_lseek(PerlIO_fileno(PL_rsfp),(Off_t)0,0);  /* just in case rewind didn't */
+    for (which = 1; PL_origargv[which] && PL_origargv[which] != scriptname; which++) ;
+    if (!PL_origargv[which])
        croak("Permission denied");
-    origargv[which] = savepv(form("/dev/fd/%d/%s",
-                                 PerlIO_fileno(rsfp), origargv[which]));
+    PL_origargv[which] = savepv(form("/dev/fd/%d/%s",
+                                 PerlIO_fileno(PL_rsfp), PL_origargv[which]));
 #if defined(HAS_FCNTL) && defined(F_SETFD)
-    fcntl(PerlIO_fileno(rsfp),F_SETFD,0);      /* ensure no close-on-exec */
+    fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,0);   /* ensure no close-on-exec */
 #endif
-    PerlProc_execv(form("%s/perl%s", BIN_EXP, patchlevel), origargv);  /* try again */
+    PerlProc_execv(form("%s/perl%s", BIN_EXP, PL_patchlevel), PL_origargv);/* try again */
     croak("Can't do setuid\n");
 #endif /* IAMSUID */
 #else /* !DOSUID */
     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 */
-       if ((euid != uid && euid == statbuf.st_uid && statbuf.st_mode & S_ISUID)
+       PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf);      /* may be either wrapped or real suid */
+       if ((PL_euid != PL_uid && PL_euid == PL_statbuf.st_uid && PL_statbuf.st_mode & S_ISUID)
            ||
-           (egid != gid && egid == statbuf.st_gid && statbuf.st_mode & S_ISGID)
+           (PL_egid != PL_gid && PL_egid == PL_statbuf.st_gid && PL_statbuf.st_mode & S_ISGID)
           )
-           if (!do_undump)
+           if (!PL_do_undump)
                croak("YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
@@ -2322,8 +2335,8 @@ init_ids(void)
     PL_gid = (int)PerlProc_getgid();
     PL_egid = (int)PerlProc_getegid();
 #ifdef VMS
-    uid |= gid << 16;
-    euid |= egid << 16;
+    PL_uid |= PL_gid << 16;
+    PL_euid |= PL_egid << 16;
 #endif
     PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
 }
@@ -2655,8 +2668,8 @@ incpush(char *p, int addsubdirs)
            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++)
-               if (archpat_auto[len] == '.') archpat_auto[len] = '_';
+            PL_archpat_auto[len] != '\0' && PL_archpat_auto[len] != '/'; len++)
+               if (PL_archpat_auto[len] == '.') PL_archpat_auto[len] = '_';
 #endif
        }
     }
@@ -2669,7 +2682,7 @@ incpush(char *p, int addsubdirs)
        /* skip any consecutive separators */
        while ( *p == PERLLIB_SEP ) {
            /* Uncomment the next line for PATH semantics */
-           /* av_push(GvAVn(incgv), newSVpv(".", 1)); */
+           /* av_push(GvAVn(PL_incgv), newSVpv(".", 1)); */
            p++;
        }
 
@@ -2693,7 +2706,7 @@ incpush(char *p, int addsubdirs)
            char *unix;
            STRLEN len;
 
-           if ((unix = tounixspec_ts(SvPV(libdir,na),Nullch)) != Nullch) {
+           if ((unix = tounixspec_ts(SvPV(libdir,PL_na),Nullch)) != Nullch) {
                len = strlen(unix);
                while (unix[len-1] == '/') len--;  /* Cosmetic */
                sv_usepvn(libdir,unix,len);
@@ -2701,7 +2714,7 @@ incpush(char *p, int addsubdirs)
            else
                PerlIO_printf(PerlIO_stderr(),
                              "Failed to unixify @INC element \"%s\"\n",
-                             SvPV(libdir,na));
+                             SvPV(libdir,PL_na));
 #endif
            /* .../archname/version if -d .../archname/version/auto */
            sv_setsv(subdir, libdir);
@@ -2733,7 +2746,7 @@ init_main_thread()
     XPV *xpv;
 
     Newz(53, thr, 1, struct perl_thread);
-    curcop = &compiling;
+    PL_curcop = &PL_compiling;
     thr->cvcache = newHV();
     thr->threadsv = newAV();
     /* thr->threadsvp is set when find_threadsv is called */
@@ -2742,24 +2755,24 @@ init_main_thread()
     thr->flags = THRf_R_JOINABLE;
     MUTEX_INIT(&thr->mutex);
     /* Handcraft thrsv similarly to mess_sv */
-    New(53, thrsv, 1, SV);
+    New(53, PL_thrsv, 1, SV);
     Newz(53, xpv, 1, XPV);
-    SvFLAGS(thrsv) = SVt_PV;
-    SvANY(thrsv) = (void*)xpv;
-    SvREFCNT(thrsv) = 1 << 30; /* practically infinite */
-    SvPVX(thrsv) = (char*)thr;
-    SvCUR_set(thrsv, sizeof(thr));
-    SvLEN_set(thrsv, sizeof(thr));
-    *SvEND(thrsv) = '\0';      /* in the trailing_nul field */
-    thr->oursv = thrsv;
-    chopset = " \n-";
-
-    MUTEX_LOCK(&threads_mutex);
-    nthreads++;
+    SvFLAGS(PL_thrsv) = SVt_PV;
+    SvANY(PL_thrsv) = (void*)xpv;
+    SvREFCNT(PL_thrsv) = 1 << 30;      /* practically infinite */
+    SvPVX(PL_thrsv) = (char*)thr;
+    SvCUR_set(PL_thrsv, sizeof(thr));
+    SvLEN_set(PL_thrsv, sizeof(thr));
+    *SvEND(PL_thrsv) = '\0';   /* in the trailing_nul field */
+    thr->oursv = PL_thrsv;
+    PL_chopset = " \n-";
+
+    MUTEX_LOCK(&PL_threads_mutex);
+    PL_nthreads++;
     thr->tid = 0;
     thr->next = thr;
     thr->prev = thr;
-    MUTEX_UNLOCK(&threads_mutex);
+    MUTEX_UNLOCK(&PL_threads_mutex);
 
 #ifdef HAVE_THREAD_INTERN
     init_thread_intern(thr);
@@ -2776,21 +2789,21 @@ init_main_thread()
      * These must come after the SET_THR because sv_setpvn does
      * SvTAINT and the taint fields require dTHR.
      */
-    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;
     thr->errsv = newSVpv("", 0);
     (void) find_threadsv("@"); /* Ensure $@ is initialised early */
 
-    maxscream = -1;
-    regcompp = FUNC_NAME_TO_PTR(pregcomp);
-    regexecp = FUNC_NAME_TO_PTR(regexec_flags);
-    regindent = 0;
-    reginterp_cnt = 0;
+    PL_maxscream = -1;
+    PL_regcompp = FUNC_NAME_TO_PTR(pregcomp);
+    PL_regexecp = FUNC_NAME_TO_PTR(regexec_flags);
+    PL_regindent = 0;
+    PL_reginterp_cnt = 0;
 
     return thr;
 }