Adding the new test would be swell.
[p5sagit/p5-mst-13.2.git] / toke.c
diff --git a/toke.c b/toke.c
index 214e439..0781a9a 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -3773,7 +3773,7 @@ Perl_yylex(pTHX)
                TERM(THING);
            }
            /* avoid v123abc() or $h{v1}, allow C<print v10;> */
-           else if (!isALPHA(*start) && (PL_expect == XTERM || PL_expect == XREF)) {
+           else if (!isALPHA(*start) && (PL_expect == XTERM || PL_expect == XREF || PL_expect == XSTATE)) {
                char c = *start;
                GV *gv;
                *start = '\0';
@@ -5629,7 +5629,7 @@ Perl_keyword(pTHX_ register char *d, I32 len)
            if (strEQ(d,"rindex"))              return -KEY_rindex;
            break;
        case 7:
-           if (strEQ(d,"require"))             return -KEY_require;
+           if (strEQ(d,"require"))             return KEY_require;
            if (strEQ(d,"reverse"))             return -KEY_reverse;
            if (strEQ(d,"readdir"))             return -KEY_readdir;
            break;
@@ -7189,29 +7189,21 @@ Perl_scan_num(pTHX_ char *start, YYSTYPE* lvalp)
                lastub = s++;
            }
 
-           /* read off the first digit */
-           if (isDIGIT(*s)) {
-               if (d >= e)
-                   Perl_croak(aTHX_ number_too_long);
-               *d++ = *s++;
-           }
-
            /* read digits of exponent */
            while (isDIGIT(*s) || *s == '_') {
                if (isDIGIT(*s)) {
                    if (d >= e)
                        Perl_croak(aTHX_ number_too_long);
-                   *d++ = *s;
+                   *d++ = *s++;
                }
                else {
                   if (ckWARN(WARN_SYNTAX) &&
                       ((lastub && s == lastub + 1) ||
-                       !isDIGIT(s[1])))
+                       (!isDIGIT(s[1]) && s[1] != '_')))
                       Perl_warner(aTHX_ WARN_SYNTAX,
                                   "Misplaced _ in number");
-                  lastub = s;
+                  lastub = s++;
                }
-               s++;
            }
        }