3 * Copyright (c) 1991-1997, Larry Wall
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.
11 * "It all comes from here, the stench and the peril." --Frodo
18 static void check_uni _((void));
19 static void force_next _((I32 type));
20 static char *force_version _((char *start));
21 static char *force_word _((char *start, int token, int check_keyword, int allow_pack, int allow_tick));
22 static SV *tokeq _((SV *sv));
23 static char *scan_const _((char *start));
24 static char *scan_formline _((char *s));
25 static char *scan_heredoc _((char *s));
26 static char *scan_ident _((char *s, char *send, char *dest, STRLEN destlen,
28 static char *scan_inputsymbol _((char *start));
29 static char *scan_pat _((char *start, I32 type));
30 static char *scan_str _((char *start));
31 static char *scan_subst _((char *start));
32 static char *scan_trans _((char *start));
33 static char *scan_word _((char *s, char *dest, STRLEN destlen,
34 int allow_package, STRLEN *slp));
35 static char *skipspace _((char *s));
36 static void checkcomma _((char *s, char *name, char *what));
37 static void force_ident _((char *s, int kind));
38 static void incline _((char *s));
39 static int intuit_method _((char *s, GV *gv));
40 static int intuit_more _((char *s));
41 static I32 lop _((I32 f, expectation x, char *s));
42 static void missingterm _((char *s));
43 static void no_op _((char *what, char *s));
44 static void set_csh _((void));
45 static I32 sublex_done _((void));
46 static I32 sublex_push _((void));
47 static I32 sublex_start _((void));
49 static int uni _((I32 f, char *s));
51 static char * filter_gets _((SV *sv, PerlIO *fp, STRLEN append));
52 static void restore_rsfp _((void *f));
53 static SV *new_constant _((char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type));
54 static void restore_expect _((void *e));
55 static void restore_lex_expect _((void *e));
56 #endif /* PERL_OBJECT */
58 static char ident_too_long[] = "Identifier too long";
60 /* The following are arranged oddly so that the guard on the switch statement
61 * can get by with a single comparison (if the compiler is smart enough).
64 /* #define LEX_NOTPARSING 11 is done in perl.h. */
67 #define LEX_INTERPNORMAL 9
68 #define LEX_INTERPCASEMOD 8
69 #define LEX_INTERPPUSH 7
70 #define LEX_INTERPSTART 6
71 #define LEX_INTERPEND 5
72 #define LEX_INTERPENDMAYBE 4
73 #define LEX_INTERPCONCAT 3
74 #define LEX_INTERPCONST 2
75 #define LEX_FORMLINE 1
76 #define LEX_KNOWNEXT 0
85 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
87 # include <unistd.h> /* Needed for execv() */
100 #define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
102 #define TOKEN(retval) return (PL_bufptr = s,(int)retval)
103 #define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
104 #define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
105 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
106 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
107 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
108 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
109 #define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
110 #define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
111 #define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
112 #define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
113 #define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
114 #define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
115 #define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
116 #define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
117 #define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
118 #define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
119 #define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
120 #define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
121 #define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
123 /* This bit of chicanery makes a unary function followed by
124 * a parenthesis into a function with one argument, highest precedence.
126 #define UNI(f) return(yylval.ival = f, \
129 PL_last_uni = PL_oldbufptr, \
130 PL_last_lop_op = f, \
131 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
133 #define UNIBRACK(f) return(yylval.ival = f, \
135 PL_last_uni = PL_oldbufptr, \
136 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
138 /* grandfather return to old style */
139 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
144 if (*PL_bufptr == '=') {
146 if (toketype == ANDAND)
147 yylval.ival = OP_ANDASSIGN;
148 else if (toketype == OROR)
149 yylval.ival = OP_ORASSIGN;
156 no_op(char *what, char *s)
158 char *oldbp = PL_bufptr;
159 bool is_first = (PL_oldbufptr == PL_linestart);
162 yywarn(form("%s found where operator expected", what));
164 warn("\t(Missing semicolon on previous line?)\n");
165 else if (PL_oldoldbufptr && isIDFIRST(*PL_oldoldbufptr)) {
167 for (t = PL_oldoldbufptr; *t && (isALNUM(*t) || *t == ':'); t++) ;
168 if (t < PL_bufptr && isSPACE(*t))
169 warn("\t(Do you need to predeclare %.*s?)\n",
170 t - PL_oldoldbufptr, PL_oldoldbufptr);
174 warn("\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
184 char *nl = strrchr(s,'\n');
190 iscntrl(PL_multi_close)
192 PL_multi_close < 32 || PL_multi_close == 127
196 tmpbuf[1] = toCTRL(PL_multi_close);
202 *tmpbuf = PL_multi_close;
206 q = strchr(s,'"') ? '\'' : '"';
207 croak("Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
214 warn("Use of %s is deprecated", s);
220 deprecate("comma-less variable list");
226 win32_textfilter(int idx, SV *sv, int maxlen)
228 I32 count = FILTER_READ(idx+1, sv, maxlen);
229 if (count > 0 && !maxlen)
230 win32_strip_return(sv);
243 SAVEI32(PL_lex_dojoin);
244 SAVEI32(PL_lex_brackets);
245 SAVEI32(PL_lex_fakebrack);
246 SAVEI32(PL_lex_casemods);
247 SAVEI32(PL_lex_starts);
248 SAVEI32(PL_lex_state);
249 SAVESPTR(PL_lex_inpat);
250 SAVEI32(PL_lex_inwhat);
251 SAVEI16(PL_curcop->cop_line);
254 SAVEPPTR(PL_oldbufptr);
255 SAVEPPTR(PL_oldoldbufptr);
256 SAVEPPTR(PL_linestart);
257 SAVESPTR(PL_linestr);
258 SAVEPPTR(PL_lex_brackstack);
259 SAVEPPTR(PL_lex_casestack);
260 SAVEDESTRUCTOR(restore_rsfp, PL_rsfp);
261 SAVESPTR(PL_lex_stuff);
262 SAVEI32(PL_lex_defer);
263 SAVESPTR(PL_lex_repl);
264 SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
265 SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect);
267 PL_lex_state = LEX_NORMAL;
271 PL_lex_fakebrack = 0;
272 New(899, PL_lex_brackstack, 120, char);
273 New(899, PL_lex_casestack, 12, char);
274 SAVEFREEPV(PL_lex_brackstack);
275 SAVEFREEPV(PL_lex_casestack);
277 *PL_lex_casestack = '\0';
280 PL_lex_stuff = Nullsv;
281 PL_lex_repl = Nullsv;
285 if (SvREADONLY(PL_linestr))
286 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
287 s = SvPV(PL_linestr, len);
288 if (len && s[len-1] != ';') {
289 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
290 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
291 sv_catpvn(PL_linestr, "\n;", 2);
293 SvTEMP_off(PL_linestr);
294 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
295 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
297 PL_rs = newSVpv("\n", 1);
304 PL_doextract = FALSE;
308 restore_rsfp(void *f)
310 PerlIO *fp = (PerlIO*)f;
312 if (PL_rsfp == PerlIO_stdin())
313 PerlIO_clearerr(PL_rsfp);
314 else if (PL_rsfp && (PL_rsfp != fp))
315 PerlIO_close(PL_rsfp);
320 restore_expect(void *e)
322 /* a safe way to store a small integer in a pointer */
323 PL_expect = (expectation)((char *)e - PL_tokenbuf);
327 restore_lex_expect(void *e)
329 /* a safe way to store a small integer in a pointer */
330 PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);
342 PL_curcop->cop_line++;
345 while (*s == ' ' || *s == '\t') s++;
346 if (strnEQ(s, "line ", 5)) {
355 while (*s == ' ' || *s == '\t')
357 if (*s == '"' && (t = strchr(s+1, '"')))
361 return; /* false alarm */
362 for (t = s; !isSPACE(*t); t++) ;
367 PL_curcop->cop_filegv = gv_fetchfile(s);
369 PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
371 PL_curcop->cop_line = atoi(n)-1;
375 skipspace(register char *s)
378 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
379 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
385 while (s < PL_bufend && isSPACE(*s))
387 if (s < PL_bufend && *s == '#') {
388 while (s < PL_bufend && *s != '\n')
393 if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL)
395 if ((s = filter_gets(PL_linestr, PL_rsfp, (prevlen = SvCUR(PL_linestr)))) == Nullch) {
396 if (PL_minus_n || PL_minus_p) {
397 sv_setpv(PL_linestr,PL_minus_p ?
398 ";}continue{print or die qq(-p destination: $!\\n)" :
400 sv_catpv(PL_linestr,";}");
401 PL_minus_n = PL_minus_p = 0;
404 sv_setpv(PL_linestr,";");
405 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
406 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
407 if (PL_preprocess && !PL_in_eval)
408 (void)PerlProc_pclose(PL_rsfp);
409 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
410 PerlIO_clearerr(PL_rsfp);
412 (void)PerlIO_close(PL_rsfp);
416 PL_linestart = PL_bufptr = s + prevlen;
417 PL_bufend = s + SvCUR(PL_linestr);
420 if (PERLDB_LINE && PL_curstash != PL_debstash) {
421 SV *sv = NEWSV(85,0);
423 sv_upgrade(sv, SVt_PVMG);
424 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
425 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
436 if (PL_oldoldbufptr != PL_last_uni)
438 while (isSPACE(*PL_last_uni))
440 for (s = PL_last_uni; isALNUM(*s) || *s == '-'; s++) ;
441 if ((t = strchr(s, '(')) && t < PL_bufptr)
445 warn("Warning: Use of \"%s\" without parens is ambiguous", PL_last_uni);
452 #define UNI(f) return uni(f,s)
460 PL_last_uni = PL_oldbufptr;
471 #endif /* CRIPPLED_CC */
473 #define LOP(f,x) return lop(f,x,s)
476 lop(I32 f, expectation x, char *s)
483 PL_last_lop = PL_oldbufptr;
499 PL_nexttype[PL_nexttoke] = type;
501 if (PL_lex_state != LEX_KNOWNEXT) {
502 PL_lex_defer = PL_lex_state;
503 PL_lex_expect = PL_expect;
504 PL_lex_state = LEX_KNOWNEXT;
509 force_word(register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
514 start = skipspace(start);
517 (allow_pack && *s == ':') ||
518 (allow_initial_tick && *s == '\'') )
520 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
521 if (check_keyword && keyword(PL_tokenbuf, len))
523 if (token == METHOD) {
528 PL_expect = XOPERATOR;
533 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
534 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
541 force_ident(register char *s, int kind)
544 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
545 PL_nextval[PL_nexttoke].opval = o;
548 dTHR; /* just for in_eval */
549 o->op_private = OPpCONST_ENTERED;
550 /* XXX see note in pp_entereval() for why we forgo typo
551 warnings if the symbol must be introduced in an eval.
553 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
554 kind == '$' ? SVt_PV :
555 kind == '@' ? SVt_PVAV :
556 kind == '%' ? SVt_PVHV :
564 force_version(char *s)
566 OP *version = Nullop;
570 /* default VERSION number -- GBARR */
575 for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
576 if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
578 /* real VERSION number -- GBARR */
579 version = yylval.opval;
583 /* NOTE: The parser sees the package name and the VERSION swapped */
584 PL_nextval[PL_nexttoke].opval = version;
602 s = SvPV_force(sv, len);
606 while (s < send && *s != '\\')
611 if ( PL_hints & HINT_NEW_STRING )
612 pv = sv_2mortal(newSVpv(SvPVX(pv), len));
615 if (s + 1 < send && (s[1] == '\\'))
616 s++; /* all that, just for this */
621 SvCUR_set(sv, d - SvPVX(sv));
623 if ( PL_hints & HINT_NEW_STRING )
624 return new_constant(NULL, 0, "q", sv, pv, "q");
631 register I32 op_type = yylval.ival;
633 if (op_type == OP_NULL) {
634 yylval.opval = PL_lex_op;
638 if (op_type == OP_CONST || op_type == OP_READLINE) {
639 SV *sv = tokeq(PL_lex_stuff);
641 if (SvTYPE(sv) == SVt_PVIV) {
642 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
648 nsv = newSVpv(p, len);
652 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
653 PL_lex_stuff = Nullsv;
657 PL_sublex_info.super_state = PL_lex_state;
658 PL_sublex_info.sub_inwhat = op_type;
659 PL_sublex_info.sub_op = PL_lex_op;
660 PL_lex_state = LEX_INTERPPUSH;
664 yylval.opval = PL_lex_op;
678 PL_lex_state = PL_sublex_info.super_state;
679 SAVEI32(PL_lex_dojoin);
680 SAVEI32(PL_lex_brackets);
681 SAVEI32(PL_lex_fakebrack);
682 SAVEI32(PL_lex_casemods);
683 SAVEI32(PL_lex_starts);
684 SAVEI32(PL_lex_state);
685 SAVESPTR(PL_lex_inpat);
686 SAVEI32(PL_lex_inwhat);
687 SAVEI16(PL_curcop->cop_line);
689 SAVEPPTR(PL_oldbufptr);
690 SAVEPPTR(PL_oldoldbufptr);
691 SAVEPPTR(PL_linestart);
692 SAVESPTR(PL_linestr);
693 SAVEPPTR(PL_lex_brackstack);
694 SAVEPPTR(PL_lex_casestack);
696 PL_linestr = PL_lex_stuff;
697 PL_lex_stuff = Nullsv;
699 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
700 PL_bufend += SvCUR(PL_linestr);
701 SAVEFREESV(PL_linestr);
703 PL_lex_dojoin = FALSE;
705 PL_lex_fakebrack = 0;
706 New(899, PL_lex_brackstack, 120, char);
707 New(899, PL_lex_casestack, 12, char);
708 SAVEFREEPV(PL_lex_brackstack);
709 SAVEFREEPV(PL_lex_casestack);
711 *PL_lex_casestack = '\0';
713 PL_lex_state = LEX_INTERPCONCAT;
714 PL_curcop->cop_line = PL_multi_start;
716 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
717 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
718 PL_lex_inpat = PL_sublex_info.sub_op;
720 PL_lex_inpat = Nullop;
728 if (!PL_lex_starts++) {
729 PL_expect = XOPERATOR;
730 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv("",0));
734 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
735 PL_lex_state = LEX_INTERPCASEMOD;
739 /* Is there a right-hand side to take care of? */
740 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
741 PL_linestr = PL_lex_repl;
743 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
744 PL_bufend += SvCUR(PL_linestr);
745 SAVEFREESV(PL_linestr);
746 PL_lex_dojoin = FALSE;
748 PL_lex_fakebrack = 0;
750 *PL_lex_casestack = '\0';
752 if (SvCOMPILED(PL_lex_repl)) {
753 PL_lex_state = LEX_INTERPNORMAL;
757 PL_lex_state = LEX_INTERPCONCAT;
758 PL_lex_repl = Nullsv;
763 PL_bufend = SvPVX(PL_linestr);
764 PL_bufend += SvCUR(PL_linestr);
765 PL_expect = XOPERATOR;
773 Extracts a pattern, double-quoted string, or transliteration. This
776 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
777 processing a pattern (PL_lex_inpat is true), a transliteration
778 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
780 Returns a pointer to the character scanned up to. Iff this is
781 advanced from the start pointer supplied (ie if anything was
782 successfully parsed), will leave an OP for the substring scanned
783 in yylval. Caller must intuit reason for not parsing further
784 by looking at the next characters herself.
788 double-quoted style: \r and \n
789 regexp special ones: \D \s
791 backrefs: \1 (deprecated in substitution replacements)
792 case and quoting: \U \Q \E
793 stops on @ and $, but not for $ as tail anchor
796 characters are VERY literal, except for - not at the start or end
797 of the string, which indicates a range. scan_const expands the
798 range to the full set of intermediate characters.
800 In double-quoted strings:
802 double-quoted style: \r and \n
804 backrefs: \1 (deprecated)
805 case and quoting: \U \Q \E
808 scan_const does *not* construct ops to handle interpolated strings.
809 It stops processing as soon as it finds an embedded $ or @ variable
810 and leaves it to the caller to work out what's going on.
812 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
814 $ in pattern could be $foo or could be tail anchor. Assumption:
815 it's a tail anchor if $ is the last thing in the string, or if it's
816 followed by one of ")| \n\t"
818 \1 (backreferences) are turned into $1
820 The structure of the code is
821 while (there's a character to process) {
822 handle transliteration ranges
824 skip # initiated comments in //x patterns
825 check for embedded @foo
826 check for embedded scalars
828 leave intact backslashes from leave (below)
829 deprecate \1 in strings and sub replacements
830 handle string-changing backslashes \l \U \Q \E, etc.
831 switch (what was escaped) {
832 handle - in a transliteration (becomes a literal -)
833 handle \132 octal characters
834 handle 0x15 hex characters
835 handle \cV (control V)
836 handle printf backslashes (\f, \r, \n, etc)
839 } (end while character to read)
844 scan_const(char *start)
846 register char *send = PL_bufend; /* end of the constant */
847 SV *sv = NEWSV(93, send - start); /* sv for the constant */
848 register char *s = start; /* start of the constant */
849 register char *d = SvPVX(sv); /* destination for copies */
850 bool dorange = FALSE; /* are we in a translit range? */
853 /* leaveit is the set of acceptably-backslashed characters */
856 ? "\\.^$@AGZdDwWsSbB+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
859 while (s < send || dorange) {
860 /* get transliterations out of the way (they're most literal) */
861 if (PL_lex_inwhat == OP_TRANS) {
862 /* expand a range A-Z to the full set of characters. AIE! */
864 I32 i; /* current expanded character */
865 I32 min; /* first character in range */
866 I32 max; /* last character in range */
868 i = d - SvPVX(sv); /* remember current offset */
869 SvGROW(sv, SvLEN(sv) + 256); /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */
870 d = SvPVX(sv) + i; /* restore d after the grow potentially has changed the ptr */
871 d -= 2; /* eat the first char and the - */
873 min = (U8)*d; /* first char in range */
874 max = (U8)d[1]; /* last char in range */
877 if ((isLOWER(min) && isLOWER(max)) ||
878 (isUPPER(min) && isUPPER(max))) {
880 for (i = min; i <= max; i++)
884 for (i = min; i <= max; i++)
891 for (i = min; i <= max; i++)
894 /* mark the range as done, and continue */
899 /* range begins (ignore - as first or last char) */
900 else if (*s == '-' && s+1 < send && s != start) {
906 /* if we get here, we're not doing a transliteration */
908 /* skip for regexp comments /(?#comment)/ */
909 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
911 while (s < send && *s != ')')
913 } else if (s[2] == '{') { /* This should march regcomp.c */
915 char *regparse = s + 3;
918 while (count && (c = *regparse)) {
919 if (c == '\\' && regparse[1])
927 if (*regparse == ')')
930 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
931 while (s < regparse && *s != ')')
936 /* likewise skip #-initiated comments in //x patterns */
937 else if (*s == '#' && PL_lex_inpat &&
938 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
939 while (s+1 < send && *s != '\n')
943 /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
944 else if (*s == '@' && s[1] && (isALNUM(s[1]) || strchr(":'{$", s[1])))
947 /* check for embedded scalars. only stop if we're sure it's a
950 else if (*s == '$') {
951 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
953 if (s + 1 < send && !strchr("()| \n\t", s[1]))
954 break; /* in regexp, $ might be tail anchor */
958 if (*s == '\\' && s+1 < send) {
961 /* some backslashes we leave behind */
962 if (*s && strchr(leaveit, *s)) {
968 /* deprecate \1 in strings and substitution replacements */
969 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
970 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
973 warn("\\%c better written as $%c", *s, *s);
978 /* string-change backslash escapes */
979 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
984 /* if we get here, it's either a quoted -, or a digit */
987 /* quoted - in transliterations */
989 if (PL_lex_inwhat == OP_TRANS) {
994 /* default action is to copy the quoted character */
999 /* \132 indicates an octal constant */
1000 case '0': case '1': case '2': case '3':
1001 case '4': case '5': case '6': case '7':
1002 *d++ = scan_oct(s, 3, &len);
1006 /* \x24 indicates a hex constant */
1008 *d++ = scan_hex(++s, 2, &len);
1012 /* \c is a control character */
1026 /* printf-style backslashes, formfeeds, newlines, etc */
1052 } /* end if (backslash) */
1055 } /* while loop to process each character */
1057 /* terminate the string and set up the sv */
1059 SvCUR_set(sv, d - SvPVX(sv));
1062 /* shrink the sv if we allocated more than we used */
1063 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1064 SvLEN_set(sv, SvCUR(sv) + 1);
1065 Renew(SvPVX(sv), SvLEN(sv), char);
1068 /* return the substring (via yylval) only if we parsed anything */
1069 if (s > PL_bufptr) {
1070 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1071 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1073 ( PL_lex_inwhat == OP_TRANS
1075 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1078 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1084 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1086 intuit_more(register char *s)
1088 if (PL_lex_brackets)
1090 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1092 if (*s != '{' && *s != '[')
1097 /* In a pattern, so maybe we have {n,m}. */
1114 /* On the other hand, maybe we have a character class */
1117 if (*s == ']' || *s == '^')
1120 int weight = 2; /* let's weigh the evidence */
1122 unsigned char un_char = 255, last_un_char;
1123 char *send = strchr(s,']');
1124 char tmpbuf[sizeof PL_tokenbuf * 4];
1126 if (!send) /* has to be an expression */
1129 Zero(seen,256,char);
1132 else if (isDIGIT(*s)) {
1134 if (isDIGIT(s[1]) && s[2] == ']')
1140 for (; s < send; s++) {
1141 last_un_char = un_char;
1142 un_char = (unsigned char)*s;
1147 weight -= seen[un_char] * 10;
1148 if (isALNUM(s[1])) {
1149 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1150 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1155 else if (*s == '$' && s[1] &&
1156 strchr("[#!%*<>()-=",s[1])) {
1157 if (/*{*/ strchr("])} =",s[2]))
1166 if (strchr("wds]",s[1]))
1168 else if (seen['\''] || seen['"'])
1170 else if (strchr("rnftbxcav",s[1]))
1172 else if (isDIGIT(s[1])) {
1174 while (s[1] && isDIGIT(s[1]))
1184 if (strchr("aA01! ",last_un_char))
1186 if (strchr("zZ79~",s[1]))
1188 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1189 weight -= 5; /* cope with negative subscript */
1192 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1193 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1198 if (keyword(tmpbuf, d - tmpbuf))
1201 if (un_char == last_un_char + 1)
1203 weight -= seen[un_char];
1208 if (weight >= 0) /* probably a character class */
1216 intuit_method(char *start, GV *gv)
1218 char *s = start + (*start == '$');
1219 char tmpbuf[sizeof PL_tokenbuf];
1227 if ((cv = GvCVu(gv))) {
1228 char *proto = SvPVX(cv);
1238 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1239 if (*start == '$') {
1240 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1245 return *s == '(' ? FUNCMETH : METHOD;
1247 if (!keyword(tmpbuf, len)) {
1248 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1253 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1254 if (indirgv && GvCVu(indirgv))
1256 /* filehandle or package name makes it a method */
1257 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1259 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1260 return 0; /* no assumptions -- "=>" quotes bearword */
1262 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1264 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1268 return *s == '(' ? FUNCMETH : METHOD;
1278 char *pdb = PerlEnv_getenv("PERL5DB");
1282 SETERRNO(0,SS$_NORMAL);
1283 return "BEGIN { require 'perl5db.pl' }";
1289 /* Encoded script support. filter_add() effectively inserts a
1290 * 'pre-processing' function into the current source input stream.
1291 * Note that the filter function only applies to the current source file
1292 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1294 * The datasv parameter (which may be NULL) can be used to pass
1295 * private data to this instance of the filter. The filter function
1296 * can recover the SV using the FILTER_DATA macro and use it to
1297 * store private buffers and state information.
1299 * The supplied datasv parameter is upgraded to a PVIO type
1300 * and the IoDIRP field is used to store the function pointer.
1301 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1302 * private use must be set using malloc'd pointers.
1304 static int filter_debug = 0;
1307 filter_add(filter_t funcp, SV *datasv)
1309 if (!funcp){ /* temporary handy debugging hack to be deleted */
1310 filter_debug = atoi((char*)datasv);
1313 if (!PL_rsfp_filters)
1314 PL_rsfp_filters = newAV();
1316 datasv = NEWSV(255,0);
1317 if (!SvUPGRADE(datasv, SVt_PVIO))
1318 die("Can't upgrade filter_add data to SVt_PVIO");
1319 IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
1321 warn("filter_add func %p (%s)", funcp, SvPV(datasv,PL_na));
1322 av_unshift(PL_rsfp_filters, 1);
1323 av_store(PL_rsfp_filters, 0, datasv) ;
1328 /* Delete most recently added instance of this filter function. */
1330 filter_del(filter_t funcp)
1333 warn("filter_del func %p", funcp);
1334 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1336 /* if filter is on top of stack (usual case) just pop it off */
1337 if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (DIR*)funcp){
1338 sv_free(av_pop(PL_rsfp_filters));
1342 /* we need to search for the correct entry and clear it */
1343 die("filter_del can only delete in reverse order (currently)");
1347 /* Invoke the n'th filter function for the current rsfp. */
1349 filter_read(int idx, SV *buf_sv, int maxlen)
1352 /* 0 = read one text line */
1357 if (!PL_rsfp_filters)
1359 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
1360 /* Provide a default input filter to make life easy. */
1361 /* Note that we append to the line. This is handy. */
1363 warn("filter_read %d: from rsfp\n", idx);
1367 int old_len = SvCUR(buf_sv) ;
1369 /* ensure buf_sv is large enough */
1370 SvGROW(buf_sv, old_len + maxlen) ;
1371 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1372 if (PerlIO_error(PL_rsfp))
1373 return -1; /* error */
1375 return 0 ; /* end of file */
1377 SvCUR_set(buf_sv, old_len + len) ;
1380 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1381 if (PerlIO_error(PL_rsfp))
1382 return -1; /* error */
1384 return 0 ; /* end of file */
1387 return SvCUR(buf_sv);
1389 /* Skip this filter slot if filter has been deleted */
1390 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
1392 warn("filter_read %d: skipped (filter deleted)\n", idx);
1393 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1395 /* Get function pointer hidden within datasv */
1396 funcp = (filter_t)IoDIRP(datasv);
1398 warn("filter_read %d: via function %p (%s)\n",
1399 idx, funcp, SvPV(datasv,PL_na));
1400 /* Call function. The function is expected to */
1401 /* call "FILTER_READ(idx+1, buf_sv)" first. */
1402 /* Return: <0:error, =0:eof, >0:not eof */
1403 return (*funcp)(PERL_OBJECT_THIS_ idx, buf_sv, maxlen);
1407 filter_gets(register SV *sv, register PerlIO *fp, STRLEN append)
1410 if (!PL_rsfp_filters) {
1411 filter_add(win32_textfilter,NULL);
1414 if (PL_rsfp_filters) {
1417 SvCUR_set(sv, 0); /* start with empty line */
1418 if (FILTER_READ(0, sv, 0) > 0)
1419 return ( SvPVX(sv) ) ;
1424 return (sv_gets(sv, fp, append));
1429 static char* exp_name[] =
1430 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
1433 EXT int yychar; /* last token */
1438 Works out what to call the token just pulled out of the input
1439 stream. The yacc parser takes care of taking the ops we return and
1440 stitching them into a tree.
1446 if read an identifier
1447 if we're in a my declaration
1448 croak if they tried to say my($foo::bar)
1449 build the ops for a my() declaration
1450 if it's an access to a my() variable
1451 are we in a sort block?
1452 croak if my($a); $a <=> $b
1453 build ops for access to a my() variable
1454 if in a dq string, and they've said @foo and we can't find @foo
1456 build ops for a bareword
1457 if we already built the token before, use it.
1471 /* check if there's an identifier for us to look at */
1472 if (PL_pending_ident) {
1473 /* pit holds the identifier we read and pending_ident is reset */
1474 char pit = PL_pending_ident;
1475 PL_pending_ident = 0;
1477 /* if we're in a my(), we can't allow dynamics here.
1478 $foo'bar has already been turned into $foo::bar, so
1479 just check for colons.
1481 if it's a legal name, the OP is a PADANY.
1484 if (strchr(PL_tokenbuf,':'))
1485 croak(no_myglob,PL_tokenbuf);
1487 yylval.opval = newOP(OP_PADANY, 0);
1488 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
1493 build the ops for accesses to a my() variable.
1495 Deny my($a) or my($b) in a sort block, *if* $a or $b is
1496 then used in a comparison. This catches most, but not
1497 all cases. For instance, it catches
1498 sort { my($a); $a <=> $b }
1500 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1501 (although why you'd do that is anyone's guess).
1504 if (!strchr(PL_tokenbuf,':')) {
1506 /* Check for single character per-thread SVs */
1507 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1508 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1509 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
1511 yylval.opval = newOP(OP_THREADSV, 0);
1512 yylval.opval->op_targ = tmp;
1515 #endif /* USE_THREADS */
1516 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
1517 /* if it's a sort block and they're naming $a or $b */
1518 if (PL_last_lop_op == OP_SORT &&
1519 PL_tokenbuf[0] == '$' &&
1520 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
1523 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
1524 d < PL_bufend && *d != '\n';
1527 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
1528 croak("Can't use \"my %s\" in sort comparison",
1534 yylval.opval = newOP(OP_PADANY, 0);
1535 yylval.opval->op_targ = tmp;
1541 Whine if they've said @foo in a doublequoted string,
1542 and @foo isn't a variable we can find in the symbol
1545 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
1546 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
1547 if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
1548 yyerror(form("In string, %s now must be written as \\%s",
1549 PL_tokenbuf, PL_tokenbuf));
1552 /* build ops for a bareword */
1553 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
1554 yylval.opval->op_private = OPpCONST_ENTERED;
1555 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
1556 ((PL_tokenbuf[0] == '$') ? SVt_PV
1557 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
1562 /* no identifier pending identification */
1564 switch (PL_lex_state) {
1566 case LEX_NORMAL: /* Some compilers will produce faster */
1567 case LEX_INTERPNORMAL: /* code if we comment these out. */
1571 /* when we're already built the next token, just pull it out the queue */
1574 yylval = PL_nextval[PL_nexttoke];
1576 PL_lex_state = PL_lex_defer;
1577 PL_expect = PL_lex_expect;
1578 PL_lex_defer = LEX_NORMAL;
1580 return(PL_nexttype[PL_nexttoke]);
1582 /* interpolated case modifiers like \L \U, including \Q and \E.
1583 when we get here, PL_bufptr is at the \
1585 case LEX_INTERPCASEMOD:
1587 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
1588 croak("panic: INTERPCASEMOD");
1590 /* handle \E or end of string */
1591 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
1595 if (PL_lex_casemods) {
1596 oldmod = PL_lex_casestack[--PL_lex_casemods];
1597 PL_lex_casestack[PL_lex_casemods] = '\0';
1599 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
1601 PL_lex_state = LEX_INTERPCONCAT;
1605 if (PL_bufptr != PL_bufend)
1607 PL_lex_state = LEX_INTERPCONCAT;
1612 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
1613 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
1614 if (strchr("LU", *s) &&
1615 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
1617 PL_lex_casestack[--PL_lex_casemods] = '\0';
1620 if (PL_lex_casemods > 10) {
1621 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
1622 if (newlb != PL_lex_casestack) {
1624 PL_lex_casestack = newlb;
1627 PL_lex_casestack[PL_lex_casemods++] = *s;
1628 PL_lex_casestack[PL_lex_casemods] = '\0';
1629 PL_lex_state = LEX_INTERPCONCAT;
1630 PL_nextval[PL_nexttoke].ival = 0;
1633 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
1635 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
1637 PL_nextval[PL_nexttoke].ival = OP_LC;
1639 PL_nextval[PL_nexttoke].ival = OP_UC;
1641 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
1643 croak("panic: yylex");
1646 if (PL_lex_starts) {
1655 case LEX_INTERPPUSH:
1656 return sublex_push();
1658 case LEX_INTERPSTART:
1659 if (PL_bufptr == PL_bufend)
1660 return sublex_done();
1662 PL_lex_dojoin = (*PL_bufptr == '@');
1663 PL_lex_state = LEX_INTERPNORMAL;
1664 if (PL_lex_dojoin) {
1665 PL_nextval[PL_nexttoke].ival = 0;
1668 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
1669 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
1670 force_next(PRIVATEREF);
1672 force_ident("\"", '$');
1673 #endif /* USE_THREADS */
1674 PL_nextval[PL_nexttoke].ival = 0;
1676 PL_nextval[PL_nexttoke].ival = 0;
1678 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
1681 if (PL_lex_starts++) {
1687 case LEX_INTERPENDMAYBE:
1688 if (intuit_more(PL_bufptr)) {
1689 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
1695 if (PL_lex_dojoin) {
1696 PL_lex_dojoin = FALSE;
1697 PL_lex_state = LEX_INTERPCONCAT;
1701 case LEX_INTERPCONCAT:
1703 if (PL_lex_brackets)
1704 croak("panic: INTERPCONCAT");
1706 if (PL_bufptr == PL_bufend)
1707 return sublex_done();
1709 if (SvIVX(PL_linestr) == '\'') {
1710 SV *sv = newSVsv(PL_linestr);
1713 else if ( PL_hints & HINT_NEW_RE )
1714 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
1715 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1719 s = scan_const(PL_bufptr);
1721 PL_lex_state = LEX_INTERPCASEMOD;
1723 PL_lex_state = LEX_INTERPSTART;
1726 if (s != PL_bufptr) {
1727 PL_nextval[PL_nexttoke] = yylval;
1730 if (PL_lex_starts++)
1740 PL_lex_state = LEX_NORMAL;
1741 s = scan_formline(PL_bufptr);
1742 if (!PL_lex_formbrack)
1748 PL_oldoldbufptr = PL_oldbufptr;
1751 PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
1757 croak("Unrecognized character \\%03o", *s & 255);
1760 goto fake_eof; /* emulate EOF on ^D or ^Z */
1765 if (PL_lex_brackets)
1766 yyerror("Missing right bracket");
1769 if (s++ < PL_bufend)
1770 goto retry; /* ignore stray nulls */
1773 if (!PL_in_eval && !PL_preambled) {
1774 PL_preambled = TRUE;
1775 sv_setpv(PL_linestr,incl_perldb());
1776 if (SvCUR(PL_linestr))
1777 sv_catpv(PL_linestr,";");
1779 while(AvFILLp(PL_preambleav) >= 0) {
1780 SV *tmpsv = av_shift(PL_preambleav);
1781 sv_catsv(PL_linestr, tmpsv);
1782 sv_catpv(PL_linestr, ";");
1785 sv_free((SV*)PL_preambleav);
1786 PL_preambleav = NULL;
1788 if (PL_minus_n || PL_minus_p) {
1789 sv_catpv(PL_linestr, "LINE: while (<>) {");
1791 sv_catpv(PL_linestr,"chomp;");
1793 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
1795 GvIMPORTED_AV_on(gv);
1797 if (strchr("/'\"", *PL_splitstr)
1798 && strchr(PL_splitstr + 1, *PL_splitstr))
1799 sv_catpvf(PL_linestr, "@F=split(%s);", PL_splitstr);
1802 s = "'~#\200\1'"; /* surely one char is unused...*/
1803 while (s[1] && strchr(PL_splitstr, *s)) s++;
1805 sv_catpvf(PL_linestr, "@F=split(%s%c",
1806 "q" + (delim == '\''), delim);
1807 for (s = PL_splitstr; *s; s++) {
1809 sv_catpvn(PL_linestr, "\\", 1);
1810 sv_catpvn(PL_linestr, s, 1);
1812 sv_catpvf(PL_linestr, "%c);", delim);
1816 sv_catpv(PL_linestr,"@F=split(' ');");
1819 sv_catpv(PL_linestr, "\n");
1820 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1821 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1822 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1823 SV *sv = NEWSV(85,0);
1825 sv_upgrade(sv, SVt_PVMG);
1826 sv_setsv(sv,PL_linestr);
1827 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1832 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
1835 if (PL_preprocess && !PL_in_eval)
1836 (void)PerlProc_pclose(PL_rsfp);
1837 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
1838 PerlIO_clearerr(PL_rsfp);
1840 (void)PerlIO_close(PL_rsfp);
1842 PL_doextract = FALSE;
1844 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
1845 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
1846 sv_catpv(PL_linestr,";}");
1847 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1848 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1849 PL_minus_n = PL_minus_p = 0;
1852 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1853 sv_setpv(PL_linestr,"");
1854 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
1857 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
1858 PL_doextract = FALSE;
1860 /* Incest with pod. */
1861 if (*s == '=' && strnEQ(s, "=cut", 4)) {
1862 sv_setpv(PL_linestr, "");
1863 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1864 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1865 PL_doextract = FALSE;
1869 } while (PL_doextract);
1870 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
1871 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1872 SV *sv = NEWSV(85,0);
1874 sv_upgrade(sv, SVt_PVMG);
1875 sv_setsv(sv,PL_linestr);
1876 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1878 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1879 if (PL_curcop->cop_line == 1) {
1880 while (s < PL_bufend && isSPACE(*s))
1882 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
1886 if (*s == '#' && *(s+1) == '!')
1888 #ifdef ALTERNATE_SHEBANG
1890 static char as[] = ALTERNATE_SHEBANG;
1891 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
1892 d = s + (sizeof(as) - 1);
1894 #endif /* ALTERNATE_SHEBANG */
1903 while (*d && !isSPACE(*d))
1907 #ifdef ARG_ZERO_IS_SCRIPT
1908 if (ipathend > ipath) {
1910 * HP-UX (at least) sets argv[0] to the script name,
1911 * which makes $^X incorrect. And Digital UNIX and Linux,
1912 * at least, set argv[0] to the basename of the Perl
1913 * interpreter. So, having found "#!", we'll set it right.
1915 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
1916 assert(SvPOK(x) || SvGMAGICAL(x));
1917 if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
1918 sv_setpvn(x, ipath, ipathend - ipath);
1921 TAINT_NOT; /* $^X is always tainted, but that's OK */
1923 #endif /* ARG_ZERO_IS_SCRIPT */
1928 d = instr(s,"perl -");
1930 d = instr(s,"perl");
1931 #ifdef ALTERNATE_SHEBANG
1933 * If the ALTERNATE_SHEBANG on this system starts with a
1934 * character that can be part of a Perl expression, then if
1935 * we see it but not "perl", we're probably looking at the
1936 * start of Perl code, not a request to hand off to some
1937 * other interpreter. Similarly, if "perl" is there, but
1938 * not in the first 'word' of the line, we assume the line
1939 * contains the start of the Perl program.
1941 if (d && *s != '#') {
1943 while (*c && !strchr("; \t\r\n\f\v#", *c))
1946 d = Nullch; /* "perl" not in first word; ignore */
1948 *s = '#'; /* Don't try to parse shebang line */
1950 #endif /* ALTERNATE_SHEBANG */
1955 !instr(s,"indir") &&
1956 instr(PL_origargv[0],"perl"))
1962 while (s < PL_bufend && isSPACE(*s))
1964 if (s < PL_bufend) {
1965 Newz(899,newargv,PL_origargc+3,char*);
1967 while (s < PL_bufend && !isSPACE(*s))
1970 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
1973 newargv = PL_origargv;
1975 execv(ipath, newargv);
1976 croak("Can't exec %s", ipath);
1979 U32 oldpdb = PL_perldb;
1980 bool oldn = PL_minus_n;
1981 bool oldp = PL_minus_p;
1983 while (*d && !isSPACE(*d)) d++;
1984 while (*d == ' ' || *d == '\t') d++;
1988 if (*d == 'M' || *d == 'm') {
1990 while (*d && !isSPACE(*d)) d++;
1991 croak("Too late for \"-%.*s\" option",
1994 d = moreswitches(d);
1996 if (PERLDB_LINE && !oldpdb ||
1997 ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
1998 /* if we have already added "LINE: while (<>) {",
1999 we must not do it again */
2001 sv_setpv(PL_linestr, "");
2002 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2003 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2004 PL_preambled = FALSE;
2006 (void)gv_fetchfile(PL_origfilename);
2013 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2015 PL_lex_state = LEX_FORMLINE;
2020 #ifdef PERL_STRICT_CR
2021 warn("Illegal character \\%03o (carriage return)", '\r');
2023 "(Maybe you didn't strip carriage returns after a network transfer?)\n");
2025 case ' ': case '\t': case '\f': case 013:
2030 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2032 while (s < d && *s != '\n')
2037 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2039 PL_lex_state = LEX_FORMLINE;
2049 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2054 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2057 if (strnEQ(s,"=>",2)) {
2058 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2059 OPERATOR('-'); /* unary minus */
2061 PL_last_uni = PL_oldbufptr;
2062 PL_last_lop_op = OP_FTEREAD; /* good enough */
2064 case 'r': FTST(OP_FTEREAD);
2065 case 'w': FTST(OP_FTEWRITE);
2066 case 'x': FTST(OP_FTEEXEC);
2067 case 'o': FTST(OP_FTEOWNED);
2068 case 'R': FTST(OP_FTRREAD);
2069 case 'W': FTST(OP_FTRWRITE);
2070 case 'X': FTST(OP_FTREXEC);
2071 case 'O': FTST(OP_FTROWNED);
2072 case 'e': FTST(OP_FTIS);
2073 case 'z': FTST(OP_FTZERO);
2074 case 's': FTST(OP_FTSIZE);
2075 case 'f': FTST(OP_FTFILE);
2076 case 'd': FTST(OP_FTDIR);
2077 case 'l': FTST(OP_FTLINK);
2078 case 'p': FTST(OP_FTPIPE);
2079 case 'S': FTST(OP_FTSOCK);
2080 case 'u': FTST(OP_FTSUID);
2081 case 'g': FTST(OP_FTSGID);
2082 case 'k': FTST(OP_FTSVTX);
2083 case 'b': FTST(OP_FTBLK);
2084 case 'c': FTST(OP_FTCHR);
2085 case 't': FTST(OP_FTTTY);
2086 case 'T': FTST(OP_FTTEXT);
2087 case 'B': FTST(OP_FTBINARY);
2088 case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2089 case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2090 case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
2092 croak("Unrecognized file test: -%c", (int)tmp);
2099 if (PL_expect == XOPERATOR)
2104 else if (*s == '>') {
2107 if (isIDFIRST(*s)) {
2108 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2116 if (PL_expect == XOPERATOR)
2119 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2121 OPERATOR('-'); /* unary minus */
2128 if (PL_expect == XOPERATOR)
2133 if (PL_expect == XOPERATOR)
2136 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2142 if (PL_expect != XOPERATOR) {
2143 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2144 PL_expect = XOPERATOR;
2145 force_ident(PL_tokenbuf, '*');
2158 if (PL_expect == XOPERATOR) {
2162 PL_tokenbuf[0] = '%';
2163 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2164 if (!PL_tokenbuf[1]) {
2166 yyerror("Final % should be \\% or %name");
2169 PL_pending_ident = '%';
2191 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2192 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
2197 if (PL_curcop->cop_line < PL_copline)
2198 PL_copline = PL_curcop->cop_line;
2209 if (PL_lex_brackets <= 0)
2210 yyerror("Unmatched right bracket");
2213 if (PL_lex_state == LEX_INTERPNORMAL) {
2214 if (PL_lex_brackets == 0) {
2215 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
2216 PL_lex_state = LEX_INTERPEND;
2223 if (PL_lex_brackets > 100) {
2224 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2225 if (newlb != PL_lex_brackstack) {
2227 PL_lex_brackstack = newlb;
2230 switch (PL_expect) {
2232 if (PL_lex_formbrack) {
2236 if (PL_oldoldbufptr == PL_last_lop)
2237 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2239 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2240 OPERATOR(HASHBRACK);
2242 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2245 PL_tokenbuf[0] = '\0';
2246 if (d < PL_bufend && *d == '-') {
2247 PL_tokenbuf[0] = '-';
2249 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2252 if (d < PL_bufend && isIDFIRST(*d)) {
2253 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2255 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2258 char minus = (PL_tokenbuf[0] == '-');
2259 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2266 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2270 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2275 if (PL_oldoldbufptr == PL_last_lop)
2276 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2278 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2281 OPERATOR(HASHBRACK);
2282 /* This hack serves to disambiguate a pair of curlies
2283 * as being a block or an anon hash. Normally, expectation
2284 * determines that, but in cases where we're not in a
2285 * position to expect anything in particular (like inside
2286 * eval"") we have to resolve the ambiguity. This code
2287 * covers the case where the first term in the curlies is a
2288 * quoted string. Most other cases need to be explicitly
2289 * disambiguated by prepending a `+' before the opening
2290 * curly in order to force resolution as an anon hash.
2292 * XXX should probably propagate the outer expectation
2293 * into eval"" to rely less on this hack, but that could
2294 * potentially break current behavior of eval"".
2298 if (*s == '\'' || *s == '"' || *s == '`') {
2299 /* common case: get past first string, handling escapes */
2300 for (t++; t < PL_bufend && *t != *s;)
2301 if (*t++ == '\\' && (*t == '\\' || *t == *s))
2305 else if (*s == 'q') {
2308 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
2309 && !isALNUM(*t)))) {
2311 char open, close, term;
2314 while (t < PL_bufend && isSPACE(*t))
2318 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2322 for (t++; t < PL_bufend; t++) {
2323 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
2325 else if (*t == open)
2329 for (t++; t < PL_bufend; t++) {
2330 if (*t == '\\' && t+1 < PL_bufend)
2332 else if (*t == close && --brackets <= 0)
2334 else if (*t == open)
2340 else if (isALPHA(*s)) {
2341 for (t++; t < PL_bufend && isALNUM(*t); t++) ;
2343 while (t < PL_bufend && isSPACE(*t))
2345 /* if comma follows first term, call it an anon hash */
2346 /* XXX it could be a comma expression with loop modifiers */
2347 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
2348 || (*t == '=' && t[1] == '>')))
2349 OPERATOR(HASHBRACK);
2350 if (PL_expect == XREF)
2353 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2359 yylval.ival = PL_curcop->cop_line;
2360 if (isSPACE(*s) || *s == '#')
2361 PL_copline = NOLINE; /* invalidate current command line number */
2366 if (PL_lex_brackets <= 0)
2367 yyerror("Unmatched right bracket");
2369 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2370 if (PL_lex_brackets < PL_lex_formbrack)
2371 PL_lex_formbrack = 0;
2372 if (PL_lex_state == LEX_INTERPNORMAL) {
2373 if (PL_lex_brackets == 0) {
2374 if (PL_lex_fakebrack) {
2375 PL_lex_state = LEX_INTERPEND;
2377 return yylex(); /* ignore fake brackets */
2379 if (*s == '-' && s[1] == '>')
2380 PL_lex_state = LEX_INTERPENDMAYBE;
2381 else if (*s != '[' && *s != '{')
2382 PL_lex_state = LEX_INTERPEND;
2385 if (PL_lex_brackets < PL_lex_fakebrack) {
2387 PL_lex_fakebrack = 0;
2388 return yylex(); /* ignore fake brackets */
2398 if (PL_expect == XOPERATOR) {
2399 if (PL_dowarn && isALPHA(*s) && PL_bufptr == PL_linestart) {
2400 PL_curcop->cop_line--;
2402 PL_curcop->cop_line++;
2407 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2409 PL_expect = XOPERATOR;
2410 force_ident(PL_tokenbuf, '&');
2414 yylval.ival = (OPpENTERSUB_AMPER<<8);
2433 if (PL_dowarn && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
2434 warn("Reversed %c= operator",(int)tmp);
2436 if (PL_expect == XSTATE && isALPHA(tmp) &&
2437 (s == PL_linestart+1 || s[-2] == '\n') )
2439 if (PL_in_eval && !PL_rsfp) {
2444 if (strnEQ(s,"=cut",4)) {
2458 PL_doextract = TRUE;
2461 if (PL_lex_brackets < PL_lex_formbrack) {
2463 #ifdef PERL_STRICT_CR
2464 for (t = s; *t == ' ' || *t == '\t'; t++) ;
2466 for (t = s; *t == ' ' || *t == '\t' || *t == '\r'; t++) ;
2468 if (*t == '\n' || *t == '#') {
2486 if (PL_expect != XOPERATOR) {
2487 if (s[1] != '<' && !strchr(s,'>'))
2490 s = scan_heredoc(s);
2492 s = scan_inputsymbol(s);
2493 TERM(sublex_start());
2498 SHop(OP_LEFT_SHIFT);
2512 SHop(OP_RIGHT_SHIFT);
2521 if (PL_expect == XOPERATOR) {
2522 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2525 return ','; /* grandfather non-comma-format format */
2529 if (s[1] == '#' && (isALPHA(s[2]) || strchr("_{$:", s[2]))) {
2530 if (PL_expect == XOPERATOR)
2531 no_op("Array length", PL_bufptr);
2532 PL_tokenbuf[0] = '@';
2533 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2535 if (!PL_tokenbuf[1])
2537 PL_expect = XOPERATOR;
2538 PL_pending_ident = '#';
2542 if (PL_expect == XOPERATOR)
2543 no_op("Scalar", PL_bufptr);
2544 PL_tokenbuf[0] = '$';
2545 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2546 if (!PL_tokenbuf[1]) {
2548 yyerror("Final $ should be \\$ or $name");
2552 /* This kludge not intended to be bulletproof. */
2553 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
2554 yylval.opval = newSVOP(OP_CONST, 0,
2555 newSViv((IV)PL_compiling.cop_arybase));
2556 yylval.opval->op_private = OPpCONST_ARYBASE;
2561 if (PL_lex_state == LEX_NORMAL)
2564 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2567 PL_tokenbuf[0] = '@';
2570 isSPACE(*t) || isALNUM(*t) || *t == '$';
2573 PL_bufptr = skipspace(PL_bufptr);
2574 while (t < PL_bufend && *t != ']')
2576 warn("Multidimensional syntax %.*s not supported",
2577 (t - PL_bufptr) + 1, PL_bufptr);
2581 else if (*s == '{') {
2582 PL_tokenbuf[0] = '%';
2583 if (PL_dowarn && strEQ(PL_tokenbuf+1, "SIG") &&
2584 (t = strchr(s, '}')) && (t = strchr(t, '=')))
2586 char tmpbuf[sizeof PL_tokenbuf];
2588 for (t++; isSPACE(*t); t++) ;
2589 if (isIDFIRST(*t)) {
2590 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
2591 for (; isSPACE(*t); t++) ;
2592 if (*t == ';' && perl_get_cv(tmpbuf, FALSE))
2593 warn("You need to quote \"%s\"", tmpbuf);
2599 PL_expect = XOPERATOR;
2600 if (PL_lex_state == LEX_NORMAL && isSPACE(*d)) {
2601 bool islop = (PL_last_lop == PL_oldoldbufptr);
2602 if (!islop || PL_last_lop_op == OP_GREPSTART)
2603 PL_expect = XOPERATOR;
2604 else if (strchr("$@\"'`q", *s))
2605 PL_expect = XTERM; /* e.g. print $fh "foo" */
2606 else if (strchr("&*<%", *s) && isIDFIRST(s[1]))
2607 PL_expect = XTERM; /* e.g. print $fh &sub */
2608 else if (isIDFIRST(*s)) {
2609 char tmpbuf[sizeof PL_tokenbuf];
2610 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
2611 if (tmp = keyword(tmpbuf, len)) {
2612 /* binary operators exclude handle interpretations */
2624 PL_expect = XTERM; /* e.g. print $fh length() */
2629 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
2630 if (gv && GvCVu(gv))
2631 PL_expect = XTERM; /* e.g. print $fh subr() */
2634 else if (isDIGIT(*s))
2635 PL_expect = XTERM; /* e.g. print $fh 3 */
2636 else if (*s == '.' && isDIGIT(s[1]))
2637 PL_expect = XTERM; /* e.g. print $fh .3 */
2638 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
2639 PL_expect = XTERM; /* e.g. print $fh -1 */
2640 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
2641 PL_expect = XTERM; /* print $fh <<"EOF" */
2643 PL_pending_ident = '$';
2647 if (PL_expect == XOPERATOR)
2649 PL_tokenbuf[0] = '@';
2650 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2651 if (!PL_tokenbuf[1]) {
2653 yyerror("Final @ should be \\@ or @name");
2656 if (PL_lex_state == LEX_NORMAL)
2658 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2660 PL_tokenbuf[0] = '%';
2662 /* Warn about @ where they meant $. */
2664 if (*s == '[' || *s == '{') {
2666 while (*t && (isALNUM(*t) || strchr(" \t$#+-'\"", *t)))
2668 if (*t == '}' || *t == ']') {
2670 PL_bufptr = skipspace(PL_bufptr);
2671 warn("Scalar value %.*s better written as $%.*s",
2672 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
2677 PL_pending_ident = '@';
2680 case '/': /* may either be division or pattern */
2681 case '?': /* may either be conditional or pattern */
2682 if (PL_expect != XOPERATOR) {
2683 /* Disable warning on "study /blah/" */
2684 if (PL_oldoldbufptr == PL_last_uni
2685 && (*PL_last_uni != 's' || s - PL_last_uni < 5
2686 || memNE(PL_last_uni, "study", 5) || isALNUM(PL_last_uni[5])))
2688 s = scan_pat(s,OP_MATCH);
2689 TERM(sublex_start());
2697 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
2698 #ifdef PERL_STRICT_CR
2701 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
2703 && (s == PL_linestart || s[-1] == '\n') )
2705 PL_lex_formbrack = 0;
2709 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
2715 yylval.ival = OPf_SPECIAL;
2721 if (PL_expect != XOPERATOR)
2726 case '0': case '1': case '2': case '3': case '4':
2727 case '5': case '6': case '7': case '8': case '9':
2729 if (PL_expect == XOPERATOR)
2735 if (PL_expect == XOPERATOR) {
2736 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2739 return ','; /* grandfather non-comma-format format */
2745 missingterm((char*)0);
2746 yylval.ival = OP_CONST;
2747 TERM(sublex_start());
2751 if (PL_expect == XOPERATOR) {
2752 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2755 return ','; /* grandfather non-comma-format format */
2761 missingterm((char*)0);
2762 yylval.ival = OP_CONST;
2763 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
2764 if (*d == '$' || *d == '@' || *d == '\\') {
2765 yylval.ival = OP_STRINGIFY;
2769 TERM(sublex_start());
2773 if (PL_expect == XOPERATOR)
2774 no_op("Backticks",s);
2776 missingterm((char*)0);
2777 yylval.ival = OP_BACKTICK;
2779 TERM(sublex_start());
2783 if (PL_dowarn && PL_lex_inwhat && isDIGIT(*s))
2784 warn("Can't use \\%c to mean $%c in expression", *s, *s);
2785 if (PL_expect == XOPERATOR)
2786 no_op("Backslash",s);
2790 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
2829 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
2831 /* Some keywords can be followed by any delimiter, including ':' */
2832 tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
2833 len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
2834 (PL_tokenbuf[0] == 'q' &&
2835 strchr("qwxr", PL_tokenbuf[1]))));
2837 /* x::* is just a word, unless x is "CORE" */
2838 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
2842 while (d < PL_bufend && isSPACE(*d))
2843 d++; /* no comments skipped here, or s### is misparsed */
2845 /* Is this a label? */
2846 if (!tmp && PL_expect == XSTATE
2847 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
2849 yylval.pval = savepv(PL_tokenbuf);
2854 /* Check for keywords */
2855 tmp = keyword(PL_tokenbuf, len);
2857 /* Is this a word before a => operator? */
2858 if (strnEQ(d,"=>",2)) {
2860 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
2861 yylval.opval->op_private = OPpCONST_BARE;
2865 if (tmp < 0) { /* second-class keyword? */
2866 GV *ogv = Nullgv; /* override (winner) */
2867 GV *hgv = Nullgv; /* hidden (loser) */
2868 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
2870 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
2873 if (GvIMPORTED_CV(gv))
2875 else if (! CvMETHOD(cv))
2879 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
2880 (gv = *gvp) != (GV*)&PL_sv_undef &&
2881 GvCVu(gv) && GvIMPORTED_CV(gv))
2887 tmp = 0; /* overridden by import or by GLOBAL */
2890 && -tmp==KEY_lock /* XXX generalizable kludge */
2891 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
2893 tmp = 0; /* any sub overrides "weak" keyword */
2895 else { /* no override */
2899 if (PL_dowarn && hgv
2900 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
2901 warn("Ambiguous call resolved as CORE::%s(), %s",
2902 GvENAME(hgv), "qualify as such or use &");
2909 default: /* not a keyword */
2912 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
2914 /* Get the rest if it looks like a package qualifier */
2916 if (*s == '\'' || *s == ':' && s[1] == ':') {
2918 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
2921 croak("Bad name after %s%s", PL_tokenbuf,
2922 *s == '\'' ? "'" : "::");
2926 if (PL_expect == XOPERATOR) {
2927 if (PL_bufptr == PL_linestart) {
2928 PL_curcop->cop_line--;
2930 PL_curcop->cop_line++;
2933 no_op("Bareword",s);
2936 /* Look for a subroutine with this name in current package,
2937 unless name is "Foo::", in which case Foo is a bearword
2938 (and a package name). */
2941 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
2943 if (PL_dowarn && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
2944 warn("Bareword \"%s\" refers to nonexistent package",
2947 PL_tokenbuf[len] = '\0';
2954 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
2957 /* if we saw a global override before, get the right name */
2960 sv = newSVpv("CORE::GLOBAL::",14);
2961 sv_catpv(sv,PL_tokenbuf);
2964 sv = newSVpv(PL_tokenbuf,0);
2966 /* Presume this is going to be a bareword of some sort. */
2969 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
2970 yylval.opval->op_private = OPpCONST_BARE;
2972 /* And if "Foo::", then that's what it certainly is. */
2977 /* See if it's the indirect object for a list operator. */
2979 if (PL_oldoldbufptr &&
2980 PL_oldoldbufptr < PL_bufptr &&
2981 (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
2982 /* NO SKIPSPACE BEFORE HERE! */
2984 || ((opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF
2985 || (PL_last_lop_op == OP_ENTERSUB
2987 && PL_last_proto[PL_last_proto[0] == ';' ? 1 : 0] == '*')) )
2989 bool immediate_paren = *s == '(';
2991 /* (Now we can afford to cross potential line boundary.) */
2994 /* Two barewords in a row may indicate method call. */
2996 if ((isALPHA(*s) || *s == '$') && (tmp=intuit_method(s,gv)))
2999 /* If not a declared subroutine, it's an indirect object. */
3000 /* (But it's an indir obj regardless for sort.) */
3002 if ((PL_last_lop_op == OP_SORT ||
3003 (!immediate_paren && (!gv || !GvCVu(gv))) ) &&
3004 (PL_last_lop_op != OP_MAPSTART && PL_last_lop_op != OP_GREPSTART)){
3005 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3010 /* If followed by a paren, it's certainly a subroutine. */
3012 PL_expect = XOPERATOR;
3016 if (gv && GvCVu(gv)) {
3018 if ((cv = GvCV(gv)) && SvPOK(cv))
3019 PL_last_proto = SvPV((SV*)cv, PL_na);
3020 for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
3021 if (*d == ')' && (sv = cv_const_sv(cv))) {
3026 PL_nextval[PL_nexttoke].opval = yylval.opval;
3027 PL_expect = XOPERATOR;
3030 PL_last_lop_op = OP_ENTERSUB;
3034 /* If followed by var or block, call it a method (unless sub) */
3036 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3037 PL_last_lop = PL_oldbufptr;
3038 PL_last_lop_op = OP_METHOD;
3042 /* If followed by a bareword, see if it looks like indir obj. */
3044 if ((isALPHA(*s) || *s == '$') && (tmp = intuit_method(s,gv)))
3047 /* Not a method, so call it a subroutine (if defined) */
3049 if (gv && GvCVu(gv)) {
3051 if (lastchar == '-')
3052 warn("Ambiguous use of -%s resolved as -&%s()",
3053 PL_tokenbuf, PL_tokenbuf);
3054 PL_last_lop = PL_oldbufptr;
3055 PL_last_lop_op = OP_ENTERSUB;
3056 /* Check for a constant sub */
3058 if ((sv = cv_const_sv(cv))) {
3060 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3061 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3062 yylval.opval->op_private = 0;
3066 /* Resolve to GV now. */
3067 op_free(yylval.opval);
3068 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
3069 PL_last_lop_op = OP_ENTERSUB;
3070 /* Is there a prototype? */
3073 PL_last_proto = SvPV((SV*)cv, len);
3076 if (strEQ(PL_last_proto, "$"))
3078 if (*PL_last_proto == '&' && *s == '{') {
3079 sv_setpv(PL_subname,"__ANON__");
3083 PL_last_proto = NULL;
3084 PL_nextval[PL_nexttoke].opval = yylval.opval;
3090 if (PL_hints & HINT_STRICT_SUBS &&
3093 PL_last_lop_op != OP_TRUNCATE && /* S/F prototype in opcode.pl */
3094 PL_last_lop_op != OP_ACCEPT &&
3095 PL_last_lop_op != OP_PIPE_OP &&
3096 PL_last_lop_op != OP_SOCKPAIR &&
3097 !(PL_last_lop_op == OP_ENTERSUB
3099 && PL_last_proto[PL_last_proto[0] == ';' ? 1 : 0] == '*'))
3102 "Bareword \"%s\" not allowed while \"strict subs\" in use",
3107 /* Call it a bare word */
3111 if (lastchar != '-') {
3112 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3114 warn(warn_reserved, PL_tokenbuf);
3119 if (lastchar && strchr("*%&", lastchar)) {
3120 warn("Operator or semicolon missing before %c%s",
3121 lastchar, PL_tokenbuf);
3122 warn("Ambiguous use of %c resolved as operator %c",
3123 lastchar, lastchar);
3129 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3130 newSVsv(GvSV(PL_curcop->cop_filegv)));
3134 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3135 newSVpvf("%ld", (long)PL_curcop->cop_line));
3138 case KEY___PACKAGE__:
3139 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3141 ? newSVsv(PL_curstname)
3150 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
3151 char *pname = "main";
3152 if (PL_tokenbuf[2] == 'D')
3153 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
3154 gv = gv_fetchpv(form("%s::DATA", pname), TRUE, SVt_PVIO);
3157 GvIOp(gv) = newIO();
3158 IoIFP(GvIOp(gv)) = PL_rsfp;
3159 #if defined(HAS_FCNTL) && defined(F_SETFD)
3161 int fd = PerlIO_fileno(PL_rsfp);
3162 fcntl(fd,F_SETFD,fd >= 3);
3165 /* Mark this internal pseudo-handle as clean */
3166 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3168 IoTYPE(GvIOp(gv)) = '|';
3169 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
3170 IoTYPE(GvIOp(gv)) = '-';
3172 IoTYPE(GvIOp(gv)) = '<';
3183 if (PL_expect == XSTATE) {
3190 if (*s == ':' && s[1] == ':') {
3193 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3194 tmp = keyword(PL_tokenbuf, len);
3208 LOP(OP_ACCEPT,XTERM);
3214 LOP(OP_ATAN2,XTERM);
3223 LOP(OP_BLESS,XTERM);
3232 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
3249 if (!PL_cryptseen++)
3252 LOP(OP_CRYPT,XTERM);
3256 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
3257 if (*d != '0' && isDIGIT(*d))
3258 yywarn("chmod: mode argument is missing initial 0");
3260 LOP(OP_CHMOD,XTERM);
3263 LOP(OP_CHOWN,XTERM);
3266 LOP(OP_CONNECT,XTERM);
3282 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3286 PL_hints |= HINT_BLOCK_SCOPE;
3296 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3297 LOP(OP_DBMOPEN,XTERM);
3303 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3310 yylval.ival = PL_curcop->cop_line;
3324 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
3325 UNIBRACK(OP_ENTEREVAL);
3340 case KEY_endhostent:
3346 case KEY_endservent:
3349 case KEY_endprotoent:
3360 yylval.ival = PL_curcop->cop_line;
3362 if (PL_expect == XSTATE && isIDFIRST(*s)) {
3364 if ((PL_bufend - p) >= 3 &&
3365 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3369 croak("Missing $ on loop variable");
3374 LOP(OP_FORMLINE,XTERM);
3380 LOP(OP_FCNTL,XTERM);
3386 LOP(OP_FLOCK,XTERM);
3395 LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
3398 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3413 case KEY_getpriority:
3414 LOP(OP_GETPRIORITY,XTERM);
3416 case KEY_getprotobyname:
3419 case KEY_getprotobynumber:
3420 LOP(OP_GPBYNUMBER,XTERM);
3422 case KEY_getprotoent:
3434 case KEY_getpeername:
3435 UNI(OP_GETPEERNAME);
3437 case KEY_gethostbyname:
3440 case KEY_gethostbyaddr:
3441 LOP(OP_GHBYADDR,XTERM);
3443 case KEY_gethostent:
3446 case KEY_getnetbyname:
3449 case KEY_getnetbyaddr:
3450 LOP(OP_GNBYADDR,XTERM);
3455 case KEY_getservbyname:
3456 LOP(OP_GSBYNAME,XTERM);
3458 case KEY_getservbyport:
3459 LOP(OP_GSBYPORT,XTERM);
3461 case KEY_getservent:
3464 case KEY_getsockname:
3465 UNI(OP_GETSOCKNAME);
3467 case KEY_getsockopt:
3468 LOP(OP_GSOCKOPT,XTERM);
3490 yylval.ival = PL_curcop->cop_line;
3494 LOP(OP_INDEX,XTERM);
3500 LOP(OP_IOCTL,XTERM);
3512 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3543 LOP(OP_LISTEN,XTERM);
3552 s = scan_pat(s,OP_MATCH);
3553 TERM(sublex_start());
3556 LOP(OP_MAPSTART,XREF);
3559 LOP(OP_MKDIR,XTERM);
3562 LOP(OP_MSGCTL,XTERM);
3565 LOP(OP_MSGGET,XTERM);
3568 LOP(OP_MSGRCV,XTERM);
3571 LOP(OP_MSGSND,XTERM);
3576 if (isIDFIRST(*s)) {
3577 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
3578 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
3579 if (!PL_in_my_stash) {
3582 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
3589 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3596 if (PL_expect != XSTATE)
3597 yyerror("\"no\" not allowed in expression");
3598 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3599 s = force_version(s);
3608 if (isIDFIRST(*s)) {
3610 for (d = s; isALNUM(*d); d++) ;
3612 if (strchr("|&*+-=!?:.", *t))
3613 warn("Precedence problem: open %.*s should be open(%.*s)",
3619 yylval.ival = OP_OR;
3629 LOP(OP_OPEN_DIR,XTERM);
3632 checkcomma(s,PL_tokenbuf,"filehandle");
3636 checkcomma(s,PL_tokenbuf,"filehandle");
3655 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3659 LOP(OP_PIPE_OP,XTERM);
3664 missingterm((char*)0);
3665 yylval.ival = OP_CONST;
3666 TERM(sublex_start());
3674 missingterm((char*)0);
3675 if (PL_dowarn && SvLEN(PL_lex_stuff)) {
3676 d = SvPV_force(PL_lex_stuff, len);
3677 for (; len; --len, ++d) {
3679 warn("Possible attempt to separate words with commas");
3683 warn("Possible attempt to put comments in qw() list");
3689 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, tokeq(PL_lex_stuff));
3690 PL_lex_stuff = Nullsv;
3693 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(" ",1));
3696 yylval.ival = OP_SPLIT;
3700 PL_last_lop = PL_oldbufptr;
3701 PL_last_lop_op = OP_SPLIT;
3707 missingterm((char*)0);
3708 yylval.ival = OP_STRINGIFY;
3709 if (SvIVX(PL_lex_stuff) == '\'')
3710 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
3711 TERM(sublex_start());
3714 s = scan_pat(s,OP_QR);
3715 TERM(sublex_start());
3720 missingterm((char*)0);
3721 yylval.ival = OP_BACKTICK;
3723 TERM(sublex_start());
3729 *PL_tokenbuf = '\0';
3730 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3731 if (isIDFIRST(*PL_tokenbuf))
3732 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
3734 yyerror("<> should be quotes");
3741 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3745 LOP(OP_RENAME,XTERM);
3754 LOP(OP_RINDEX,XTERM);
3777 LOP(OP_REVERSE,XTERM);
3788 TERM(sublex_start());
3790 TOKEN(1); /* force error */
3799 LOP(OP_SELECT,XTERM);
3805 LOP(OP_SEMCTL,XTERM);
3808 LOP(OP_SEMGET,XTERM);
3811 LOP(OP_SEMOP,XTERM);
3817 LOP(OP_SETPGRP,XTERM);
3819 case KEY_setpriority:
3820 LOP(OP_SETPRIORITY,XTERM);
3822 case KEY_sethostent:
3828 case KEY_setservent:
3831 case KEY_setprotoent:
3841 LOP(OP_SEEKDIR,XTERM);
3843 case KEY_setsockopt:
3844 LOP(OP_SSOCKOPT,XTERM);
3850 LOP(OP_SHMCTL,XTERM);
3853 LOP(OP_SHMGET,XTERM);
3856 LOP(OP_SHMREAD,XTERM);
3859 LOP(OP_SHMWRITE,XTERM);
3862 LOP(OP_SHUTDOWN,XTERM);
3871 LOP(OP_SOCKET,XTERM);
3873 case KEY_socketpair:
3874 LOP(OP_SOCKPAIR,XTERM);
3877 checkcomma(s,PL_tokenbuf,"subroutine name");
3879 if (*s == ';' || *s == ')') /* probably a close */
3880 croak("sort is now a reserved word");
3882 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3886 LOP(OP_SPLIT,XTERM);
3889 LOP(OP_SPRINTF,XTERM);
3892 LOP(OP_SPLICE,XTERM);
3908 LOP(OP_SUBSTR,XTERM);
3915 if (isIDFIRST(*s) || *s == '\'' || *s == ':') {
3916 char tmpbuf[sizeof PL_tokenbuf];
3918 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
3919 if (strchr(tmpbuf, ':'))
3920 sv_setpv(PL_subname, tmpbuf);
3922 sv_setsv(PL_subname,PL_curstname);
3923 sv_catpvn(PL_subname,"::",2);
3924 sv_catpvn(PL_subname,tmpbuf,len);
3926 s = force_word(s,WORD,FALSE,TRUE,TRUE);
3930 PL_expect = XTERMBLOCK;
3931 sv_setpv(PL_subname,"?");
3934 if (tmp == KEY_format) {
3937 PL_lex_formbrack = PL_lex_brackets + 1;
3941 /* Look for a prototype */
3948 SvREFCNT_dec(PL_lex_stuff);
3949 PL_lex_stuff = Nullsv;
3950 croak("Prototype not terminated");
3953 d = SvPVX(PL_lex_stuff);
3955 for (p = d; *p; ++p) {
3960 SvCUR(PL_lex_stuff) = tmp;
3963 PL_nextval[1] = PL_nextval[0];
3964 PL_nexttype[1] = PL_nexttype[0];
3965 PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
3966 PL_nexttype[0] = THING;
3967 if (PL_nexttoke == 1) {
3968 PL_lex_defer = PL_lex_state;
3969 PL_lex_expect = PL_expect;
3970 PL_lex_state = LEX_KNOWNEXT;
3972 PL_lex_stuff = Nullsv;
3975 if (*SvPV(PL_subname,PL_na) == '?') {
3976 sv_setpv(PL_subname,"__ANON__");
3983 LOP(OP_SYSTEM,XREF);
3986 LOP(OP_SYMLINK,XTERM);
3989 LOP(OP_SYSCALL,XTERM);
3992 LOP(OP_SYSOPEN,XTERM);
3995 LOP(OP_SYSSEEK,XTERM);
3998 LOP(OP_SYSREAD,XTERM);
4001 LOP(OP_SYSWRITE,XTERM);
4005 TERM(sublex_start());
4026 LOP(OP_TRUNCATE,XTERM);
4038 yylval.ival = PL_curcop->cop_line;
4042 yylval.ival = PL_curcop->cop_line;
4046 LOP(OP_UNLINK,XTERM);
4052 LOP(OP_UNPACK,XTERM);
4055 LOP(OP_UTIME,XTERM);
4059 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4060 if (*d != '0' && isDIGIT(*d))
4061 yywarn("umask: argument is missing initial 0");
4066 LOP(OP_UNSHIFT,XTERM);
4069 if (PL_expect != XSTATE)
4070 yyerror("\"use\" not allowed in expression");
4073 s = force_version(s);
4074 if(*s == ';' || (s = skipspace(s), *s == ';')) {
4075 PL_nextval[PL_nexttoke].opval = Nullop;
4080 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4081 s = force_version(s);
4094 yylval.ival = PL_curcop->cop_line;
4098 PL_hints |= HINT_BLOCK_SCOPE;
4105 LOP(OP_WAITPID,XTERM);
4113 static char ctl_l[2];
4115 if (ctl_l[0] == '\0')
4116 ctl_l[0] = toCTRL('L');
4117 gv_fetchpv(ctl_l,TRUE, SVt_PV);
4120 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
4125 if (PL_expect == XOPERATOR)
4131 yylval.ival = OP_XOR;
4136 TERM(sublex_start());
4142 keyword(register char *d, I32 len)
4147 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
4148 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
4149 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
4150 if (strEQ(d,"__DATA__")) return KEY___DATA__;
4151 if (strEQ(d,"__END__")) return KEY___END__;
4155 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
4160 if (strEQ(d,"and")) return -KEY_and;
4161 if (strEQ(d,"abs")) return -KEY_abs;
4164 if (strEQ(d,"alarm")) return -KEY_alarm;
4165 if (strEQ(d,"atan2")) return -KEY_atan2;
4168 if (strEQ(d,"accept")) return -KEY_accept;
4173 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
4176 if (strEQ(d,"bless")) return -KEY_bless;
4177 if (strEQ(d,"bind")) return -KEY_bind;
4178 if (strEQ(d,"binmode")) return -KEY_binmode;
4181 if (strEQ(d,"CORE")) return -KEY_CORE;
4186 if (strEQ(d,"cmp")) return -KEY_cmp;
4187 if (strEQ(d,"chr")) return -KEY_chr;
4188 if (strEQ(d,"cos")) return -KEY_cos;
4191 if (strEQ(d,"chop")) return KEY_chop;
4194 if (strEQ(d,"close")) return -KEY_close;
4195 if (strEQ(d,"chdir")) return -KEY_chdir;
4196 if (strEQ(d,"chomp")) return KEY_chomp;
4197 if (strEQ(d,"chmod")) return -KEY_chmod;
4198 if (strEQ(d,"chown")) return -KEY_chown;
4199 if (strEQ(d,"crypt")) return -KEY_crypt;
4202 if (strEQ(d,"chroot")) return -KEY_chroot;
4203 if (strEQ(d,"caller")) return -KEY_caller;
4206 if (strEQ(d,"connect")) return -KEY_connect;
4209 if (strEQ(d,"closedir")) return -KEY_closedir;
4210 if (strEQ(d,"continue")) return -KEY_continue;
4215 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
4220 if (strEQ(d,"do")) return KEY_do;
4223 if (strEQ(d,"die")) return -KEY_die;
4226 if (strEQ(d,"dump")) return -KEY_dump;
4229 if (strEQ(d,"delete")) return KEY_delete;
4232 if (strEQ(d,"defined")) return KEY_defined;
4233 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
4236 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
4241 if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
4242 if (strEQ(d,"END")) return KEY_END;
4247 if (strEQ(d,"eq")) return -KEY_eq;
4250 if (strEQ(d,"eof")) return -KEY_eof;
4251 if (strEQ(d,"exp")) return -KEY_exp;
4254 if (strEQ(d,"else")) return KEY_else;
4255 if (strEQ(d,"exit")) return -KEY_exit;
4256 if (strEQ(d,"eval")) return KEY_eval;
4257 if (strEQ(d,"exec")) return -KEY_exec;
4258 if (strEQ(d,"each")) return KEY_each;
4261 if (strEQ(d,"elsif")) return KEY_elsif;
4264 if (strEQ(d,"exists")) return KEY_exists;
4265 if (strEQ(d,"elseif")) warn("elseif should be elsif");
4268 if (strEQ(d,"endgrent")) return -KEY_endgrent;
4269 if (strEQ(d,"endpwent")) return -KEY_endpwent;
4272 if (strEQ(d,"endnetent")) return -KEY_endnetent;
4275 if (strEQ(d,"endhostent")) return -KEY_endhostent;
4276 if (strEQ(d,"endservent")) return -KEY_endservent;
4279 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
4286 if (strEQ(d,"for")) return KEY_for;
4289 if (strEQ(d,"fork")) return -KEY_fork;
4292 if (strEQ(d,"fcntl")) return -KEY_fcntl;
4293 if (strEQ(d,"flock")) return -KEY_flock;
4296 if (strEQ(d,"format")) return KEY_format;
4297 if (strEQ(d,"fileno")) return -KEY_fileno;
4300 if (strEQ(d,"foreach")) return KEY_foreach;
4303 if (strEQ(d,"formline")) return -KEY_formline;
4309 if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
4310 if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
4314 if (strnEQ(d,"get",3)) {
4319 if (strEQ(d,"ppid")) return -KEY_getppid;
4320 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
4323 if (strEQ(d,"pwent")) return -KEY_getpwent;
4324 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
4325 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
4328 if (strEQ(d,"peername")) return -KEY_getpeername;
4329 if (strEQ(d,"protoent")) return -KEY_getprotoent;
4330 if (strEQ(d,"priority")) return -KEY_getpriority;
4333 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
4336 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
4340 else if (*d == 'h') {
4341 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
4342 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
4343 if (strEQ(d,"hostent")) return -KEY_gethostent;
4345 else if (*d == 'n') {
4346 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
4347 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
4348 if (strEQ(d,"netent")) return -KEY_getnetent;
4350 else if (*d == 's') {
4351 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
4352 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
4353 if (strEQ(d,"servent")) return -KEY_getservent;
4354 if (strEQ(d,"sockname")) return -KEY_getsockname;
4355 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
4357 else if (*d == 'g') {
4358 if (strEQ(d,"grent")) return -KEY_getgrent;
4359 if (strEQ(d,"grnam")) return -KEY_getgrnam;
4360 if (strEQ(d,"grgid")) return -KEY_getgrgid;
4362 else if (*d == 'l') {
4363 if (strEQ(d,"login")) return -KEY_getlogin;
4365 else if (strEQ(d,"c")) return -KEY_getc;
4370 if (strEQ(d,"gt")) return -KEY_gt;
4371 if (strEQ(d,"ge")) return -KEY_ge;
4374 if (strEQ(d,"grep")) return KEY_grep;
4375 if (strEQ(d,"goto")) return KEY_goto;
4376 if (strEQ(d,"glob")) return KEY_glob;
4379 if (strEQ(d,"gmtime")) return -KEY_gmtime;
4384 if (strEQ(d,"hex")) return -KEY_hex;
4387 if (strEQ(d,"INIT")) return KEY_INIT;
4392 if (strEQ(d,"if")) return KEY_if;
4395 if (strEQ(d,"int")) return -KEY_int;
4398 if (strEQ(d,"index")) return -KEY_index;
4399 if (strEQ(d,"ioctl")) return -KEY_ioctl;
4404 if (strEQ(d,"join")) return -KEY_join;
4408 if (strEQ(d,"keys")) return KEY_keys;
4409 if (strEQ(d,"kill")) return -KEY_kill;
4414 if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
4415 if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
4421 if (strEQ(d,"lt")) return -KEY_lt;
4422 if (strEQ(d,"le")) return -KEY_le;
4423 if (strEQ(d,"lc")) return -KEY_lc;
4426 if (strEQ(d,"log")) return -KEY_log;
4429 if (strEQ(d,"last")) return KEY_last;
4430 if (strEQ(d,"link")) return -KEY_link;
4431 if (strEQ(d,"lock")) return -KEY_lock;
4434 if (strEQ(d,"local")) return KEY_local;
4435 if (strEQ(d,"lstat")) return -KEY_lstat;
4438 if (strEQ(d,"length")) return -KEY_length;
4439 if (strEQ(d,"listen")) return -KEY_listen;
4442 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
4445 if (strEQ(d,"localtime")) return -KEY_localtime;
4451 case 1: return KEY_m;
4453 if (strEQ(d,"my")) return KEY_my;
4456 if (strEQ(d,"map")) return KEY_map;
4459 if (strEQ(d,"mkdir")) return -KEY_mkdir;
4462 if (strEQ(d,"msgctl")) return -KEY_msgctl;
4463 if (strEQ(d,"msgget")) return -KEY_msgget;
4464 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
4465 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
4470 if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
4473 if (strEQ(d,"next")) return KEY_next;
4474 if (strEQ(d,"ne")) return -KEY_ne;
4475 if (strEQ(d,"not")) return -KEY_not;
4476 if (strEQ(d,"no")) return KEY_no;
4481 if (strEQ(d,"or")) return -KEY_or;
4484 if (strEQ(d,"ord")) return -KEY_ord;
4485 if (strEQ(d,"oct")) return -KEY_oct;
4486 if (strEQ(d,"our")) { deprecate("reserved word \"our\"");
4490 if (strEQ(d,"open")) return -KEY_open;
4493 if (strEQ(d,"opendir")) return -KEY_opendir;
4500 if (strEQ(d,"pop")) return KEY_pop;
4501 if (strEQ(d,"pos")) return KEY_pos;
4504 if (strEQ(d,"push")) return KEY_push;
4505 if (strEQ(d,"pack")) return -KEY_pack;
4506 if (strEQ(d,"pipe")) return -KEY_pipe;
4509 if (strEQ(d,"print")) return KEY_print;
4512 if (strEQ(d,"printf")) return KEY_printf;
4515 if (strEQ(d,"package")) return KEY_package;
4518 if (strEQ(d,"prototype")) return KEY_prototype;
4523 if (strEQ(d,"q")) return KEY_q;
4524 if (strEQ(d,"qr")) return KEY_qr;
4525 if (strEQ(d,"qq")) return KEY_qq;
4526 if (strEQ(d,"qw")) return KEY_qw;
4527 if (strEQ(d,"qx")) return KEY_qx;
4529 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
4534 if (strEQ(d,"ref")) return -KEY_ref;
4537 if (strEQ(d,"read")) return -KEY_read;
4538 if (strEQ(d,"rand")) return -KEY_rand;
4539 if (strEQ(d,"recv")) return -KEY_recv;
4540 if (strEQ(d,"redo")) return KEY_redo;
4543 if (strEQ(d,"rmdir")) return -KEY_rmdir;
4544 if (strEQ(d,"reset")) return -KEY_reset;
4547 if (strEQ(d,"return")) return KEY_return;
4548 if (strEQ(d,"rename")) return -KEY_rename;
4549 if (strEQ(d,"rindex")) return -KEY_rindex;
4552 if (strEQ(d,"require")) return -KEY_require;
4553 if (strEQ(d,"reverse")) return -KEY_reverse;
4554 if (strEQ(d,"readdir")) return -KEY_readdir;
4557 if (strEQ(d,"readlink")) return -KEY_readlink;
4558 if (strEQ(d,"readline")) return -KEY_readline;
4559 if (strEQ(d,"readpipe")) return -KEY_readpipe;
4562 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
4568 case 0: return KEY_s;
4570 if (strEQ(d,"scalar")) return KEY_scalar;
4575 if (strEQ(d,"seek")) return -KEY_seek;
4576 if (strEQ(d,"send")) return -KEY_send;
4579 if (strEQ(d,"semop")) return -KEY_semop;
4582 if (strEQ(d,"select")) return -KEY_select;
4583 if (strEQ(d,"semctl")) return -KEY_semctl;
4584 if (strEQ(d,"semget")) return -KEY_semget;
4587 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
4588 if (strEQ(d,"seekdir")) return -KEY_seekdir;
4591 if (strEQ(d,"setpwent")) return -KEY_setpwent;
4592 if (strEQ(d,"setgrent")) return -KEY_setgrent;
4595 if (strEQ(d,"setnetent")) return -KEY_setnetent;
4598 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
4599 if (strEQ(d,"sethostent")) return -KEY_sethostent;
4600 if (strEQ(d,"setservent")) return -KEY_setservent;
4603 if (strEQ(d,"setpriority")) return -KEY_setpriority;
4604 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
4611 if (strEQ(d,"shift")) return KEY_shift;
4614 if (strEQ(d,"shmctl")) return -KEY_shmctl;
4615 if (strEQ(d,"shmget")) return -KEY_shmget;
4618 if (strEQ(d,"shmread")) return -KEY_shmread;
4621 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
4622 if (strEQ(d,"shutdown")) return -KEY_shutdown;
4627 if (strEQ(d,"sin")) return -KEY_sin;
4630 if (strEQ(d,"sleep")) return -KEY_sleep;
4633 if (strEQ(d,"sort")) return KEY_sort;
4634 if (strEQ(d,"socket")) return -KEY_socket;
4635 if (strEQ(d,"socketpair")) return -KEY_socketpair;
4638 if (strEQ(d,"split")) return KEY_split;
4639 if (strEQ(d,"sprintf")) return -KEY_sprintf;
4640 if (strEQ(d,"splice")) return KEY_splice;
4643 if (strEQ(d,"sqrt")) return -KEY_sqrt;
4646 if (strEQ(d,"srand")) return -KEY_srand;
4649 if (strEQ(d,"stat")) return -KEY_stat;
4650 if (strEQ(d,"study")) return KEY_study;
4653 if (strEQ(d,"substr")) return -KEY_substr;
4654 if (strEQ(d,"sub")) return KEY_sub;
4659 if (strEQ(d,"system")) return -KEY_system;
4662 if (strEQ(d,"symlink")) return -KEY_symlink;
4663 if (strEQ(d,"syscall")) return -KEY_syscall;
4664 if (strEQ(d,"sysopen")) return -KEY_sysopen;
4665 if (strEQ(d,"sysread")) return -KEY_sysread;
4666 if (strEQ(d,"sysseek")) return -KEY_sysseek;
4669 if (strEQ(d,"syswrite")) return -KEY_syswrite;
4678 if (strEQ(d,"tr")) return KEY_tr;
4681 if (strEQ(d,"tie")) return KEY_tie;
4684 if (strEQ(d,"tell")) return -KEY_tell;
4685 if (strEQ(d,"tied")) return KEY_tied;
4686 if (strEQ(d,"time")) return -KEY_time;
4689 if (strEQ(d,"times")) return -KEY_times;
4692 if (strEQ(d,"telldir")) return -KEY_telldir;
4695 if (strEQ(d,"truncate")) return -KEY_truncate;
4702 if (strEQ(d,"uc")) return -KEY_uc;
4705 if (strEQ(d,"use")) return KEY_use;
4708 if (strEQ(d,"undef")) return KEY_undef;
4709 if (strEQ(d,"until")) return KEY_until;
4710 if (strEQ(d,"untie")) return KEY_untie;
4711 if (strEQ(d,"utime")) return -KEY_utime;
4712 if (strEQ(d,"umask")) return -KEY_umask;
4715 if (strEQ(d,"unless")) return KEY_unless;
4716 if (strEQ(d,"unpack")) return -KEY_unpack;
4717 if (strEQ(d,"unlink")) return -KEY_unlink;
4720 if (strEQ(d,"unshift")) return KEY_unshift;
4721 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
4726 if (strEQ(d,"values")) return -KEY_values;
4727 if (strEQ(d,"vec")) return -KEY_vec;
4732 if (strEQ(d,"warn")) return -KEY_warn;
4733 if (strEQ(d,"wait")) return -KEY_wait;
4736 if (strEQ(d,"while")) return KEY_while;
4737 if (strEQ(d,"write")) return -KEY_write;
4740 if (strEQ(d,"waitpid")) return -KEY_waitpid;
4743 if (strEQ(d,"wantarray")) return -KEY_wantarray;
4748 if (len == 1) return -KEY_x;
4749 if (strEQ(d,"xor")) return -KEY_xor;
4752 if (len == 1) return KEY_y;
4761 checkcomma(register char *s, char *name, char *what)
4765 if (PL_dowarn && *s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
4767 for (w = s+2; *w && level; w++) {
4774 for (; *w && isSPACE(*w); w++) ;
4775 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
4776 warn("%s (...) interpreted as function",name);
4778 while (s < PL_bufend && isSPACE(*s))
4782 while (s < PL_bufend && isSPACE(*s))
4784 if (isIDFIRST(*s)) {
4788 while (s < PL_bufend && isSPACE(*s))
4793 kw = keyword(w, s - w) || perl_get_cv(w, FALSE) != 0;
4797 croak("No comma allowed after %s", what);
4803 new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
4806 HV *table = GvHV(PL_hintgv); /* ^H */
4809 bool oldcatch = CATCH_GET;
4815 yyerror("%^H is not defined");
4818 cvp = hv_fetch(table, key, strlen(key), FALSE);
4819 if (!cvp || !SvOK(*cvp)) {
4820 sprintf(buf,"$^H{%s} is not defined", key);
4824 sv_2mortal(sv); /* Parent created it permanently */
4827 pv = sv_2mortal(newSVpv(s, len));
4829 typesv = sv_2mortal(newSVpv(type, 0));
4831 typesv = &PL_sv_undef;
4833 Zero(&myop, 1, BINOP);
4834 myop.op_last = (OP *) &myop;
4835 myop.op_next = Nullop;
4836 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
4838 PUSHSTACKi(PERLSI_OVERLOAD);
4841 PL_op = (OP *) &myop;
4842 if (PERLDB_SUB && PL_curstash != PL_debstash)
4843 PL_op->op_private |= OPpENTERSUB_DB;
4854 if (PL_op = pp_entersub(ARGS))
4861 CATCH_SET(oldcatch);
4865 sprintf(buf,"Call to &{$^H{%s}} did not return a defined value", key);
4868 return SvREFCNT_inc(res);
4872 scan_word(register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
4874 register char *d = dest;
4875 register char *e = d + destlen - 3; /* two-character token, ending NUL */
4878 croak(ident_too_long);
4881 else if (*s == '\'' && allow_package && isIDFIRST(s[1])) {
4886 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
4899 scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
4906 if (PL_lex_brackets == 0)
4907 PL_lex_fakebrack = 0;
4911 e = d + destlen - 3; /* two-character token, ending NUL */
4913 while (isDIGIT(*s)) {
4915 croak(ident_too_long);
4922 croak(ident_too_long);
4925 else if (*s == '\'' && isIDFIRST(s[1])) {
4930 else if (*s == ':' && s[1] == ':') {
4941 if (PL_lex_state != LEX_NORMAL)
4942 PL_lex_state = LEX_INTERPENDMAYBE;
4945 if (*s == '$' && s[1] &&
4946 (isALNUM(s[1]) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
4948 if (isDIGIT(s[1]) && PL_lex_state == LEX_INTERPNORMAL)
4949 deprecate("\"$$<digit>\" to mean \"${$}<digit>\"");
4962 if (*d == '^' && *s && (isUPPER(*s) || strchr("[\\]^_?", *s))) {
4967 if (isSPACE(s[-1])) {
4970 if (ch != ' ' && ch != '\t') {
4976 if (isIDFIRST(*d)) {
4978 while (isALNUM(*s) || *s == ':')
4981 while (s < send && (*s == ' ' || *s == '\t')) s++;
4982 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
4983 if (PL_dowarn && keyword(dest, d - dest)) {
4984 char *brack = *s == '[' ? "[...]" : "{...}";
4985 warn("Ambiguous use of %c{%s%s} resolved to %c%s%s",
4986 funny, dest, brack, funny, dest, brack);
4988 PL_lex_fakebrack = PL_lex_brackets+1;
4990 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
4996 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
4997 PL_lex_state = LEX_INTERPEND;
5000 if (PL_dowarn && PL_lex_state == LEX_NORMAL &&
5001 (keyword(dest, d - dest) || perl_get_cv(dest, FALSE)))
5002 warn("Ambiguous use of %c{%s} resolved to %c%s",
5003 funny, dest, funny, dest);
5006 s = bracket; /* let the parser handle it */
5010 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
5011 PL_lex_state = LEX_INTERPEND;
5015 void pmflag(U16 *pmfl, int ch)
5020 *pmfl |= PMf_GLOBAL;
5022 *pmfl |= PMf_CONTINUE;
5026 *pmfl |= PMf_MULTILINE;
5028 *pmfl |= PMf_SINGLELINE;
5030 *pmfl |= PMf_EXTENDED;
5034 scan_pat(char *start, I32 type)
5039 s = scan_str(start);
5042 SvREFCNT_dec(PL_lex_stuff);
5043 PL_lex_stuff = Nullsv;
5044 croak("Search pattern not terminated");
5047 pm = (PMOP*)newPMOP(type, 0);
5048 if (PL_multi_open == '?')
5049 pm->op_pmflags |= PMf_ONCE;
5051 while (*s && strchr("iomsx", *s))
5052 pmflag(&pm->op_pmflags,*s++);
5055 while (*s && strchr("iogcmsx", *s))
5056 pmflag(&pm->op_pmflags,*s++);
5058 pm->op_pmpermflags = pm->op_pmflags;
5060 PL_lex_op = (OP*)pm;
5061 yylval.ival = OP_MATCH;
5066 scan_subst(char *start)
5073 yylval.ival = OP_NULL;
5075 s = scan_str(start);
5079 SvREFCNT_dec(PL_lex_stuff);
5080 PL_lex_stuff = Nullsv;
5081 croak("Substitution pattern not terminated");
5084 if (s[-1] == PL_multi_open)
5087 first_start = PL_multi_start;
5091 SvREFCNT_dec(PL_lex_stuff);
5092 PL_lex_stuff = Nullsv;
5094 SvREFCNT_dec(PL_lex_repl);
5095 PL_lex_repl = Nullsv;
5096 croak("Substitution replacement not terminated");
5098 PL_multi_start = first_start; /* so whole substitution is taken together */
5100 pm = (PMOP*)newPMOP(OP_SUBST, 0);
5106 else if (strchr("iogcmsx", *s))
5107 pmflag(&pm->op_pmflags,*s++);
5114 pm->op_pmflags |= PMf_EVAL;
5115 repl = newSVpv("",0);
5117 sv_catpv(repl, es ? "eval " : "do ");
5118 sv_catpvn(repl, "{ ", 2);
5119 sv_catsv(repl, PL_lex_repl);
5120 sv_catpvn(repl, " };", 2);
5121 SvCOMPILED_on(repl);
5122 SvREFCNT_dec(PL_lex_repl);
5126 pm->op_pmpermflags = pm->op_pmflags;
5127 PL_lex_op = (OP*)pm;
5128 yylval.ival = OP_SUBST;
5133 scan_trans(char *start)
5142 yylval.ival = OP_NULL;
5144 s = scan_str(start);
5147 SvREFCNT_dec(PL_lex_stuff);
5148 PL_lex_stuff = Nullsv;
5149 croak("Transliteration pattern not terminated");
5151 if (s[-1] == PL_multi_open)
5157 SvREFCNT_dec(PL_lex_stuff);
5158 PL_lex_stuff = Nullsv;
5160 SvREFCNT_dec(PL_lex_repl);
5161 PL_lex_repl = Nullsv;
5162 croak("Transliteration replacement not terminated");
5165 New(803,tbl,256,short);
5166 o = newPVOP(OP_TRANS, 0, (char*)tbl);
5168 complement = Delete = squash = 0;
5169 while (*s == 'c' || *s == 'd' || *s == 's') {
5171 complement = OPpTRANS_COMPLEMENT;
5173 Delete = OPpTRANS_DELETE;
5175 squash = OPpTRANS_SQUASH;
5178 o->op_private = Delete|squash|complement;
5181 yylval.ival = OP_TRANS;
5186 scan_heredoc(register char *s)
5190 I32 op_type = OP_SCALAR;
5197 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
5201 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
5204 for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
5205 if (*peek && strchr("`'\"",*peek)) {
5208 s = delimcpy(d, e, s, PL_bufend, term, &len);
5219 deprecate("bare << to mean <<\"\"");
5220 for (; isALNUM(*s); s++) {
5225 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
5226 croak("Delimiter for here document is too long");
5229 len = d - PL_tokenbuf;
5230 #ifndef PERL_STRICT_CR
5231 d = strchr(s, '\r');
5235 while (s < PL_bufend) {
5241 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
5250 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5255 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
5256 herewas = newSVpv(s,PL_bufend-s);
5258 s--, herewas = newSVpv(s,d-s);
5259 s += SvCUR(herewas);
5261 tmpstr = NEWSV(87,79);
5262 sv_upgrade(tmpstr, SVt_PVIV);
5267 else if (term == '`') {
5268 op_type = OP_BACKTICK;
5269 SvIVX(tmpstr) = '\\';
5273 PL_multi_start = PL_curcop->cop_line;
5274 PL_multi_open = PL_multi_close = '<';
5275 term = *PL_tokenbuf;
5278 while (s < PL_bufend &&
5279 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5281 PL_curcop->cop_line++;
5283 if (s >= PL_bufend) {
5284 PL_curcop->cop_line = PL_multi_start;
5285 missingterm(PL_tokenbuf);
5287 sv_setpvn(tmpstr,d+1,s-d);
5289 PL_curcop->cop_line++; /* the preceding stmt passes a newline */
5291 sv_catpvn(herewas,s,PL_bufend-s);
5292 sv_setsv(PL_linestr,herewas);
5293 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
5294 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5297 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
5298 while (s >= PL_bufend) { /* multiple line string? */
5300 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5301 PL_curcop->cop_line = PL_multi_start;
5302 missingterm(PL_tokenbuf);
5304 PL_curcop->cop_line++;
5305 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5306 #ifndef PERL_STRICT_CR
5307 if (PL_bufend - PL_linestart >= 2) {
5308 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
5309 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
5311 PL_bufend[-2] = '\n';
5313 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5315 else if (PL_bufend[-1] == '\r')
5316 PL_bufend[-1] = '\n';
5318 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
5319 PL_bufend[-1] = '\n';
5321 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5322 SV *sv = NEWSV(88,0);
5324 sv_upgrade(sv, SVt_PVMG);
5325 sv_setsv(sv,PL_linestr);
5326 av_store(GvAV(PL_curcop->cop_filegv),
5327 (I32)PL_curcop->cop_line,sv);
5329 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
5332 sv_catsv(PL_linestr,herewas);
5333 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5337 sv_catsv(tmpstr,PL_linestr);
5340 PL_multi_end = PL_curcop->cop_line;
5342 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
5343 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
5344 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
5346 SvREFCNT_dec(herewas);
5347 PL_lex_stuff = tmpstr;
5348 yylval.ival = op_type;
5353 takes: current position in input buffer
5354 returns: new position in input buffer
5355 side-effects: yylval and lex_op are set.
5360 <FH> read from filehandle
5361 <pkg::FH> read from package qualified filehandle
5362 <pkg'FH> read from package qualified filehandle
5363 <$fh> read from filehandle in $fh
5369 scan_inputsymbol(char *start)
5371 register char *s = start; /* current position in buffer */
5376 d = PL_tokenbuf; /* start of temp holding space */
5377 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
5378 s = delimcpy(d, e, s + 1, PL_bufend, '>', &len); /* extract until > */
5380 /* die if we didn't have space for the contents of the <>,
5384 if (len >= sizeof PL_tokenbuf)
5385 croak("Excessively long <> operator");
5387 croak("Unterminated <> operator");
5392 Remember, only scalar variables are interpreted as filehandles by
5393 this code. Anything more complex (e.g., <$fh{$num}>) will be
5394 treated as a glob() call.
5395 This code makes use of the fact that except for the $ at the front,
5396 a scalar variable and a filehandle look the same.
5398 if (*d == '$' && d[1]) d++;
5400 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
5401 while (*d && (isALNUM(*d) || *d == '\'' || *d == ':'))
5404 /* If we've tried to read what we allow filehandles to look like, and
5405 there's still text left, then it must be a glob() and not a getline.
5406 Use scan_str to pull out the stuff between the <> and treat it
5407 as nothing more than a string.
5410 if (d - PL_tokenbuf != len) {
5411 yylval.ival = OP_GLOB;
5413 s = scan_str(start);
5415 croak("Glob not terminated");
5419 /* we're in a filehandle read situation */
5422 /* turn <> into <ARGV> */
5424 (void)strcpy(d,"ARGV");
5426 /* if <$fh>, create the ops to turn the variable into a
5432 /* try to find it in the pad for this block, otherwise find
5433 add symbol table ops
5435 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
5436 OP *o = newOP(OP_PADSV, 0);
5438 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newUNOP(OP_RV2GV, 0, o));
5441 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
5442 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
5443 newUNOP(OP_RV2GV, 0,
5444 newUNOP(OP_RV2SV, 0,
5445 newGVOP(OP_GV, 0, gv))));
5447 /* we created the ops in lex_op, so make yylval.ival a null op */
5448 yylval.ival = OP_NULL;
5451 /* If it's none of the above, it must be a literal filehandle
5452 (<Foo::BAR> or <FOO>) so build a simple readline OP */
5454 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
5455 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
5456 yylval.ival = OP_NULL;
5465 takes: start position in buffer
5466 returns: position to continue reading from buffer
5467 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
5468 updates the read buffer.
5470 This subroutine pulls a string out of the input. It is called for:
5471 q single quotes q(literal text)
5472 ' single quotes 'literal text'
5473 qq double quotes qq(interpolate $here please)
5474 " double quotes "interpolate $here please"
5475 qx backticks qx(/bin/ls -l)
5476 ` backticks `/bin/ls -l`
5477 qw quote words @EXPORT_OK = qw( func() $spam )
5478 m// regexp match m/this/
5479 s/// regexp substitute s/this/that/
5480 tr/// string transliterate tr/this/that/
5481 y/// string transliterate y/this/that/
5482 ($*@) sub prototypes sub foo ($)
5483 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
5485 In most of these cases (all but <>, patterns and transliterate)
5486 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
5487 calls scan_str(). s/// makes yylex() call scan_subst() which calls
5488 scan_str(). tr/// and y/// make yylex() call scan_trans() which
5491 It skips whitespace before the string starts, and treats the first
5492 character as the delimiter. If the delimiter is one of ([{< then
5493 the corresponding "close" character )]}> is used as the closing
5494 delimiter. It allows quoting of delimiters, and if the string has
5495 balanced delimiters ([{<>}]) it allows nesting.
5497 The lexer always reads these strings into lex_stuff, except in the
5498 case of the operators which take *two* arguments (s/// and tr///)
5499 when it checks to see if lex_stuff is full (presumably with the 1st
5500 arg to s or tr) and if so puts the string into lex_repl.
5505 scan_str(char *start)
5508 SV *sv; /* scalar value: string */
5509 char *tmps; /* temp string, used for delimiter matching */
5510 register char *s = start; /* current position in the buffer */
5511 register char term; /* terminating character */
5512 register char *to; /* current position in the sv's data */
5513 I32 brackets = 1; /* bracket nesting level */
5515 /* skip space before the delimiter */
5519 /* mark where we are, in case we need to report errors */
5522 /* after skipping whitespace, the next character is the terminator */
5524 /* mark where we are */
5525 PL_multi_start = PL_curcop->cop_line;
5526 PL_multi_open = term;
5528 /* find corresponding closing delimiter */
5529 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
5531 PL_multi_close = term;
5533 /* create a new SV to hold the contents. 87 is leak category, I'm
5534 assuming. 79 is the SV's initial length. What a random number. */
5536 sv_upgrade(sv, SVt_PVIV);
5538 (void)SvPOK_only(sv); /* validate pointer */
5540 /* move past delimiter and try to read a complete string */
5543 /* extend sv if need be */
5544 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
5545 /* set 'to' to the next character in the sv's string */
5546 to = SvPVX(sv)+SvCUR(sv);
5548 /* if open delimiter is the close delimiter read unbridle */
5549 if (PL_multi_open == PL_multi_close) {
5550 for (; s < PL_bufend; s++,to++) {
5551 /* embedded newlines increment the current line number */
5552 if (*s == '\n' && !PL_rsfp)
5553 PL_curcop->cop_line++;
5554 /* handle quoted delimiters */
5555 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
5558 /* any other quotes are simply copied straight through */
5562 /* terminate when run out of buffer (the for() condition), or
5563 have found the terminator */
5564 else if (*s == term)
5570 /* if the terminator isn't the same as the start character (e.g.,
5571 matched brackets), we have to allow more in the quoting, and
5572 be prepared for nested brackets.
5575 /* read until we run out of string, or we find the terminator */
5576 for (; s < PL_bufend; s++,to++) {
5577 /* embedded newlines increment the line count */
5578 if (*s == '\n' && !PL_rsfp)
5579 PL_curcop->cop_line++;
5580 /* backslashes can escape the open or closing characters */
5581 if (*s == '\\' && s+1 < PL_bufend) {
5582 if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))
5587 /* allow nested opens and closes */
5588 else if (*s == PL_multi_close && --brackets <= 0)
5590 else if (*s == PL_multi_open)
5595 /* terminate the copied string and update the sv's end-of-string */
5597 SvCUR_set(sv, to - SvPVX(sv));
5600 * this next chunk reads more into the buffer if we're not done yet
5603 if (s < PL_bufend) break; /* handle case where we are done yet :-) */
5605 #ifndef PERL_STRICT_CR
5606 if (to - SvPVX(sv) >= 2) {
5607 if ((to[-2] == '\r' && to[-1] == '\n') ||
5608 (to[-2] == '\n' && to[-1] == '\r'))
5612 SvCUR_set(sv, to - SvPVX(sv));
5614 else if (to[-1] == '\r')
5617 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
5621 /* if we're out of file, or a read fails, bail and reset the current
5622 line marker so we can report where the unterminated string began
5625 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5627 PL_curcop->cop_line = PL_multi_start;
5630 /* we read a line, so increment our line counter */
5631 PL_curcop->cop_line++;
5633 /* update debugger info */
5634 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5635 SV *sv = NEWSV(88,0);
5637 sv_upgrade(sv, SVt_PVMG);
5638 sv_setsv(sv,PL_linestr);
5639 av_store(GvAV(PL_curcop->cop_filegv),
5640 (I32)PL_curcop->cop_line, sv);
5643 /* having changed the buffer, we must update PL_bufend */
5644 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5647 /* at this point, we have successfully read the delimited string */
5649 PL_multi_end = PL_curcop->cop_line;
5652 /* if we allocated too much space, give some back */
5653 if (SvCUR(sv) + 5 < SvLEN(sv)) {
5654 SvLEN_set(sv, SvCUR(sv) + 1);
5655 Renew(SvPVX(sv), SvLEN(sv), char);
5658 /* decide whether this is the first or second quoted string we've read
5671 takes: pointer to position in buffer
5672 returns: pointer to new position in buffer
5673 side-effects: builds ops for the constant in yylval.op
5675 Read a number in any of the formats that Perl accepts:
5677 0(x[0-7A-F]+)|([0-7]+)
5678 [\d_]+(\.[\d_]*)?[Ee](\d+)
5680 Underbars (_) are allowed in decimal numbers. If -w is on,
5681 underbars before a decimal point must be at three digit intervals.
5683 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
5686 If it reads a number without a decimal point or an exponent, it will
5687 try converting the number to an integer and see if it can do so
5688 without loss of precision.
5692 scan_num(char *start)
5694 register char *s = start; /* current position in buffer */
5695 register char *d; /* destination in temp buffer */
5696 register char *e; /* end of temp buffer */
5697 I32 tryiv; /* used to see if it can be an int */
5698 double value; /* number read, as a double */
5699 SV *sv; /* place to put the converted number */
5700 I32 floatit; /* boolean: int or float? */
5701 char *lastub = 0; /* position of last underbar */
5702 static char number_too_long[] = "Number too long";
5704 /* We use the first character to decide what type of number this is */
5708 croak("panic: scan_num");
5710 /* if it starts with a 0, it could be an octal number, a decimal in
5711 0.13 disguise, or a hexadecimal number.
5716 u holds the "number so far"
5717 shift the power of 2 of the base (hex == 4, octal == 3)
5718 overflowed was the number more than we can hold?
5720 Shift is used when we add a digit. It also serves as an "are
5721 we in octal or hex?" indicator to disallow hex characters when
5726 bool overflowed = FALSE;
5733 /* check for a decimal in disguise */
5734 else if (s[1] == '.')
5736 /* so it must be octal */
5741 /* read the rest of the octal number */
5743 UV n, b; /* n is used in the overflow test, b is the digit we're adding on */
5747 /* if we don't mention it, we're done */
5756 /* 8 and 9 are not octal */
5759 yyerror("Illegal octal digit");
5763 case '0': case '1': case '2': case '3': case '4':
5764 case '5': case '6': case '7':
5765 b = *s++ & 15; /* ASCII digit -> value of digit */
5769 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
5770 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
5771 /* make sure they said 0x */
5776 /* Prepare to put the digit we have onto the end
5777 of the number so far. We check for overflows.
5781 n = u << shift; /* make room for the digit */
5782 if (!overflowed && (n >> shift) != u
5783 && !(PL_hints & HINT_NEW_BINARY)) {
5784 warn("Integer overflow in %s number",
5785 (shift == 4) ? "hex" : "octal");
5788 u = n | b; /* add the digit to the end */
5793 /* if we get here, we had success: make a scalar value from
5799 if ( PL_hints & HINT_NEW_BINARY)
5800 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
5805 handle decimal numbers.
5806 we're also sent here when we read a 0 as the first digit
5808 case '1': case '2': case '3': case '4': case '5':
5809 case '6': case '7': case '8': case '9': case '.':
5812 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
5815 /* read next group of digits and _ and copy into d */
5816 while (isDIGIT(*s) || *s == '_') {
5817 /* skip underscores, checking for misplaced ones
5821 if (PL_dowarn && lastub && s - lastub != 3)
5822 warn("Misplaced _ in number");
5826 /* check for end of fixed-length buffer */
5828 croak(number_too_long);
5829 /* if we're ok, copy the character */
5834 /* final misplaced underbar check */
5835 if (PL_dowarn && lastub && s - lastub != 3)
5836 warn("Misplaced _ in number");
5838 /* read a decimal portion if there is one. avoid
5839 3..5 being interpreted as the number 3. followed
5842 if (*s == '.' && s[1] != '.') {
5846 /* copy, ignoring underbars, until we run out of
5847 digits. Note: no misplaced underbar checks!
5849 for (; isDIGIT(*s) || *s == '_'; s++) {
5850 /* fixed length buffer check */
5852 croak(number_too_long);
5858 /* read exponent part, if present */
5859 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
5863 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
5864 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
5866 /* allow positive or negative exponent */
5867 if (*s == '+' || *s == '-')
5870 /* read digits of exponent (no underbars :-) */
5871 while (isDIGIT(*s)) {
5873 croak(number_too_long);
5878 /* terminate the string */
5881 /* make an sv from the string */
5883 /* reset numeric locale in case we were earlier left in Swaziland */
5884 SET_NUMERIC_STANDARD();
5885 value = atof(PL_tokenbuf);
5888 See if we can make do with an integer value without loss of
5889 precision. We use I_V to cast to an int, because some
5890 compilers have issues. Then we try casting it back and see
5891 if it was the same. We only do this if we know we
5892 specifically read an integer.
5894 Note: if floatit is true, then we don't need to do the
5898 if (!floatit && (double)tryiv == value)
5899 sv_setiv(sv, tryiv);
5901 sv_setnv(sv, value);
5902 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) )
5903 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
5904 (floatit ? "float" : "integer"), sv, Nullsv, NULL);
5908 /* make the op for the constant and return */
5910 yylval.opval = newSVOP(OP_CONST, 0, sv);
5916 scan_formline(register char *s)
5921 SV *stuff = newSVpv("",0);
5922 bool needargs = FALSE;
5925 if (*s == '.' || *s == '}') {
5927 #ifdef PERL_STRICT_CR
5928 for (t = s+1;*t == ' ' || *t == '\t'; t++) ;
5930 for (t = s+1;*t == ' ' || *t == '\t' || *t == '\r'; t++) ;
5935 if (PL_in_eval && !PL_rsfp) {
5936 eol = strchr(s,'\n');
5941 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5943 for (t = s; t < eol; t++) {
5944 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
5946 goto enough; /* ~~ must be first line in formline */
5948 if (*t == '@' || *t == '^')
5951 sv_catpvn(stuff, s, eol-s);
5955 s = filter_gets(PL_linestr, PL_rsfp, 0);
5956 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
5957 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
5960 yyerror("Format not terminated");
5970 PL_lex_state = LEX_NORMAL;
5971 PL_nextval[PL_nexttoke].ival = 0;
5975 PL_lex_state = LEX_FORMLINE;
5976 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
5978 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
5982 SvREFCNT_dec(stuff);
5983 PL_lex_formbrack = 0;
5994 PL_cshlen = strlen(PL_cshname);
5999 start_subparse(I32 is_format, U32 flags)
6002 I32 oldsavestack_ix = PL_savestack_ix;
6003 CV* outsidecv = PL_compcv;
6007 assert(SvTYPE(PL_compcv) == SVt_PVCV);
6009 save_I32(&PL_subline);
6010 save_item(PL_subname);
6012 SAVESPTR(PL_curpad);
6013 SAVESPTR(PL_comppad);
6014 SAVESPTR(PL_comppad_name);
6015 SAVESPTR(PL_compcv);
6016 SAVEI32(PL_comppad_name_fill);
6017 SAVEI32(PL_min_intro_pending);
6018 SAVEI32(PL_max_intro_pending);
6019 SAVEI32(PL_pad_reset_pending);
6021 PL_compcv = (CV*)NEWSV(1104,0);
6022 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
6023 CvFLAGS(PL_compcv) |= flags;
6025 PL_comppad = newAV();
6026 av_push(PL_comppad, Nullsv);
6027 PL_curpad = AvARRAY(PL_comppad);
6028 PL_comppad_name = newAV();
6029 PL_comppad_name_fill = 0;
6030 PL_min_intro_pending = 0;
6032 PL_subline = PL_curcop->cop_line;
6034 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
6035 PL_curpad[0] = (SV*)newAV();
6036 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
6037 #endif /* USE_THREADS */
6039 comppadlist = newAV();
6040 AvREAL_off(comppadlist);
6041 av_store(comppadlist, 0, (SV*)PL_comppad_name);
6042 av_store(comppadlist, 1, (SV*)PL_comppad);
6044 CvPADLIST(PL_compcv) = comppadlist;
6045 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
6047 CvOWNER(PL_compcv) = 0;
6048 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
6049 MUTEX_INIT(CvMUTEXP(PL_compcv));
6050 #endif /* USE_THREADS */
6052 return oldsavestack_ix;
6071 char *context = NULL;
6075 if (!yychar || (yychar == ';' && !PL_rsfp))
6077 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
6078 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
6079 while (isSPACE(*PL_oldoldbufptr))
6081 context = PL_oldoldbufptr;
6082 contlen = PL_bufptr - PL_oldoldbufptr;
6084 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
6085 PL_oldbufptr != PL_bufptr) {
6086 while (isSPACE(*PL_oldbufptr))
6088 context = PL_oldbufptr;
6089 contlen = PL_bufptr - PL_oldbufptr;
6091 else if (yychar > 255)
6092 where = "next token ???";
6093 else if ((yychar & 127) == 127) {
6094 if (PL_lex_state == LEX_NORMAL ||
6095 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
6096 where = "at end of line";
6097 else if (PL_lex_inpat)
6098 where = "within pattern";
6100 where = "within string";
6103 SV *where_sv = sv_2mortal(newSVpv("next char ", 0));
6105 sv_catpvf(where_sv, "^%c", toCTRL(yychar));
6106 else if (isPRINT_LC(yychar))
6107 sv_catpvf(where_sv, "%c", yychar);
6109 sv_catpvf(where_sv, "\\%03o", yychar & 255);
6110 where = SvPVX(where_sv);
6112 msg = sv_2mortal(newSVpv(s, 0));
6113 sv_catpvf(msg, " at %_ line %ld, ",
6114 GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
6116 sv_catpvf(msg, "near \"%.*s\"\n", contlen, context);
6118 sv_catpvf(msg, "%s\n", where);
6119 if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
6121 " (Might be a runaway multi-line %c%c string starting on line %ld)\n",
6122 (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
6127 else if (PL_in_eval)
6128 sv_catsv(ERRSV, msg);
6130 PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
6131 if (++PL_error_count >= 10)
6132 croak("%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
6134 PL_in_my_stash = Nullhv;