perl 5.002gamma: hints/sco.sh
[p5sagit/p5-mst-13.2.git] / pp_ctl.c
index 29353cb..7416f0e 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -102,7 +102,7 @@ PP(pp_substcont)
     register char *s = cx->sb_s;
     register char *m = cx->sb_m;
     char *orig = cx->sb_orig;
-    register REGEXP *rx = pm->op_pmregexp;
+    register REGEXP *rx = cx->sb_rx;
 
     if (cx->sb_iters++) {
        if (cx->sb_iters > cx->sb_maxiters)
@@ -969,7 +969,7 @@ char *message;
            }
        }
        else
-           sv_catpv(GvSV(errgv), message);
+           sv_setpv(GvSV(errgv), message);
        
        cxix = dopoptoeval(cxstack_ix);
        if (cxix >= 0) {
@@ -998,8 +998,12 @@ char *message;
     }
     fputs(message, stderr);
     (void)fflush(stderr);
-    if (e_fp)
+    if (e_fp) {
+#ifdef DOSISH
+       fclose(e_fp);
+#endif 
        (void)UNLINK(e_tmpname);
+    }
     statusvalue = SHIFTSTATUS(statusvalue);
 #ifdef VMS
     my_exit((U32)vaxc$errno?vaxc$errno:errno?errno:statusvalue?statusvalue:SS$_ABORT);
@@ -1980,10 +1984,8 @@ int gimme;
     error_count = 0;
     curcop = &compiling;
     curcop->cop_arybase = 0;
-    rs = "\n";
-    rslen = 1;
-    rschar = '\n';
-    rspara = 0;
+    SvREFCNT_dec(rs);
+    rs = newSVpv("\n", 1);
     sv_setpv(GvSV(errgv),"");
     if (yyparse() || error_count || !eval_root) {
        SV **newsp;
@@ -2003,16 +2005,12 @@ int gimme;
        LEAVE;
        if (optype == OP_REQUIRE)
            DIE("%s", SvPVx(GvSV(errgv), na));
-       rs = nrs;
-       rslen = nrslen;
-       rschar = nrschar;
-       rspara = (nrslen == 2);
+       SvREFCNT_dec(rs);
+       rs = SvREFCNT_inc(nrs);
        RETPUSHUNDEF;
     }
-    rs = nrs;
-    rslen = nrslen;
-    rschar = nrschar;
-    rspara = (nrslen == 2);
+    SvREFCNT_dec(rs);
+    rs = SvREFCNT_inc(nrs);
     compiling.cop_line = 0;
     SAVEFREEOP(eval_root);
     if (gimme & G_ARRAY)