In EBCDIC cannot test compile Net::Cmd without Convert::EBCDIC.
[p5sagit/p5-mst-13.2.git] / toke.c
diff --git a/toke.c b/toke.c
index af117bc..e6d7abc 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -5099,10 +5099,9 @@ Perl_yylex(pTHX)
        case KEY_write:
 #ifdef EBCDIC
        {
-           static char ctl_l[2];
-
-           if (ctl_l[0] == '\0')
-               ctl_l[0] = toCTRL('L');
+           char ctl_l[2];
+           ctl_l[0] = toCTRL('L');
+           ctl_l[1] = '\0';
            gv_fetchpv(ctl_l,TRUE, SVt_PV);
        }
 #else
@@ -6646,12 +6645,29 @@ S_scan_inputsymbol(pTHX_ char *start)
               add symbol table ops
            */
            if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
-               OP *o = newOP(OP_PADSV, 0);
-               o->op_targ = tmp;
-               PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
+               SV *namesv = AvARRAY(PL_comppad_name)[tmp];
+               if (SvFLAGS(namesv) & SVpad_OUR) {
+                   SV *sym = sv_2mortal(newSVpv(HvNAME(GvSTASH(namesv)),0));
+                   sv_catpvn(sym, "::", 2);
+                   sv_catpv(sym, d+1);
+                   d = SvPVX(sym);
+                   goto intro_sym;
+               }
+               else {
+                   OP *o = newOP(OP_PADSV, 0);
+                   o->op_targ = tmp;
+                   PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
+               }
            }
            else {
-               GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
+               GV *gv;
+               ++d;
+intro_sym:
+               gv = gv_fetchpv(d,
+                               (PL_in_eval
+                                ? (GV_ADDMULTI | GV_ADDINEVAL)
+                                : TRUE),
+                               SVt_PV);
                PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
                                            newUNOP(OP_RV2SV, 0,
                                                newGVOP(OP_GV, 0, gv)));