This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
1378d39ded6b930155414110160849625c484756
[perl5.git] / toke.c
1 /*    toke.c
2  *
3  *    Copyright (c) 1991-1999, Larry Wall
4  *
5  *    You may distribute under the terms of either the GNU General Public
6  *    License or the Artistic License, as specified in the README file.
7  *
8  */
9
10 /*
11  *   "It all comes from here, the stench and the peril."  --Frodo
12  */
13
14 #include "EXTERN.h"
15 #define PERL_IN_TOKE_C
16 #include "perl.h"
17
18 #define yychar  PL_yychar
19 #define yylval  PL_yylval
20
21 static char ident_too_long[] = "Identifier too long";
22
23 #define UTF (PL_hints & HINT_UTF8)
24 /*
25  * Note: we try to be careful never to call the isXXX_utf8() functions
26  * unless we're pretty sure we've seen the beginning of a UTF-8 character
27  * (that is, the two high bits are set).  Otherwise we risk loading in the
28  * heavy-duty SWASHINIT and SWASHGET routines unnecessarily.
29  */
30 #define isIDFIRST_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
31                                 ? isIDFIRST(*(p)) \
32                                 : isIDFIRST_utf8((U8*)p))
33 #define isALNUM_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
34                                 ? isALNUM(*(p)) \
35                                 : isALNUM_utf8((U8*)p))
36
37 /* In variables name $^X, these are the legal values for X.  
38  * 1999-02-27 mjd-perl-patch@plover.com */
39 #define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
40
41 /* The following are arranged oddly so that the guard on the switch statement
42  * can get by with a single comparison (if the compiler is smart enough).
43  */
44
45 /* #define LEX_NOTPARSING               11 is done in perl.h. */
46
47 #define LEX_NORMAL              10
48 #define LEX_INTERPNORMAL         9
49 #define LEX_INTERPCASEMOD        8
50 #define LEX_INTERPPUSH           7
51 #define LEX_INTERPSTART          6
52 #define LEX_INTERPEND            5
53 #define LEX_INTERPENDMAYBE       4
54 #define LEX_INTERPCONCAT         3
55 #define LEX_INTERPCONST          2
56 #define LEX_FORMLINE             1
57 #define LEX_KNOWNEXT             0
58
59 #ifdef I_FCNTL
60 #include <fcntl.h>
61 #endif
62 #ifdef I_SYS_FILE
63 #include <sys/file.h>
64 #endif
65
66 /* XXX If this causes problems, set i_unistd=undef in the hint file.  */
67 #ifdef I_UNISTD
68 #  include <unistd.h> /* Needed for execv() */
69 #endif
70
71
72 #ifdef ff_next
73 #undef ff_next
74 #endif
75
76 #ifdef USE_PURE_BISON
77 YYSTYPE* yylval_pointer = NULL;
78 int* yychar_pointer = NULL;
79 #  undef yylval
80 #  undef yychar
81 #  define yylval (*yylval_pointer)
82 #  define yychar (*yychar_pointer)
83 #  define PERL_YYLEX_PARAM yylval_pointer,yychar_pointer
84 #  undef yylex
85 #  define yylex()       Perl_yylex(aTHX_ yylval_pointer, yychar_pointer)
86 #endif
87
88 #include "keywords.h"
89
90 #ifdef CLINE
91 #undef CLINE
92 #endif
93 #define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
94
95 #define TOKEN(retval) return (PL_bufptr = s,(int)retval)
96 #define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
97 #define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
98 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
99 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
100 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
101 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
102 #define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
103 #define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
104 #define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
105 #define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
106 #define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
107 #define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
108 #define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
109 #define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
110 #define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
111 #define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
112 #define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
113 #define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
114 #define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
115
116 /* This bit of chicanery makes a unary function followed by
117  * a parenthesis into a function with one argument, highest precedence.
118  */
119 #define UNI(f) return(yylval.ival = f, \
120         PL_expect = XTERM, \
121         PL_bufptr = s, \
122         PL_last_uni = PL_oldbufptr, \
123         PL_last_lop_op = f, \
124         (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
125
126 #define UNIBRACK(f) return(yylval.ival = f, \
127         PL_bufptr = s, \
128         PL_last_uni = PL_oldbufptr, \
129         (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
130
131 /* grandfather return to old style */
132 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
133
134 STATIC int
135 S_ao(pTHX_ int toketype)
136 {
137     if (*PL_bufptr == '=') {
138         PL_bufptr++;
139         if (toketype == ANDAND)
140             yylval.ival = OP_ANDASSIGN;
141         else if (toketype == OROR)
142             yylval.ival = OP_ORASSIGN;
143         toketype = ASSIGNOP;
144     }
145     return toketype;
146 }
147
148 STATIC void
149 S_no_op(pTHX_ char *what, char *s)
150 {
151     char *oldbp = PL_bufptr;
152     bool is_first = (PL_oldbufptr == PL_linestart);
153
154     PL_bufptr = s;
155     yywarn(Perl_form(aTHX_ "%s found where operator expected", what));
156     if (is_first)
157         Perl_warn(aTHX_ "\t(Missing semicolon on previous line?)\n");
158     else if (PL_oldoldbufptr && isIDFIRST_lazy(PL_oldoldbufptr)) {
159         char *t;
160         for (t = PL_oldoldbufptr; *t && (isALNUM_lazy(t) || *t == ':'); t++) ;
161         if (t < PL_bufptr && isSPACE(*t))
162             Perl_warn(aTHX_ "\t(Do you need to predeclare %.*s?)\n",
163                 t - PL_oldoldbufptr, PL_oldoldbufptr);
164
165     }
166     else if (s <= oldbp)
167         Perl_warn(aTHX_ "\t(Missing operator before end of line?)\n");
168     else
169         Perl_warn(aTHX_ "\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
170     PL_bufptr = oldbp;
171 }
172
173 STATIC void
174 S_missingterm(pTHX_ char *s)
175 {
176     char tmpbuf[3];
177     char q;
178     if (s) {
179         char *nl = strrchr(s,'\n');
180         if (nl)
181             *nl = '\0';
182     }
183     else if (
184 #ifdef EBCDIC
185         iscntrl(PL_multi_close)
186 #else
187         PL_multi_close < 32 || PL_multi_close == 127
188 #endif
189         ) {
190         *tmpbuf = '^';
191         tmpbuf[1] = toCTRL(PL_multi_close);
192         s = "\\n";
193         tmpbuf[2] = '\0';
194         s = tmpbuf;
195     }
196     else {
197         *tmpbuf = PL_multi_close;
198         tmpbuf[1] = '\0';
199         s = tmpbuf;
200     }
201     q = strchr(s,'"') ? '\'' : '"';
202     Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
203 }
204
205 void
206 Perl_deprecate(pTHX_ char *s)
207 {
208     dTHR;
209     if (ckWARN(WARN_DEPRECATED))
210         Perl_warner(aTHX_ WARN_DEPRECATED, "Use of %s is deprecated", s);
211 }
212
213 STATIC void
214 S_depcom(pTHX)
215 {
216     deprecate("comma-less variable list");
217 }
218
219 #ifdef WIN32
220
221 STATIC I32
222 S_win32_textfilter(pTHX_ int idx, SV *sv, int maxlen)
223 {
224  I32 count = FILTER_READ(idx+1, sv, maxlen);
225  if (count > 0 && !maxlen)
226   win32_strip_return(sv);
227  return count;
228 }
229 #endif
230
231 STATIC I32
232 S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
233 {
234     I32 count = FILTER_READ(idx+1, sv, maxlen);
235     if (count) {
236         U8* tmps;
237         U8* tend;
238         New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
239         tend = utf16_to_utf8((U16*)SvPVX(sv), tmps, SvCUR(sv));
240         sv_usepvn(sv, (char*)tmps, tend - tmps);
241     
242     }
243     return count;
244 }
245
246 STATIC I32
247 S_utf16rev_textfilter(pTHX_ int idx, SV *sv, int maxlen)
248 {
249     I32 count = FILTER_READ(idx+1, sv, maxlen);
250     if (count) {
251         U8* tmps;
252         U8* tend;
253         New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
254         tend = utf16_to_utf8_reversed((U16*)SvPVX(sv), tmps, SvCUR(sv));
255         sv_usepvn(sv, (char*)tmps, tend - tmps);
256     
257     }
258     return count;
259 }
260
261 void
262 Perl_lex_start(pTHX_ SV *line)
263 {
264     dTHR;
265     char *s;
266     STRLEN len;
267
268     SAVEI32(PL_lex_dojoin);
269     SAVEI32(PL_lex_brackets);
270     SAVEI32(PL_lex_fakebrack);
271     SAVEI32(PL_lex_casemods);
272     SAVEI32(PL_lex_starts);
273     SAVEI32(PL_lex_state);
274     SAVESPTR(PL_lex_inpat);
275     SAVEI32(PL_lex_inwhat);
276     SAVEI16(PL_curcop->cop_line);
277     SAVEPPTR(PL_bufptr);
278     SAVEPPTR(PL_bufend);
279     SAVEPPTR(PL_oldbufptr);
280     SAVEPPTR(PL_oldoldbufptr);
281     SAVEPPTR(PL_linestart);
282     SAVESPTR(PL_linestr);
283     SAVEPPTR(PL_lex_brackstack);
284     SAVEPPTR(PL_lex_casestack);
285     SAVEDESTRUCTOR(S_restore_rsfp, PL_rsfp);
286     SAVESPTR(PL_lex_stuff);
287     SAVEI32(PL_lex_defer);
288     SAVESPTR(PL_lex_repl);
289     SAVEDESTRUCTOR(S_restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
290     SAVEDESTRUCTOR(S_restore_lex_expect, PL_tokenbuf + PL_expect);
291
292     PL_lex_state = LEX_NORMAL;
293     PL_lex_defer = 0;
294     PL_expect = XSTATE;
295     PL_lex_brackets = 0;
296     PL_lex_fakebrack = 0;
297     New(899, PL_lex_brackstack, 120, char);
298     New(899, PL_lex_casestack, 12, char);
299     SAVEFREEPV(PL_lex_brackstack);
300     SAVEFREEPV(PL_lex_casestack);
301     PL_lex_casemods = 0;
302     *PL_lex_casestack = '\0';
303     PL_lex_dojoin = 0;
304     PL_lex_starts = 0;
305     PL_lex_stuff = Nullsv;
306     PL_lex_repl = Nullsv;
307     PL_lex_inpat = 0;
308     PL_lex_inwhat = 0;
309     PL_linestr = line;
310     if (SvREADONLY(PL_linestr))
311         PL_linestr = sv_2mortal(newSVsv(PL_linestr));
312     s = SvPV(PL_linestr, len);
313     if (len && s[len-1] != ';') {
314         if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
315             PL_linestr = sv_2mortal(newSVsv(PL_linestr));
316         sv_catpvn(PL_linestr, "\n;", 2);
317     }
318     SvTEMP_off(PL_linestr);
319     PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
320     PL_bufend = PL_bufptr + SvCUR(PL_linestr);
321     SvREFCNT_dec(PL_rs);
322     PL_rs = newSVpvn("\n", 1);
323     PL_rsfp = 0;
324 }
325
326 void
327 Perl_lex_end(pTHX)
328 {
329     PL_doextract = FALSE;
330 }
331
332 STATIC void
333 S_restore_rsfp(pTHX_ void *f)
334 {
335     PerlIO *fp = (PerlIO*)f;
336
337     if (PL_rsfp == PerlIO_stdin())
338         PerlIO_clearerr(PL_rsfp);
339     else if (PL_rsfp && (PL_rsfp != fp))
340         PerlIO_close(PL_rsfp);
341     PL_rsfp = fp;
342 }
343
344 STATIC void
345 S_restore_expect(pTHX_ void *e)
346 {
347     /* a safe way to store a small integer in a pointer */
348     PL_expect = (expectation)((char *)e - PL_tokenbuf);
349 }
350
351 STATIC void
352 S_restore_lex_expect(pTHX_ void *e)
353 {
354     /* a safe way to store a small integer in a pointer */
355     PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);
356 }
357
358 STATIC void
359 S_incline(pTHX_ char *s)
360 {
361     dTHR;
362     char *t;
363     char *n;
364     char ch;
365     int sawline = 0;
366
367     PL_curcop->cop_line++;
368     if (*s++ != '#')
369         return;
370     while (*s == ' ' || *s == '\t') s++;
371     if (strnEQ(s, "line ", 5)) {
372         s += 5;
373         sawline = 1;
374     }
375     if (!isDIGIT(*s))
376         return;
377     n = s;
378     while (isDIGIT(*s))
379         s++;
380     while (*s == ' ' || *s == '\t')
381         s++;
382     if (*s == '"' && (t = strchr(s+1, '"')))
383         s++;
384     else {
385         if (!sawline)
386             return;             /* false alarm */
387         for (t = s; !isSPACE(*t); t++) ;
388     }
389     ch = *t;
390     *t = '\0';
391     if (t - s > 0)
392         PL_curcop->cop_filegv = gv_fetchfile(s);
393     else
394         PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
395     *t = ch;
396     PL_curcop->cop_line = atoi(n)-1;
397 }
398
399 STATIC char *
400 S_skipspace(pTHX_ register char *s)
401 {
402     dTHR;
403     if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
404         while (s < PL_bufend && (*s == ' ' || *s == '\t'))
405             s++;
406         return s;
407     }
408     for (;;) {
409         STRLEN prevlen;
410         while (s < PL_bufend && isSPACE(*s)) {
411             if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
412                 incline(s);
413         }
414         if (s < PL_bufend && *s == '#') {
415             while (s < PL_bufend && *s != '\n')
416                 s++;
417             if (s < PL_bufend) {
418                 s++;
419                 if (PL_in_eval && !PL_rsfp) {
420                     incline(s);
421                     continue;
422                 }
423             }
424         }
425         if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL)
426             return s;
427         if ((s = filter_gets(PL_linestr, PL_rsfp, (prevlen = SvCUR(PL_linestr)))) == Nullch) {
428             if (PL_minus_n || PL_minus_p) {
429                 sv_setpv(PL_linestr,PL_minus_p ?
430                          ";}continue{print or die qq(-p destination: $!\\n)" :
431                          "");
432                 sv_catpv(PL_linestr,";}");
433                 PL_minus_n = PL_minus_p = 0;
434             }
435             else
436                 sv_setpv(PL_linestr,";");
437             PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
438             PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
439             if (PL_preprocess && !PL_in_eval)
440                 (void)PerlProc_pclose(PL_rsfp);
441             else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
442                 PerlIO_clearerr(PL_rsfp);
443             else
444                 (void)PerlIO_close(PL_rsfp);
445             PL_rsfp = Nullfp;
446             return s;
447         }
448         PL_linestart = PL_bufptr = s + prevlen;
449         PL_bufend = s + SvCUR(PL_linestr);
450         s = PL_bufptr;
451         incline(s);
452         if (PERLDB_LINE && PL_curstash != PL_debstash) {
453             SV *sv = NEWSV(85,0);
454
455             sv_upgrade(sv, SVt_PVMG);
456             sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
457             av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
458         }
459     }
460 }
461
462 STATIC void
463 S_check_uni(pTHX)
464 {
465     char *s;
466     char ch;
467     char *t;
468
469     if (PL_oldoldbufptr != PL_last_uni)
470         return;
471     while (isSPACE(*PL_last_uni))
472         PL_last_uni++;
473     for (s = PL_last_uni; isALNUM_lazy(s) || *s == '-'; s++) ;
474     if ((t = strchr(s, '(')) && t < PL_bufptr)
475         return;
476     ch = *s;
477     *s = '\0';
478     Perl_warn(aTHX_ "Warning: Use of \"%s\" without parens is ambiguous", PL_last_uni);
479     *s = ch;
480 }
481
482 #ifdef CRIPPLED_CC
483
484 #undef UNI
485 #define UNI(f) return uni(f,s)
486
487 STATIC int
488 S_uni(pTHX_ I32 f, char *s)
489 {
490     yylval.ival = f;
491     PL_expect = XTERM;
492     PL_bufptr = s;
493     PL_last_uni = PL_oldbufptr;
494     PL_last_lop_op = f;
495     if (*s == '(')
496         return FUNC1;
497     s = skipspace(s);
498     if (*s == '(')
499         return FUNC1;
500     else
501         return UNIOP;
502 }
503
504 #endif /* CRIPPLED_CC */
505
506 #define LOP(f,x) return lop(f,x,s)
507
508 STATIC I32
509 S_lop(pTHX_ I32 f, expectation x, char *s)
510 {
511     dTHR;
512     yylval.ival = f;
513     CLINE;
514     PL_expect = x;
515     PL_bufptr = s;
516     PL_last_lop = PL_oldbufptr;
517     PL_last_lop_op = f;
518     if (PL_nexttoke)
519         return LSTOP;
520     if (*s == '(')
521         return FUNC;
522     s = skipspace(s);
523     if (*s == '(')
524         return FUNC;
525     else
526         return LSTOP;
527 }
528
529 STATIC void 
530 S_force_next(pTHX_ I32 type)
531 {
532     PL_nexttype[PL_nexttoke] = type;
533     PL_nexttoke++;
534     if (PL_lex_state != LEX_KNOWNEXT) {
535         PL_lex_defer = PL_lex_state;
536         PL_lex_expect = PL_expect;
537         PL_lex_state = LEX_KNOWNEXT;
538     }
539 }
540
541 STATIC char *
542 S_force_word(pTHX_ register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
543 {
544     register char *s;
545     STRLEN len;
546     
547     start = skipspace(start);
548     s = start;
549     if (isIDFIRST_lazy(s) ||
550         (allow_pack && *s == ':') ||
551         (allow_initial_tick && *s == '\'') )
552     {
553         s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
554         if (check_keyword && keyword(PL_tokenbuf, len))
555             return start;
556         if (token == METHOD) {
557             s = skipspace(s);
558             if (*s == '(')
559                 PL_expect = XTERM;
560             else {
561                 PL_expect = XOPERATOR;
562             }
563         }
564         PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
565         PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
566         force_next(token);
567     }
568     return s;
569 }
570
571 STATIC void
572 S_force_ident(pTHX_ register char *s, int kind)
573 {
574     if (s && *s) {
575         OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
576         PL_nextval[PL_nexttoke].opval = o;
577         force_next(WORD);
578         if (kind) {
579             dTHR;               /* just for in_eval */
580             o->op_private = OPpCONST_ENTERED;
581             /* XXX see note in pp_entereval() for why we forgo typo
582                warnings if the symbol must be introduced in an eval.
583                GSAR 96-10-12 */
584             gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
585                 kind == '$' ? SVt_PV :
586                 kind == '@' ? SVt_PVAV :
587                 kind == '%' ? SVt_PVHV :
588                               SVt_PVGV
589                 );
590         }
591     }
592 }
593
594 STATIC char *
595 S_force_version(pTHX_ char *s)
596 {
597     OP *version = Nullop;
598
599     s = skipspace(s);
600
601     /* default VERSION number -- GBARR */
602
603     if(isDIGIT(*s)) {
604         char *d;
605         int c;
606         for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
607         if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
608             s = scan_num(s);
609             /* real VERSION number -- GBARR */
610             version = yylval.opval;
611         }
612     }
613
614     /* NOTE: The parser sees the package name and the VERSION swapped */
615     PL_nextval[PL_nexttoke].opval = version;
616     force_next(WORD); 
617
618     return (s);
619 }
620
621 STATIC SV *
622 S_tokeq(pTHX_ SV *sv)
623 {
624     register char *s;
625     register char *send;
626     register char *d;
627     STRLEN len = 0;
628     SV *pv = sv;
629
630     if (!SvLEN(sv))
631         goto finish;
632
633     s = SvPV_force(sv, len);
634     if (SvIVX(sv) == -1)
635         goto finish;
636     send = s + len;
637     while (s < send && *s != '\\')
638         s++;
639     if (s == send)
640         goto finish;
641     d = s;
642     if ( PL_hints & HINT_NEW_STRING )
643         pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
644     while (s < send) {
645         if (*s == '\\') {
646             if (s + 1 < send && (s[1] == '\\'))
647                 s++;            /* all that, just for this */
648         }
649         *d++ = *s++;
650     }
651     *d = '\0';
652     SvCUR_set(sv, d - SvPVX(sv));
653   finish:
654     if ( PL_hints & HINT_NEW_STRING )
655        return new_constant(NULL, 0, "q", sv, pv, "q");
656     return sv;
657 }
658
659 STATIC I32
660 S_sublex_start(pTHX)
661 {
662     register I32 op_type = yylval.ival;
663
664     if (op_type == OP_NULL) {
665         yylval.opval = PL_lex_op;
666         PL_lex_op = Nullop;
667         return THING;
668     }
669     if (op_type == OP_CONST || op_type == OP_READLINE) {
670         SV *sv = tokeq(PL_lex_stuff);
671
672         if (SvTYPE(sv) == SVt_PVIV) {
673             /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
674             STRLEN len;
675             char *p;
676             SV *nsv;
677
678             p = SvPV(sv, len);
679             nsv = newSVpvn(p, len);
680             SvREFCNT_dec(sv);
681             sv = nsv;
682         } 
683         yylval.opval = (OP*)newSVOP(op_type, 0, sv);
684         PL_lex_stuff = Nullsv;
685         return THING;
686     }
687
688     PL_sublex_info.super_state = PL_lex_state;
689     PL_sublex_info.sub_inwhat = op_type;
690     PL_sublex_info.sub_op = PL_lex_op;
691     PL_lex_state = LEX_INTERPPUSH;
692
693     PL_expect = XTERM;
694     if (PL_lex_op) {
695         yylval.opval = PL_lex_op;
696         PL_lex_op = Nullop;
697         return PMFUNC;
698     }
699     else
700         return FUNC;
701 }
702
703 STATIC I32
704 S_sublex_push(pTHX)
705 {
706     dTHR;
707     ENTER;
708
709     PL_lex_state = PL_sublex_info.super_state;
710     SAVEI32(PL_lex_dojoin);
711     SAVEI32(PL_lex_brackets);
712     SAVEI32(PL_lex_fakebrack);
713     SAVEI32(PL_lex_casemods);
714     SAVEI32(PL_lex_starts);
715     SAVEI32(PL_lex_state);
716     SAVESPTR(PL_lex_inpat);
717     SAVEI32(PL_lex_inwhat);
718     SAVEI16(PL_curcop->cop_line);
719     SAVEPPTR(PL_bufptr);
720     SAVEPPTR(PL_oldbufptr);
721     SAVEPPTR(PL_oldoldbufptr);
722     SAVEPPTR(PL_linestart);
723     SAVESPTR(PL_linestr);
724     SAVEPPTR(PL_lex_brackstack);
725     SAVEPPTR(PL_lex_casestack);
726
727     PL_linestr = PL_lex_stuff;
728     PL_lex_stuff = Nullsv;
729
730     PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
731     PL_bufend += SvCUR(PL_linestr);
732     SAVEFREESV(PL_linestr);
733
734     PL_lex_dojoin = FALSE;
735     PL_lex_brackets = 0;
736     PL_lex_fakebrack = 0;
737     New(899, PL_lex_brackstack, 120, char);
738     New(899, PL_lex_casestack, 12, char);
739     SAVEFREEPV(PL_lex_brackstack);
740     SAVEFREEPV(PL_lex_casestack);
741     PL_lex_casemods = 0;
742     *PL_lex_casestack = '\0';
743     PL_lex_starts = 0;
744     PL_lex_state = LEX_INTERPCONCAT;
745     PL_curcop->cop_line = PL_multi_start;
746
747     PL_lex_inwhat = PL_sublex_info.sub_inwhat;
748     if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
749         PL_lex_inpat = PL_sublex_info.sub_op;
750     else
751         PL_lex_inpat = Nullop;
752
753     return '(';
754 }
755
756 STATIC I32
757 S_sublex_done(pTHX)
758 {
759     if (!PL_lex_starts++) {
760         PL_expect = XOPERATOR;
761         yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpvn("",0));
762         return THING;
763     }
764
765     if (PL_lex_casemods) {              /* oops, we've got some unbalanced parens */
766         PL_lex_state = LEX_INTERPCASEMOD;
767         return yylex();
768     }
769
770     /* Is there a right-hand side to take care of? */
771     if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
772         PL_linestr = PL_lex_repl;
773         PL_lex_inpat = 0;
774         PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
775         PL_bufend += SvCUR(PL_linestr);
776         SAVEFREESV(PL_linestr);
777         PL_lex_dojoin = FALSE;
778         PL_lex_brackets = 0;
779         PL_lex_fakebrack = 0;
780         PL_lex_casemods = 0;
781         *PL_lex_casestack = '\0';
782         PL_lex_starts = 0;
783         if (SvEVALED(PL_lex_repl)) {
784             PL_lex_state = LEX_INTERPNORMAL;
785             PL_lex_starts++;
786             /*  we don't clear PL_lex_repl here, so that we can check later
787                 whether this is an evalled subst; that means we rely on the
788                 logic to ensure sublex_done() is called again only via the
789                 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
790         }
791         else {
792             PL_lex_state = LEX_INTERPCONCAT;
793             PL_lex_repl = Nullsv;
794         }
795         return ',';
796     }
797     else {
798         LEAVE;
799         PL_bufend = SvPVX(PL_linestr);
800         PL_bufend += SvCUR(PL_linestr);
801         PL_expect = XOPERATOR;
802         return ')';
803     }
804 }
805
806 /*
807   scan_const
808
809   Extracts a pattern, double-quoted string, or transliteration.  This
810   is terrifying code.
811
812   It looks at lex_inwhat and PL_lex_inpat to find out whether it's
813   processing a pattern (PL_lex_inpat is true), a transliteration
814   (lex_inwhat & OP_TRANS is true), or a double-quoted string.
815
816   Returns a pointer to the character scanned up to. Iff this is
817   advanced from the start pointer supplied (ie if anything was
818   successfully parsed), will leave an OP for the substring scanned
819   in yylval. Caller must intuit reason for not parsing further
820   by looking at the next characters herself.
821
822   In patterns:
823     backslashes:
824       double-quoted style: \r and \n
825       regexp special ones: \D \s
826       constants: \x3
827       backrefs: \1 (deprecated in substitution replacements)
828       case and quoting: \U \Q \E
829     stops on @ and $, but not for $ as tail anchor
830
831   In transliterations:
832     characters are VERY literal, except for - not at the start or end
833     of the string, which indicates a range.  scan_const expands the
834     range to the full set of intermediate characters.
835
836   In double-quoted strings:
837     backslashes:
838       double-quoted style: \r and \n
839       constants: \x3
840       backrefs: \1 (deprecated)
841       case and quoting: \U \Q \E
842     stops on @ and $
843
844   scan_const does *not* construct ops to handle interpolated strings.
845   It stops processing as soon as it finds an embedded $ or @ variable
846   and leaves it to the caller to work out what's going on.
847
848   @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
849
850   $ in pattern could be $foo or could be tail anchor.  Assumption:
851   it's a tail anchor if $ is the last thing in the string, or if it's
852   followed by one of ")| \n\t"
853
854   \1 (backreferences) are turned into $1
855
856   The structure of the code is
857       while (there's a character to process) {
858           handle transliteration ranges
859           skip regexp comments
860           skip # initiated comments in //x patterns
861           check for embedded @foo
862           check for embedded scalars
863           if (backslash) {
864               leave intact backslashes from leave (below)
865               deprecate \1 in strings and sub replacements
866               handle string-changing backslashes \l \U \Q \E, etc.
867               switch (what was escaped) {
868                   handle - in a transliteration (becomes a literal -)
869                   handle \132 octal characters
870                   handle 0x15 hex characters
871                   handle \cV (control V)
872                   handle printf backslashes (\f, \r, \n, etc)
873               } (end switch)
874           } (end if backslash)
875     } (end while character to read)
876                   
877 */
878
879 STATIC char *
880 S_scan_const(pTHX_ char *start)
881 {
882     register char *send = PL_bufend;            /* end of the constant */
883     SV *sv = NEWSV(93, send - start);           /* sv for the constant */
884     register char *s = start;                   /* start of the constant */
885     register char *d = SvPVX(sv);               /* destination for copies */
886     bool dorange = FALSE;                       /* are we in a translit range? */
887     I32 len;                                    /* ? */
888     I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
889         ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
890         : UTF;
891     I32 thisutf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
892         ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
893         : UTF;
894
895     /* leaveit is the set of acceptably-backslashed characters */
896     char *leaveit =
897         PL_lex_inpat
898             ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
899             : "";
900
901     while (s < send || dorange) {
902         /* get transliterations out of the way (they're most literal) */
903         if (PL_lex_inwhat == OP_TRANS) {
904             /* expand a range A-Z to the full set of characters.  AIE! */
905             if (dorange) {
906                 I32 i;                          /* current expanded character */
907                 I32 min;                        /* first character in range */
908                 I32 max;                        /* last character in range */
909
910                 i = d - SvPVX(sv);              /* remember current offset */
911                 SvGROW(sv, SvLEN(sv) + 256);    /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */
912                 d = SvPVX(sv) + i;              /* restore d after the grow potentially has changed the ptr */
913                 d -= 2;                         /* eat the first char and the - */
914
915                 min = (U8)*d;                   /* first char in range */
916                 max = (U8)d[1];                 /* last char in range  */
917
918 #ifndef ASCIIish
919                 if ((isLOWER(min) && isLOWER(max)) ||
920                     (isUPPER(min) && isUPPER(max))) {
921                     if (isLOWER(min)) {
922                         for (i = min; i <= max; i++)
923                             if (isLOWER(i))
924                                 *d++ = i;
925                     } else {
926                         for (i = min; i <= max; i++)
927                             if (isUPPER(i))
928                                 *d++ = i;
929                     }
930                 }
931                 else
932 #endif
933                     for (i = min; i <= max; i++)
934                         *d++ = i;
935
936                 /* mark the range as done, and continue */
937                 dorange = FALSE;
938                 continue;
939             }
940
941             /* range begins (ignore - as first or last char) */
942             else if (*s == '-' && s+1 < send  && s != start) {
943                 if (utf) {
944                     *d++ = (char)0xff;  /* use illegal utf8 byte--see pmtrans */
945                     s++;
946                     continue;
947                 }
948                 dorange = TRUE;
949                 s++;
950             }
951         }
952
953         /* if we get here, we're not doing a transliteration */
954
955         /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
956            except for the last char, which will be done separately. */
957         else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
958             if (s[2] == '#') {
959                 while (s < send && *s != ')')
960                     *d++ = *s++;
961             } else if (s[2] == '{'
962                        || s[2] == 'p' && s[3] == '{') { /* This should march regcomp.c */
963                 I32 count = 1;
964                 char *regparse = s + (s[2] == '{' ? 3 : 4);
965                 char c;
966
967                 while (count && (c = *regparse)) {
968                     if (c == '\\' && regparse[1])
969                         regparse++;
970                     else if (c == '{') 
971                         count++;
972                     else if (c == '}') 
973                         count--;
974                     regparse++;
975                 }
976                 if (*regparse != ')') {
977                     regparse--;         /* Leave one char for continuation. */
978                     yyerror("Sequence (?{...}) not terminated or not {}-balanced");
979                 }
980                 while (s < regparse)
981                     *d++ = *s++;
982             }
983         }
984
985         /* likewise skip #-initiated comments in //x patterns */
986         else if (*s == '#' && PL_lex_inpat &&
987           ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
988             while (s+1 < send && *s != '\n')
989                 *d++ = *s++;
990         }
991
992         /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
993         else if (*s == '@' && s[1] && (isALNUM_lazy(s+1) || strchr(":'{$", s[1])))
994             break;
995
996         /* check for embedded scalars.  only stop if we're sure it's a
997            variable.
998         */
999         else if (*s == '$') {
1000             if (!PL_lex_inpat)  /* not a regexp, so $ must be var */
1001                 break;
1002             if (s + 1 < send && !strchr("()| \n\t", s[1]))
1003                 break;          /* in regexp, $ might be tail anchor */
1004         }
1005
1006         /* (now in tr/// code again) */
1007
1008         if (*s & 0x80 && thisutf) {
1009             dTHR;                       /* only for ckWARN */
1010             if (ckWARN(WARN_UTF8)) {
1011                 (void)utf8_to_uv((U8*)s, &len); /* could cvt latin-1 to utf8 here... */
1012                 if (len) {
1013                     while (len--)
1014                         *d++ = *s++;
1015                     continue;
1016                 }
1017             }
1018         }
1019
1020         /* backslashes */
1021         if (*s == '\\' && s+1 < send) {
1022             s++;
1023
1024             /* some backslashes we leave behind */
1025             if (*leaveit && *s && strchr(leaveit, *s)) {
1026                 *d++ = '\\';
1027                 *d++ = *s++;
1028                 continue;
1029             }
1030
1031             /* deprecate \1 in strings and substitution replacements */
1032             if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1033                 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1034             {
1035                 dTHR;                   /* only for ckWARN */
1036                 if (ckWARN(WARN_SYNTAX))
1037                     Perl_warner(aTHX_ WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1038                 *--s = '$';
1039                 break;
1040             }
1041
1042             /* string-change backslash escapes */
1043             if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1044                 --s;
1045                 break;
1046             }
1047
1048             /* if we get here, it's either a quoted -, or a digit */
1049             switch (*s) {
1050
1051             /* quoted - in transliterations */
1052             case '-':
1053                 if (PL_lex_inwhat == OP_TRANS) {
1054                     *d++ = *s++;
1055                     continue;
1056                 }
1057                 /* FALL THROUGH */
1058             default:
1059                 {
1060                     dTHR;
1061                     if (ckWARN(WARN_UNSAFE) && isALPHA(*s))
1062                         Perl_warner(aTHX_ WARN_UNSAFE, 
1063                                "Unrecognized escape \\%c passed through",
1064                                *s);
1065                     /* default action is to copy the quoted character */
1066                     *d++ = *s++;
1067                     continue;
1068                 }
1069
1070             /* \132 indicates an octal constant */
1071             case '0': case '1': case '2': case '3':
1072             case '4': case '5': case '6': case '7':
1073                 *d++ = scan_oct(s, 3, &len);
1074                 s += len;
1075                 continue;
1076
1077             /* \x24 indicates a hex constant */
1078             case 'x':
1079                 ++s;
1080                 if (*s == '{') {
1081                     char* e = strchr(s, '}');
1082
1083                     if (!e) {
1084                         yyerror("Missing right brace on \\x{}");
1085                         e = s;
1086                     }
1087                     if (!utf) {
1088                         dTHR;
1089                         if (ckWARN(WARN_UTF8))
1090                             Perl_warner(aTHX_ WARN_UTF8,
1091                                    "Use of \\x{} without utf8 declaration");
1092                     }
1093                     /* note: utf always shorter than hex */
1094                     d = (char*)uv_to_utf8((U8*)d,
1095                                           scan_hex(s + 1, e - s - 1, &len));
1096                     s = e + 1;
1097                         
1098                 }
1099                 else {
1100                     UV uv = (UV)scan_hex(s, 2, &len);
1101                     if (utf && PL_lex_inwhat == OP_TRANS &&
1102                         utf != (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1103                     {
1104                         d = (char*)uv_to_utf8((U8*)d, uv);      /* doing a CU or UC */
1105                     }
1106                     else {
1107                         if (uv >= 127 && UTF) {
1108                             dTHR;
1109                             if (ckWARN(WARN_UTF8))
1110                                 Perl_warner(aTHX_ WARN_UTF8,
1111                                     "\\x%.*s will produce malformed UTF-8 character; use \\x{%.*s} for that",
1112                                     len,s,len,s);
1113                         }
1114                         *d++ = (char)uv;
1115                     }
1116                     s += len;
1117                 }
1118                 continue;
1119
1120             /* \c is a control character */
1121             case 'c':
1122                 s++;
1123 #ifdef EBCDIC
1124                 *d = *s++;
1125                 if (isLOWER(*d))
1126                    *d = toUPPER(*d);
1127                 *d++ = toCTRL(*d); 
1128 #else
1129                 len = *s++;
1130                 *d++ = toCTRL(len);
1131 #endif
1132                 continue;
1133
1134             /* printf-style backslashes, formfeeds, newlines, etc */
1135             case 'b':
1136                 *d++ = '\b';
1137                 break;
1138             case 'n':
1139                 *d++ = '\n';
1140                 break;
1141             case 'r':
1142                 *d++ = '\r';
1143                 break;
1144             case 'f':
1145                 *d++ = '\f';
1146                 break;
1147             case 't':
1148                 *d++ = '\t';
1149                 break;
1150             case 'e':
1151                 *d++ = '\033';
1152                 break;
1153             case 'a':
1154                 *d++ = '\007';
1155                 break;
1156             } /* end switch */
1157
1158             s++;
1159             continue;
1160         } /* end if (backslash) */
1161
1162         *d++ = *s++;
1163     } /* while loop to process each character */
1164
1165     /* terminate the string and set up the sv */
1166     *d = '\0';
1167     SvCUR_set(sv, d - SvPVX(sv));
1168     SvPOK_on(sv);
1169
1170     /* shrink the sv if we allocated more than we used */
1171     if (SvCUR(sv) + 5 < SvLEN(sv)) {
1172         SvLEN_set(sv, SvCUR(sv) + 1);
1173         Renew(SvPVX(sv), SvLEN(sv), char);
1174     }
1175
1176     /* return the substring (via yylval) only if we parsed anything */
1177     if (s > PL_bufptr) {
1178         if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1179             sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"), 
1180                               sv, Nullsv,
1181                               ( PL_lex_inwhat == OP_TRANS 
1182                                 ? "tr"
1183                                 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1184                                     ? "s"
1185                                     : "qq")));
1186         yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1187     } else
1188         SvREFCNT_dec(sv);
1189     return s;
1190 }
1191
1192 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1193 STATIC int
1194 S_intuit_more(pTHX_ register char *s)
1195 {
1196     if (PL_lex_brackets)
1197         return TRUE;
1198     if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1199         return TRUE;
1200     if (*s != '{' && *s != '[')
1201         return FALSE;
1202     if (!PL_lex_inpat)
1203         return TRUE;
1204
1205     /* In a pattern, so maybe we have {n,m}. */
1206     if (*s == '{') {
1207         s++;
1208         if (!isDIGIT(*s))
1209             return TRUE;
1210         while (isDIGIT(*s))
1211             s++;
1212         if (*s == ',')
1213             s++;
1214         while (isDIGIT(*s))
1215             s++;
1216         if (*s == '}')
1217             return FALSE;
1218         return TRUE;
1219         
1220     }
1221
1222     /* On the other hand, maybe we have a character class */
1223
1224     s++;
1225     if (*s == ']' || *s == '^')
1226         return FALSE;
1227     else {
1228         int weight = 2;         /* let's weigh the evidence */
1229         char seen[256];
1230         unsigned char un_char = 255, last_un_char;
1231         char *send = strchr(s,']');
1232         char tmpbuf[sizeof PL_tokenbuf * 4];
1233
1234         if (!send)              /* has to be an expression */
1235             return TRUE;
1236
1237         Zero(seen,256,char);
1238         if (*s == '$')
1239             weight -= 3;
1240         else if (isDIGIT(*s)) {
1241             if (s[1] != ']') {
1242                 if (isDIGIT(s[1]) && s[2] == ']')
1243                     weight -= 10;
1244             }
1245             else
1246                 weight -= 100;
1247         }
1248         for (; s < send; s++) {
1249             last_un_char = un_char;
1250             un_char = (unsigned char)*s;
1251             switch (*s) {
1252             case '@':
1253             case '&':
1254             case '$':
1255                 weight -= seen[un_char] * 10;
1256                 if (isALNUM_lazy(s+1)) {
1257                     scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1258                     if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1259                         weight -= 100;
1260                     else
1261                         weight -= 10;
1262                 }
1263                 else if (*s == '$' && s[1] &&
1264                   strchr("[#!%*<>()-=",s[1])) {
1265                     if (/*{*/ strchr("])} =",s[2]))
1266                         weight -= 10;
1267                     else
1268                         weight -= 1;
1269                 }
1270                 break;
1271             case '\\':
1272                 un_char = 254;
1273                 if (s[1]) {
1274                     if (strchr("wds]",s[1]))
1275                         weight += 100;
1276                     else if (seen['\''] || seen['"'])
1277                         weight += 1;
1278                     else if (strchr("rnftbxcav",s[1]))
1279                         weight += 40;
1280                     else if (isDIGIT(s[1])) {
1281                         weight += 40;
1282                         while (s[1] && isDIGIT(s[1]))
1283                             s++;
1284                     }
1285                 }
1286                 else
1287                     weight += 100;
1288                 break;
1289             case '-':
1290                 if (s[1] == '\\')
1291                     weight += 50;
1292                 if (strchr("aA01! ",last_un_char))
1293                     weight += 30;
1294                 if (strchr("zZ79~",s[1]))
1295                     weight += 30;
1296                 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1297                     weight -= 5;        /* cope with negative subscript */
1298                 break;
1299             default:
1300                 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1301                         isALPHA(*s) && s[1] && isALPHA(s[1])) {
1302                     char *d = tmpbuf;
1303                     while (isALPHA(*s))
1304                         *d++ = *s++;
1305                     *d = '\0';
1306                     if (keyword(tmpbuf, d - tmpbuf))
1307                         weight -= 150;
1308                 }
1309                 if (un_char == last_un_char + 1)
1310                     weight += 5;
1311                 weight -= seen[un_char];
1312                 break;
1313             }
1314             seen[un_char]++;
1315         }
1316         if (weight >= 0)        /* probably a character class */
1317             return FALSE;
1318     }
1319
1320     return TRUE;
1321 }
1322
1323 STATIC int
1324 S_intuit_method(pTHX_ char *start, GV *gv)
1325 {
1326     char *s = start + (*start == '$');
1327     char tmpbuf[sizeof PL_tokenbuf];
1328     STRLEN len;
1329     GV* indirgv;
1330
1331     if (gv) {
1332         CV *cv;
1333         if (GvIO(gv))
1334             return 0;
1335         if ((cv = GvCVu(gv))) {
1336             char *proto = SvPVX(cv);
1337             if (proto) {
1338                 if (*proto == ';')
1339                     proto++;
1340                 if (*proto == '*')
1341                     return 0;
1342             }
1343         } else
1344             gv = 0;
1345     }
1346     s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1347     if (*start == '$') {
1348         if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1349             return 0;
1350         s = skipspace(s);
1351         PL_bufptr = start;
1352         PL_expect = XREF;
1353         return *s == '(' ? FUNCMETH : METHOD;
1354     }
1355     if (!keyword(tmpbuf, len)) {
1356         if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1357             len -= 2;
1358             tmpbuf[len] = '\0';
1359             goto bare_package;
1360         }
1361         indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1362         if (indirgv && GvCVu(indirgv))
1363             return 0;
1364         /* filehandle or package name makes it a method */
1365         if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1366             s = skipspace(s);
1367             if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1368                 return 0;       /* no assumptions -- "=>" quotes bearword */
1369       bare_package:
1370             PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1371                                                    newSVpvn(tmpbuf,len));
1372             PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1373             PL_expect = XTERM;
1374             force_next(WORD);
1375             PL_bufptr = s;
1376             return *s == '(' ? FUNCMETH : METHOD;
1377         }
1378     }
1379     return 0;
1380 }
1381
1382 STATIC char*
1383 S_incl_perldb(pTHX)
1384 {
1385     if (PL_perldb) {
1386         char *pdb = PerlEnv_getenv("PERL5DB");
1387
1388         if (pdb)
1389             return pdb;
1390         SETERRNO(0,SS$_NORMAL);
1391         return "BEGIN { require 'perl5db.pl' }";
1392     }
1393     return "";
1394 }
1395
1396
1397 /* Encoded script support. filter_add() effectively inserts a
1398  * 'pre-processing' function into the current source input stream. 
1399  * Note that the filter function only applies to the current source file
1400  * (e.g., it will not affect files 'require'd or 'use'd by this one).
1401  *
1402  * The datasv parameter (which may be NULL) can be used to pass
1403  * private data to this instance of the filter. The filter function
1404  * can recover the SV using the FILTER_DATA macro and use it to
1405  * store private buffers and state information.
1406  *
1407  * The supplied datasv parameter is upgraded to a PVIO type
1408  * and the IoDIRP field is used to store the function pointer.
1409  * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1410  * private use must be set using malloc'd pointers.
1411  */
1412
1413 SV *
1414 Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
1415 {
1416     if (!funcp){ /* temporary handy debugging hack to be deleted */
1417         PL_filter_debug = atoi((char*)datasv);
1418         return NULL;
1419     }
1420     if (!PL_rsfp_filters)
1421         PL_rsfp_filters = newAV();
1422     if (!datasv)
1423         datasv = NEWSV(255,0);
1424     if (!SvUPGRADE(datasv, SVt_PVIO))
1425         Perl_die(aTHX_ "Can't upgrade filter_add data to SVt_PVIO");
1426     IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
1427     if (PL_filter_debug) {
1428         STRLEN n_a;
1429         Perl_warn(aTHX_ "filter_add func %p (%s)", funcp, SvPV(datasv, n_a));
1430     }
1431     av_unshift(PL_rsfp_filters, 1);
1432     av_store(PL_rsfp_filters, 0, datasv) ;
1433     return(datasv);
1434 }
1435  
1436
1437 /* Delete most recently added instance of this filter function. */
1438 void
1439 Perl_filter_del(pTHX_ filter_t funcp)
1440 {
1441     if (PL_filter_debug)
1442         Perl_warn(aTHX_ "filter_del func %p", funcp);
1443     if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1444         return;
1445     /* if filter is on top of stack (usual case) just pop it off */
1446     if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (DIR*)funcp){
1447         IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) = NULL;
1448         sv_free(av_pop(PL_rsfp_filters));
1449
1450         return;
1451     }
1452     /* we need to search for the correct entry and clear it     */
1453     Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
1454 }
1455
1456
1457 /* Invoke the n'th filter function for the current rsfp.         */
1458 I32
1459 Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
1460             
1461                
1462                         /* 0 = read one text line */
1463 {
1464     filter_t funcp;
1465     SV *datasv = NULL;
1466
1467     if (!PL_rsfp_filters)
1468         return -1;
1469     if (idx > AvFILLp(PL_rsfp_filters)){       /* Any more filters?     */
1470         /* Provide a default input filter to make life easy.    */
1471         /* Note that we append to the line. This is handy.      */
1472         if (PL_filter_debug)
1473             Perl_warn(aTHX_ "filter_read %d: from rsfp\n", idx);
1474         if (maxlen) { 
1475             /* Want a block */
1476             int len ;
1477             int old_len = SvCUR(buf_sv) ;
1478
1479             /* ensure buf_sv is large enough */
1480             SvGROW(buf_sv, old_len + maxlen) ;
1481             if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1482                 if (PerlIO_error(PL_rsfp))
1483                     return -1;          /* error */
1484                 else
1485                     return 0 ;          /* end of file */
1486             }
1487             SvCUR_set(buf_sv, old_len + len) ;
1488         } else {
1489             /* Want a line */
1490             if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1491                 if (PerlIO_error(PL_rsfp))
1492                     return -1;          /* error */
1493                 else
1494                     return 0 ;          /* end of file */
1495             }
1496         }
1497         return SvCUR(buf_sv);
1498     }
1499     /* Skip this filter slot if filter has been deleted */
1500     if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
1501         if (PL_filter_debug)
1502             Perl_warn(aTHX_ "filter_read %d: skipped (filter deleted)\n", idx);
1503         return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1504     }
1505     /* Get function pointer hidden within datasv        */
1506     funcp = (filter_t)IoDIRP(datasv);
1507     if (PL_filter_debug) {
1508         STRLEN n_a;
1509         Perl_warn(aTHX_ "filter_read %d: via function %p (%s)\n",
1510                 idx, funcp, SvPV(datasv,n_a));
1511     }
1512     /* Call function. The function is expected to       */
1513     /* call "FILTER_READ(idx+1, buf_sv)" first.         */
1514     /* Return: <0:error, =0:eof, >0:not eof             */
1515     return (*funcp)(aTHXo_ idx, buf_sv, maxlen);
1516 }
1517
1518 STATIC char *
1519 S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append)
1520 {
1521 #ifdef WIN32FILTER
1522     if (!PL_rsfp_filters) {
1523         filter_add(win32_textfilter,NULL);
1524     }
1525 #endif
1526     if (PL_rsfp_filters) {
1527
1528         if (!append)
1529             SvCUR_set(sv, 0);   /* start with empty line        */
1530         if (FILTER_READ(0, sv, 0) > 0)
1531             return ( SvPVX(sv) ) ;
1532         else
1533             return Nullch ;
1534     }
1535     else
1536         return (sv_gets(sv, fp, append));
1537 }
1538
1539
1540 #ifdef DEBUGGING
1541     static char* exp_name[] =
1542         { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
1543 #endif
1544
1545 /*
1546   yylex
1547
1548   Works out what to call the token just pulled out of the input
1549   stream.  The yacc parser takes care of taking the ops we return and
1550   stitching them into a tree.
1551
1552   Returns:
1553     PRIVATEREF
1554
1555   Structure:
1556       if read an identifier
1557           if we're in a my declaration
1558               croak if they tried to say my($foo::bar)
1559               build the ops for a my() declaration
1560           if it's an access to a my() variable
1561               are we in a sort block?
1562                   croak if my($a); $a <=> $b
1563               build ops for access to a my() variable
1564           if in a dq string, and they've said @foo and we can't find @foo
1565               croak
1566           build ops for a bareword
1567       if we already built the token before, use it.
1568 */
1569
1570 int
1571 #ifdef USE_PURE_BISON
1572 Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp)
1573 #else
1574 Perl_yylex(pTHX)
1575 #endif
1576 {
1577     dTHR;
1578     register char *s;
1579     register char *d;
1580     register I32 tmp;
1581     STRLEN len;
1582     GV *gv = Nullgv;
1583     GV **gvp = 0;
1584
1585 #ifdef USE_PURE_BISON
1586     yylval_pointer = lvalp;
1587     yychar_pointer = lcharp;
1588 #endif
1589
1590     /* check if there's an identifier for us to look at */
1591     if (PL_pending_ident) {
1592         /* pit holds the identifier we read and pending_ident is reset */
1593         char pit = PL_pending_ident;
1594         PL_pending_ident = 0;
1595
1596         /* if we're in a my(), we can't allow dynamics here.
1597            $foo'bar has already been turned into $foo::bar, so
1598            just check for colons.
1599
1600            if it's a legal name, the OP is a PADANY.
1601         */
1602         if (PL_in_my) {
1603             if (strchr(PL_tokenbuf,':'))
1604                 yyerror(Perl_form(aTHX_ PL_no_myglob,PL_tokenbuf));
1605
1606             yylval.opval = newOP(OP_PADANY, 0);
1607             yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
1608             return PRIVATEREF;
1609         }
1610
1611         /* 
1612            build the ops for accesses to a my() variable.
1613
1614            Deny my($a) or my($b) in a sort block, *if* $a or $b is
1615            then used in a comparison.  This catches most, but not
1616            all cases.  For instance, it catches
1617                sort { my($a); $a <=> $b }
1618            but not
1619                sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1620            (although why you'd do that is anyone's guess).
1621         */
1622
1623         if (!strchr(PL_tokenbuf,':')) {
1624 #ifdef USE_THREADS
1625             /* Check for single character per-thread SVs */
1626             if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1627                 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1628                 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
1629             {
1630                 yylval.opval = newOP(OP_THREADSV, 0);
1631                 yylval.opval->op_targ = tmp;
1632                 return PRIVATEREF;
1633             }
1634 #endif /* USE_THREADS */
1635             if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
1636                 /* if it's a sort block and they're naming $a or $b */
1637                 if (PL_last_lop_op == OP_SORT &&
1638                     PL_tokenbuf[0] == '$' &&
1639                     (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
1640                     && !PL_tokenbuf[2])
1641                 {
1642                     for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
1643                          d < PL_bufend && *d != '\n';
1644                          d++)
1645                     {
1646                         if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
1647                             Perl_croak(aTHX_ "Can't use \"my %s\" in sort comparison",
1648                                   PL_tokenbuf);
1649                         }
1650                     }
1651                 }
1652
1653                 yylval.opval = newOP(OP_PADANY, 0);
1654                 yylval.opval->op_targ = tmp;
1655                 return PRIVATEREF;
1656             }
1657         }
1658
1659         /*
1660            Whine if they've said @foo in a doublequoted string,
1661            and @foo isn't a variable we can find in the symbol
1662            table.
1663         */
1664         if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
1665             GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
1666             if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
1667                 yyerror(Perl_form(aTHX_ "In string, %s now must be written as \\%s",
1668                              PL_tokenbuf, PL_tokenbuf));
1669         }
1670
1671         /* build ops for a bareword */
1672         yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
1673         yylval.opval->op_private = OPpCONST_ENTERED;
1674         gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
1675                    ((PL_tokenbuf[0] == '$') ? SVt_PV
1676                     : (PL_tokenbuf[0] == '@') ? SVt_PVAV
1677                     : SVt_PVHV));
1678         return WORD;
1679     }
1680
1681     /* no identifier pending identification */
1682
1683     switch (PL_lex_state) {
1684 #ifdef COMMENTARY
1685     case LEX_NORMAL:            /* Some compilers will produce faster */
1686     case LEX_INTERPNORMAL:      /* code if we comment these out. */
1687         break;
1688 #endif
1689
1690     /* when we're already built the next token, just pull it out the queue */
1691     case LEX_KNOWNEXT:
1692         PL_nexttoke--;
1693         yylval = PL_nextval[PL_nexttoke];
1694         if (!PL_nexttoke) {
1695             PL_lex_state = PL_lex_defer;
1696             PL_expect = PL_lex_expect;
1697             PL_lex_defer = LEX_NORMAL;
1698         }
1699         return(PL_nexttype[PL_nexttoke]);
1700
1701     /* interpolated case modifiers like \L \U, including \Q and \E.
1702        when we get here, PL_bufptr is at the \
1703     */
1704     case LEX_INTERPCASEMOD:
1705 #ifdef DEBUGGING
1706         if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
1707             Perl_croak(aTHX_ "panic: INTERPCASEMOD");
1708 #endif
1709         /* handle \E or end of string */
1710         if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
1711             char oldmod;
1712
1713             /* if at a \E */
1714             if (PL_lex_casemods) {
1715                 oldmod = PL_lex_casestack[--PL_lex_casemods];
1716                 PL_lex_casestack[PL_lex_casemods] = '\0';
1717
1718                 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
1719                     PL_bufptr += 2;
1720                     PL_lex_state = LEX_INTERPCONCAT;
1721                 }
1722                 return ')';
1723             }
1724             if (PL_bufptr != PL_bufend)
1725                 PL_bufptr += 2;
1726             PL_lex_state = LEX_INTERPCONCAT;
1727             return yylex();
1728         }
1729         else {
1730             s = PL_bufptr + 1;
1731             if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
1732                 tmp = *s, *s = s[2], s[2] = tmp;        /* misordered... */
1733             if (strchr("LU", *s) &&
1734                 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
1735             {
1736                 PL_lex_casestack[--PL_lex_casemods] = '\0';
1737                 return ')';
1738             }
1739             if (PL_lex_casemods > 10) {
1740                 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
1741                 if (newlb != PL_lex_casestack) {
1742                     SAVEFREEPV(newlb);
1743                     PL_lex_casestack = newlb;
1744                 }
1745             }
1746             PL_lex_casestack[PL_lex_casemods++] = *s;
1747             PL_lex_casestack[PL_lex_casemods] = '\0';
1748             PL_lex_state = LEX_INTERPCONCAT;
1749             PL_nextval[PL_nexttoke].ival = 0;
1750             force_next('(');
1751             if (*s == 'l')
1752                 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
1753             else if (*s == 'u')
1754                 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
1755             else if (*s == 'L')
1756                 PL_nextval[PL_nexttoke].ival = OP_LC;
1757             else if (*s == 'U')
1758                 PL_nextval[PL_nexttoke].ival = OP_UC;
1759             else if (*s == 'Q')
1760                 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
1761             else
1762                 Perl_croak(aTHX_ "panic: yylex");
1763             PL_bufptr = s + 1;
1764             force_next(FUNC);
1765             if (PL_lex_starts) {
1766                 s = PL_bufptr;
1767                 PL_lex_starts = 0;
1768                 Aop(OP_CONCAT);
1769             }
1770             else
1771                 return yylex();
1772         }
1773
1774     case LEX_INTERPPUSH:
1775         return sublex_push();
1776
1777     case LEX_INTERPSTART:
1778         if (PL_bufptr == PL_bufend)
1779             return sublex_done();
1780         PL_expect = XTERM;
1781         PL_lex_dojoin = (*PL_bufptr == '@');
1782         PL_lex_state = LEX_INTERPNORMAL;
1783         if (PL_lex_dojoin) {
1784             PL_nextval[PL_nexttoke].ival = 0;
1785             force_next(',');
1786 #ifdef USE_THREADS
1787             PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
1788             PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
1789             force_next(PRIVATEREF);
1790 #else
1791             force_ident("\"", '$');
1792 #endif /* USE_THREADS */
1793             PL_nextval[PL_nexttoke].ival = 0;
1794             force_next('$');
1795             PL_nextval[PL_nexttoke].ival = 0;
1796             force_next('(');
1797             PL_nextval[PL_nexttoke].ival = OP_JOIN;     /* emulate join($", ...) */
1798             force_next(FUNC);
1799         }
1800         if (PL_lex_starts++) {
1801             s = PL_bufptr;
1802             Aop(OP_CONCAT);
1803         }
1804         return yylex();
1805
1806     case LEX_INTERPENDMAYBE:
1807         if (intuit_more(PL_bufptr)) {
1808             PL_lex_state = LEX_INTERPNORMAL;    /* false alarm, more expr */
1809             break;
1810         }
1811         /* FALL THROUGH */
1812
1813     case LEX_INTERPEND:
1814         if (PL_lex_dojoin) {
1815             PL_lex_dojoin = FALSE;
1816             PL_lex_state = LEX_INTERPCONCAT;
1817             return ')';
1818         }
1819         if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
1820             && SvEVALED(PL_lex_repl))
1821         {
1822             if (PL_bufptr != PL_bufend)
1823                 Perl_croak(aTHX_ "Bad evalled substitution pattern");
1824             PL_lex_repl = Nullsv;
1825         }
1826         /* FALLTHROUGH */
1827     case LEX_INTERPCONCAT:
1828 #ifdef DEBUGGING
1829         if (PL_lex_brackets)
1830             Perl_croak(aTHX_ "panic: INTERPCONCAT");
1831 #endif
1832         if (PL_bufptr == PL_bufend)
1833             return sublex_done();
1834
1835         if (SvIVX(PL_linestr) == '\'') {
1836             SV *sv = newSVsv(PL_linestr);
1837             if (!PL_lex_inpat)
1838                 sv = tokeq(sv);
1839             else if ( PL_hints & HINT_NEW_RE )
1840                 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
1841             yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1842             s = PL_bufend;
1843         }
1844         else {
1845             s = scan_const(PL_bufptr);
1846             if (*s == '\\')
1847                 PL_lex_state = LEX_INTERPCASEMOD;
1848             else
1849                 PL_lex_state = LEX_INTERPSTART;
1850         }
1851
1852         if (s != PL_bufptr) {
1853             PL_nextval[PL_nexttoke] = yylval;
1854             PL_expect = XTERM;
1855             force_next(THING);
1856             if (PL_lex_starts++)
1857                 Aop(OP_CONCAT);
1858             else {
1859                 PL_bufptr = s;
1860                 return yylex();
1861             }
1862         }
1863
1864         return yylex();
1865     case LEX_FORMLINE:
1866         PL_lex_state = LEX_NORMAL;
1867         s = scan_formline(PL_bufptr);
1868         if (!PL_lex_formbrack)
1869             goto rightbracket;
1870         OPERATOR(';');
1871     }
1872
1873     s = PL_bufptr;
1874     PL_oldoldbufptr = PL_oldbufptr;
1875     PL_oldbufptr = s;
1876     DEBUG_p( {
1877         PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
1878     } )
1879
1880   retry:
1881     switch (*s) {
1882     default:
1883         if (isIDFIRST_lazy(s))
1884             goto keylookup;
1885         Perl_croak(aTHX_ "Unrecognized character \\x%02X", *s & 255);
1886     case 4:
1887     case 26:
1888         goto fake_eof;                  /* emulate EOF on ^D or ^Z */
1889     case 0:
1890         if (!PL_rsfp) {
1891             PL_last_uni = 0;
1892             PL_last_lop = 0;
1893             if (PL_lex_brackets)
1894                 yyerror("Missing right curly or square bracket");
1895             TOKEN(0);
1896         }
1897         if (s++ < PL_bufend)
1898             goto retry;                 /* ignore stray nulls */
1899         PL_last_uni = 0;
1900         PL_last_lop = 0;
1901         if (!PL_in_eval && !PL_preambled) {
1902             PL_preambled = TRUE;
1903             sv_setpv(PL_linestr,incl_perldb());
1904             if (SvCUR(PL_linestr))
1905                 sv_catpv(PL_linestr,";");
1906             if (PL_preambleav){
1907                 while(AvFILLp(PL_preambleav) >= 0) {
1908                     SV *tmpsv = av_shift(PL_preambleav);
1909                     sv_catsv(PL_linestr, tmpsv);
1910                     sv_catpv(PL_linestr, ";");
1911                     sv_free(tmpsv);
1912                 }
1913                 sv_free((SV*)PL_preambleav);
1914                 PL_preambleav = NULL;
1915             }
1916             if (PL_minus_n || PL_minus_p) {
1917                 sv_catpv(PL_linestr, "LINE: while (<>) {");
1918                 if (PL_minus_l)
1919                     sv_catpv(PL_linestr,"chomp;");
1920                 if (PL_minus_a) {
1921                     GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
1922                     if (gv)
1923                         GvIMPORTED_AV_on(gv);
1924                     if (PL_minus_F) {
1925                         if (strchr("/'\"", *PL_splitstr)
1926                               && strchr(PL_splitstr + 1, *PL_splitstr))
1927                             Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s);", PL_splitstr);
1928                         else {
1929                             char delim;
1930                             s = "'~#\200\1'"; /* surely one char is unused...*/
1931                             while (s[1] && strchr(PL_splitstr, *s))  s++;
1932                             delim = *s;
1933                             Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s%c",
1934                                       "q" + (delim == '\''), delim);
1935                             for (s = PL_splitstr; *s; s++) {
1936                                 if (*s == '\\')
1937                                     sv_catpvn(PL_linestr, "\\", 1);
1938                                 sv_catpvn(PL_linestr, s, 1);
1939                             }
1940                             Perl_sv_catpvf(aTHX_ PL_linestr, "%c);", delim);
1941                         }
1942                     }
1943                     else
1944                         sv_catpv(PL_linestr,"@F=split(' ');");
1945                 }
1946             }
1947             sv_catpv(PL_linestr, "\n");
1948             PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1949             PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1950             if (PERLDB_LINE && PL_curstash != PL_debstash) {
1951                 SV *sv = NEWSV(85,0);
1952
1953                 sv_upgrade(sv, SVt_PVMG);
1954                 sv_setsv(sv,PL_linestr);
1955                 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1956             }
1957             goto retry;
1958         }
1959         do {
1960             if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
1961               fake_eof:
1962                 if (PL_rsfp) {
1963                     if (PL_preprocess && !PL_in_eval)
1964                         (void)PerlProc_pclose(PL_rsfp);
1965                     else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
1966                         PerlIO_clearerr(PL_rsfp);
1967                     else
1968                         (void)PerlIO_close(PL_rsfp);
1969                     PL_rsfp = Nullfp;
1970                     PL_doextract = FALSE;
1971                 }
1972                 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
1973                     sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
1974                     sv_catpv(PL_linestr,";}");
1975                     PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1976                     PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1977                     PL_minus_n = PL_minus_p = 0;
1978                     goto retry;
1979                 }
1980                 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1981                 sv_setpv(PL_linestr,"");
1982                 TOKEN(';');     /* not infinite loop because rsfp is NULL now */
1983             }
1984             if (PL_doextract) {
1985                 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
1986                     PL_doextract = FALSE;
1987
1988                 /* Incest with pod. */
1989                 if (*s == '=' && strnEQ(s, "=cut", 4)) {
1990                     sv_setpv(PL_linestr, "");
1991                     PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1992                     PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1993                     PL_doextract = FALSE;
1994                 }
1995             }
1996             incline(s);
1997         } while (PL_doextract);
1998         PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
1999         if (PERLDB_LINE && PL_curstash != PL_debstash) {
2000             SV *sv = NEWSV(85,0);
2001
2002             sv_upgrade(sv, SVt_PVMG);
2003             sv_setsv(sv,PL_linestr);
2004             av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
2005         }
2006         PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2007         if (PL_curcop->cop_line == 1) {
2008             while (s < PL_bufend && isSPACE(*s))
2009                 s++;
2010             if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
2011                 s++;
2012             d = Nullch;
2013             if (!PL_in_eval) {
2014                 if (*s == '#' && *(s+1) == '!')
2015                     d = s + 2;
2016 #ifdef ALTERNATE_SHEBANG
2017                 else {
2018                     static char as[] = ALTERNATE_SHEBANG;
2019                     if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2020                         d = s + (sizeof(as) - 1);
2021                 }
2022 #endif /* ALTERNATE_SHEBANG */
2023             }
2024             if (d) {
2025                 char *ipath;
2026                 char *ipathend;
2027
2028                 while (isSPACE(*d))
2029                     d++;
2030                 ipath = d;
2031                 while (*d && !isSPACE(*d))
2032                     d++;
2033                 ipathend = d;
2034
2035 #ifdef ARG_ZERO_IS_SCRIPT
2036                 if (ipathend > ipath) {
2037                     /*
2038                      * HP-UX (at least) sets argv[0] to the script name,
2039                      * which makes $^X incorrect.  And Digital UNIX and Linux,
2040                      * at least, set argv[0] to the basename of the Perl
2041                      * interpreter. So, having found "#!", we'll set it right.
2042                      */
2043                     SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2044                     assert(SvPOK(x) || SvGMAGICAL(x));
2045                     if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
2046                         sv_setpvn(x, ipath, ipathend - ipath);
2047                         SvSETMAGIC(x);
2048                     }
2049                     TAINT_NOT;  /* $^X is always tainted, but that's OK */
2050                 }
2051 #endif /* ARG_ZERO_IS_SCRIPT */
2052
2053                 /*
2054                  * Look for options.
2055                  */
2056                 d = instr(s,"perl -");
2057                 if (!d)
2058                     d = instr(s,"perl");
2059 #ifdef ALTERNATE_SHEBANG
2060                 /*
2061                  * If the ALTERNATE_SHEBANG on this system starts with a
2062                  * character that can be part of a Perl expression, then if
2063                  * we see it but not "perl", we're probably looking at the
2064                  * start of Perl code, not a request to hand off to some
2065                  * other interpreter.  Similarly, if "perl" is there, but
2066                  * not in the first 'word' of the line, we assume the line
2067                  * contains the start of the Perl program.
2068                  */
2069                 if (d && *s != '#') {
2070                     char *c = ipath;
2071                     while (*c && !strchr("; \t\r\n\f\v#", *c))
2072                         c++;
2073                     if (c < d)
2074                         d = Nullch;     /* "perl" not in first word; ignore */
2075                     else
2076                         *s = '#';       /* Don't try to parse shebang line */
2077                 }
2078 #endif /* ALTERNATE_SHEBANG */
2079                 if (!d &&
2080                     *s == '#' &&
2081                     ipathend > ipath &&
2082                     !PL_minus_c &&
2083                     !instr(s,"indir") &&
2084                     instr(PL_origargv[0],"perl"))
2085                 {
2086                     char **newargv;
2087
2088                     *ipathend = '\0';
2089                     s = ipathend + 1;
2090                     while (s < PL_bufend && isSPACE(*s))
2091                         s++;
2092                     if (s < PL_bufend) {
2093                         Newz(899,newargv,PL_origargc+3,char*);
2094                         newargv[1] = s;
2095                         while (s < PL_bufend && !isSPACE(*s))
2096                             s++;
2097                         *s = '\0';
2098                         Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2099                     }
2100                     else
2101                         newargv = PL_origargv;
2102                     newargv[0] = ipath;
2103                     PerlProc_execv(ipath, newargv);
2104                     Perl_croak(aTHX_ "Can't exec %s", ipath);
2105                 }
2106                 if (d) {
2107                     U32 oldpdb = PL_perldb;
2108                     bool oldn = PL_minus_n;
2109                     bool oldp = PL_minus_p;
2110
2111                     while (*d && !isSPACE(*d)) d++;
2112                     while (*d == ' ' || *d == '\t') d++;
2113
2114                     if (*d++ == '-') {
2115                         do {
2116                             if (*d == 'M' || *d == 'm') {
2117                                 char *m = d;
2118                                 while (*d && !isSPACE(*d)) d++;
2119                                 Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
2120                                       (int)(d - m), m);
2121                             }
2122                             d = moreswitches(d);
2123                         } while (d);
2124                         if (PERLDB_LINE && !oldpdb ||
2125                             ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
2126                               /* if we have already added "LINE: while (<>) {",
2127                                  we must not do it again */
2128                         {
2129                             sv_setpv(PL_linestr, "");
2130                             PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2131                             PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2132                             PL_preambled = FALSE;
2133                             if (PERLDB_LINE)
2134                                 (void)gv_fetchfile(PL_origfilename);
2135                             goto retry;
2136                         }
2137                     }
2138                 }
2139             }
2140         }
2141         if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2142             PL_bufptr = s;
2143             PL_lex_state = LEX_FORMLINE;
2144             return yylex();
2145         }
2146         goto retry;
2147     case '\r':
2148 #ifdef PERL_STRICT_CR
2149         Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
2150         Perl_croak(aTHX_ 
2151       "(Maybe you didn't strip carriage returns after a network transfer?)\n");
2152 #endif
2153     case ' ': case '\t': case '\f': case 013:
2154         s++;
2155         goto retry;
2156     case '#':
2157     case '\n':
2158         if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2159             d = PL_bufend;
2160             while (s < d && *s != '\n')
2161                 s++;
2162             if (s < d)
2163                 s++;
2164             incline(s);
2165             if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2166                 PL_bufptr = s;
2167                 PL_lex_state = LEX_FORMLINE;
2168                 return yylex();
2169             }
2170         }
2171         else {
2172             *s = '\0';
2173             PL_bufend = s;
2174         }
2175         goto retry;
2176     case '-':
2177         if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2178             s++;
2179             PL_bufptr = s;
2180             tmp = *s++;
2181
2182             while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2183                 s++;
2184
2185             if (strnEQ(s,"=>",2)) {
2186                 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2187                 OPERATOR('-');          /* unary minus */
2188             }
2189             PL_last_uni = PL_oldbufptr;
2190             PL_last_lop_op = OP_FTEREAD;        /* good enough */
2191             switch (tmp) {
2192             case 'r': FTST(OP_FTEREAD);
2193             case 'w': FTST(OP_FTEWRITE);
2194             case 'x': FTST(OP_FTEEXEC);
2195             case 'o': FTST(OP_FTEOWNED);
2196             case 'R': FTST(OP_FTRREAD);
2197             case 'W': FTST(OP_FTRWRITE);
2198             case 'X': FTST(OP_FTREXEC);
2199             case 'O': FTST(OP_FTROWNED);
2200             case 'e': FTST(OP_FTIS);
2201             case 'z': FTST(OP_FTZERO);
2202             case 's': FTST(OP_FTSIZE);
2203             case 'f': FTST(OP_FTFILE);
2204             case 'd': FTST(OP_FTDIR);
2205             case 'l': FTST(OP_FTLINK);
2206             case 'p': FTST(OP_FTPIPE);
2207             case 'S': FTST(OP_FTSOCK);
2208             case 'u': FTST(OP_FTSUID);
2209             case 'g': FTST(OP_FTSGID);
2210             case 'k': FTST(OP_FTSVTX);
2211             case 'b': FTST(OP_FTBLK);
2212             case 'c': FTST(OP_FTCHR);
2213             case 't': FTST(OP_FTTTY);
2214             case 'T': FTST(OP_FTTEXT);
2215             case 'B': FTST(OP_FTBINARY);
2216             case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2217             case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2218             case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
2219             default:
2220                 Perl_croak(aTHX_ "Unrecognized file test: -%c", (int)tmp);
2221                 break;
2222             }
2223         }
2224         tmp = *s++;
2225         if (*s == tmp) {
2226             s++;
2227             if (PL_expect == XOPERATOR)
2228                 TERM(POSTDEC);
2229             else
2230                 OPERATOR(PREDEC);
2231         }
2232         else if (*s == '>') {
2233             s++;
2234             s = skipspace(s);
2235             if (isIDFIRST_lazy(s)) {
2236                 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2237                 TOKEN(ARROW);
2238             }
2239             else if (*s == '$')
2240                 OPERATOR(ARROW);
2241             else
2242                 TERM(ARROW);
2243         }
2244         if (PL_expect == XOPERATOR)
2245             Aop(OP_SUBTRACT);
2246         else {
2247             if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2248                 check_uni();
2249             OPERATOR('-');              /* unary minus */
2250         }
2251
2252     case '+':
2253         tmp = *s++;
2254         if (*s == tmp) {
2255             s++;
2256             if (PL_expect == XOPERATOR)
2257                 TERM(POSTINC);
2258             else
2259                 OPERATOR(PREINC);
2260         }
2261         if (PL_expect == XOPERATOR)
2262             Aop(OP_ADD);
2263         else {
2264             if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2265                 check_uni();
2266             OPERATOR('+');
2267         }
2268
2269     case '*':
2270         if (PL_expect != XOPERATOR) {
2271             s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2272             PL_expect = XOPERATOR;
2273             force_ident(PL_tokenbuf, '*');
2274             if (!*PL_tokenbuf)
2275                 PREREF('*');
2276             TERM('*');
2277         }
2278         s++;
2279         if (*s == '*') {
2280             s++;
2281             PWop(OP_POW);
2282         }
2283         Mop(OP_MULTIPLY);
2284
2285     case '%':
2286         if (PL_expect == XOPERATOR) {
2287             ++s;
2288             Mop(OP_MODULO);
2289         }
2290         PL_tokenbuf[0] = '%';
2291         s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2292         if (!PL_tokenbuf[1]) {
2293             if (s == PL_bufend)
2294                 yyerror("Final % should be \\% or %name");
2295             PREREF('%');
2296         }
2297         PL_pending_ident = '%';
2298         TERM('%');
2299
2300     case '^':
2301         s++;
2302         BOop(OP_BIT_XOR);
2303     case '[':
2304         PL_lex_brackets++;
2305         /* FALL THROUGH */
2306     case '~':
2307     case ',':
2308         tmp = *s++;
2309         OPERATOR(tmp);
2310     case ':':
2311         if (s[1] == ':') {
2312             len = 0;
2313             goto just_a_word;
2314         }
2315         s++;
2316         OPERATOR(':');
2317     case '(':
2318         s++;
2319         if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2320             PL_oldbufptr = PL_oldoldbufptr;             /* allow print(STDOUT 123) */
2321         else
2322             PL_expect = XTERM;
2323         TOKEN('(');
2324     case ';':
2325         if (PL_curcop->cop_line < PL_copline)
2326             PL_copline = PL_curcop->cop_line;
2327         tmp = *s++;
2328         OPERATOR(tmp);
2329     case ')':
2330         tmp = *s++;
2331         s = skipspace(s);
2332         if (*s == '{')
2333             PREBLOCK(tmp);
2334         TERM(tmp);
2335     case ']':
2336         s++;
2337         if (PL_lex_brackets <= 0)
2338             yyerror("Unmatched right square bracket");
2339         else
2340             --PL_lex_brackets;
2341         if (PL_lex_state == LEX_INTERPNORMAL) {
2342             if (PL_lex_brackets == 0) {
2343                 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
2344                     PL_lex_state = LEX_INTERPEND;
2345             }
2346         }
2347         TERM(']');
2348     case '{':
2349       leftbracket:
2350         s++;
2351         if (PL_lex_brackets > 100) {
2352             char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2353             if (newlb != PL_lex_brackstack) {
2354                 SAVEFREEPV(newlb);
2355                 PL_lex_brackstack = newlb;
2356             }
2357         }
2358         switch (PL_expect) {
2359         case XTERM:
2360             if (PL_lex_formbrack) {
2361                 s--;
2362                 PRETERMBLOCK(DO);
2363             }
2364             if (PL_oldoldbufptr == PL_last_lop)
2365                 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2366             else
2367                 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2368             OPERATOR(HASHBRACK);
2369         case XOPERATOR:
2370             while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2371                 s++;
2372             d = s;
2373             PL_tokenbuf[0] = '\0';
2374             if (d < PL_bufend && *d == '-') {
2375                 PL_tokenbuf[0] = '-';
2376                 d++;
2377                 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2378                     d++;
2379             }
2380             if (d < PL_bufend && isIDFIRST_lazy(d)) {
2381                 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2382                               FALSE, &len);
2383                 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2384                     d++;
2385                 if (*d == '}') {
2386                     char minus = (PL_tokenbuf[0] == '-');
2387                     s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2388                     if (minus)
2389                         force_next('-');
2390                 }
2391             }
2392             /* FALL THROUGH */
2393         case XBLOCK:
2394             PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2395             PL_expect = XSTATE;
2396             break;
2397         case XTERMBLOCK:
2398             PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2399             PL_expect = XSTATE;
2400             break;
2401         default: {
2402                 char *t;
2403                 if (PL_oldoldbufptr == PL_last_lop)
2404                     PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2405                 else
2406                     PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2407                 s = skipspace(s);
2408                 if (*s == '}')
2409                     OPERATOR(HASHBRACK);
2410                 /* This hack serves to disambiguate a pair of curlies
2411                  * as being a block or an anon hash.  Normally, expectation
2412                  * determines that, but in cases where we're not in a
2413                  * position to expect anything in particular (like inside
2414                  * eval"") we have to resolve the ambiguity.  This code
2415                  * covers the case where the first term in the curlies is a
2416                  * quoted string.  Most other cases need to be explicitly
2417                  * disambiguated by prepending a `+' before the opening
2418                  * curly in order to force resolution as an anon hash.
2419                  *
2420                  * XXX should probably propagate the outer expectation
2421                  * into eval"" to rely less on this hack, but that could
2422                  * potentially break current behavior of eval"".
2423                  * GSAR 97-07-21
2424                  */
2425                 t = s;
2426                 if (*s == '\'' || *s == '"' || *s == '`') {
2427                     /* common case: get past first string, handling escapes */
2428                     for (t++; t < PL_bufend && *t != *s;)
2429                         if (*t++ == '\\' && (*t == '\\' || *t == *s))
2430                             t++;
2431                     t++;
2432                 }
2433                 else if (*s == 'q') {
2434                     if (++t < PL_bufend
2435                         && (!isALNUM(*t)
2436                             || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
2437                                 && !isALNUM(*t)))) {
2438                         char *tmps;
2439                         char open, close, term;
2440                         I32 brackets = 1;
2441
2442                         while (t < PL_bufend && isSPACE(*t))
2443                             t++;
2444                         term = *t;
2445                         open = term;
2446                         if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2447                             term = tmps[5];
2448                         close = term;
2449                         if (open == close)
2450                             for (t++; t < PL_bufend; t++) {
2451                                 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
2452                                     t++;
2453                                 else if (*t == open)
2454                                     break;
2455                             }
2456                         else
2457                             for (t++; t < PL_bufend; t++) {
2458                                 if (*t == '\\' && t+1 < PL_bufend)
2459                                     t++;
2460                                 else if (*t == close && --brackets <= 0)
2461                                     break;
2462                                 else if (*t == open)
2463                                     brackets++;
2464                             }
2465                     }
2466                     t++;
2467                 }
2468                 else if (isIDFIRST_lazy(s)) {
2469                     for (t++; t < PL_bufend && isALNUM_lazy(t); t++) ;
2470                 }
2471                 while (t < PL_bufend && isSPACE(*t))
2472                     t++;
2473                 /* if comma follows first term, call it an anon hash */
2474                 /* XXX it could be a comma expression with loop modifiers */
2475                 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
2476                                    || (*t == '=' && t[1] == '>')))
2477                     OPERATOR(HASHBRACK);
2478                 if (PL_expect == XREF)
2479                     PL_expect = XSTATE; /* was XTERM, trying XSTATE */
2480                 else {
2481                     PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2482                     PL_expect = XSTATE;
2483                 }
2484             }
2485             break;
2486         }
2487         yylval.ival = PL_curcop->cop_line;
2488         if (isSPACE(*s) || *s == '#')
2489             PL_copline = NOLINE;   /* invalidate current command line number */
2490         TOKEN('{');
2491     case '}':
2492       rightbracket:
2493         s++;
2494         if (PL_lex_brackets <= 0)
2495             yyerror("Unmatched right curly bracket");
2496         else
2497             PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2498         if (PL_lex_brackets < PL_lex_formbrack)
2499             PL_lex_formbrack = 0;
2500         if (PL_lex_state == LEX_INTERPNORMAL) {
2501             if (PL_lex_brackets == 0) {
2502                 if (PL_lex_fakebrack) {
2503                     PL_lex_state = LEX_INTERPEND;
2504                     PL_bufptr = s;
2505                     return yylex();     /* ignore fake brackets */
2506                 }
2507                 if (*s == '-' && s[1] == '>')
2508                     PL_lex_state = LEX_INTERPENDMAYBE;
2509                 else if (*s != '[' && *s != '{')
2510                     PL_lex_state = LEX_INTERPEND;
2511             }
2512         }
2513         if (PL_lex_brackets < PL_lex_fakebrack) {
2514             PL_bufptr = s;
2515             PL_lex_fakebrack = 0;
2516             return yylex();             /* ignore fake brackets */
2517         }
2518         force_next('}');
2519         TOKEN(';');
2520     case '&':
2521         s++;
2522         tmp = *s++;
2523         if (tmp == '&')
2524             AOPERATOR(ANDAND);
2525         s--;
2526         if (PL_expect == XOPERATOR) {
2527             if (ckWARN(WARN_SEMICOLON) && isIDFIRST_lazy(s) && PL_bufptr == PL_linestart) {
2528                 PL_curcop->cop_line--;
2529                 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
2530                 PL_curcop->cop_line++;
2531             }
2532             BAop(OP_BIT_AND);
2533         }
2534
2535         s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2536         if (*PL_tokenbuf) {
2537             PL_expect = XOPERATOR;
2538             force_ident(PL_tokenbuf, '&');
2539         }
2540         else
2541             PREREF('&');
2542         yylval.ival = (OPpENTERSUB_AMPER<<8);
2543         TERM('&');
2544
2545     case '|':
2546         s++;
2547         tmp = *s++;
2548         if (tmp == '|')
2549             AOPERATOR(OROR);
2550         s--;
2551         BOop(OP_BIT_OR);
2552     case '=':
2553         s++;
2554         tmp = *s++;
2555         if (tmp == '=')
2556             Eop(OP_EQ);
2557         if (tmp == '>')
2558             OPERATOR(',');
2559         if (tmp == '~')
2560             PMop(OP_MATCH);
2561         if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
2562             Perl_warner(aTHX_ WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
2563         s--;
2564         if (PL_expect == XSTATE && isALPHA(tmp) &&
2565                 (s == PL_linestart+1 || s[-2] == '\n') )
2566         {
2567             if (PL_in_eval && !PL_rsfp) {
2568                 d = PL_bufend;
2569                 while (s < d) {
2570                     if (*s++ == '\n') {
2571                         incline(s);
2572                         if (strnEQ(s,"=cut",4)) {
2573                             s = strchr(s,'\n');
2574                             if (s)
2575                                 s++;
2576                             else
2577                                 s = d;
2578                             incline(s);
2579                             goto retry;
2580                         }
2581                     }
2582                 }
2583                 goto retry;
2584             }
2585             s = PL_bufend;
2586             PL_doextract = TRUE;
2587             goto retry;
2588         }
2589         if (PL_lex_brackets < PL_lex_formbrack) {
2590             char *t;
2591 #ifdef PERL_STRICT_CR
2592             for (t = s; *t == ' ' || *t == '\t'; t++) ;
2593 #else
2594             for (t = s; *t == ' ' || *t == '\t' || *t == '\r'; t++) ;
2595 #endif
2596             if (*t == '\n' || *t == '#') {
2597                 s--;
2598                 PL_expect = XBLOCK;
2599                 goto leftbracket;
2600             }
2601         }
2602         yylval.ival = 0;
2603         OPERATOR(ASSIGNOP);
2604     case '!':
2605         s++;
2606         tmp = *s++;
2607         if (tmp == '=')
2608             Eop(OP_NE);
2609         if (tmp == '~')
2610             PMop(OP_NOT);
2611         s--;
2612         OPERATOR('!');
2613     case '<':
2614         if (PL_expect != XOPERATOR) {
2615             if (s[1] != '<' && !strchr(s,'>'))
2616                 check_uni();
2617             if (s[1] == '<')
2618                 s = scan_heredoc(s);
2619             else
2620                 s = scan_inputsymbol(s);
2621             TERM(sublex_start());
2622         }
2623         s++;
2624         tmp = *s++;
2625         if (tmp == '<')
2626             SHop(OP_LEFT_SHIFT);
2627         if (tmp == '=') {
2628             tmp = *s++;
2629             if (tmp == '>')
2630                 Eop(OP_NCMP);
2631             s--;
2632             Rop(OP_LE);
2633         }
2634         s--;
2635         Rop(OP_LT);
2636     case '>':
2637         s++;
2638         tmp = *s++;
2639         if (tmp == '>')
2640             SHop(OP_RIGHT_SHIFT);
2641         if (tmp == '=')
2642             Rop(OP_GE);
2643         s--;
2644         Rop(OP_GT);
2645
2646     case '$':
2647         CLINE;
2648
2649         if (PL_expect == XOPERATOR) {
2650             if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2651                 PL_expect = XTERM;
2652                 depcom();
2653                 return ','; /* grandfather non-comma-format format */
2654             }
2655         }
2656
2657         if (s[1] == '#' && (isIDFIRST_lazy(s+2) || strchr("{$:+-", s[2]))) {
2658             if (PL_expect == XOPERATOR)
2659                 no_op("Array length", PL_bufptr);
2660             PL_tokenbuf[0] = '@';
2661             s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2662                            FALSE);
2663             if (!PL_tokenbuf[1])
2664                 PREREF(DOLSHARP);
2665             PL_expect = XOPERATOR;
2666             PL_pending_ident = '#';
2667             TOKEN(DOLSHARP);
2668         }
2669
2670         if (PL_expect == XOPERATOR)
2671             no_op("Scalar", PL_bufptr);
2672         PL_tokenbuf[0] = '$';
2673         s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2674         if (!PL_tokenbuf[1]) {
2675             if (s == PL_bufend)
2676                 yyerror("Final $ should be \\$ or $name");
2677             PREREF('$');
2678         }
2679
2680         /* This kludge not intended to be bulletproof. */
2681         if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
2682             yylval.opval = newSVOP(OP_CONST, 0,
2683                                    newSViv((IV)PL_compiling.cop_arybase));
2684             yylval.opval->op_private = OPpCONST_ARYBASE;
2685             TERM(THING);
2686         }
2687
2688         d = s;
2689         tmp = (I32)*s;
2690         if (PL_lex_state == LEX_NORMAL)
2691             s = skipspace(s);
2692
2693         if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2694             char *t;
2695             if (*s == '[') {
2696                 PL_tokenbuf[0] = '@';
2697                 if (ckWARN(WARN_SYNTAX)) {
2698                     for(t = s + 1;
2699                         isSPACE(*t) || isALNUM_lazy(t) || *t == '$';
2700                         t++) ;
2701                     if (*t++ == ',') {
2702                         PL_bufptr = skipspace(PL_bufptr);
2703                         while (t < PL_bufend && *t != ']')
2704                             t++;
2705                         Perl_warner(aTHX_ WARN_SYNTAX,
2706                                 "Multidimensional syntax %.*s not supported",
2707                                 (t - PL_bufptr) + 1, PL_bufptr);
2708                     }
2709                 }
2710             }
2711             else if (*s == '{') {
2712                 PL_tokenbuf[0] = '%';
2713                 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
2714                     (t = strchr(s, '}')) && (t = strchr(t, '=')))
2715                 {
2716                     char tmpbuf[sizeof PL_tokenbuf];
2717                     STRLEN len;
2718                     for (t++; isSPACE(*t); t++) ;
2719                     if (isIDFIRST_lazy(t)) {
2720                         t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
2721                         for (; isSPACE(*t); t++) ;
2722                         if (*t == ';' && get_cv(tmpbuf, FALSE))
2723                             Perl_warner(aTHX_ WARN_SYNTAX,
2724                                 "You need to quote \"%s\"", tmpbuf);
2725                     }
2726                 }
2727             }
2728         }
2729
2730         PL_expect = XOPERATOR;
2731         if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
2732             bool islop = (PL_last_lop == PL_oldoldbufptr);
2733             if (!islop || PL_last_lop_op == OP_GREPSTART)
2734                 PL_expect = XOPERATOR;
2735             else if (strchr("$@\"'`q", *s))
2736                 PL_expect = XTERM;              /* e.g. print $fh "foo" */
2737             else if (strchr("&*<%", *s) && isIDFIRST_lazy(s+1))
2738                 PL_expect = XTERM;              /* e.g. print $fh &sub */
2739             else if (isIDFIRST_lazy(s)) {
2740                 char tmpbuf[sizeof PL_tokenbuf];
2741                 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
2742                 if (tmp = keyword(tmpbuf, len)) {
2743                     /* binary operators exclude handle interpretations */
2744                     switch (tmp) {
2745                     case -KEY_x:
2746                     case -KEY_eq:
2747                     case -KEY_ne:
2748                     case -KEY_gt:
2749                     case -KEY_lt:
2750                     case -KEY_ge:
2751                     case -KEY_le:
2752                     case -KEY_cmp:
2753                         break;
2754                     default:
2755                         PL_expect = XTERM;      /* e.g. print $fh length() */
2756                         break;
2757                     }
2758                 }
2759                 else {
2760                     GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
2761                     if (gv && GvCVu(gv))
2762                         PL_expect = XTERM;      /* e.g. print $fh subr() */
2763                 }
2764             }
2765             else if (isDIGIT(*s))
2766                 PL_expect = XTERM;              /* e.g. print $fh 3 */
2767             else if (*s == '.' && isDIGIT(s[1]))
2768                 PL_expect = XTERM;              /* e.g. print $fh .3 */
2769             else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
2770                 PL_expect = XTERM;              /* e.g. print $fh -1 */
2771             else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
2772                 PL_expect = XTERM;              /* print $fh <<"EOF" */
2773         }
2774         PL_pending_ident = '$';
2775         TOKEN('$');
2776
2777     case '@':
2778         if (PL_expect == XOPERATOR)
2779             no_op("Array", s);
2780         PL_tokenbuf[0] = '@';
2781         s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2782         if (!PL_tokenbuf[1]) {
2783             if (s == PL_bufend)
2784                 yyerror("Final @ should be \\@ or @name");
2785             PREREF('@');
2786         }
2787         if (PL_lex_state == LEX_NORMAL)
2788             s = skipspace(s);
2789         if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2790             if (*s == '{')
2791                 PL_tokenbuf[0] = '%';
2792
2793             /* Warn about @ where they meant $. */
2794             if (ckWARN(WARN_SYNTAX)) {
2795                 if (*s == '[' || *s == '{') {
2796                     char *t = s + 1;
2797                     while (*t && (isALNUM_lazy(t) || strchr(" \t$#+-'\"", *t)))
2798                         t++;
2799                     if (*t == '}' || *t == ']') {
2800                         t++;
2801                         PL_bufptr = skipspace(PL_bufptr);
2802                         Perl_warner(aTHX_ WARN_SYNTAX,
2803                             "Scalar value %.*s better written as $%.*s",
2804                             t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
2805                     }
2806                 }
2807             }
2808         }
2809         PL_pending_ident = '@';
2810         TERM('@');
2811
2812     case '/':                   /* may either be division or pattern */
2813     case '?':                   /* may either be conditional or pattern */
2814         if (PL_expect != XOPERATOR) {
2815             /* Disable warning on "study /blah/" */
2816             if (PL_oldoldbufptr == PL_last_uni 
2817                 && (*PL_last_uni != 's' || s - PL_last_uni < 5 
2818                     || memNE(PL_last_uni, "study", 5) || isALNUM_lazy(PL_last_uni+5)))
2819                 check_uni();
2820             s = scan_pat(s,OP_MATCH);
2821             TERM(sublex_start());
2822         }
2823         tmp = *s++;
2824         if (tmp == '/')
2825             Mop(OP_DIVIDE);
2826         OPERATOR(tmp);
2827
2828     case '.':
2829         if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
2830 #ifdef PERL_STRICT_CR
2831             && s[1] == '\n'
2832 #else
2833             && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
2834 #endif
2835             && (s == PL_linestart || s[-1] == '\n') )
2836         {
2837             PL_lex_formbrack = 0;
2838             PL_expect = XSTATE;
2839             goto rightbracket;
2840         }
2841         if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
2842             tmp = *s++;
2843             if (*s == tmp) {
2844                 s++;
2845                 if (*s == tmp) {
2846                     s++;
2847                     yylval.ival = OPf_SPECIAL;
2848                 }
2849                 else
2850                     yylval.ival = 0;
2851                 OPERATOR(DOTDOT);
2852             }
2853             if (PL_expect != XOPERATOR)
2854                 check_uni();
2855             Aop(OP_CONCAT);
2856         }
2857         /* FALL THROUGH */
2858     case '0': case '1': case '2': case '3': case '4':
2859     case '5': case '6': case '7': case '8': case '9':
2860         s = scan_num(s);
2861         if (PL_expect == XOPERATOR)
2862             no_op("Number",s);
2863         TERM(THING);
2864
2865     case '\'':
2866         s = scan_str(s);
2867         if (PL_expect == XOPERATOR) {
2868             if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2869                 PL_expect = XTERM;
2870                 depcom();
2871                 return ',';     /* grandfather non-comma-format format */
2872             }
2873             else
2874                 no_op("String",s);
2875         }
2876         if (!s)
2877             missingterm((char*)0);
2878         yylval.ival = OP_CONST;
2879         TERM(sublex_start());
2880
2881     case '"':
2882         s = scan_str(s);
2883         if (PL_expect == XOPERATOR) {
2884             if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2885                 PL_expect = XTERM;
2886                 depcom();
2887                 return ',';     /* grandfather non-comma-format format */
2888             }
2889             else
2890                 no_op("String",s);
2891         }
2892         if (!s)
2893             missingterm((char*)0);
2894         yylval.ival = OP_CONST;
2895         for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
2896             if (*d == '$' || *d == '@' || *d == '\\' || *d & 0x80) {
2897                 yylval.ival = OP_STRINGIFY;
2898                 break;
2899             }
2900         }
2901         TERM(sublex_start());
2902
2903     case '`':
2904         s = scan_str(s);
2905         if (PL_expect == XOPERATOR)
2906             no_op("Backticks",s);
2907         if (!s)
2908             missingterm((char*)0);
2909         yylval.ival = OP_BACKTICK;
2910         set_csh();
2911         TERM(sublex_start());
2912
2913     case '\\':
2914         s++;
2915         if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
2916             Perl_warner(aTHX_ WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
2917                         *s, *s);
2918         if (PL_expect == XOPERATOR)
2919             no_op("Backslash",s);
2920         OPERATOR(REFGEN);
2921
2922     case 'x':
2923         if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
2924             s++;
2925             Mop(OP_REPEAT);
2926         }
2927         goto keylookup;
2928
2929     case '_':
2930     case 'a': case 'A':
2931     case 'b': case 'B':
2932     case 'c': case 'C':
2933     case 'd': case 'D':
2934     case 'e': case 'E':
2935     case 'f': case 'F':
2936     case 'g': case 'G':
2937     case 'h': case 'H':
2938     case 'i': case 'I':
2939     case 'j': case 'J':
2940     case 'k': case 'K':
2941     case 'l': case 'L':
2942     case 'm': case 'M':
2943     case 'n': case 'N':
2944     case 'o': case 'O':
2945     case 'p': case 'P':
2946     case 'q': case 'Q':
2947     case 'r': case 'R':
2948     case 's': case 'S':
2949     case 't': case 'T':
2950     case 'u': case 'U':
2951     case 'v': case 'V':
2952     case 'w': case 'W':
2953               case 'X':
2954     case 'y': case 'Y':
2955     case 'z': case 'Z':
2956
2957       keylookup: {
2958         STRLEN n_a;
2959         gv = Nullgv;
2960         gvp = 0;
2961
2962         PL_bufptr = s;
2963         s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
2964
2965         /* Some keywords can be followed by any delimiter, including ':' */
2966         tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
2967                len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
2968                             (PL_tokenbuf[0] == 'q' &&
2969                              strchr("qwxr", PL_tokenbuf[1]))));
2970
2971         /* x::* is just a word, unless x is "CORE" */
2972         if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
2973             goto just_a_word;
2974
2975         d = s;
2976         while (d < PL_bufend && isSPACE(*d))
2977                 d++;    /* no comments skipped here, or s### is misparsed */
2978
2979         /* Is this a label? */
2980         if (!tmp && PL_expect == XSTATE
2981               && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
2982             s = d + 1;
2983             yylval.pval = savepv(PL_tokenbuf);
2984             CLINE;
2985             TOKEN(LABEL);
2986         }
2987
2988         /* Check for keywords */
2989         tmp = keyword(PL_tokenbuf, len);
2990
2991         /* Is this a word before a => operator? */
2992         if (strnEQ(d,"=>",2)) {
2993             CLINE;
2994             yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
2995             yylval.opval->op_private = OPpCONST_BARE;
2996             TERM(WORD);
2997         }
2998
2999         if (tmp < 0) {                  /* second-class keyword? */
3000             GV *ogv = Nullgv;   /* override (winner) */
3001             GV *hgv = Nullgv;   /* hidden (loser) */
3002             if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
3003                 CV *cv;
3004                 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
3005                     (cv = GvCVu(gv)))
3006                 {
3007                     if (GvIMPORTED_CV(gv))
3008                         ogv = gv;
3009                     else if (! CvMETHOD(cv))
3010                         hgv = gv;
3011                 }
3012                 if (!ogv &&
3013                     (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3014                     (gv = *gvp) != (GV*)&PL_sv_undef &&
3015                     GvCVu(gv) && GvIMPORTED_CV(gv))
3016                 {
3017                     ogv = gv;
3018                 }
3019             }
3020             if (ogv) {
3021                 tmp = 0;                /* overridden by import or by GLOBAL */
3022             }
3023             else if (gv && !gvp
3024                      && -tmp==KEY_lock  /* XXX generalizable kludge */
3025                      && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
3026             {
3027                 tmp = 0;                /* any sub overrides "weak" keyword */
3028             }
3029             else {                      /* no override */
3030                 tmp = -tmp;
3031                 gv = Nullgv;
3032                 gvp = 0;
3033                 if (ckWARN(WARN_AMBIGUOUS) && hgv
3034                     && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
3035                     Perl_warner(aTHX_ WARN_AMBIGUOUS,
3036                         "Ambiguous call resolved as CORE::%s(), %s",
3037                          GvENAME(hgv), "qualify as such or use &");
3038             }
3039         }
3040
3041       reserved_word:
3042         switch (tmp) {
3043
3044         default:                        /* not a keyword */
3045           just_a_word: {
3046                 SV *sv;
3047                 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
3048
3049                 /* Get the rest if it looks like a package qualifier */
3050
3051                 if (*s == '\'' || *s == ':' && s[1] == ':') {
3052                     STRLEN morelen;
3053                     s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
3054                                   TRUE, &morelen);
3055                     if (!morelen)
3056                         Perl_croak(aTHX_ "Bad name after %s%s", PL_tokenbuf,
3057                                 *s == '\'' ? "'" : "::");
3058                     len += morelen;
3059                 }
3060
3061                 if (PL_expect == XOPERATOR) {
3062                     if (PL_bufptr == PL_linestart) {
3063                         PL_curcop->cop_line--;
3064                         Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3065                         PL_curcop->cop_line++;
3066                     }
3067                     else
3068                         no_op("Bareword",s);
3069                 }
3070
3071                 /* Look for a subroutine with this name in current package,
3072                    unless name is "Foo::", in which case Foo is a bearword
3073                    (and a package name). */
3074
3075                 if (len > 2 &&
3076                     PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3077                 {
3078                     if (ckWARN(WARN_UNSAFE) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3079                         Perl_warner(aTHX_ WARN_UNSAFE, 
3080                             "Bareword \"%s\" refers to nonexistent package",
3081                              PL_tokenbuf);
3082                     len -= 2;
3083                     PL_tokenbuf[len] = '\0';
3084                     gv = Nullgv;
3085                     gvp = 0;
3086                 }
3087                 else {
3088                     len = 0;
3089                     if (!gv)
3090                         gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3091                 }
3092
3093                 /* if we saw a global override before, get the right name */
3094
3095                 if (gvp) {
3096                     sv = newSVpvn("CORE::GLOBAL::",14);
3097                     sv_catpv(sv,PL_tokenbuf);
3098                 }
3099                 else
3100                     sv = newSVpv(PL_tokenbuf,0);
3101
3102                 /* Presume this is going to be a bareword of some sort. */
3103
3104                 CLINE;
3105                 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3106                 yylval.opval->op_private = OPpCONST_BARE;
3107
3108                 /* And if "Foo::", then that's what it certainly is. */
3109
3110                 if (len)
3111                     goto safe_bareword;
3112
3113                 /* See if it's the indirect object for a list operator. */
3114
3115                 if (PL_oldoldbufptr &&
3116                     PL_oldoldbufptr < PL_bufptr &&
3117                     (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
3118                     /* NO SKIPSPACE BEFORE HERE! */
3119                     (PL_expect == XREF ||
3120                      ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
3121                 {
3122                     bool immediate_paren = *s == '(';
3123
3124                     /* (Now we can afford to cross potential line boundary.) */
3125                     s = skipspace(s);
3126
3127                     /* Two barewords in a row may indicate method call. */
3128
3129                     if ((isIDFIRST_lazy(s) || *s == '$') && (tmp=intuit_method(s,gv)))
3130                         return tmp;
3131
3132                     /* If not a declared subroutine, it's an indirect object. */
3133                     /* (But it's an indir obj regardless for sort.) */
3134
3135                     if ((PL_last_lop_op == OP_SORT ||
3136                          (!immediate_paren && (!gv || !GvCVu(gv)))) &&
3137                         (PL_last_lop_op != OP_MAPSTART &&
3138                          PL_last_lop_op != OP_GREPSTART))
3139                     {
3140                         PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3141                         goto bareword;
3142                     }
3143                 }
3144
3145                 /* If followed by a paren, it's certainly a subroutine. */
3146
3147                 PL_expect = XOPERATOR;
3148                 s = skipspace(s);
3149                 if (*s == '(') {
3150                     CLINE;
3151                     if (gv && GvCVu(gv)) {
3152                         for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
3153                         if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
3154                             s = d + 1;
3155                             goto its_constant;
3156                         }
3157                     }
3158                     PL_nextval[PL_nexttoke].opval = yylval.opval;
3159                     PL_expect = XOPERATOR;
3160                     force_next(WORD);
3161                     yylval.ival = 0;
3162                     TOKEN('&');
3163                 }
3164
3165                 /* If followed by var or block, call it a method (unless sub) */
3166
3167                 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3168                     PL_last_lop = PL_oldbufptr;
3169                     PL_last_lop_op = OP_METHOD;
3170                     PREBLOCK(METHOD);
3171                 }
3172
3173                 /* If followed by a bareword, see if it looks like indir obj. */
3174
3175                 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp = intuit_method(s,gv)))
3176                     return tmp;
3177
3178                 /* Not a method, so call it a subroutine (if defined) */
3179
3180                 if (gv && GvCVu(gv)) {
3181                     CV* cv;
3182                     if (lastchar == '-')
3183                         Perl_warn(aTHX_ "Ambiguous use of -%s resolved as -&%s()",
3184                                 PL_tokenbuf, PL_tokenbuf);
3185                     /* Check for a constant sub */
3186                     cv = GvCV(gv);
3187                     if ((sv = cv_const_sv(cv))) {
3188                   its_constant:
3189                         SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3190                         ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3191                         yylval.opval->op_private = 0;
3192                         TOKEN(WORD);
3193                     }
3194
3195                     /* Resolve to GV now. */
3196                     op_free(yylval.opval);
3197                     yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
3198                     yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
3199                     PL_last_lop = PL_oldbufptr;
3200                     PL_last_lop_op = OP_ENTERSUB;
3201                     /* Is there a prototype? */
3202                     if (SvPOK(cv)) {
3203                         STRLEN len;
3204                         char *proto = SvPV((SV*)cv, len);
3205                         if (!len)
3206                             TERM(FUNC0SUB);
3207                         if (strEQ(proto, "$"))
3208                             OPERATOR(UNIOPSUB);
3209                         if (*proto == '&' && *s == '{') {
3210                             sv_setpv(PL_subname,"__ANON__");
3211                             PREBLOCK(LSTOPSUB);
3212                         }
3213                     }
3214                     PL_nextval[PL_nexttoke].opval = yylval.opval;
3215                     PL_expect = XTERM;
3216                     force_next(WORD);
3217                     TOKEN(NOAMP);
3218                 }
3219
3220                 /* Call it a bare word */
3221
3222                 if (PL_hints & HINT_STRICT_SUBS)
3223                     yylval.opval->op_private |= OPpCONST_STRICT;
3224                 else {
3225                 bareword:
3226                     if (ckWARN(WARN_RESERVED)) {
3227                         if (lastchar != '-') {
3228                             for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3229                             if (!*d)
3230                                 Perl_warner(aTHX_ WARN_RESERVED, PL_warn_reserved,
3231                                        PL_tokenbuf);
3232                         }
3233                     }
3234                 }
3235
3236             safe_bareword:
3237                 if (lastchar && strchr("*%&", lastchar)) {
3238                     Perl_warn(aTHX_ "Operator or semicolon missing before %c%s",
3239                         lastchar, PL_tokenbuf);
3240                     Perl_warn(aTHX_ "Ambiguous use of %c resolved as operator %c",
3241                         lastchar, lastchar);
3242                 }
3243                 TOKEN(WORD);
3244             }
3245
3246         case KEY___FILE__:
3247             yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3248                                         newSVsv(GvSV(PL_curcop->cop_filegv)));
3249             TERM(THING);
3250
3251         case KEY___LINE__:
3252             yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3253                                     Perl_newSVpvf(aTHX_ "%ld", (long)PL_curcop->cop_line));
3254             TERM(THING);
3255
3256         case KEY___PACKAGE__:
3257             yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3258                                         (PL_curstash
3259                                          ? newSVsv(PL_curstname)
3260                                          : &PL_sv_undef));
3261             TERM(THING);
3262
3263         case KEY___DATA__:
3264         case KEY___END__: {
3265             GV *gv;
3266
3267             /*SUPPRESS 560*/
3268             if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
3269                 char *pname = "main";
3270                 if (PL_tokenbuf[2] == 'D')
3271                     pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
3272                 gv = gv_fetchpv(Perl_form(aTHX_ "%s::DATA", pname), TRUE, SVt_PVIO);
3273                 GvMULTI_on(gv);
3274                 if (!GvIO(gv))
3275                     GvIOp(gv) = newIO();
3276                 IoIFP(GvIOp(gv)) = PL_rsfp;
3277 #if defined(HAS_FCNTL) && defined(F_SETFD)
3278                 {
3279                     int fd = PerlIO_fileno(PL_rsfp);
3280                     fcntl(fd,F_SETFD,fd >= 3);
3281                 }
3282 #endif
3283                 /* Mark this internal pseudo-handle as clean */
3284                 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3285                 if (PL_preprocess)
3286                     IoTYPE(GvIOp(gv)) = '|';
3287                 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
3288                     IoTYPE(GvIOp(gv)) = '-';
3289                 else
3290                     IoTYPE(GvIOp(gv)) = '<';
3291                 PL_rsfp = Nullfp;
3292             }
3293             goto fake_eof;
3294         }
3295
3296         case KEY_AUTOLOAD:
3297         case KEY_DESTROY:
3298         case KEY_BEGIN:
3299         case KEY_END:
3300         case KEY_INIT:
3301             if (PL_expect == XSTATE) {
3302                 s = PL_bufptr;
3303                 goto really_sub;
3304             }
3305             goto just_a_word;
3306
3307         case KEY_CORE:
3308             if (*s == ':' && s[1] == ':') {
3309                 s += 2;
3310                 d = s;
3311                 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3312                 tmp = keyword(PL_tokenbuf, len);
3313                 if (tmp < 0)
3314                     tmp = -tmp;
3315                 goto reserved_word;
3316             }
3317             goto just_a_word;
3318
3319         case KEY_abs:
3320             UNI(OP_ABS);
3321
3322         case KEY_alarm:
3323             UNI(OP_ALARM);
3324
3325         case KEY_accept:
3326             LOP(OP_ACCEPT,XTERM);
3327
3328         case KEY_and:
3329             OPERATOR(ANDOP);
3330
3331         case KEY_atan2:
3332             LOP(OP_ATAN2,XTERM);
3333
3334         case KEY_bind:
3335             LOP(OP_BIND,XTERM);
3336
3337         case KEY_binmode:
3338             UNI(OP_BINMODE);
3339
3340         case KEY_bless:
3341             LOP(OP_BLESS,XTERM);
3342
3343         case KEY_chop:
3344             UNI(OP_CHOP);
3345
3346         case KEY_continue:
3347             PREBLOCK(CONTINUE);
3348
3349         case KEY_chdir:
3350             (void)gv_fetchpv("ENV",TRUE, SVt_PVHV);     /* may use HOME */
3351             UNI(OP_CHDIR);
3352
3353         case KEY_close:
3354             UNI(OP_CLOSE);
3355
3356         case KEY_closedir:
3357             UNI(OP_CLOSEDIR);
3358
3359         case KEY_cmp:
3360             Eop(OP_SCMP);
3361
3362         case KEY_caller:
3363             UNI(OP_CALLER);
3364
3365         case KEY_crypt:
3366 #ifdef FCRYPT
3367             if (!PL_cryptseen++)
3368                 init_des();
3369 #endif
3370             LOP(OP_CRYPT,XTERM);
3371
3372         case KEY_chmod:
3373             if (ckWARN(WARN_OCTAL)) {
3374                 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
3375                 if (*d != '0' && isDIGIT(*d))
3376                     yywarn("chmod: mode argument is missing initial 0");
3377             }
3378             LOP(OP_CHMOD,XTERM);
3379
3380         case KEY_chown:
3381             LOP(OP_CHOWN,XTERM);
3382
3383         case KEY_connect:
3384             LOP(OP_CONNECT,XTERM);
3385
3386         case KEY_chr:
3387             UNI(OP_CHR);
3388
3389         case KEY_cos:
3390             UNI(OP_COS);
3391
3392         case KEY_chroot:
3393             UNI(OP_CHROOT);
3394
3395         case KEY_do:
3396             s = skipspace(s);
3397             if (*s == '{')
3398                 PRETERMBLOCK(DO);
3399             if (*s != '\'')
3400                 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3401             OPERATOR(DO);
3402
3403         case KEY_die:
3404             PL_hints |= HINT_BLOCK_SCOPE;
3405             LOP(OP_DIE,XTERM);
3406
3407         case KEY_defined:
3408             UNI(OP_DEFINED);
3409
3410         case KEY_delete:
3411             UNI(OP_DELETE);
3412
3413         case KEY_dbmopen:
3414             gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3415             LOP(OP_DBMOPEN,XTERM);
3416
3417         case KEY_dbmclose:
3418             UNI(OP_DBMCLOSE);
3419
3420         case KEY_dump:
3421             s = force_word(s,WORD,TRUE,FALSE,FALSE);
3422             LOOPX(OP_DUMP);
3423
3424         case KEY_else:
3425             PREBLOCK(ELSE);
3426
3427         case KEY_elsif:
3428             yylval.ival = PL_curcop->cop_line;
3429             OPERATOR(ELSIF);
3430
3431         case KEY_eq:
3432             Eop(OP_SEQ);
3433
3434         case KEY_exists:
3435             UNI(OP_EXISTS);
3436             
3437         case KEY_exit:
3438             UNI(OP_EXIT);
3439
3440         case KEY_eval:
3441             s = skipspace(s);
3442             PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
3443             UNIBRACK(OP_ENTEREVAL);
3444
3445         case KEY_eof:
3446             UNI(OP_EOF);
3447
3448         case KEY_exp:
3449             UNI(OP_EXP);
3450
3451         case KEY_each:
3452             UNI(OP_EACH);
3453
3454         case KEY_exec:
3455             set_csh();
3456             LOP(OP_EXEC,XREF);
3457
3458         case KEY_endhostent:
3459             FUN0(OP_EHOSTENT);
3460
3461         case KEY_endnetent:
3462             FUN0(OP_ENETENT);
3463
3464         case KEY_endservent:
3465             FUN0(OP_ESERVENT);
3466
3467         case KEY_endprotoent:
3468             FUN0(OP_EPROTOENT);
3469
3470         case KEY_endpwent:
3471             FUN0(OP_EPWENT);
3472
3473         case KEY_endgrent:
3474             FUN0(OP_EGRENT);
3475
3476         case KEY_for:
3477         case KEY_foreach:
3478             yylval.ival = PL_curcop->cop_line;
3479             s = skipspace(s);
3480             if (PL_expect == XSTATE && isIDFIRST_lazy(s)) {
3481                 char *p = s;
3482                 if ((PL_bufend - p) >= 3 &&
3483                     strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3484                     p += 2;
3485                 p = skipspace(p);
3486                 if (isIDFIRST_lazy(p))
3487                     Perl_croak(aTHX_ "Missing $ on loop variable");
3488             }
3489             OPERATOR(FOR);
3490
3491         case KEY_formline:
3492             LOP(OP_FORMLINE,XTERM);
3493
3494         case KEY_fork:
3495             FUN0(OP_FORK);
3496
3497         case KEY_fcntl:
3498             LOP(OP_FCNTL,XTERM);
3499
3500         case KEY_fileno:
3501             UNI(OP_FILENO);
3502
3503         case KEY_flock:
3504             LOP(OP_FLOCK,XTERM);
3505
3506         case KEY_gt:
3507             Rop(OP_SGT);
3508
3509         case KEY_ge:
3510             Rop(OP_SGE);
3511
3512         case KEY_grep:
3513             LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
3514
3515         case KEY_goto:
3516             s = force_word(s,WORD,TRUE,FALSE,FALSE);
3517             LOOPX(OP_GOTO);
3518
3519         case KEY_gmtime:
3520             UNI(OP_GMTIME);
3521
3522         case KEY_getc:
3523             UNI(OP_GETC);
3524
3525         case KEY_getppid:
3526             FUN0(OP_GETPPID);
3527
3528         case KEY_getpgrp:
3529             UNI(OP_GETPGRP);
3530
3531         case KEY_getpriority:
3532             LOP(OP_GETPRIORITY,XTERM);
3533
3534         case KEY_getprotobyname:
3535             UNI(OP_GPBYNAME);
3536
3537         case KEY_getprotobynumber:
3538             LOP(OP_GPBYNUMBER,XTERM);
3539
3540         case KEY_getprotoent:
3541             FUN0(OP_GPROTOENT);
3542
3543         case KEY_getpwent:
3544             FUN0(OP_GPWENT);
3545
3546         case KEY_getpwnam:
3547             UNI(OP_GPWNAM);
3548
3549         case KEY_getpwuid:
3550             UNI(OP_GPWUID);
3551
3552         case KEY_getpeername:
3553             UNI(OP_GETPEERNAME);
3554
3555         case KEY_gethostbyname:
3556             UNI(OP_GHBYNAME);
3557
3558         case KEY_gethostbyaddr:
3559             LOP(OP_GHBYADDR,XTERM);
3560
3561         case KEY_gethostent:
3562             FUN0(OP_GHOSTENT);
3563
3564         case KEY_getnetbyname:
3565             UNI(OP_GNBYNAME);
3566
3567         case KEY_getnetbyaddr:
3568             LOP(OP_GNBYADDR,XTERM);
3569
3570         case KEY_getnetent:
3571             FUN0(OP_GNETENT);
3572
3573         case KEY_getservbyname:
3574             LOP(OP_GSBYNAME,XTERM);
3575
3576         case KEY_getservbyport:
3577             LOP(OP_GSBYPORT,XTERM);
3578
3579         case KEY_getservent:
3580             FUN0(OP_GSERVENT);
3581
3582         case KEY_getsockname:
3583             UNI(OP_GETSOCKNAME);
3584
3585         case KEY_getsockopt:
3586             LOP(OP_GSOCKOPT,XTERM);
3587
3588         case KEY_getgrent:
3589             FUN0(OP_GGRENT);
3590
3591         case KEY_getgrnam:
3592             UNI(OP_GGRNAM);
3593
3594         case KEY_getgrgid:
3595             UNI(OP_GGRGID);
3596
3597         case KEY_getlogin:
3598             FUN0(OP_GETLOGIN);
3599
3600         case KEY_glob:
3601             set_csh();
3602             LOP(OP_GLOB,XTERM);
3603
3604         case KEY_hex:
3605             UNI(OP_HEX);
3606
3607         case KEY_if:
3608             yylval.ival = PL_curcop->cop_line;
3609             OPERATOR(IF);
3610
3611         case KEY_index:
3612             LOP(OP_INDEX,XTERM);
3613
3614         case KEY_int:
3615             UNI(OP_INT);
3616
3617         case KEY_ioctl:
3618             LOP(OP_IOCTL,XTERM);
3619
3620         case KEY_join:
3621             LOP(OP_JOIN,XTERM);
3622
3623         case KEY_keys:
3624             UNI(OP_KEYS);
3625
3626         case KEY_kill:
3627             LOP(OP_KILL,XTERM);
3628
3629         case KEY_last:
3630             s = force_word(s,WORD,TRUE,FALSE,FALSE);
3631             LOOPX(OP_LAST);
3632             
3633         case KEY_lc:
3634             UNI(OP_LC);
3635
3636         case KEY_lcfirst:
3637             UNI(OP_LCFIRST);
3638
3639         case KEY_local:
3640             OPERATOR(LOCAL);
3641
3642         case KEY_length:
3643             UNI(OP_LENGTH);
3644
3645         case KEY_lt:
3646             Rop(OP_SLT);
3647
3648         case KEY_le:
3649             Rop(OP_SLE);
3650
3651         case KEY_localtime:
3652             UNI(OP_LOCALTIME);
3653
3654         case KEY_log:
3655             UNI(OP_LOG);
3656
3657         case KEY_link:
3658             LOP(OP_LINK,XTERM);
3659
3660         case KEY_listen:
3661             LOP(OP_LISTEN,XTERM);
3662
3663         case KEY_lock:
3664             UNI(OP_LOCK);
3665
3666         case KEY_lstat:
3667             UNI(OP_LSTAT);
3668
3669         case KEY_m:
3670             s = scan_pat(s,OP_MATCH);
3671             TERM(sublex_start());
3672
3673         case KEY_map:
3674             LOP(OP_MAPSTART, XREF);
3675             
3676         case KEY_mkdir:
3677             LOP(OP_MKDIR,XTERM);
3678
3679         case KEY_msgctl:
3680             LOP(OP_MSGCTL,XTERM);
3681
3682         case KEY_msgget:
3683             LOP(OP_MSGGET,XTERM);
3684
3685         case KEY_msgrcv:
3686             LOP(OP_MSGRCV,XTERM);
3687
3688         case KEY_msgsnd:
3689             LOP(OP_MSGSND,XTERM);
3690
3691         case KEY_my:
3692             PL_in_my = TRUE;
3693             s = skipspace(s);
3694             if (isIDFIRST_lazy(s)) {
3695                 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
3696                 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
3697                 if (!PL_in_my_stash) {
3698                     char tmpbuf[1024];
3699                     PL_bufptr = s;
3700                     sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
3701                     yyerror(tmpbuf);
3702                 }
3703             }
3704             OPERATOR(MY);
3705
3706         case KEY_next:
3707             s = force_word(s,WORD,TRUE,FALSE,FALSE);
3708             LOOPX(OP_NEXT);
3709
3710         case KEY_ne:
3711             Eop(OP_SNE);
3712
3713         case KEY_no:
3714             if (PL_expect != XSTATE)
3715                 yyerror("\"no\" not allowed in expression");
3716             s = force_word(s,WORD,FALSE,TRUE,FALSE);
3717             s = force_version(s);
3718             yylval.ival = 0;
3719             OPERATOR(USE);
3720
3721         case KEY_not:
3722             OPERATOR(NOTOP);
3723
3724         case KEY_open:
3725             s = skipspace(s);
3726             if (isIDFIRST_lazy(s)) {
3727                 char *t;
3728                 for (d = s; isALNUM_lazy(d); d++) ;
3729                 t = skipspace(d);
3730                 if (strchr("|&*+-=!?:.", *t))
3731                     Perl_warn(aTHX_ "Precedence problem: open %.*s should be open(%.*s)",
3732                         d-s,s, d-s,s);
3733             }
3734             LOP(OP_OPEN,XTERM);
3735
3736         case KEY_or:
3737             yylval.ival = OP_OR;
3738             OPERATOR(OROP);
3739
3740         case KEY_ord:
3741             UNI(OP_ORD);
3742
3743         case KEY_oct:
3744             UNI(OP_OCT);
3745
3746         case KEY_opendir:
3747             LOP(OP_OPEN_DIR,XTERM);
3748
3749         case KEY_print:
3750             checkcomma(s,PL_tokenbuf,"filehandle");
3751             LOP(OP_PRINT,XREF);
3752
3753         case KEY_printf:
3754             checkcomma(s,PL_tokenbuf,"filehandle");
3755             LOP(OP_PRTF,XREF);
3756
3757         case KEY_prototype:
3758             UNI(OP_PROTOTYPE);
3759
3760         case KEY_push:
3761             LOP(OP_PUSH,XTERM);
3762
3763         case KEY_pop:
3764             UNI(OP_POP);
3765
3766         case KEY_pos:
3767             UNI(OP_POS);
3768             
3769         case KEY_pack:
3770             LOP(OP_PACK,XTERM);
3771
3772         case KEY_package:
3773             s = force_word(s,WORD,FALSE,TRUE,FALSE);
3774             OPERATOR(PACKAGE);
3775
3776         case KEY_pipe:
3777             LOP(OP_PIPE_OP,XTERM);
3778
3779         case KEY_q:
3780             s = scan_str(s);
3781             if (!s)
3782                 missingterm((char*)0);
3783             yylval.ival = OP_CONST;
3784             TERM(sublex_start());
3785
3786         case KEY_quotemeta:
3787             UNI(OP_QUOTEMETA);
3788
3789         case KEY_qw:
3790             s = scan_str(s);
3791             if (!s)
3792                 missingterm((char*)0);
3793             force_next(')');
3794             if (SvCUR(PL_lex_stuff)) {
3795                 OP *words = Nullop;
3796                 int warned = 0;
3797                 d = SvPV_force(PL_lex_stuff, len);
3798                 while (len) {
3799                     for (; isSPACE(*d) && len; --len, ++d) ;
3800                     if (len) {
3801                         char *b = d;
3802                         if (!warned && ckWARN(WARN_SYNTAX)) {
3803                             for (; !isSPACE(*d) && len; --len, ++d) {
3804                                 if (*d == ',') {
3805                                     Perl_warner(aTHX_ WARN_SYNTAX,
3806                                         "Possible attempt to separate words with commas");
3807                                     ++warned;
3808                                 }
3809                                 else if (*d == '#') {
3810                                     Perl_warner(aTHX_ WARN_SYNTAX,
3811                                         "Possible attempt to put comments in qw() list");
3812                                     ++warned;
3813                                 }
3814                             }
3815                         }
3816                         else {
3817                             for (; !isSPACE(*d) && len; --len, ++d) ;
3818                         }
3819                         words = append_elem(OP_LIST, words,
3820                                             newSVOP(OP_CONST, 0, newSVpvn(b, d-b)));
3821                     }
3822                 }
3823                 if (words) {
3824                     PL_nextval[PL_nexttoke].opval = words;
3825                     force_next(THING);
3826                 }
3827             }
3828             if (PL_lex_stuff)
3829                 SvREFCNT_dec(PL_lex_stuff);
3830             PL_lex_stuff = Nullsv;
3831             PL_expect = XTERM;
3832             TOKEN('(');
3833
3834         case KEY_qq:
3835             s = scan_str(s);
3836             if (!s)
3837                 missingterm((char*)0);
3838             yylval.ival = OP_STRINGIFY;
3839             if (SvIVX(PL_lex_stuff) == '\'')
3840                 SvIVX(PL_lex_stuff) = 0;        /* qq'$foo' should intepolate */
3841             TERM(sublex_start());
3842
3843         case KEY_qr:
3844             s = scan_pat(s,OP_QR);
3845             TERM(sublex_start());
3846
3847         case KEY_qx:
3848             s = scan_str(s);
3849             if (!s)
3850                 missingterm((char*)0);
3851             yylval.ival = OP_BACKTICK;
3852             set_csh();
3853             TERM(sublex_start());
3854
3855         case KEY_return:
3856             OLDLOP(OP_RETURN);
3857
3858         case KEY_require:
3859             *PL_tokenbuf = '\0';
3860             s = force_word(s,WORD,TRUE,TRUE,FALSE);
3861             if (isIDFIRST_lazy(PL_tokenbuf))
3862                 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
3863             else if (*s == '<')
3864                 yyerror("<> should be quotes");
3865             UNI(OP_REQUIRE);
3866
3867         case KEY_reset:
3868             UNI(OP_RESET);
3869
3870         case KEY_redo:
3871             s = force_word(s,WORD,TRUE,FALSE,FALSE);
3872             LOOPX(OP_REDO);
3873
3874         case KEY_rename:
3875             LOP(OP_RENAME,XTERM);
3876
3877         case KEY_rand:
3878             UNI(OP_RAND);
3879
3880         case KEY_rmdir:
3881             UNI(OP_RMDIR);
3882
3883         case KEY_rindex:
3884             LOP(OP_RINDEX,XTERM);
3885
3886         case KEY_read:
3887             LOP(OP_READ,XTERM);
3888
3889         case KEY_readdir:
3890             UNI(OP_READDIR);
3891
3892         case KEY_readline:
3893             set_csh();
3894             UNI(OP_READLINE);
3895
3896         case KEY_readpipe:
3897             set_csh();
3898             UNI(OP_BACKTICK);
3899
3900         case KEY_rewinddir:
3901             UNI(OP_REWINDDIR);
3902
3903         case KEY_recv:
3904             LOP(OP_RECV,XTERM);
3905
3906         case KEY_reverse:
3907             LOP(OP_REVERSE,XTERM);
3908
3909         case KEY_readlink:
3910             UNI(OP_READLINK);
3911
3912         case KEY_ref:
3913             UNI(OP_REF);
3914
3915         case KEY_s:
3916             s = scan_subst(s);
3917             if (yylval.opval)
3918                 TERM(sublex_start());
3919             else
3920                 TOKEN(1);       /* force error */
3921
3922         case KEY_chomp:
3923             UNI(OP_CHOMP);
3924             
3925         case KEY_scalar:
3926             UNI(OP_SCALAR);
3927
3928         case KEY_select:
3929             LOP(OP_SELECT,XTERM);
3930
3931         case KEY_seek:
3932             LOP(OP_SEEK,XTERM);
3933
3934         case KEY_semctl:
3935             LOP(OP_SEMCTL,XTERM);
3936
3937         case KEY_semget:
3938             LOP(OP_SEMGET,XTERM);
3939
3940         case KEY_semop:
3941             LOP(OP_SEMOP,XTERM);
3942
3943         case KEY_send:
3944             LOP(OP_SEND,XTERM);
3945
3946         case KEY_setpgrp:
3947             LOP(OP_SETPGRP,XTERM);
3948
3949         case KEY_setpriority:
3950             LOP(OP_SETPRIORITY,XTERM);
3951
3952         case KEY_sethostent:
3953             UNI(OP_SHOSTENT);
3954
3955         case KEY_setnetent:
3956             UNI(OP_SNETENT);
3957
3958         case KEY_setservent:
3959             UNI(OP_SSERVENT);
3960
3961         case KEY_setprotoent:
3962             UNI(OP_SPROTOENT);
3963
3964         case KEY_setpwent:
3965             FUN0(OP_SPWENT);
3966
3967         case KEY_setgrent:
3968             FUN0(OP_SGRENT);
3969
3970         case KEY_seekdir:
3971             LOP(OP_SEEKDIR,XTERM);
3972
3973         case KEY_setsockopt:
3974             LOP(OP_SSOCKOPT,XTERM);
3975
3976         case KEY_shift:
3977             UNI(OP_SHIFT);
3978
3979         case KEY_shmctl:
3980             LOP(OP_SHMCTL,XTERM);
3981
3982         case KEY_shmget:
3983             LOP(OP_SHMGET,XTERM);
3984
3985         case KEY_shmread:
3986             LOP(OP_SHMREAD,XTERM);
3987
3988         case KEY_shmwrite:
3989             LOP(OP_SHMWRITE,XTERM);
3990
3991         case KEY_shutdown:
3992             LOP(OP_SHUTDOWN,XTERM);
3993
3994         case KEY_sin:
3995             UNI(OP_SIN);
3996
3997         case KEY_sleep:
3998             UNI(OP_SLEEP);
3999
4000         case KEY_socket:
4001             LOP(OP_SOCKET,XTERM);
4002
4003         case KEY_socketpair:
4004             LOP(OP_SOCKPAIR,XTERM);
4005
4006         case KEY_sort:
4007             checkcomma(s,PL_tokenbuf,"subroutine name");
4008             s = skipspace(s);
4009             if (*s == ';' || *s == ')')         /* probably a close */
4010                 Perl_croak(aTHX_ "sort is now a reserved word");
4011             PL_expect = XTERM;
4012             s = force_word(s,WORD,TRUE,TRUE,FALSE);
4013             LOP(OP_SORT,XREF);
4014
4015         case KEY_split:
4016             LOP(OP_SPLIT,XTERM);
4017
4018         case KEY_sprintf:
4019             LOP(OP_SPRINTF,XTERM);
4020
4021         case KEY_splice:
4022             LOP(OP_SPLICE,XTERM);
4023
4024         case KEY_sqrt:
4025             UNI(OP_SQRT);
4026
4027         case KEY_srand:
4028             UNI(OP_SRAND);
4029
4030         case KEY_stat:
4031             UNI(OP_STAT);
4032
4033         case KEY_study:
4034             PL_sawstudy++;
4035             UNI(OP_STUDY);
4036
4037         case KEY_substr:
4038             LOP(OP_SUBSTR,XTERM);
4039
4040         case KEY_format:
4041         case KEY_sub:
4042           really_sub:
4043             s = skipspace(s);
4044
4045             if (isIDFIRST_lazy(s) || *s == '\'' || *s == ':') {
4046                 char tmpbuf[sizeof PL_tokenbuf];
4047                 PL_expect = XBLOCK;
4048                 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4049                 if (strchr(tmpbuf, ':'))
4050                     sv_setpv(PL_subname, tmpbuf);
4051                 else {
4052                     sv_setsv(PL_subname,PL_curstname);
4053                     sv_catpvn(PL_subname,"::",2);
4054                     sv_catpvn(PL_subname,tmpbuf,len);
4055                 }
4056                 s = force_word(s,WORD,FALSE,TRUE,TRUE);
4057                 s = skipspace(s);
4058             }
4059             else {
4060                 PL_expect = XTERMBLOCK;
4061                 sv_setpv(PL_subname,"?");
4062             }
4063
4064             if (tmp == KEY_format) {
4065                 s = skipspace(s);
4066                 if (*s == '=')
4067                     PL_lex_formbrack = PL_lex_brackets + 1;
4068                 OPERATOR(FORMAT);
4069             }
4070
4071             /* Look for a prototype */
4072             if (*s == '(') {
4073                 char *p;
4074
4075                 s = scan_str(s);
4076                 if (!s) {
4077                     if (PL_lex_stuff)
4078                         SvREFCNT_dec(PL_lex_stuff);
4079                     PL_lex_stuff = Nullsv;
4080                     Perl_croak(aTHX_ "Prototype not terminated");
4081                 }
4082                 /* strip spaces */
4083                 d = SvPVX(PL_lex_stuff);
4084                 tmp = 0;
4085                 for (p = d; *p; ++p) {
4086                     if (!isSPACE(*p))
4087                         d[tmp++] = *p;
4088                 }
4089                 d[tmp] = '\0';
4090                 SvCUR(PL_lex_stuff) = tmp;
4091
4092                 PL_nexttoke++;
4093                 PL_nextval[1] = PL_nextval[0];
4094                 PL_nexttype[1] = PL_nexttype[0];
4095                 PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
4096                 PL_nexttype[0] = THING;
4097                 if (PL_nexttoke == 1) {
4098                     PL_lex_defer = PL_lex_state;
4099                     PL_lex_expect = PL_expect;
4100                     PL_lex_state = LEX_KNOWNEXT;
4101                 }
4102                 PL_lex_stuff = Nullsv;
4103             }
4104
4105             if (*SvPV(PL_subname,n_a) == '?') {
4106                 sv_setpv(PL_subname,"__ANON__");
4107                 TOKEN(ANONSUB);
4108             }
4109             PREBLOCK(SUB);
4110
4111         case KEY_system:
4112             set_csh();
4113             LOP(OP_SYSTEM,XREF);
4114
4115         case KEY_symlink:
4116             LOP(OP_SYMLINK,XTERM);
4117
4118         case KEY_syscall:
4119             LOP(OP_SYSCALL,XTERM);
4120
4121         case KEY_sysopen:
4122             LOP(OP_SYSOPEN,XTERM);
4123
4124         case KEY_sysseek:
4125             LOP(OP_SYSSEEK,XTERM);
4126
4127         case KEY_sysread:
4128             LOP(OP_SYSREAD,XTERM);
4129
4130         case KEY_syswrite:
4131             LOP(OP_SYSWRITE,XTERM);
4132
4133         case KEY_tr:
4134             s = scan_trans(s);
4135             TERM(sublex_start());
4136
4137         case KEY_tell:
4138             UNI(OP_TELL);
4139
4140         case KEY_telldir:
4141             UNI(OP_TELLDIR);
4142
4143         case KEY_tie:
4144             LOP(OP_TIE,XTERM);
4145
4146         case KEY_tied:
4147             UNI(OP_TIED);
4148
4149         case KEY_time:
4150             FUN0(OP_TIME);
4151
4152         case KEY_times:
4153             FUN0(OP_TMS);
4154
4155         case KEY_truncate:
4156             LOP(OP_TRUNCATE,XTERM);
4157
4158         case KEY_uc:
4159             UNI(OP_UC);
4160
4161         case KEY_ucfirst:
4162             UNI(OP_UCFIRST);
4163
4164         case KEY_untie:
4165             UNI(OP_UNTIE);
4166
4167         case KEY_until:
4168             yylval.ival = PL_curcop->cop_line;
4169             OPERATOR(UNTIL);
4170
4171         case KEY_unless:
4172             yylval.ival = PL_curcop->cop_line;
4173             OPERATOR(UNLESS);
4174
4175         case KEY_unlink:
4176             LOP(OP_UNLINK,XTERM);
4177
4178         case KEY_undef:
4179             UNI(OP_UNDEF);
4180
4181         case KEY_unpack:
4182             LOP(OP_UNPACK,XTERM);
4183
4184         case KEY_utime:
4185             LOP(OP_UTIME,XTERM);
4186
4187         case KEY_umask:
4188             if (ckWARN(WARN_OCTAL)) {
4189                 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4190                 if (*d != '0' && isDIGIT(*d))
4191                     yywarn("umask: argument is missing initial 0");
4192             }
4193             UNI(OP_UMASK);
4194
4195         case KEY_unshift:
4196             LOP(OP_UNSHIFT,XTERM);
4197
4198         case KEY_use:
4199             if (PL_expect != XSTATE)
4200                 yyerror("\"use\" not allowed in expression");
4201             s = skipspace(s);
4202             if(isDIGIT(*s)) {
4203                 s = force_version(s);
4204                 if(*s == ';' || (s = skipspace(s), *s == ';')) {
4205                     PL_nextval[PL_nexttoke].opval = Nullop;
4206                     force_next(WORD);
4207                 }
4208             }
4209             else {
4210                 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4211                 s = force_version(s);
4212             }
4213             yylval.ival = 1;
4214             OPERATOR(USE);
4215
4216         case KEY_values:
4217             UNI(OP_VALUES);
4218
4219         case KEY_vec:
4220             PL_sawvec = TRUE;
4221             LOP(OP_VEC,XTERM);
4222
4223         case KEY_while:
4224             yylval.ival = PL_curcop->cop_line;
4225             OPERATOR(WHILE);
4226
4227         case KEY_warn:
4228             PL_hints |= HINT_BLOCK_SCOPE;
4229             LOP(OP_WARN,XTERM);
4230
4231         case KEY_wait:
4232             FUN0(OP_WAIT);
4233
4234         case KEY_waitpid:
4235             LOP(OP_WAITPID,XTERM);
4236
4237         case KEY_wantarray:
4238             FUN0(OP_WANTARRAY);
4239
4240         case KEY_write:
4241 #ifdef EBCDIC
4242         {
4243             static char ctl_l[2];
4244
4245             if (ctl_l[0] == '\0') 
4246                 ctl_l[0] = toCTRL('L');
4247             gv_fetchpv(ctl_l,TRUE, SVt_PV);
4248         }
4249 #else
4250             gv_fetchpv("\f",TRUE, SVt_PV);      /* Make sure $^L is defined */
4251 #endif
4252             UNI(OP_ENTERWRITE);
4253
4254         case KEY_x:
4255             if (PL_expect == XOPERATOR)
4256                 Mop(OP_REPEAT);
4257             check_uni();
4258             goto just_a_word;
4259
4260         case KEY_xor:
4261             yylval.ival = OP_XOR;
4262             OPERATOR(OROP);
4263
4264         case KEY_y:
4265             s = scan_trans(s);
4266             TERM(sublex_start());
4267         }
4268     }}
4269 }
4270
4271 I32
4272 Perl_keyword(pTHX_ register char *d, I32 len)
4273 {
4274     switch (*d) {
4275     case '_':
4276         if (d[1] == '_') {
4277             if (strEQ(d,"__FILE__"))            return -KEY___FILE__;
4278             if (strEQ(d,"__LINE__"))            return -KEY___LINE__;
4279             if (strEQ(d,"__PACKAGE__"))         return -KEY___PACKAGE__;
4280             if (strEQ(d,"__DATA__"))            return KEY___DATA__;
4281             if (strEQ(d,"__END__"))             return KEY___END__;
4282         }
4283         break;
4284     case 'A':
4285         if (strEQ(d,"AUTOLOAD"))                return KEY_AUTOLOAD;
4286         break;
4287     case 'a':
4288         switch (len) {
4289         case 3:
4290             if (strEQ(d,"and"))                 return -KEY_and;
4291             if (strEQ(d,"abs"))                 return -KEY_abs;
4292             break;
4293         case 5:
4294             if (strEQ(d,"alarm"))               return -KEY_alarm;
4295             if (strEQ(d,"atan2"))               return -KEY_atan2;
4296             break;
4297         case 6:
4298             if (strEQ(d,"accept"))              return -KEY_accept;
4299             break;
4300         }
4301         break;
4302     case 'B':
4303         if (strEQ(d,"BEGIN"))                   return KEY_BEGIN;
4304         break;
4305     case 'b':
4306         if (strEQ(d,"bless"))                   return -KEY_bless;
4307         if (strEQ(d,"bind"))                    return -KEY_bind;
4308         if (strEQ(d,"binmode"))                 return -KEY_binmode;
4309         break;
4310     case 'C':
4311         if (strEQ(d,"CORE"))                    return -KEY_CORE;
4312         break;
4313     case 'c':
4314         switch (len) {
4315         case 3:
4316             if (strEQ(d,"cmp"))                 return -KEY_cmp;
4317             if (strEQ(d,"chr"))                 return -KEY_chr;
4318             if (strEQ(d,"cos"))                 return -KEY_cos;
4319             break;
4320         case 4:
4321             if (strEQ(d,"chop"))                return KEY_chop;
4322             break;
4323         case 5:
4324             if (strEQ(d,"close"))               return -KEY_close;
4325             if (strEQ(d,"chdir"))               return -KEY_chdir;
4326             if (strEQ(d,"chomp"))               return KEY_chomp;
4327             if (strEQ(d,"chmod"))               return -KEY_chmod;
4328             if (strEQ(d,"chown"))               return -KEY_chown;
4329             if (strEQ(d,"crypt"))               return -KEY_crypt;
4330             break;
4331         case 6:
4332             if (strEQ(d,"chroot"))              return -KEY_chroot;
4333             if (strEQ(d,"caller"))              return -KEY_caller;
4334             break;
4335         case 7:
4336             if (strEQ(d,"connect"))             return -KEY_connect;
4337             break;
4338         case 8:
4339             if (strEQ(d,"closedir"))            return -KEY_closedir;
4340             if (strEQ(d,"continue"))            return -KEY_continue;
4341             break;
4342         }
4343         break;
4344     case 'D':
4345         if (strEQ(d,"DESTROY"))                 return KEY_DESTROY;
4346         break;
4347     case 'd':
4348         switch (len) {
4349         case 2:
4350             if (strEQ(d,"do"))                  return KEY_do;
4351             break;
4352         case 3:
4353             if (strEQ(d,"die"))                 return -KEY_die;
4354             break;
4355         case 4:
4356             if (strEQ(d,"dump"))                return -KEY_dump;
4357             break;
4358         case 6:
4359             if (strEQ(d,"delete"))              return KEY_delete;
4360             break;
4361         case 7:
4362             if (strEQ(d,"defined"))             return KEY_defined;
4363             if (strEQ(d,"dbmopen"))             return -KEY_dbmopen;
4364             break;
4365         case 8:
4366             if (strEQ(d,"dbmclose"))            return -KEY_dbmclose;
4367             break;
4368         }
4369         break;
4370     case 'E':
4371         if (strEQ(d,"EQ")) { deprecate(d);      return -KEY_eq;}
4372         if (strEQ(d,"END"))                     return KEY_END;
4373         break;
4374     case 'e':
4375         switch (len) {
4376         case 2:
4377             if (strEQ(d,"eq"))                  return -KEY_eq;
4378             break;
4379         case 3:
4380             if (strEQ(d,"eof"))                 return -KEY_eof;
4381             if (strEQ(d,"exp"))                 return -KEY_exp;
4382             break;
4383         case 4:
4384             if (strEQ(d,"else"))                return KEY_else;
4385             if (strEQ(d,"exit"))                return -KEY_exit;
4386             if (strEQ(d,"eval"))                return KEY_eval;
4387             if (strEQ(d,"exec"))                return -KEY_exec;
4388             if (strEQ(d,"each"))                return KEY_each;
4389             break;
4390         case 5:
4391             if (strEQ(d,"elsif"))               return KEY_elsif;
4392             break;
4393         case 6:
4394             if (strEQ(d,"exists"))              return KEY_exists;
4395             if (strEQ(d,"elseif")) Perl_warn(aTHX_ "elseif should be elsif");
4396             break;
4397         case 8:
4398             if (strEQ(d,"endgrent"))            return -KEY_endgrent;
4399             if (strEQ(d,"endpwent"))            return -KEY_endpwent;
4400             break;
4401         case 9:
4402             if (strEQ(d,"endnetent"))           return -KEY_endnetent;
4403             break;
4404         case 10:
4405             if (strEQ(d,"endhostent"))          return -KEY_endhostent;
4406             if (strEQ(d,"endservent"))          return -KEY_endservent;
4407             break;
4408         case 11:
4409             if (strEQ(d,"endprotoent"))         return -KEY_endprotoent;
4410             break;
4411         }
4412         break;
4413     case 'f':
4414         switch (len) {
4415         case 3:
4416             if (strEQ(d,"for"))                 return KEY_for;
4417             break;
4418         case 4:
4419             if (strEQ(d,"fork"))                return -KEY_fork;
4420             break;
4421         case 5:
4422             if (strEQ(d,"fcntl"))               return -KEY_fcntl;
4423             if (strEQ(d,"flock"))               return -KEY_flock;
4424             break;
4425         case 6:
4426             if (strEQ(d,"format"))              return KEY_format;
4427             if (strEQ(d,"fileno"))              return -KEY_fileno;
4428             break;
4429         case 7:
4430             if (strEQ(d,"foreach"))             return KEY_foreach;
4431             break;
4432         case 8: