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
17 #define yychar PL_yychar
18 #define yylval PL_yylval
21 static void check_uni _((void));
22 static void force_next _((I32 type));
23 static char *force_version _((char *start));
24 static char *force_word _((char *start, int token, int check_keyword, int allow_pack, int allow_tick));
25 static SV *tokeq _((SV *sv));
26 static char *scan_const _((char *start));
27 static char *scan_formline _((char *s));
28 static char *scan_heredoc _((char *s));
29 static char *scan_ident _((char *s, char *send, char *dest, STRLEN destlen,
31 static char *scan_inputsymbol _((char *start));
32 static char *scan_pat _((char *start, I32 type));
33 static char *scan_str _((char *start));
34 static char *scan_subst _((char *start));
35 static char *scan_trans _((char *start));
36 static char *scan_word _((char *s, char *dest, STRLEN destlen,
37 int allow_package, STRLEN *slp));
38 static char *skipspace _((char *s));
39 static void checkcomma _((char *s, char *name, char *what));
40 static void force_ident _((char *s, int kind));
41 static void incline _((char *s));
42 static int intuit_method _((char *s, GV *gv));
43 static int intuit_more _((char *s));
44 static I32 lop _((I32 f, expectation x, char *s));
45 static void missingterm _((char *s));
46 static void no_op _((char *what, char *s));
47 static void set_csh _((void));
48 static I32 sublex_done _((void));
49 static I32 sublex_push _((void));
50 static I32 sublex_start _((void));
52 static int uni _((I32 f, char *s));
54 static char * filter_gets _((SV *sv, PerlIO *fp, STRLEN append));
55 static void restore_rsfp _((void *f));
56 static SV *new_constant _((char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type));
57 static void restore_expect _((void *e));
58 static void restore_lex_expect _((void *e));
59 #endif /* PERL_OBJECT */
61 static char ident_too_long[] = "Identifier too long";
63 #define UTF (PL_hints & HINT_UTF8)
65 * Note: we try to be careful never to call the isXXX_utf8() functions
66 * unless we're pretty sure we've seen the beginning of a UTF-8 character
67 * (that is, the two high bits are set). Otherwise we risk loading in the
68 * heavy-duty SWASHINIT and SWASHGET routines unnecessarily.
70 #define isIDFIRST_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
72 : isIDFIRST_utf8((U8*)p))
73 #define isALNUM_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
75 : isALNUM_utf8((U8*)p))
77 /* The following are arranged oddly so that the guard on the switch statement
78 * can get by with a single comparison (if the compiler is smart enough).
81 /* #define LEX_NOTPARSING 11 is done in perl.h. */
84 #define LEX_INTERPNORMAL 9
85 #define LEX_INTERPCASEMOD 8
86 #define LEX_INTERPPUSH 7
87 #define LEX_INTERPSTART 6
88 #define LEX_INTERPEND 5
89 #define LEX_INTERPENDMAYBE 4
90 #define LEX_INTERPCONCAT 3
91 #define LEX_INTERPCONST 2
92 #define LEX_FORMLINE 1
93 #define LEX_KNOWNEXT 0
102 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
104 # include <unistd.h> /* Needed for execv() */
112 #ifdef USE_PURE_BISON
113 YYSTYPE* yylval_pointer = NULL;
114 int* yychar_pointer = NULL;
117 # define yylval (*yylval_pointer)
118 # define yychar (*yychar_pointer)
119 # define PERL_YYLEX_PARAM yylval_pointer,yychar_pointer
121 # define PERL_YYLEX_PARAM
124 #include "keywords.h"
129 #define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
131 #define TOKEN(retval) return (PL_bufptr = s,(int)retval)
132 #define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
133 #define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
134 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
135 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
136 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
137 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
138 #define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
139 #define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
140 #define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
141 #define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
142 #define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
143 #define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
144 #define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
145 #define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
146 #define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
147 #define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
148 #define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
149 #define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
150 #define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
152 /* This bit of chicanery makes a unary function followed by
153 * a parenthesis into a function with one argument, highest precedence.
155 #define UNI(f) return(yylval.ival = f, \
158 PL_last_uni = PL_oldbufptr, \
159 PL_last_lop_op = f, \
160 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
162 #define UNIBRACK(f) return(yylval.ival = f, \
164 PL_last_uni = PL_oldbufptr, \
165 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
167 /* grandfather return to old style */
168 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
173 if (*PL_bufptr == '=') {
175 if (toketype == ANDAND)
176 yylval.ival = OP_ANDASSIGN;
177 else if (toketype == OROR)
178 yylval.ival = OP_ORASSIGN;
185 no_op(char *what, char *s)
187 char *oldbp = PL_bufptr;
188 bool is_first = (PL_oldbufptr == PL_linestart);
191 yywarn(form("%s found where operator expected", what));
193 warn("\t(Missing semicolon on previous line?)\n");
194 else if (PL_oldoldbufptr && isIDFIRST_lazy(PL_oldoldbufptr)) {
196 for (t = PL_oldoldbufptr; *t && (isALNUM_lazy(t) || *t == ':'); t++) ;
197 if (t < PL_bufptr && isSPACE(*t))
198 warn("\t(Do you need to predeclare %.*s?)\n",
199 t - PL_oldoldbufptr, PL_oldoldbufptr);
203 warn("\t(Missing operator before end of line?)\n");
205 warn("\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
215 char *nl = strrchr(s,'\n');
221 iscntrl(PL_multi_close)
223 PL_multi_close < 32 || PL_multi_close == 127
227 tmpbuf[1] = toCTRL(PL_multi_close);
233 *tmpbuf = PL_multi_close;
237 q = strchr(s,'"') ? '\'' : '"';
238 croak("Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
245 if (ckWARN(WARN_DEPRECATED))
246 warner(WARN_DEPRECATED, "Use of %s is deprecated", s);
252 deprecate("comma-less variable list");
258 win32_textfilter(int idx, SV *sv, int maxlen)
260 I32 count = FILTER_READ(idx+1, sv, maxlen);
261 if (count > 0 && !maxlen)
262 win32_strip_return(sv);
270 utf16_textfilter(int idx, SV *sv, int maxlen)
272 I32 count = FILTER_READ(idx+1, sv, maxlen);
276 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
277 tend = utf16_to_utf8((U16*)SvPVX(sv), tmps, SvCUR(sv));
278 sv_usepvn(sv, (char*)tmps, tend - tmps);
285 utf16rev_textfilter(int idx, SV *sv, int maxlen)
287 I32 count = FILTER_READ(idx+1, sv, maxlen);
291 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
292 tend = utf16_to_utf8_reversed((U16*)SvPVX(sv), tmps, SvCUR(sv));
293 sv_usepvn(sv, (char*)tmps, tend - tmps);
308 SAVEI32(PL_lex_dojoin);
309 SAVEI32(PL_lex_brackets);
310 SAVEI32(PL_lex_fakebrack);
311 SAVEI32(PL_lex_casemods);
312 SAVEI32(PL_lex_starts);
313 SAVEI32(PL_lex_state);
314 SAVESPTR(PL_lex_inpat);
315 SAVEI32(PL_lex_inwhat);
316 SAVEI16(PL_curcop->cop_line);
319 SAVEPPTR(PL_oldbufptr);
320 SAVEPPTR(PL_oldoldbufptr);
321 SAVEPPTR(PL_linestart);
322 SAVESPTR(PL_linestr);
323 SAVEPPTR(PL_lex_brackstack);
324 SAVEPPTR(PL_lex_casestack);
325 SAVEDESTRUCTOR(restore_rsfp, PL_rsfp);
326 SAVESPTR(PL_lex_stuff);
327 SAVEI32(PL_lex_defer);
328 SAVESPTR(PL_lex_repl);
329 SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
330 SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect);
332 PL_lex_state = LEX_NORMAL;
336 PL_lex_fakebrack = 0;
337 New(899, PL_lex_brackstack, 120, char);
338 New(899, PL_lex_casestack, 12, char);
339 SAVEFREEPV(PL_lex_brackstack);
340 SAVEFREEPV(PL_lex_casestack);
342 *PL_lex_casestack = '\0';
345 PL_lex_stuff = Nullsv;
346 PL_lex_repl = Nullsv;
350 if (SvREADONLY(PL_linestr))
351 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
352 s = SvPV(PL_linestr, len);
353 if (len && s[len-1] != ';') {
354 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
355 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
356 sv_catpvn(PL_linestr, "\n;", 2);
358 SvTEMP_off(PL_linestr);
359 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
360 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
362 PL_rs = newSVpv("\n", 1);
369 PL_doextract = FALSE;
373 restore_rsfp(void *f)
375 PerlIO *fp = (PerlIO*)f;
377 if (PL_rsfp == PerlIO_stdin())
378 PerlIO_clearerr(PL_rsfp);
379 else if (PL_rsfp && (PL_rsfp != fp))
380 PerlIO_close(PL_rsfp);
385 restore_expect(void *e)
387 /* a safe way to store a small integer in a pointer */
388 PL_expect = (expectation)((char *)e - PL_tokenbuf);
392 restore_lex_expect(void *e)
394 /* a safe way to store a small integer in a pointer */
395 PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);
407 PL_curcop->cop_line++;
410 while (*s == ' ' || *s == '\t') s++;
411 if (strnEQ(s, "line ", 5)) {
420 while (*s == ' ' || *s == '\t')
422 if (*s == '"' && (t = strchr(s+1, '"')))
426 return; /* false alarm */
427 for (t = s; !isSPACE(*t); t++) ;
432 PL_curcop->cop_filegv = gv_fetchfile(s);
434 PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
436 PL_curcop->cop_line = atoi(n)-1;
440 skipspace(register char *s)
443 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
444 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
450 while (s < PL_bufend && isSPACE(*s)) {
451 if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
454 if (s < PL_bufend && *s == '#') {
455 while (s < PL_bufend && *s != '\n')
459 if (PL_in_eval && !PL_rsfp) {
465 if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL)
467 if ((s = filter_gets(PL_linestr, PL_rsfp, (prevlen = SvCUR(PL_linestr)))) == Nullch) {
468 if (PL_minus_n || PL_minus_p) {
469 sv_setpv(PL_linestr,PL_minus_p ?
470 ";}continue{print or die qq(-p destination: $!\\n)" :
472 sv_catpv(PL_linestr,";}");
473 PL_minus_n = PL_minus_p = 0;
476 sv_setpv(PL_linestr,";");
477 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
478 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
479 if (PL_preprocess && !PL_in_eval)
480 (void)PerlProc_pclose(PL_rsfp);
481 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
482 PerlIO_clearerr(PL_rsfp);
484 (void)PerlIO_close(PL_rsfp);
488 PL_linestart = PL_bufptr = s + prevlen;
489 PL_bufend = s + SvCUR(PL_linestr);
492 if (PERLDB_LINE && PL_curstash != PL_debstash) {
493 SV *sv = NEWSV(85,0);
495 sv_upgrade(sv, SVt_PVMG);
496 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
497 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
508 if (PL_oldoldbufptr != PL_last_uni)
510 while (isSPACE(*PL_last_uni))
512 for (s = PL_last_uni; isALNUM_lazy(s) || *s == '-'; s++) ;
513 if ((t = strchr(s, '(')) && t < PL_bufptr)
517 warn("Warning: Use of \"%s\" without parens is ambiguous", PL_last_uni);
524 #define UNI(f) return uni(f,s)
532 PL_last_uni = PL_oldbufptr;
543 #endif /* CRIPPLED_CC */
545 #define LOP(f,x) return lop(f,x,s)
548 lop(I32 f, expectation x, char *s)
555 PL_last_lop = PL_oldbufptr;
571 PL_nexttype[PL_nexttoke] = type;
573 if (PL_lex_state != LEX_KNOWNEXT) {
574 PL_lex_defer = PL_lex_state;
575 PL_lex_expect = PL_expect;
576 PL_lex_state = LEX_KNOWNEXT;
581 force_word(register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
586 start = skipspace(start);
588 if (isIDFIRST_lazy(s) ||
589 (allow_pack && *s == ':') ||
590 (allow_initial_tick && *s == '\'') )
592 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
593 if (check_keyword && keyword(PL_tokenbuf, len))
595 if (token == METHOD) {
600 PL_expect = XOPERATOR;
603 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
604 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
611 force_ident(register char *s, int kind)
614 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
615 PL_nextval[PL_nexttoke].opval = o;
618 dTHR; /* just for in_eval */
619 o->op_private = OPpCONST_ENTERED;
620 /* XXX see note in pp_entereval() for why we forgo typo
621 warnings if the symbol must be introduced in an eval.
623 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
624 kind == '$' ? SVt_PV :
625 kind == '@' ? SVt_PVAV :
626 kind == '%' ? SVt_PVHV :
634 force_version(char *s)
636 OP *version = Nullop;
640 /* default VERSION number -- GBARR */
645 for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
646 if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
648 /* real VERSION number -- GBARR */
649 version = yylval.opval;
653 /* NOTE: The parser sees the package name and the VERSION swapped */
654 PL_nextval[PL_nexttoke].opval = version;
672 s = SvPV_force(sv, len);
676 while (s < send && *s != '\\')
681 if ( PL_hints & HINT_NEW_STRING )
682 pv = sv_2mortal(newSVpv(SvPVX(pv), len));
685 if (s + 1 < send && (s[1] == '\\'))
686 s++; /* all that, just for this */
691 SvCUR_set(sv, d - SvPVX(sv));
693 if ( PL_hints & HINT_NEW_STRING )
694 return new_constant(NULL, 0, "q", sv, pv, "q");
701 register I32 op_type = yylval.ival;
703 if (op_type == OP_NULL) {
704 yylval.opval = PL_lex_op;
708 if (op_type == OP_CONST || op_type == OP_READLINE) {
709 SV *sv = tokeq(PL_lex_stuff);
711 if (SvTYPE(sv) == SVt_PVIV) {
712 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
718 nsv = newSVpv(p, len);
722 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
723 PL_lex_stuff = Nullsv;
727 PL_sublex_info.super_state = PL_lex_state;
728 PL_sublex_info.sub_inwhat = op_type;
729 PL_sublex_info.sub_op = PL_lex_op;
730 PL_lex_state = LEX_INTERPPUSH;
734 yylval.opval = PL_lex_op;
748 PL_lex_state = PL_sublex_info.super_state;
749 SAVEI32(PL_lex_dojoin);
750 SAVEI32(PL_lex_brackets);
751 SAVEI32(PL_lex_fakebrack);
752 SAVEI32(PL_lex_casemods);
753 SAVEI32(PL_lex_starts);
754 SAVEI32(PL_lex_state);
755 SAVESPTR(PL_lex_inpat);
756 SAVEI32(PL_lex_inwhat);
757 SAVEI16(PL_curcop->cop_line);
759 SAVEPPTR(PL_oldbufptr);
760 SAVEPPTR(PL_oldoldbufptr);
761 SAVEPPTR(PL_linestart);
762 SAVESPTR(PL_linestr);
763 SAVEPPTR(PL_lex_brackstack);
764 SAVEPPTR(PL_lex_casestack);
766 PL_linestr = PL_lex_stuff;
767 PL_lex_stuff = Nullsv;
769 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
770 PL_bufend += SvCUR(PL_linestr);
771 SAVEFREESV(PL_linestr);
773 PL_lex_dojoin = FALSE;
775 PL_lex_fakebrack = 0;
776 New(899, PL_lex_brackstack, 120, char);
777 New(899, PL_lex_casestack, 12, char);
778 SAVEFREEPV(PL_lex_brackstack);
779 SAVEFREEPV(PL_lex_casestack);
781 *PL_lex_casestack = '\0';
783 PL_lex_state = LEX_INTERPCONCAT;
784 PL_curcop->cop_line = PL_multi_start;
786 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
787 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
788 PL_lex_inpat = PL_sublex_info.sub_op;
790 PL_lex_inpat = Nullop;
798 if (!PL_lex_starts++) {
799 PL_expect = XOPERATOR;
800 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv("",0));
804 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
805 PL_lex_state = LEX_INTERPCASEMOD;
806 return yylex(PERL_YYLEX_PARAM);
809 /* Is there a right-hand side to take care of? */
810 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
811 PL_linestr = PL_lex_repl;
813 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
814 PL_bufend += SvCUR(PL_linestr);
815 SAVEFREESV(PL_linestr);
816 PL_lex_dojoin = FALSE;
818 PL_lex_fakebrack = 0;
820 *PL_lex_casestack = '\0';
822 if (SvCOMPILED(PL_lex_repl)) {
823 PL_lex_state = LEX_INTERPNORMAL;
825 /* we don't clear PL_lex_repl here, so that we can check later
826 whether this is an evalled subst; that means we rely on the
827 logic to ensure sublex_done() is called again only via the
828 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
831 PL_lex_state = LEX_INTERPCONCAT;
832 PL_lex_repl = Nullsv;
838 PL_bufend = SvPVX(PL_linestr);
839 PL_bufend += SvCUR(PL_linestr);
840 PL_expect = XOPERATOR;
848 Extracts a pattern, double-quoted string, or transliteration. This
851 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
852 processing a pattern (PL_lex_inpat is true), a transliteration
853 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
855 Returns a pointer to the character scanned up to. Iff this is
856 advanced from the start pointer supplied (ie if anything was
857 successfully parsed), will leave an OP for the substring scanned
858 in yylval. Caller must intuit reason for not parsing further
859 by looking at the next characters herself.
863 double-quoted style: \r and \n
864 regexp special ones: \D \s
866 backrefs: \1 (deprecated in substitution replacements)
867 case and quoting: \U \Q \E
868 stops on @ and $, but not for $ as tail anchor
871 characters are VERY literal, except for - not at the start or end
872 of the string, which indicates a range. scan_const expands the
873 range to the full set of intermediate characters.
875 In double-quoted strings:
877 double-quoted style: \r and \n
879 backrefs: \1 (deprecated)
880 case and quoting: \U \Q \E
883 scan_const does *not* construct ops to handle interpolated strings.
884 It stops processing as soon as it finds an embedded $ or @ variable
885 and leaves it to the caller to work out what's going on.
887 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
889 $ in pattern could be $foo or could be tail anchor. Assumption:
890 it's a tail anchor if $ is the last thing in the string, or if it's
891 followed by one of ")| \n\t"
893 \1 (backreferences) are turned into $1
895 The structure of the code is
896 while (there's a character to process) {
897 handle transliteration ranges
899 skip # initiated comments in //x patterns
900 check for embedded @foo
901 check for embedded scalars
903 leave intact backslashes from leave (below)
904 deprecate \1 in strings and sub replacements
905 handle string-changing backslashes \l \U \Q \E, etc.
906 switch (what was escaped) {
907 handle - in a transliteration (becomes a literal -)
908 handle \132 octal characters
909 handle 0x15 hex characters
910 handle \cV (control V)
911 handle printf backslashes (\f, \r, \n, etc)
914 } (end while character to read)
919 scan_const(char *start)
921 register char *send = PL_bufend; /* end of the constant */
922 SV *sv = NEWSV(93, send - start); /* sv for the constant */
923 register char *s = start; /* start of the constant */
924 register char *d = SvPVX(sv); /* destination for copies */
925 bool dorange = FALSE; /* are we in a translit range? */
927 I32 utf = PL_lex_inwhat == OP_TRANS
928 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
930 I32 thisutf = PL_lex_inwhat == OP_TRANS
931 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
934 /* leaveit is the set of acceptably-backslashed characters */
937 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
940 while (s < send || dorange) {
941 /* get transliterations out of the way (they're most literal) */
942 if (PL_lex_inwhat == OP_TRANS) {
943 /* expand a range A-Z to the full set of characters. AIE! */
945 I32 i; /* current expanded character */
946 I32 min; /* first character in range */
947 I32 max; /* last character in range */
949 i = d - SvPVX(sv); /* remember current offset */
950 SvGROW(sv, SvLEN(sv) + 256); /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */
951 d = SvPVX(sv) + i; /* restore d after the grow potentially has changed the ptr */
952 d -= 2; /* eat the first char and the - */
954 min = (U8)*d; /* first char in range */
955 max = (U8)d[1]; /* last char in range */
958 if ((isLOWER(min) && isLOWER(max)) ||
959 (isUPPER(min) && isUPPER(max))) {
961 for (i = min; i <= max; i++)
965 for (i = min; i <= max; i++)
972 for (i = min; i <= max; i++)
975 /* mark the range as done, and continue */
980 /* range begins (ignore - as first or last char) */
981 else if (*s == '-' && s+1 < send && s != start) {
983 *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
992 /* if we get here, we're not doing a transliteration */
994 /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
995 except for the last char, which will be done separately. */
996 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
998 while (s < send && *s != ')')
1000 } else if (s[2] == '{'
1001 || s[2] == 'p' && s[3] == '{') { /* This should march regcomp.c */
1003 char *regparse = s + (s[2] == '{' ? 3 : 4);
1006 while (count && (c = *regparse)) {
1007 if (c == '\\' && regparse[1])
1015 if (*regparse != ')') {
1016 regparse--; /* Leave one char for continuation. */
1017 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
1019 while (s < regparse)
1024 /* likewise skip #-initiated comments in //x patterns */
1025 else if (*s == '#' && PL_lex_inpat &&
1026 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
1027 while (s+1 < send && *s != '\n')
1031 /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
1032 else if (*s == '@' && s[1] && (isALNUM_lazy(s+1) || strchr(":'{$", s[1])))
1035 /* check for embedded scalars. only stop if we're sure it's a
1038 else if (*s == '$') {
1039 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
1041 if (s + 1 < send && !strchr("()| \n\t", s[1]))
1042 break; /* in regexp, $ might be tail anchor */
1045 /* (now in tr/// code again) */
1047 if (*s & 0x80 && thisutf) {
1048 dTHR; /* only for ckWARN */
1049 if (ckWARN(WARN_UTF8)) {
1050 (void)utf8_to_uv((U8*)s, &len); /* could cvt latin-1 to utf8 here... */
1060 if (*s == '\\' && s+1 < send) {
1063 /* some backslashes we leave behind */
1064 if (*leaveit && *s && strchr(leaveit, *s)) {
1070 /* deprecate \1 in strings and substitution replacements */
1071 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1072 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1074 dTHR; /* only for ckWARN */
1075 if (ckWARN(WARN_SYNTAX))
1076 warner(WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1081 /* string-change backslash escapes */
1082 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1087 /* if we get here, it's either a quoted -, or a digit */
1090 /* quoted - in transliterations */
1092 if (PL_lex_inwhat == OP_TRANS) {
1100 if (ckWARN(WARN_UNSAFE) && isALPHA(*s))
1102 "Unrecognized escape \\%c passed through",
1104 /* default action is to copy the quoted character */
1109 /* \132 indicates an octal constant */
1110 case '0': case '1': case '2': case '3':
1111 case '4': case '5': case '6': case '7':
1112 *d++ = scan_oct(s, 3, &len);
1116 /* \x24 indicates a hex constant */
1120 char* e = strchr(s, '}');
1123 yyerror("Missing right brace on \\x{}");
1128 if (ckWARN(WARN_UTF8))
1130 "Use of \\x{} without utf8 declaration");
1132 /* note: utf always shorter than hex */
1133 d = (char*)uv_to_utf8((U8*)d,
1134 scan_hex(s + 1, e - s - 1, &len));
1139 UV uv = (UV)scan_hex(s, 2, &len);
1140 if (utf && PL_lex_inwhat == OP_TRANS &&
1141 utf != (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1143 d = (char*)uv_to_utf8((U8*)d, uv); /* doing a CU or UC */
1146 if (uv >= 127 && UTF) {
1148 if (ckWARN(WARN_UTF8))
1150 "\\x%.*s will produce malformed UTF-8 character; use \\x{%.*s} for that",
1159 /* \c is a control character */
1173 /* printf-style backslashes, formfeeds, newlines, etc */
1199 } /* end if (backslash) */
1202 } /* while loop to process each character */
1204 /* terminate the string and set up the sv */
1206 SvCUR_set(sv, d - SvPVX(sv));
1209 /* shrink the sv if we allocated more than we used */
1210 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1211 SvLEN_set(sv, SvCUR(sv) + 1);
1212 Renew(SvPVX(sv), SvLEN(sv), char);
1215 /* return the substring (via yylval) only if we parsed anything */
1216 if (s > PL_bufptr) {
1217 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1218 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1220 ( PL_lex_inwhat == OP_TRANS
1222 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1225 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1231 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1233 intuit_more(register char *s)
1235 if (PL_lex_brackets)
1237 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1239 if (*s != '{' && *s != '[')
1244 /* In a pattern, so maybe we have {n,m}. */
1261 /* On the other hand, maybe we have a character class */
1264 if (*s == ']' || *s == '^')
1267 int weight = 2; /* let's weigh the evidence */
1269 unsigned char un_char = 255, last_un_char;
1270 char *send = strchr(s,']');
1271 char tmpbuf[sizeof PL_tokenbuf * 4];
1273 if (!send) /* has to be an expression */
1276 Zero(seen,256,char);
1279 else if (isDIGIT(*s)) {
1281 if (isDIGIT(s[1]) && s[2] == ']')
1287 for (; s < send; s++) {
1288 last_un_char = un_char;
1289 un_char = (unsigned char)*s;
1294 weight -= seen[un_char] * 10;
1295 if (isALNUM_lazy(s+1)) {
1296 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1297 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1302 else if (*s == '$' && s[1] &&
1303 strchr("[#!%*<>()-=",s[1])) {
1304 if (/*{*/ strchr("])} =",s[2]))
1313 if (strchr("wds]",s[1]))
1315 else if (seen['\''] || seen['"'])
1317 else if (strchr("rnftbxcav",s[1]))
1319 else if (isDIGIT(s[1])) {
1321 while (s[1] && isDIGIT(s[1]))
1331 if (strchr("aA01! ",last_un_char))
1333 if (strchr("zZ79~",s[1]))
1335 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1336 weight -= 5; /* cope with negative subscript */
1339 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1340 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1345 if (keyword(tmpbuf, d - tmpbuf))
1348 if (un_char == last_un_char + 1)
1350 weight -= seen[un_char];
1355 if (weight >= 0) /* probably a character class */
1363 intuit_method(char *start, GV *gv)
1365 char *s = start + (*start == '$');
1366 char tmpbuf[sizeof PL_tokenbuf];
1374 if ((cv = GvCVu(gv))) {
1375 char *proto = SvPVX(cv);
1385 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1386 if (*start == '$') {
1387 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1392 return *s == '(' ? FUNCMETH : METHOD;
1394 if (!keyword(tmpbuf, len)) {
1395 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1400 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1401 if (indirgv && GvCVu(indirgv))
1403 /* filehandle or package name makes it a method */
1404 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1406 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1407 return 0; /* no assumptions -- "=>" quotes bearword */
1409 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1411 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1415 return *s == '(' ? FUNCMETH : METHOD;
1425 char *pdb = PerlEnv_getenv("PERL5DB");
1429 SETERRNO(0,SS$_NORMAL);
1430 return "BEGIN { require 'perl5db.pl' }";
1436 /* Encoded script support. filter_add() effectively inserts a
1437 * 'pre-processing' function into the current source input stream.
1438 * Note that the filter function only applies to the current source file
1439 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1441 * The datasv parameter (which may be NULL) can be used to pass
1442 * private data to this instance of the filter. The filter function
1443 * can recover the SV using the FILTER_DATA macro and use it to
1444 * store private buffers and state information.
1446 * The supplied datasv parameter is upgraded to a PVIO type
1447 * and the IoDIRP field is used to store the function pointer.
1448 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1449 * private use must be set using malloc'd pointers.
1453 filter_add(filter_t funcp, SV *datasv)
1455 if (!funcp){ /* temporary handy debugging hack to be deleted */
1456 PL_filter_debug = atoi((char*)datasv);
1459 if (!PL_rsfp_filters)
1460 PL_rsfp_filters = newAV();
1462 datasv = NEWSV(255,0);
1463 if (!SvUPGRADE(datasv, SVt_PVIO))
1464 die("Can't upgrade filter_add data to SVt_PVIO");
1465 IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
1466 if (PL_filter_debug) {
1468 warn("filter_add func %p (%s)", funcp, SvPV(datasv, n_a));
1470 av_unshift(PL_rsfp_filters, 1);
1471 av_store(PL_rsfp_filters, 0, datasv) ;
1476 /* Delete most recently added instance of this filter function. */
1478 filter_del(filter_t funcp)
1480 if (PL_filter_debug)
1481 warn("filter_del func %p", funcp);
1482 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1484 /* if filter is on top of stack (usual case) just pop it off */
1485 if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (DIR*)funcp){
1486 sv_free(av_pop(PL_rsfp_filters));
1490 /* we need to search for the correct entry and clear it */
1491 die("filter_del can only delete in reverse order (currently)");
1495 /* Invoke the n'th filter function for the current rsfp. */
1497 filter_read(int idx, SV *buf_sv, int maxlen)
1500 /* 0 = read one text line */
1505 if (!PL_rsfp_filters)
1507 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
1508 /* Provide a default input filter to make life easy. */
1509 /* Note that we append to the line. This is handy. */
1510 if (PL_filter_debug)
1511 warn("filter_read %d: from rsfp\n", idx);
1515 int old_len = SvCUR(buf_sv) ;
1517 /* ensure buf_sv is large enough */
1518 SvGROW(buf_sv, old_len + maxlen) ;
1519 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1520 if (PerlIO_error(PL_rsfp))
1521 return -1; /* error */
1523 return 0 ; /* end of file */
1525 SvCUR_set(buf_sv, old_len + len) ;
1528 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1529 if (PerlIO_error(PL_rsfp))
1530 return -1; /* error */
1532 return 0 ; /* end of file */
1535 return SvCUR(buf_sv);
1537 /* Skip this filter slot if filter has been deleted */
1538 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
1539 if (PL_filter_debug)
1540 warn("filter_read %d: skipped (filter deleted)\n", idx);
1541 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1543 /* Get function pointer hidden within datasv */
1544 funcp = (filter_t)IoDIRP(datasv);
1545 if (PL_filter_debug) {
1547 warn("filter_read %d: via function %p (%s)\n",
1548 idx, funcp, SvPV(datasv,n_a));
1550 /* Call function. The function is expected to */
1551 /* call "FILTER_READ(idx+1, buf_sv)" first. */
1552 /* Return: <0:error, =0:eof, >0:not eof */
1553 return (*funcp)(PERL_OBJECT_THIS_ idx, buf_sv, maxlen);
1557 filter_gets(register SV *sv, register PerlIO *fp, STRLEN append)
1560 if (!PL_rsfp_filters) {
1561 filter_add(win32_textfilter,NULL);
1564 if (PL_rsfp_filters) {
1567 SvCUR_set(sv, 0); /* start with empty line */
1568 if (FILTER_READ(0, sv, 0) > 0)
1569 return ( SvPVX(sv) ) ;
1574 return (sv_gets(sv, fp, append));
1579 static char* exp_name[] =
1580 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
1586 Works out what to call the token just pulled out of the input
1587 stream. The yacc parser takes care of taking the ops we return and
1588 stitching them into a tree.
1594 if read an identifier
1595 if we're in a my declaration
1596 croak if they tried to say my($foo::bar)
1597 build the ops for a my() declaration
1598 if it's an access to a my() variable
1599 are we in a sort block?
1600 croak if my($a); $a <=> $b
1601 build ops for access to a my() variable
1602 if in a dq string, and they've said @foo and we can't find @foo
1604 build ops for a bareword
1605 if we already built the token before, use it.
1608 int yylex(PERL_YYLEX_PARAM_DECL)
1618 #ifdef USE_PURE_BISON
1619 yylval_pointer = lvalp;
1620 yychar_pointer = lcharp;
1623 /* check if there's an identifier for us to look at */
1624 if (PL_pending_ident) {
1625 /* pit holds the identifier we read and pending_ident is reset */
1626 char pit = PL_pending_ident;
1627 PL_pending_ident = 0;
1629 /* if we're in a my(), we can't allow dynamics here.
1630 $foo'bar has already been turned into $foo::bar, so
1631 just check for colons.
1633 if it's a legal name, the OP is a PADANY.
1636 if (strchr(PL_tokenbuf,':'))
1637 croak(PL_no_myglob,PL_tokenbuf);
1639 yylval.opval = newOP(OP_PADANY, 0);
1640 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
1645 build the ops for accesses to a my() variable.
1647 Deny my($a) or my($b) in a sort block, *if* $a or $b is
1648 then used in a comparison. This catches most, but not
1649 all cases. For instance, it catches
1650 sort { my($a); $a <=> $b }
1652 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1653 (although why you'd do that is anyone's guess).
1656 if (!strchr(PL_tokenbuf,':')) {
1658 /* Check for single character per-thread SVs */
1659 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1660 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1661 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
1663 yylval.opval = newOP(OP_THREADSV, 0);
1664 yylval.opval->op_targ = tmp;
1667 #endif /* USE_THREADS */
1668 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
1669 /* if it's a sort block and they're naming $a or $b */
1670 if (PL_last_lop_op == OP_SORT &&
1671 PL_tokenbuf[0] == '$' &&
1672 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
1675 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
1676 d < PL_bufend && *d != '\n';
1679 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
1680 croak("Can't use \"my %s\" in sort comparison",
1686 yylval.opval = newOP(OP_PADANY, 0);
1687 yylval.opval->op_targ = tmp;
1693 Whine if they've said @foo in a doublequoted string,
1694 and @foo isn't a variable we can find in the symbol
1697 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
1698 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
1699 if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
1700 yyerror(form("In string, %s now must be written as \\%s",
1701 PL_tokenbuf, PL_tokenbuf));
1704 /* build ops for a bareword */
1705 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
1706 yylval.opval->op_private = OPpCONST_ENTERED;
1707 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
1708 ((PL_tokenbuf[0] == '$') ? SVt_PV
1709 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
1714 /* no identifier pending identification */
1716 switch (PL_lex_state) {
1718 case LEX_NORMAL: /* Some compilers will produce faster */
1719 case LEX_INTERPNORMAL: /* code if we comment these out. */
1723 /* when we're already built the next token, just pull it out the queue */
1726 yylval = PL_nextval[PL_nexttoke];
1728 PL_lex_state = PL_lex_defer;
1729 PL_expect = PL_lex_expect;
1730 PL_lex_defer = LEX_NORMAL;
1732 return(PL_nexttype[PL_nexttoke]);
1734 /* interpolated case modifiers like \L \U, including \Q and \E.
1735 when we get here, PL_bufptr is at the \
1737 case LEX_INTERPCASEMOD:
1739 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
1740 croak("panic: INTERPCASEMOD");
1742 /* handle \E or end of string */
1743 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
1747 if (PL_lex_casemods) {
1748 oldmod = PL_lex_casestack[--PL_lex_casemods];
1749 PL_lex_casestack[PL_lex_casemods] = '\0';
1751 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
1753 PL_lex_state = LEX_INTERPCONCAT;
1757 if (PL_bufptr != PL_bufend)
1759 PL_lex_state = LEX_INTERPCONCAT;
1760 return yylex(PERL_YYLEX_PARAM);
1764 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
1765 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
1766 if (strchr("LU", *s) &&
1767 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
1769 PL_lex_casestack[--PL_lex_casemods] = '\0';
1772 if (PL_lex_casemods > 10) {
1773 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
1774 if (newlb != PL_lex_casestack) {
1776 PL_lex_casestack = newlb;
1779 PL_lex_casestack[PL_lex_casemods++] = *s;
1780 PL_lex_casestack[PL_lex_casemods] = '\0';
1781 PL_lex_state = LEX_INTERPCONCAT;
1782 PL_nextval[PL_nexttoke].ival = 0;
1785 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
1787 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
1789 PL_nextval[PL_nexttoke].ival = OP_LC;
1791 PL_nextval[PL_nexttoke].ival = OP_UC;
1793 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
1795 croak("panic: yylex");
1798 if (PL_lex_starts) {
1804 return yylex(PERL_YYLEX_PARAM);
1807 case LEX_INTERPPUSH:
1808 return sublex_push();
1810 case LEX_INTERPSTART:
1811 if (PL_bufptr == PL_bufend)
1812 return sublex_done();
1814 PL_lex_dojoin = (*PL_bufptr == '@');
1815 PL_lex_state = LEX_INTERPNORMAL;
1816 if (PL_lex_dojoin) {
1817 PL_nextval[PL_nexttoke].ival = 0;
1820 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
1821 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
1822 force_next(PRIVATEREF);
1824 force_ident("\"", '$');
1825 #endif /* USE_THREADS */
1826 PL_nextval[PL_nexttoke].ival = 0;
1828 PL_nextval[PL_nexttoke].ival = 0;
1830 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
1833 if (PL_lex_starts++) {
1837 return yylex(PERL_YYLEX_PARAM);
1839 case LEX_INTERPENDMAYBE:
1840 if (intuit_more(PL_bufptr)) {
1841 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
1847 if (PL_lex_dojoin) {
1848 PL_lex_dojoin = FALSE;
1849 PL_lex_state = LEX_INTERPCONCAT;
1852 if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
1853 && SvCOMPILED(PL_lex_repl))
1855 if (PL_bufptr != PL_bufend)
1856 croak("Bad evalled substitution pattern");
1857 PL_lex_repl = Nullsv;
1860 case LEX_INTERPCONCAT:
1862 if (PL_lex_brackets)
1863 croak("panic: INTERPCONCAT");
1865 if (PL_bufptr == PL_bufend)
1866 return sublex_done();
1868 if (SvIVX(PL_linestr) == '\'') {
1869 SV *sv = newSVsv(PL_linestr);
1872 else if ( PL_hints & HINT_NEW_RE )
1873 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
1874 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1878 s = scan_const(PL_bufptr);
1880 PL_lex_state = LEX_INTERPCASEMOD;
1882 PL_lex_state = LEX_INTERPSTART;
1885 if (s != PL_bufptr) {
1886 PL_nextval[PL_nexttoke] = yylval;
1889 if (PL_lex_starts++)
1893 return yylex(PERL_YYLEX_PARAM);
1897 return yylex(PERL_YYLEX_PARAM);
1899 PL_lex_state = LEX_NORMAL;
1900 s = scan_formline(PL_bufptr);
1901 if (!PL_lex_formbrack)
1907 PL_oldoldbufptr = PL_oldbufptr;
1910 PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
1916 if (isIDFIRST_lazy(s))
1918 croak("Unrecognized character \\x%02X", *s & 255);
1921 goto fake_eof; /* emulate EOF on ^D or ^Z */
1926 if (PL_lex_brackets)
1927 yyerror("Missing right bracket");
1930 if (s++ < PL_bufend)
1931 goto retry; /* ignore stray nulls */
1934 if (!PL_in_eval && !PL_preambled) {
1935 PL_preambled = TRUE;
1936 sv_setpv(PL_linestr,incl_perldb());
1937 if (SvCUR(PL_linestr))
1938 sv_catpv(PL_linestr,";");
1940 while(AvFILLp(PL_preambleav) >= 0) {
1941 SV *tmpsv = av_shift(PL_preambleav);
1942 sv_catsv(PL_linestr, tmpsv);
1943 sv_catpv(PL_linestr, ";");
1946 sv_free((SV*)PL_preambleav);
1947 PL_preambleav = NULL;
1949 if (PL_minus_n || PL_minus_p) {
1950 sv_catpv(PL_linestr, "LINE: while (<>) {");
1952 sv_catpv(PL_linestr,"chomp;");
1954 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
1956 GvIMPORTED_AV_on(gv);
1958 if (strchr("/'\"", *PL_splitstr)
1959 && strchr(PL_splitstr + 1, *PL_splitstr))
1960 sv_catpvf(PL_linestr, "@F=split(%s);", PL_splitstr);
1963 s = "'~#\200\1'"; /* surely one char is unused...*/
1964 while (s[1] && strchr(PL_splitstr, *s)) s++;
1966 sv_catpvf(PL_linestr, "@F=split(%s%c",
1967 "q" + (delim == '\''), delim);
1968 for (s = PL_splitstr; *s; s++) {
1970 sv_catpvn(PL_linestr, "\\", 1);
1971 sv_catpvn(PL_linestr, s, 1);
1973 sv_catpvf(PL_linestr, "%c);", delim);
1977 sv_catpv(PL_linestr,"@F=split(' ');");
1980 sv_catpv(PL_linestr, "\n");
1981 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1982 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1983 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1984 SV *sv = NEWSV(85,0);
1986 sv_upgrade(sv, SVt_PVMG);
1987 sv_setsv(sv,PL_linestr);
1988 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1993 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
1996 if (PL_preprocess && !PL_in_eval)
1997 (void)PerlProc_pclose(PL_rsfp);
1998 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
1999 PerlIO_clearerr(PL_rsfp);
2001 (void)PerlIO_close(PL_rsfp);
2003 PL_doextract = FALSE;
2005 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
2006 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
2007 sv_catpv(PL_linestr,";}");
2008 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2009 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2010 PL_minus_n = PL_minus_p = 0;
2013 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2014 sv_setpv(PL_linestr,"");
2015 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
2018 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
2019 PL_doextract = FALSE;
2021 /* Incest with pod. */
2022 if (*s == '=' && strnEQ(s, "=cut", 4)) {
2023 sv_setpv(PL_linestr, "");
2024 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2025 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2026 PL_doextract = FALSE;
2030 } while (PL_doextract);
2031 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
2032 if (PERLDB_LINE && PL_curstash != PL_debstash) {
2033 SV *sv = NEWSV(85,0);
2035 sv_upgrade(sv, SVt_PVMG);
2036 sv_setsv(sv,PL_linestr);
2037 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
2039 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2040 if (PL_curcop->cop_line == 1) {
2041 while (s < PL_bufend && isSPACE(*s))
2043 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
2047 if (*s == '#' && *(s+1) == '!')
2049 #ifdef ALTERNATE_SHEBANG
2051 static char as[] = ALTERNATE_SHEBANG;
2052 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2053 d = s + (sizeof(as) - 1);
2055 #endif /* ALTERNATE_SHEBANG */
2064 while (*d && !isSPACE(*d))
2068 #ifdef ARG_ZERO_IS_SCRIPT
2069 if (ipathend > ipath) {
2071 * HP-UX (at least) sets argv[0] to the script name,
2072 * which makes $^X incorrect. And Digital UNIX and Linux,
2073 * at least, set argv[0] to the basename of the Perl
2074 * interpreter. So, having found "#!", we'll set it right.
2076 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2077 assert(SvPOK(x) || SvGMAGICAL(x));
2078 if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
2079 sv_setpvn(x, ipath, ipathend - ipath);
2082 TAINT_NOT; /* $^X is always tainted, but that's OK */
2084 #endif /* ARG_ZERO_IS_SCRIPT */
2089 d = instr(s,"perl -");
2091 d = instr(s,"perl");
2092 #ifdef ALTERNATE_SHEBANG
2094 * If the ALTERNATE_SHEBANG on this system starts with a
2095 * character that can be part of a Perl expression, then if
2096 * we see it but not "perl", we're probably looking at the
2097 * start of Perl code, not a request to hand off to some
2098 * other interpreter. Similarly, if "perl" is there, but
2099 * not in the first 'word' of the line, we assume the line
2100 * contains the start of the Perl program.
2102 if (d && *s != '#') {
2104 while (*c && !strchr("; \t\r\n\f\v#", *c))
2107 d = Nullch; /* "perl" not in first word; ignore */
2109 *s = '#'; /* Don't try to parse shebang line */
2111 #endif /* ALTERNATE_SHEBANG */
2116 !instr(s,"indir") &&
2117 instr(PL_origargv[0],"perl"))
2123 while (s < PL_bufend && isSPACE(*s))
2125 if (s < PL_bufend) {
2126 Newz(899,newargv,PL_origargc+3,char*);
2128 while (s < PL_bufend && !isSPACE(*s))
2131 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2134 newargv = PL_origargv;
2136 PerlProc_execv(ipath, newargv);
2137 croak("Can't exec %s", ipath);
2140 U32 oldpdb = PL_perldb;
2141 bool oldn = PL_minus_n;
2142 bool oldp = PL_minus_p;
2144 while (*d && !isSPACE(*d)) d++;
2145 while (*d == ' ' || *d == '\t') d++;
2149 if (*d == 'M' || *d == 'm') {
2151 while (*d && !isSPACE(*d)) d++;
2152 croak("Too late for \"-%.*s\" option",
2155 d = moreswitches(d);
2157 if (PERLDB_LINE && !oldpdb ||
2158 ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
2159 /* if we have already added "LINE: while (<>) {",
2160 we must not do it again */
2162 sv_setpv(PL_linestr, "");
2163 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2164 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2165 PL_preambled = FALSE;
2167 (void)gv_fetchfile(PL_origfilename);
2174 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2176 PL_lex_state = LEX_FORMLINE;
2177 return yylex(PERL_YYLEX_PARAM);
2181 #ifdef PERL_STRICT_CR
2182 warn("Illegal character \\%03o (carriage return)", '\r');
2184 "(Maybe you didn't strip carriage returns after a network transfer?)\n");
2186 case ' ': case '\t': case '\f': case 013:
2191 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2193 while (s < d && *s != '\n')
2198 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2200 PL_lex_state = LEX_FORMLINE;
2201 return yylex(PERL_YYLEX_PARAM);
2210 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2215 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2218 if (strnEQ(s,"=>",2)) {
2219 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2220 OPERATOR('-'); /* unary minus */
2222 PL_last_uni = PL_oldbufptr;
2223 PL_last_lop_op = OP_FTEREAD; /* good enough */
2225 case 'r': FTST(OP_FTEREAD);
2226 case 'w': FTST(OP_FTEWRITE);
2227 case 'x': FTST(OP_FTEEXEC);
2228 case 'o': FTST(OP_FTEOWNED);
2229 case 'R': FTST(OP_FTRREAD);
2230 case 'W': FTST(OP_FTRWRITE);
2231 case 'X': FTST(OP_FTREXEC);
2232 case 'O': FTST(OP_FTROWNED);
2233 case 'e': FTST(OP_FTIS);
2234 case 'z': FTST(OP_FTZERO);
2235 case 's': FTST(OP_FTSIZE);
2236 case 'f': FTST(OP_FTFILE);
2237 case 'd': FTST(OP_FTDIR);
2238 case 'l': FTST(OP_FTLINK);
2239 case 'p': FTST(OP_FTPIPE);
2240 case 'S': FTST(OP_FTSOCK);
2241 case 'u': FTST(OP_FTSUID);
2242 case 'g': FTST(OP_FTSGID);
2243 case 'k': FTST(OP_FTSVTX);
2244 case 'b': FTST(OP_FTBLK);
2245 case 'c': FTST(OP_FTCHR);
2246 case 't': FTST(OP_FTTTY);
2247 case 'T': FTST(OP_FTTEXT);
2248 case 'B': FTST(OP_FTBINARY);
2249 case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2250 case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2251 case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
2253 croak("Unrecognized file test: -%c", (int)tmp);
2260 if (PL_expect == XOPERATOR)
2265 else if (*s == '>') {
2268 if (isIDFIRST_lazy(s)) {
2269 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2277 if (PL_expect == XOPERATOR)
2280 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2282 OPERATOR('-'); /* unary minus */
2289 if (PL_expect == XOPERATOR)
2294 if (PL_expect == XOPERATOR)
2297 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2303 if (PL_expect != XOPERATOR) {
2304 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2305 PL_expect = XOPERATOR;
2306 force_ident(PL_tokenbuf, '*');
2319 if (PL_expect == XOPERATOR) {
2323 PL_tokenbuf[0] = '%';
2324 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2325 if (!PL_tokenbuf[1]) {
2327 yyerror("Final % should be \\% or %name");
2330 PL_pending_ident = '%';
2352 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2353 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
2358 if (PL_curcop->cop_line < PL_copline)
2359 PL_copline = PL_curcop->cop_line;
2370 if (PL_lex_brackets <= 0)
2371 yyerror("Unmatched right bracket");
2374 if (PL_lex_state == LEX_INTERPNORMAL) {
2375 if (PL_lex_brackets == 0) {
2376 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
2377 PL_lex_state = LEX_INTERPEND;
2384 if (PL_lex_brackets > 100) {
2385 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2386 if (newlb != PL_lex_brackstack) {
2388 PL_lex_brackstack = newlb;
2391 switch (PL_expect) {
2393 if (PL_lex_formbrack) {
2397 if (PL_oldoldbufptr == PL_last_lop)
2398 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2400 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2401 OPERATOR(HASHBRACK);
2403 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2406 PL_tokenbuf[0] = '\0';
2407 if (d < PL_bufend && *d == '-') {
2408 PL_tokenbuf[0] = '-';
2410 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2413 if (d < PL_bufend && isIDFIRST_lazy(d)) {
2414 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2416 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2419 char minus = (PL_tokenbuf[0] == '-');
2420 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2427 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2431 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2436 if (PL_oldoldbufptr == PL_last_lop)
2437 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2439 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2442 OPERATOR(HASHBRACK);
2443 /* This hack serves to disambiguate a pair of curlies
2444 * as being a block or an anon hash. Normally, expectation
2445 * determines that, but in cases where we're not in a
2446 * position to expect anything in particular (like inside
2447 * eval"") we have to resolve the ambiguity. This code
2448 * covers the case where the first term in the curlies is a
2449 * quoted string. Most other cases need to be explicitly
2450 * disambiguated by prepending a `+' before the opening
2451 * curly in order to force resolution as an anon hash.
2453 * XXX should probably propagate the outer expectation
2454 * into eval"" to rely less on this hack, but that could
2455 * potentially break current behavior of eval"".
2459 if (*s == '\'' || *s == '"' || *s == '`') {
2460 /* common case: get past first string, handling escapes */
2461 for (t++; t < PL_bufend && *t != *s;)
2462 if (*t++ == '\\' && (*t == '\\' || *t == *s))
2466 else if (*s == 'q') {
2469 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
2470 && !isALNUM(*t)))) {
2472 char open, close, term;
2475 while (t < PL_bufend && isSPACE(*t))
2479 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2483 for (t++; t < PL_bufend; t++) {
2484 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
2486 else if (*t == open)
2490 for (t++; t < PL_bufend; t++) {
2491 if (*t == '\\' && t+1 < PL_bufend)
2493 else if (*t == close && --brackets <= 0)
2495 else if (*t == open)
2501 else if (isIDFIRST_lazy(s)) {
2502 for (t++; t < PL_bufend && isALNUM_lazy(t); t++) ;
2504 while (t < PL_bufend && isSPACE(*t))
2506 /* if comma follows first term, call it an anon hash */
2507 /* XXX it could be a comma expression with loop modifiers */
2508 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
2509 || (*t == '=' && t[1] == '>')))
2510 OPERATOR(HASHBRACK);
2511 if (PL_expect == XREF)
2512 PL_expect = XSTATE; /* was XTERM, trying XSTATE */
2514 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2520 yylval.ival = PL_curcop->cop_line;
2521 if (isSPACE(*s) || *s == '#')
2522 PL_copline = NOLINE; /* invalidate current command line number */
2527 if (PL_lex_brackets <= 0)
2528 yyerror("Unmatched right bracket");
2530 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2531 if (PL_lex_brackets < PL_lex_formbrack)
2532 PL_lex_formbrack = 0;
2533 if (PL_lex_state == LEX_INTERPNORMAL) {
2534 if (PL_lex_brackets == 0) {
2535 if (PL_lex_fakebrack) {
2536 PL_lex_state = LEX_INTERPEND;
2538 return yylex(PERL_YYLEX_PARAM); /* ignore fake brackets */
2540 if (*s == '-' && s[1] == '>')
2541 PL_lex_state = LEX_INTERPENDMAYBE;
2542 else if (*s != '[' && *s != '{')
2543 PL_lex_state = LEX_INTERPEND;
2546 if (PL_lex_brackets < PL_lex_fakebrack) {
2548 PL_lex_fakebrack = 0;
2549 return yylex(PERL_YYLEX_PARAM); /* ignore fake brackets */
2559 if (PL_expect == XOPERATOR) {
2560 if (ckWARN(WARN_SEMICOLON) && isIDFIRST_lazy(s) && PL_bufptr == PL_linestart) {
2561 PL_curcop->cop_line--;
2562 warner(WARN_SEMICOLON, PL_warn_nosemi);
2563 PL_curcop->cop_line++;
2568 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2570 PL_expect = XOPERATOR;
2571 force_ident(PL_tokenbuf, '&');
2575 yylval.ival = (OPpENTERSUB_AMPER<<8);
2594 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
2595 warner(WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
2597 if (PL_expect == XSTATE && isALPHA(tmp) &&
2598 (s == PL_linestart+1 || s[-2] == '\n') )
2600 if (PL_in_eval && !PL_rsfp) {
2605 if (strnEQ(s,"=cut",4)) {
2619 PL_doextract = TRUE;
2622 if (PL_lex_brackets < PL_lex_formbrack) {
2624 #ifdef PERL_STRICT_CR
2625 for (t = s; *t == ' ' || *t == '\t'; t++) ;
2627 for (t = s; *t == ' ' || *t == '\t' || *t == '\r'; t++) ;
2629 if (*t == '\n' || *t == '#') {
2647 if (PL_expect != XOPERATOR) {
2648 if (s[1] != '<' && !strchr(s,'>'))
2651 s = scan_heredoc(s);
2653 s = scan_inputsymbol(s);
2654 TERM(sublex_start());
2659 SHop(OP_LEFT_SHIFT);
2673 SHop(OP_RIGHT_SHIFT);
2682 if (PL_expect == XOPERATOR) {
2683 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2686 return ','; /* grandfather non-comma-format format */
2690 if (s[1] == '#' && (isIDFIRST_lazy(s+2) || strchr("{$:+-", s[2]))) {
2691 if (PL_expect == XOPERATOR)
2692 no_op("Array length", PL_bufptr);
2693 PL_tokenbuf[0] = '@';
2694 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2696 if (!PL_tokenbuf[1])
2698 PL_expect = XOPERATOR;
2699 PL_pending_ident = '#';
2703 if (PL_expect == XOPERATOR)
2704 no_op("Scalar", PL_bufptr);
2705 PL_tokenbuf[0] = '$';
2706 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2707 if (!PL_tokenbuf[1]) {
2709 yyerror("Final $ should be \\$ or $name");
2713 /* This kludge not intended to be bulletproof. */
2714 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
2715 yylval.opval = newSVOP(OP_CONST, 0,
2716 newSViv((IV)PL_compiling.cop_arybase));
2717 yylval.opval->op_private = OPpCONST_ARYBASE;
2722 if (PL_lex_state == LEX_NORMAL)
2725 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2728 PL_tokenbuf[0] = '@';
2729 if (ckWARN(WARN_SYNTAX)) {
2731 isSPACE(*t) || isALNUM_lazy(t) || *t == '$';
2734 PL_bufptr = skipspace(PL_bufptr);
2735 while (t < PL_bufend && *t != ']')
2738 "Multidimensional syntax %.*s not supported",
2739 (t - PL_bufptr) + 1, PL_bufptr);
2743 else if (*s == '{') {
2744 PL_tokenbuf[0] = '%';
2745 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
2746 (t = strchr(s, '}')) && (t = strchr(t, '=')))
2748 char tmpbuf[sizeof PL_tokenbuf];
2750 for (t++; isSPACE(*t); t++) ;
2751 if (isIDFIRST_lazy(t)) {
2752 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
2753 for (; isSPACE(*t); t++) ;
2754 if (*t == ';' && perl_get_cv(tmpbuf, FALSE))
2756 "You need to quote \"%s\"", tmpbuf);
2762 PL_expect = XOPERATOR;
2763 if (PL_lex_state == LEX_NORMAL && isSPACE(*d)) {
2764 bool islop = (PL_last_lop == PL_oldoldbufptr);
2765 if (!islop || PL_last_lop_op == OP_GREPSTART)
2766 PL_expect = XOPERATOR;
2767 else if (strchr("$@\"'`q", *s))
2768 PL_expect = XTERM; /* e.g. print $fh "foo" */
2769 else if (strchr("&*<%", *s) && isIDFIRST_lazy(s+1))
2770 PL_expect = XTERM; /* e.g. print $fh &sub */
2771 else if (isIDFIRST_lazy(s)) {
2772 char tmpbuf[sizeof PL_tokenbuf];
2773 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
2774 if (tmp = keyword(tmpbuf, len)) {
2775 /* binary operators exclude handle interpretations */
2787 PL_expect = XTERM; /* e.g. print $fh length() */
2792 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
2793 if (gv && GvCVu(gv))
2794 PL_expect = XTERM; /* e.g. print $fh subr() */
2797 else if (isDIGIT(*s))
2798 PL_expect = XTERM; /* e.g. print $fh 3 */
2799 else if (*s == '.' && isDIGIT(s[1]))
2800 PL_expect = XTERM; /* e.g. print $fh .3 */
2801 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
2802 PL_expect = XTERM; /* e.g. print $fh -1 */
2803 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
2804 PL_expect = XTERM; /* print $fh <<"EOF" */
2806 PL_pending_ident = '$';
2810 if (PL_expect == XOPERATOR)
2812 PL_tokenbuf[0] = '@';
2813 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2814 if (!PL_tokenbuf[1]) {
2816 yyerror("Final @ should be \\@ or @name");
2819 if (PL_lex_state == LEX_NORMAL)
2821 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2823 PL_tokenbuf[0] = '%';
2825 /* Warn about @ where they meant $. */
2826 if (ckWARN(WARN_SYNTAX)) {
2827 if (*s == '[' || *s == '{') {
2829 while (*t && (isALNUM_lazy(t) || strchr(" \t$#+-'\"", *t)))
2831 if (*t == '}' || *t == ']') {
2833 PL_bufptr = skipspace(PL_bufptr);
2835 "Scalar value %.*s better written as $%.*s",
2836 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
2841 PL_pending_ident = '@';
2844 case '/': /* may either be division or pattern */
2845 case '?': /* may either be conditional or pattern */
2846 if (PL_expect != XOPERATOR) {
2847 /* Disable warning on "study /blah/" */
2848 if (PL_oldoldbufptr == PL_last_uni
2849 && (*PL_last_uni != 's' || s - PL_last_uni < 5
2850 || memNE(PL_last_uni, "study", 5) || isALNUM_lazy(PL_last_uni+5)))
2852 s = scan_pat(s,OP_MATCH);
2853 TERM(sublex_start());
2861 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
2862 #ifdef PERL_STRICT_CR
2865 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
2867 && (s == PL_linestart || s[-1] == '\n') )
2869 PL_lex_formbrack = 0;
2873 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
2879 yylval.ival = OPf_SPECIAL;
2885 if (PL_expect != XOPERATOR)
2890 case '0': case '1': case '2': case '3': case '4':
2891 case '5': case '6': case '7': case '8': case '9':
2893 if (PL_expect == XOPERATOR)
2899 if (PL_expect == XOPERATOR) {
2900 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2903 return ','; /* grandfather non-comma-format format */
2909 missingterm((char*)0);
2910 yylval.ival = OP_CONST;
2911 TERM(sublex_start());
2915 if (PL_expect == XOPERATOR) {
2916 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2919 return ','; /* grandfather non-comma-format format */
2925 missingterm((char*)0);
2926 yylval.ival = OP_CONST;
2927 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
2928 if (*d == '$' || *d == '@' || *d == '\\' || *d & 0x80) {
2929 yylval.ival = OP_STRINGIFY;
2933 TERM(sublex_start());
2937 if (PL_expect == XOPERATOR)
2938 no_op("Backticks",s);
2940 missingterm((char*)0);
2941 yylval.ival = OP_BACKTICK;
2943 TERM(sublex_start());
2947 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
2948 warner(WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
2950 if (PL_expect == XOPERATOR)
2951 no_op("Backslash",s);
2955 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
2995 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
2997 /* Some keywords can be followed by any delimiter, including ':' */
2998 tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
2999 len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
3000 (PL_tokenbuf[0] == 'q' &&
3001 strchr("qwxr", PL_tokenbuf[1]))));
3003 /* x::* is just a word, unless x is "CORE" */
3004 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
3008 while (d < PL_bufend && isSPACE(*d))
3009 d++; /* no comments skipped here, or s### is misparsed */
3011 /* Is this a label? */
3012 if (!tmp && PL_expect == XSTATE
3013 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
3015 yylval.pval = savepv(PL_tokenbuf);
3020 /* Check for keywords */
3021 tmp = keyword(PL_tokenbuf, len);
3023 /* Is this a word before a => operator? */
3024 if (strnEQ(d,"=>",2)) {
3026 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
3027 yylval.opval->op_private = OPpCONST_BARE;
3031 if (tmp < 0) { /* second-class keyword? */
3032 GV *ogv = Nullgv; /* override (winner) */
3033 GV *hgv = Nullgv; /* hidden (loser) */
3034 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
3036 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
3039 if (GvIMPORTED_CV(gv))
3041 else if (! CvMETHOD(cv))
3045 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3046 (gv = *gvp) != (GV*)&PL_sv_undef &&
3047 GvCVu(gv) && GvIMPORTED_CV(gv))
3053 tmp = 0; /* overridden by import or by GLOBAL */
3056 && -tmp==KEY_lock /* XXX generalizable kludge */
3057 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
3059 tmp = 0; /* any sub overrides "weak" keyword */
3061 else { /* no override */
3065 if (ckWARN(WARN_AMBIGUOUS) && hgv
3066 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
3067 warner(WARN_AMBIGUOUS,
3068 "Ambiguous call resolved as CORE::%s(), %s",
3069 GvENAME(hgv), "qualify as such or use &");
3076 default: /* not a keyword */
3079 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
3081 /* Get the rest if it looks like a package qualifier */
3083 if (*s == '\'' || *s == ':' && s[1] == ':') {
3085 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
3088 croak("Bad name after %s%s", PL_tokenbuf,
3089 *s == '\'' ? "'" : "::");
3093 if (PL_expect == XOPERATOR) {
3094 if (PL_bufptr == PL_linestart) {
3095 PL_curcop->cop_line--;
3096 warner(WARN_SEMICOLON, PL_warn_nosemi);
3097 PL_curcop->cop_line++;
3100 no_op("Bareword",s);
3103 /* Look for a subroutine with this name in current package,
3104 unless name is "Foo::", in which case Foo is a bearword
3105 (and a package name). */
3108 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3110 if (ckWARN(WARN_UNSAFE) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3112 "Bareword \"%s\" refers to nonexistent package",
3115 PL_tokenbuf[len] = '\0';
3122 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3125 /* if we saw a global override before, get the right name */
3128 sv = newSVpv("CORE::GLOBAL::",14);
3129 sv_catpv(sv,PL_tokenbuf);
3132 sv = newSVpv(PL_tokenbuf,0);
3134 /* Presume this is going to be a bareword of some sort. */
3137 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3138 yylval.opval->op_private = OPpCONST_BARE;
3140 /* And if "Foo::", then that's what it certainly is. */
3145 /* See if it's the indirect object for a list operator. */
3147 if (PL_oldoldbufptr &&
3148 PL_oldoldbufptr < PL_bufptr &&
3149 (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
3150 /* NO SKIPSPACE BEFORE HERE! */
3152 || ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF
3153 || (PL_last_lop_op == OP_ENTERSUB
3155 && PL_last_proto[PL_last_proto[0] == ';' ? 1 : 0] == '*')) )
3157 bool immediate_paren = *s == '(';
3159 /* (Now we can afford to cross potential line boundary.) */
3162 /* Two barewords in a row may indicate method call. */
3164 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp=intuit_method(s,gv)))
3167 /* If not a declared subroutine, it's an indirect object. */
3168 /* (But it's an indir obj regardless for sort.) */
3170 if ((PL_last_lop_op == OP_SORT ||
3171 (!immediate_paren && (!gv || !GvCVu(gv))) ) &&
3172 (PL_last_lop_op != OP_MAPSTART && PL_last_lop_op != OP_GREPSTART)){
3173 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3178 /* If followed by a paren, it's certainly a subroutine. */
3180 PL_expect = XOPERATOR;
3184 if (gv && GvCVu(gv)) {
3186 if ((cv = GvCV(gv)) && SvPOK(cv))
3187 PL_last_proto = SvPV((SV*)cv, n_a);
3188 for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
3189 if (*d == ')' && (sv = cv_const_sv(cv))) {
3194 PL_nextval[PL_nexttoke].opval = yylval.opval;
3195 PL_expect = XOPERATOR;
3198 PL_last_lop_op = OP_ENTERSUB;
3202 /* If followed by var or block, call it a method (unless sub) */
3204 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3205 PL_last_lop = PL_oldbufptr;
3206 PL_last_lop_op = OP_METHOD;
3210 /* If followed by a bareword, see if it looks like indir obj. */
3212 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp = intuit_method(s,gv)))
3215 /* Not a method, so call it a subroutine (if defined) */
3217 if (gv && GvCVu(gv)) {
3219 if (lastchar == '-')
3220 warn("Ambiguous use of -%s resolved as -&%s()",
3221 PL_tokenbuf, PL_tokenbuf);
3222 PL_last_lop = PL_oldbufptr;
3223 PL_last_lop_op = OP_ENTERSUB;
3224 /* Check for a constant sub */
3226 if ((sv = cv_const_sv(cv))) {
3228 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3229 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3230 yylval.opval->op_private = 0;
3234 /* Resolve to GV now. */
3235 op_free(yylval.opval);
3236 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
3237 PL_last_lop_op = OP_ENTERSUB;
3238 /* Is there a prototype? */
3241 PL_last_proto = SvPV((SV*)cv, len);
3244 if (strEQ(PL_last_proto, "$"))
3246 if (*PL_last_proto == '&' && *s == '{') {
3247 sv_setpv(PL_subname,"__ANON__");
3251 PL_last_proto = NULL;
3252 PL_nextval[PL_nexttoke].opval = yylval.opval;
3258 if (PL_hints & HINT_STRICT_SUBS &&
3261 PL_last_lop_op != OP_TRUNCATE && /* S/F prototype in opcode.pl */
3262 PL_last_lop_op != OP_ACCEPT &&
3263 PL_last_lop_op != OP_PIPE_OP &&
3264 PL_last_lop_op != OP_SOCKPAIR &&
3265 !(PL_last_lop_op == OP_ENTERSUB
3267 && PL_last_proto[PL_last_proto[0] == ';' ? 1 : 0] == '*'))
3270 "Bareword \"%s\" not allowed while \"strict subs\" in use",
3275 /* Call it a bare word */
3278 if (ckWARN(WARN_RESERVED)) {
3279 if (lastchar != '-') {
3280 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3282 warner(WARN_RESERVED, PL_warn_reserved, PL_tokenbuf);
3287 if (lastchar && strchr("*%&", lastchar)) {
3288 warn("Operator or semicolon missing before %c%s",
3289 lastchar, PL_tokenbuf);
3290 warn("Ambiguous use of %c resolved as operator %c",
3291 lastchar, lastchar);
3297 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3298 newSVsv(GvSV(PL_curcop->cop_filegv)));
3302 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3303 newSVpvf("%ld", (long)PL_curcop->cop_line));
3306 case KEY___PACKAGE__:
3307 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3309 ? newSVsv(PL_curstname)
3318 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
3319 char *pname = "main";
3320 if (PL_tokenbuf[2] == 'D')
3321 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
3322 gv = gv_fetchpv(form("%s::DATA", pname), TRUE, SVt_PVIO);
3325 GvIOp(gv) = newIO();
3326 IoIFP(GvIOp(gv)) = PL_rsfp;
3327 #if defined(HAS_FCNTL) && defined(F_SETFD)
3329 int fd = PerlIO_fileno(PL_rsfp);
3330 fcntl(fd,F_SETFD,fd >= 3);
3333 /* Mark this internal pseudo-handle as clean */
3334 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3336 IoTYPE(GvIOp(gv)) = '|';
3337 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
3338 IoTYPE(GvIOp(gv)) = '-';
3340 IoTYPE(GvIOp(gv)) = '<';
3351 if (PL_expect == XSTATE) {
3358 if (*s == ':' && s[1] == ':') {
3361 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3362 tmp = keyword(PL_tokenbuf, len);
3376 LOP(OP_ACCEPT,XTERM);
3382 LOP(OP_ATAN2,XTERM);
3391 LOP(OP_BLESS,XTERM);
3400 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
3417 if (!PL_cryptseen++)
3420 LOP(OP_CRYPT,XTERM);
3423 if (ckWARN(WARN_OCTAL)) {
3424 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
3425 if (*d != '0' && isDIGIT(*d))
3426 yywarn("chmod: mode argument is missing initial 0");
3428 LOP(OP_CHMOD,XTERM);
3431 LOP(OP_CHOWN,XTERM);
3434 LOP(OP_CONNECT,XTERM);
3450 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3454 PL_hints |= HINT_BLOCK_SCOPE;
3464 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3465 LOP(OP_DBMOPEN,XTERM);
3471 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3478 yylval.ival = PL_curcop->cop_line;
3492 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
3493 UNIBRACK(OP_ENTEREVAL);
3508 case KEY_endhostent:
3514 case KEY_endservent:
3517 case KEY_endprotoent:
3528 yylval.ival = PL_curcop->cop_line;
3530 if (PL_expect == XSTATE && isIDFIRST_lazy(s)) {
3532 if ((PL_bufend - p) >= 3 &&
3533 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3536 if (isIDFIRST_lazy(p))
3537 croak("Missing $ on loop variable");
3542 LOP(OP_FORMLINE,XTERM);
3548 LOP(OP_FCNTL,XTERM);
3554 LOP(OP_FLOCK,XTERM);
3563 LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
3566 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3581 case KEY_getpriority:
3582 LOP(OP_GETPRIORITY,XTERM);
3584 case KEY_getprotobyname:
3587 case KEY_getprotobynumber:
3588 LOP(OP_GPBYNUMBER,XTERM);
3590 case KEY_getprotoent:
3602 case KEY_getpeername:
3603 UNI(OP_GETPEERNAME);
3605 case KEY_gethostbyname:
3608 case KEY_gethostbyaddr:
3609 LOP(OP_GHBYADDR,XTERM);
3611 case KEY_gethostent:
3614 case KEY_getnetbyname:
3617 case KEY_getnetbyaddr:
3618 LOP(OP_GNBYADDR,XTERM);
3623 case KEY_getservbyname:
3624 LOP(OP_GSBYNAME,XTERM);
3626 case KEY_getservbyport:
3627 LOP(OP_GSBYPORT,XTERM);
3629 case KEY_getservent:
3632 case KEY_getsockname:
3633 UNI(OP_GETSOCKNAME);
3635 case KEY_getsockopt:
3636 LOP(OP_GSOCKOPT,XTERM);
3658 yylval.ival = PL_curcop->cop_line;
3662 LOP(OP_INDEX,XTERM);
3668 LOP(OP_IOCTL,XTERM);
3680 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3711 LOP(OP_LISTEN,XTERM);
3720 s = scan_pat(s,OP_MATCH);
3721 TERM(sublex_start());
3724 LOP(OP_MAPSTART, XREF);
3727 LOP(OP_MKDIR,XTERM);
3730 LOP(OP_MSGCTL,XTERM);
3733 LOP(OP_MSGGET,XTERM);
3736 LOP(OP_MSGRCV,XTERM);
3739 LOP(OP_MSGSND,XTERM);
3744 if (isIDFIRST_lazy(s)) {
3745 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
3746 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
3747 if (!PL_in_my_stash) {
3750 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
3757 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3764 if (PL_expect != XSTATE)
3765 yyerror("\"no\" not allowed in expression");
3766 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3767 s = force_version(s);
3776 if (isIDFIRST_lazy(s)) {
3778 for (d = s; isALNUM_lazy(d); d++) ;
3780 if (strchr("|&*+-=!?:.", *t))
3781 warn("Precedence problem: open %.*s should be open(%.*s)",
3787 yylval.ival = OP_OR;
3797 LOP(OP_OPEN_DIR,XTERM);
3800 checkcomma(s,PL_tokenbuf,"filehandle");
3804 checkcomma(s,PL_tokenbuf,"filehandle");
3823 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3827 LOP(OP_PIPE_OP,XTERM);
3832 missingterm((char*)0);
3833 yylval.ival = OP_CONST;
3834 TERM(sublex_start());
3842 missingterm((char*)0);
3844 if (SvCUR(PL_lex_stuff)) {
3847 d = SvPV_force(PL_lex_stuff, len);
3849 for (; isSPACE(*d) && len; --len, ++d) ;
3852 if (!warned && ckWARN(WARN_SYNTAX)) {
3853 for (; !isSPACE(*d) && len; --len, ++d) {
3856 "Possible attempt to separate words with commas");
3859 else if (*d == '#') {
3861 "Possible attempt to put comments in qw() list");
3867 for (; !isSPACE(*d) && len; --len, ++d) ;
3869 words = append_elem(OP_LIST, words,
3870 newSVOP(OP_CONST, 0, newSVpvn(b, d-b)));
3874 PL_nextval[PL_nexttoke].opval = words;
3879 SvREFCNT_dec(PL_lex_stuff);
3880 PL_lex_stuff = Nullsv;
3887 missingterm((char*)0);
3888 yylval.ival = OP_STRINGIFY;
3889 if (SvIVX(PL_lex_stuff) == '\'')
3890 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
3891 TERM(sublex_start());
3894 s = scan_pat(s,OP_QR);
3895 TERM(sublex_start());
3900 missingterm((char*)0);
3901 yylval.ival = OP_BACKTICK;
3903 TERM(sublex_start());
3909 *PL_tokenbuf = '\0';
3910 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3911 if (isIDFIRST_lazy(PL_tokenbuf))
3912 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
3914 yyerror("<> should be quotes");
3921 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3925 LOP(OP_RENAME,XTERM);
3934 LOP(OP_RINDEX,XTERM);
3957 LOP(OP_REVERSE,XTERM);
3968 TERM(sublex_start());
3970 TOKEN(1); /* force error */
3979 LOP(OP_SELECT,XTERM);
3985 LOP(OP_SEMCTL,XTERM);
3988 LOP(OP_SEMGET,XTERM);
3991 LOP(OP_SEMOP,XTERM);
3997 LOP(OP_SETPGRP,XTERM);
3999 case KEY_setpriority:
4000 LOP(OP_SETPRIORITY,XTERM);
4002 case KEY_sethostent:
4008 case KEY_setservent:
4011 case KEY_setprotoent:
4021 LOP(OP_SEEKDIR,XTERM);
4023 case KEY_setsockopt:
4024 LOP(OP_SSOCKOPT,XTERM);
4030 LOP(OP_SHMCTL,XTERM);
4033 LOP(OP_SHMGET,XTERM);
4036 LOP(OP_SHMREAD,XTERM);
4039 LOP(OP_SHMWRITE,XTERM);
4042 LOP(OP_SHUTDOWN,XTERM);
4051 LOP(OP_SOCKET,XTERM);
4053 case KEY_socketpair:
4054 LOP(OP_SOCKPAIR,XTERM);
4057 checkcomma(s,PL_tokenbuf,"subroutine name");
4059 if (*s == ';' || *s == ')') /* probably a close */
4060 croak("sort is now a reserved word");
4062 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4066 LOP(OP_SPLIT,XTERM);
4069 LOP(OP_SPRINTF,XTERM);
4072 LOP(OP_SPLICE,XTERM);
4088 LOP(OP_SUBSTR,XTERM);
4095 if (isIDFIRST_lazy(s) || *s == '\'' || *s == ':') {
4096 char tmpbuf[sizeof PL_tokenbuf];
4098 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4099 if (strchr(tmpbuf, ':'))
4100 sv_setpv(PL_subname, tmpbuf);
4102 sv_setsv(PL_subname,PL_curstname);
4103 sv_catpvn(PL_subname,"::",2);
4104 sv_catpvn(PL_subname,tmpbuf,len);
4106 s = force_word(s,WORD,FALSE,TRUE,TRUE);
4110 PL_expect = XTERMBLOCK;
4111 sv_setpv(PL_subname,"?");
4114 if (tmp == KEY_format) {
4117 PL_lex_formbrack = PL_lex_brackets + 1;
4121 /* Look for a prototype */
4128 SvREFCNT_dec(PL_lex_stuff);
4129 PL_lex_stuff = Nullsv;
4130 croak("Prototype not terminated");
4133 d = SvPVX(PL_lex_stuff);
4135 for (p = d; *p; ++p) {
4140 SvCUR(PL_lex_stuff) = tmp;
4143 PL_nextval[1] = PL_nextval[0];
4144 PL_nexttype[1] = PL_nexttype[0];
4145 PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
4146 PL_nexttype[0] = THING;
4147 if (PL_nexttoke == 1) {
4148 PL_lex_defer = PL_lex_state;
4149 PL_lex_expect = PL_expect;
4150 PL_lex_state = LEX_KNOWNEXT;
4152 PL_lex_stuff = Nullsv;
4155 if (*SvPV(PL_subname,n_a) == '?') {
4156 sv_setpv(PL_subname,"__ANON__");
4163 LOP(OP_SYSTEM,XREF);
4166 LOP(OP_SYMLINK,XTERM);
4169 LOP(OP_SYSCALL,XTERM);
4172 LOP(OP_SYSOPEN,XTERM);
4175 LOP(OP_SYSSEEK,XTERM);
4178 LOP(OP_SYSREAD,XTERM);
4181 LOP(OP_SYSWRITE,XTERM);
4185 TERM(sublex_start());
4206 LOP(OP_TRUNCATE,XTERM);
4218 yylval.ival = PL_curcop->cop_line;
4222 yylval.ival = PL_curcop->cop_line;
4226 LOP(OP_UNLINK,XTERM);
4232 LOP(OP_UNPACK,XTERM);
4235 LOP(OP_UTIME,XTERM);
4238 if (ckWARN(WARN_OCTAL)) {
4239 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4240 if (*d != '0' && isDIGIT(*d))
4241 yywarn("umask: argument is missing initial 0");
4246 LOP(OP_UNSHIFT,XTERM);
4249 if (PL_expect != XSTATE)
4250 yyerror("\"use\" not allowed in expression");
4253 s = force_version(s);
4254 if(*s == ';' || (s = skipspace(s), *s == ';')) {
4255 PL_nextval[PL_nexttoke].opval = Nullop;
4260 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4261 s = force_version(s);
4274 yylval.ival = PL_curcop->cop_line;
4278 PL_hints |= HINT_BLOCK_SCOPE;
4285 LOP(OP_WAITPID,XTERM);
4293 static char ctl_l[2];
4295 if (ctl_l[0] == '\0')
4296 ctl_l[0] = toCTRL('L');
4297 gv_fetchpv(ctl_l,TRUE, SVt_PV);
4300 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
4305 if (PL_expect == XOPERATOR)
4311 yylval.ival = OP_XOR;
4316 TERM(sublex_start());
4322 keyword(register char *d, I32 len)
4327 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
4328 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
4329 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
4330 if (strEQ(d,"__DATA__")) return KEY___DATA__;
4331 if (strEQ(d,"__END__")) return KEY___END__;
4335 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
4340 if (strEQ(d,"and")) return -KEY_and;
4341 if (strEQ(d,"abs")) return -KEY_abs;
4344 if (strEQ(d,"alarm")) return -KEY_alarm;
4345 if (strEQ(d,"atan2")) return -KEY_atan2;
4348 if (strEQ(d,"accept")) return -KEY_accept;
4353 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
4356 if (strEQ(d,"bless")) return -KEY_bless;
4357 if (strEQ(d,"bind")) return -KEY_bind;
4358 if (strEQ(d,"binmode")) return -KEY_binmode;
4361 if (strEQ(d,"CORE")) return -KEY_CORE;
4366 if (strEQ(d,"cmp")) return -KEY_cmp;
4367 if (strEQ(d,"chr")) return -KEY_chr;
4368 if (strEQ(d,"cos")) return -KEY_cos;
4371 if (strEQ(d,"chop")) return KEY_chop;
4374 if (strEQ(d,"close")) return -KEY_close;
4375 if (strEQ(d,"chdir")) return -KEY_chdir;
4376 if (strEQ(d,"chomp")) return KEY_chomp;
4377 if (strEQ(d,"chmod")) return -KEY_chmod;
4378 if (strEQ(d,"chown")) return -KEY_chown;
4379 if (strEQ(d,"crypt")) return -KEY_crypt;
4382 if (strEQ(d,"chroot")) return -KEY_chroot;
4383 if (strEQ(d,"caller")) return -KEY_caller;
4386 if (strEQ(d,"connect")) return -KEY_connect;
4389 if (strEQ(d,"closedir")) return -KEY_closedir;
4390 if (strEQ(d,"continue")) return -KEY_continue;
4395 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
4400 if (strEQ(d,"do")) return KEY_do;
4403 if (strEQ(d,"die")) return -KEY_die;
4406 if (strEQ(d,"dump")) return -KEY_dump;
4409 if (strEQ(d,"delete")) return KEY_delete;
4412 if (strEQ(d,"defined")) return KEY_defined;
4413 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
4416 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
4421 if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
4422 if (strEQ(d,"END")) return KEY_END;
4427 if (strEQ(d,"eq")) return -KEY_eq;
4430 if (strEQ(d,"eof")) return -KEY_eof;
4431 if (strEQ(d,"exp")) return -KEY_exp;
4434 if (strEQ(d,"else")) return KEY_else;
4435 if (strEQ(d,"exit")) return -KEY_exit;
4436 if (strEQ(d,"eval")) return KEY_eval;
4437 if (strEQ(d,"exec")) return -KEY_exec;
4438 if (strEQ(d,"each")) return KEY_each;
4441 if (strEQ(d,"elsif")) return KEY_elsif;
4444 if (strEQ(d,"exists")) return KEY_exists;
4445 if (strEQ(d,"elseif")) warn("elseif should be elsif");
4448 if (strEQ(d,"endgrent")) return -KEY_endgrent;
4449 if (strEQ(d,"endpwent")) return -KEY_endpwent;
4452 if (strEQ(d,"endnetent")) return -KEY_endnetent;
4455 if (strEQ(d,"endhostent")) return -KEY_endhostent;
4456 if (strEQ(d,"endservent")) return -KEY_endservent;
4459 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
4466 if (strEQ(d,"for")) return KEY_for;
4469 if (strEQ(d,"fork")) return -KEY_fork;
4472 if (strEQ(d,"fcntl")) return -KEY_fcntl;
4473 if (strEQ(d,"flock")) return -KEY_flock;
4476 if (strEQ(d,"format")) return KEY_format;
4477 if (strEQ(d,"fileno")) return -KEY_fileno;
4480 if (strEQ(d,"foreach")) return KEY_foreach;
4483 if (strEQ(d,"formline")) return -KEY_formline;
4489 if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
4490 if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
4494 if (strnEQ(d,"get",3)) {
4499 if (strEQ(d,"ppid")) return -KEY_getppid;
4500 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
4503 if (strEQ(d,"pwent")) return -KEY_getpwent;
4504 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
4505 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
4508 if (strEQ(d,"peername")) return -KEY_getpeername;
4509 if (strEQ(d,"protoent")) return -KEY_getprotoent;
4510 if (strEQ(d,"priority")) return -KEY_getpriority;
4513 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
4516 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
4520 else if (*d == 'h') {
4521 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
4522 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
4523 if (strEQ(d,"hostent")) return -KEY_gethostent;
4525 else if (*d == 'n') {
4526 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
4527 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
4528 if (strEQ(d,"netent")) return -KEY_getnetent;
4530 else if (*d == 's') {
4531 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
4532 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
4533 if (strEQ(d,"servent")) return -KEY_getservent;
4534 if (strEQ(d,"sockname")) return -KEY_getsockname;
4535 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
4537 else if (*d == 'g') {
4538 if (strEQ(d,"grent")) return -KEY_getgrent;
4539 if (strEQ(d,"grnam")) return -KEY_getgrnam;
4540 if (strEQ(d,"grgid")) return -KEY_getgrgid;
4542 else if (*d == 'l') {
4543 if (strEQ(d,"login")) return -KEY_getlogin;
4545 else if (strEQ(d,"c")) return -KEY_getc;
4550 if (strEQ(d,"gt")) return -KEY_gt;
4551 if (strEQ(d,"ge")) return -KEY_ge;
4554 if (strEQ(d,"grep")) return KEY_grep;
4555 if (strEQ(d,"goto")) return KEY_goto;
4556 if (strEQ(d,"glob")) return KEY_glob;
4559 if (strEQ(d,"gmtime")) return -KEY_gmtime;
4564 if (strEQ(d,"hex")) return -KEY_hex;
4567 if (strEQ(d,"INIT")) return KEY_INIT;
4572 if (strEQ(d,"if")) return KEY_if;
4575 if (strEQ(d,"int")) return -KEY_int;
4578 if (strEQ(d,"index")) return -KEY_index;
4579 if (strEQ(d,"ioctl")) return -KEY_ioctl;
4584 if (strEQ(d,"join")) return -KEY_join;
4588 if (strEQ(d,"keys")) return KEY_keys;
4589 if (strEQ(d,"kill")) return -KEY_kill;
4594 if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
4595 if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
4601 if (strEQ(d,"lt")) return -KEY_lt;
4602 if (strEQ(d,"le")) return -KEY_le;
4603 if (strEQ(d,"lc")) return -KEY_lc;
4606 if (strEQ(d,"log")) return -KEY_log;
4609 if (strEQ(d,"last")) return KEY_last;
4610 if (strEQ(d,"link")) return -KEY_link;
4611 if (strEQ(d,"lock")) return -KEY_lock;
4614 if (strEQ(d,"local")) return KEY_local;
4615 if (strEQ(d,"lstat")) return -KEY_lstat;
4618 if (strEQ(d,"length")) return -KEY_length;
4619 if (strEQ(d,"listen")) return -KEY_listen;
4622 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
4625 if (strEQ(d,"localtime")) return -KEY_localtime;
4631 case 1: return KEY_m;
4633 if (strEQ(d,"my")) return KEY_my;
4636 if (strEQ(d,"map")) return KEY_map;
4639 if (strEQ(d,"mkdir")) return -KEY_mkdir;
4642 if (strEQ(d,"msgctl")) return -KEY_msgctl;
4643 if (strEQ(d,"msgget")) return -KEY_msgget;
4644 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
4645 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
4650 if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
4653 if (strEQ(d,"next")) return KEY_next;
4654 if (strEQ(d,"ne")) return -KEY_ne;
4655 if (strEQ(d,"not")) return -KEY_not;
4656 if (strEQ(d,"no")) return KEY_no;
4661 if (strEQ(d,"or")) return -KEY_or;
4664 if (strEQ(d,"ord")) return -KEY_ord;
4665 if (strEQ(d,"oct")) return -KEY_oct;
4666 if (strEQ(d,"our")) { deprecate("reserved word \"our\"");
4670 if (strEQ(d,"open")) return -KEY_open;
4673 if (strEQ(d,"opendir")) return -KEY_opendir;
4680 if (strEQ(d,"pop")) return KEY_pop;
4681 if (strEQ(d,"pos")) return KEY_pos;
4684 if (strEQ(d,"push")) return KEY_push;
4685 if (strEQ(d,"pack")) return -KEY_pack;
4686 if (strEQ(d,"pipe")) return -KEY_pipe;
4689 if (strEQ(d,"print")) return KEY_print;
4692 if (strEQ(d,"printf")) return KEY_printf;
4695 if (strEQ(d,"package")) return KEY_package;
4698 if (strEQ(d,"prototype")) return KEY_prototype;
4703 if (strEQ(d,"q")) return KEY_q;
4704 if (strEQ(d,"qr")) return KEY_qr;
4705 if (strEQ(d,"qq")) return KEY_qq;
4706 if (strEQ(d,"qw")) return KEY_qw;
4707 if (strEQ(d,"qx")) return KEY_qx;
4709 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
4714 if (strEQ(d,"ref")) return -KEY_ref;
4717 if (strEQ(d,"read")) return -KEY_read;
4718 if (strEQ(d,"rand")) return -KEY_rand;
4719 if (strEQ(d,"recv")) return -KEY_recv;
4720 if (strEQ(d,"redo")) return KEY_redo;
4723 if (strEQ(d,"rmdir")) return -KEY_rmdir;
4724 if (strEQ(d,"reset")) return -KEY_reset;
4727 if (strEQ(d,"return")) return KEY_return;
4728 if (strEQ(d,"rename")) return -KEY_rename;
4729 if (strEQ(d,"rindex")) return -KEY_rindex;
4732 if (strEQ(d,"require")) return -KEY_require;
4733 if (strEQ(d,"reverse")) return -KEY_reverse;
4734 if (strEQ(d,"readdir")) return -KEY_readdir;
4737 if (strEQ(d,"readlink")) return -KEY_readlink;
4738 if (strEQ(d,"readline")) return -KEY_readline;
4739 if (strEQ(d,"readpipe")) return -KEY_readpipe;
4742 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
4748 case 0: return KEY_s;
4750 if (strEQ(d,"scalar")) return KEY_scalar;
4755 if (strEQ(d,"seek")) return -KEY_seek;
4756 if (strEQ(d,"send")) return -KEY_send;
4759 if (strEQ(d,"semop")) return -KEY_semop;
4762 if (strEQ(d,"select")) return -KEY_select;
4763 if (strEQ(d,"semctl")) return -KEY_semctl;
4764 if (strEQ(d,"semget")) return -KEY_semget;
4767 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
4768 if (strEQ(d,"seekdir")) return -KEY_seekdir;
4771 if (strEQ(d,"setpwent")) return -KEY_setpwent;
4772 if (strEQ(d,"setgrent")) return -KEY_setgrent;
4775 if (strEQ(d,"setnetent")) return -KEY_setnetent;
4778 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
4779 if (strEQ(d,"sethostent")) return -KEY_sethostent;
4780 if (strEQ(d,"setservent")) return -KEY_setservent;
4783 if (strEQ(d,"setpriority")) return -KEY_setpriority;
4784 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
4791 if (strEQ(d,"shift")) return KEY_shift;
4794 if (strEQ(d,"shmctl")) return -KEY_shmctl;
4795 if (strEQ(d,"shmget")) return -KEY_shmget;
4798 if (strEQ(d,"shmread")) return -KEY_shmread;
4801 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
4802 if (strEQ(d,"shutdown")) return -KEY_shutdown;
4807 if (strEQ(d,"sin")) return -KEY_sin;
4810 if (strEQ(d,"sleep")) return -KEY_sleep;
4813 if (strEQ(d,"sort")) return KEY_sort;
4814 if (strEQ(d,"socket")) return -KEY_socket;
4815 if (strEQ(d,"socketpair")) return -KEY_socketpair;
4818 if (strEQ(d,"split")) return KEY_split;
4819 if (strEQ(d,"sprintf")) return -KEY_sprintf;
4820 if (strEQ(d,"splice")) return KEY_splice;
4823 if (strEQ(d,"sqrt")) return -KEY_sqrt;
4826 if (strEQ(d,"srand")) return -KEY_srand;
4829 if (strEQ(d,"stat")) return -KEY_stat;
4830 if (strEQ(d,"study")) return KEY_study;
4833 if (strEQ(d,"substr")) return -KEY_substr;
4834 if (strEQ(d,"sub")) return KEY_sub;
4839 if (strEQ(d,"system")) return -KEY_system;
4842 if (strEQ(d,"symlink")) return -KEY_symlink;
4843 if (strEQ(d,"syscall")) return -KEY_syscall;
4844 if (strEQ(d,"sysopen")) return -KEY_sysopen;
4845 if (strEQ(d,"sysread")) return -KEY_sysread;
4846 if (strEQ(d,"sysseek")) return -KEY_sysseek;
4849 if (strEQ(d,"syswrite")) return -KEY_syswrite;
4858 if (strEQ(d,"tr")) return KEY_tr;
4861 if (strEQ(d,"tie")) return KEY_tie;
4864 if (strEQ(d,"tell")) return -KEY_tell;
4865 if (strEQ(d,"tied")) return KEY_tied;
4866 if (strEQ(d,"time")) return -KEY_time;
4869 if (strEQ(d,"times")) return -KEY_times;
4872 if (strEQ(d,"telldir")) return -KEY_telldir;
4875 if (strEQ(d,"truncate")) return -KEY_truncate;
4882 if (strEQ(d,"uc")) return -KEY_uc;
4885 if (strEQ(d,"use")) return KEY_use;
4888 if (strEQ(d,"undef")) return KEY_undef;
4889 if (strEQ(d,"until")) return KEY_until;
4890 if (strEQ(d,"untie")) return KEY_untie;
4891 if (strEQ(d,"utime")) return -KEY_utime;
4892 if (strEQ(d,"umask")) return -KEY_umask;
4895 if (strEQ(d,"unless")) return KEY_unless;
4896 if (strEQ(d,"unpack")) return -KEY_unpack;
4897 if (strEQ(d,"unlink")) return -KEY_unlink;
4900 if (strEQ(d,"unshift")) return KEY_unshift;
4901 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
4906 if (strEQ(d,"values")) return -KEY_values;
4907 if (strEQ(d,"vec")) return -KEY_vec;
4912 if (strEQ(d,"warn")) return -KEY_warn;
4913 if (strEQ(d,"wait")) return -KEY_wait;
4916 if (strEQ(d,"while")) return KEY_while;
4917 if (strEQ(d,"write")) return -KEY_write;
4920 if (strEQ(d,"waitpid")) return -KEY_waitpid;
4923 if (strEQ(d,"wantarray")) return -KEY_wantarray;
4928 if (len == 1) return -KEY_x;
4929 if (strEQ(d,"xor")) return -KEY_xor;
4932 if (len == 1) return KEY_y;
4941 checkcomma(register char *s, char *name, char *what)
4945 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
4946 dTHR; /* only for ckWARN */
4947 if (ckWARN(WARN_SYNTAX)) {
4949 for (w = s+2; *w && level; w++) {
4956 for (; *w && isSPACE(*w); w++) ;
4957 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
4958 warner(WARN_SYNTAX, "%s (...) interpreted as function",name);
4961 while (s < PL_bufend && isSPACE(*s))
4965 while (s < PL_bufend && isSPACE(*s))
4967 if (isIDFIRST_lazy(s)) {
4969 while (isALNUM_lazy(s))
4971 while (s < PL_bufend && isSPACE(*s))
4976 kw = keyword(w, s - w) || perl_get_cv(w, FALSE) != 0;
4980 croak("No comma allowed after %s", what);
4986 new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
4989 HV *table = GvHV(PL_hintgv); /* ^H */
4992 bool oldcatch = CATCH_GET;
4997 yyerror("%^H is not defined");
5000 cvp = hv_fetch(table, key, strlen(key), FALSE);
5001 if (!cvp || !SvOK(*cvp)) {
5003 sprintf(buf,"$^H{%s} is not defined", key);
5007 sv_2mortal(sv); /* Parent created it permanently */
5010 pv = sv_2mortal(newSVpv(s, len));
5012 typesv = sv_2mortal(newSVpv(type, 0));
5014 typesv = &PL_sv_undef;
5016 Zero(&myop, 1, BINOP);
5017 myop.op_last = (OP *) &myop;
5018 myop.op_next = Nullop;
5019 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
5021 PUSHSTACKi(PERLSI_OVERLOAD);
5024 PL_op = (OP *) &myop;
5025 if (PERLDB_SUB && PL_curstash != PL_debstash)
5026 PL_op->op_private |= OPpENTERSUB_DB;
5037 if (PL_op = pp_entersub(ARGS))
5044 CATCH_SET(oldcatch);
5049 sprintf(buf,"Call to &{$^H{%s}} did not return a defined value", key);
5052 return SvREFCNT_inc(res);
5056 scan_word(register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
5058 register char *d = dest;
5059 register char *e = d + destlen - 3; /* two-character token, ending NUL */
5062 croak(ident_too_long);
5063 if (isALNUM(*s)) /* UTF handled below */
5065 else if (*s == '\'' && allow_package && isIDFIRST_lazy(s+1)) {
5070 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
5074 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5075 char *t = s + UTF8SKIP(s);
5076 while (*t & 0x80 && is_utf8_mark((U8*)t))
5078 if (d + (t - s) > e)
5079 croak(ident_too_long);
5080 Copy(s, d, t - s, char);
5093 scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
5100 if (PL_lex_brackets == 0)
5101 PL_lex_fakebrack = 0;
5105 e = d + destlen - 3; /* two-character token, ending NUL */
5107 while (isDIGIT(*s)) {
5109 croak(ident_too_long);
5116 croak(ident_too_long);
5117 if (isALNUM(*s)) /* UTF handled below */
5119 else if (*s == '\'' && isIDFIRST_lazy(s+1)) {
5124 else if (*s == ':' && s[1] == ':') {
5128 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5129 char *t = s + UTF8SKIP(s);
5130 while (*t & 0x80 && is_utf8_mark((U8*)t))
5132 if (d + (t - s) > e)
5133 croak(ident_too_long);
5134 Copy(s, d, t - s, char);
5145 if (PL_lex_state != LEX_NORMAL)
5146 PL_lex_state = LEX_INTERPENDMAYBE;
5149 if (*s == '$' && s[1] &&
5150 (isALNUM_lazy(s+1) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
5163 if (*d == '^' && *s && (isUPPER(*s) || strchr("[\\]^_?", *s))) {
5168 if (isSPACE(s[-1])) {
5171 if (ch != ' ' && ch != '\t') {
5177 if (isIDFIRST_lazy(d)) {
5181 while (e < send && isALNUM_lazy(e) || *e == ':') {
5183 while (e < send && *e & 0x80 && is_utf8_mark((U8*)e))
5186 Copy(s, d, e - s, char);
5191 while (isALNUM(*s) || *s == ':')
5195 while (s < send && (*s == ' ' || *s == '\t')) s++;
5196 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
5197 dTHR; /* only for ckWARN */
5198 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
5199 char *brack = *s == '[' ? "[...]" : "{...}";
5200 warner(WARN_AMBIGUOUS,
5201 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
5202 funny, dest, brack, funny, dest, brack);
5204 PL_lex_fakebrack = PL_lex_brackets+1;
5206 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5212 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
5213 PL_lex_state = LEX_INTERPEND;
5216 if (PL_lex_state == LEX_NORMAL) {
5217 dTHR; /* only for ckWARN */
5218 if (ckWARN(WARN_AMBIGUOUS) &&
5219 (keyword(dest, d - dest) || perl_get_cv(dest, FALSE)))
5221 warner(WARN_AMBIGUOUS,
5222 "Ambiguous use of %c{%s} resolved to %c%s",
5223 funny, dest, funny, dest);
5228 s = bracket; /* let the parser handle it */
5232 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
5233 PL_lex_state = LEX_INTERPEND;
5237 void pmflag(U16 *pmfl, int ch)
5242 *pmfl |= PMf_GLOBAL;
5244 *pmfl |= PMf_CONTINUE;
5248 *pmfl |= PMf_MULTILINE;
5250 *pmfl |= PMf_SINGLELINE;
5252 *pmfl |= PMf_EXTENDED;
5256 scan_pat(char *start, I32 type)
5261 s = scan_str(start);
5264 SvREFCNT_dec(PL_lex_stuff);
5265 PL_lex_stuff = Nullsv;
5266 croak("Search pattern not terminated");
5269 pm = (PMOP*)newPMOP(type, 0);
5270 if (PL_multi_open == '?')
5271 pm->op_pmflags |= PMf_ONCE;
5273 while (*s && strchr("iomsx", *s))
5274 pmflag(&pm->op_pmflags,*s++);
5277 while (*s && strchr("iogcmsx", *s))
5278 pmflag(&pm->op_pmflags,*s++);
5280 pm->op_pmpermflags = pm->op_pmflags;
5282 PL_lex_op = (OP*)pm;
5283 yylval.ival = OP_MATCH;
5288 scan_subst(char *start)
5295 yylval.ival = OP_NULL;
5297 s = scan_str(start);
5301 SvREFCNT_dec(PL_lex_stuff);
5302 PL_lex_stuff = Nullsv;
5303 croak("Substitution pattern not terminated");
5306 if (s[-1] == PL_multi_open)
5309 first_start = PL_multi_start;
5313 SvREFCNT_dec(PL_lex_stuff);
5314 PL_lex_stuff = Nullsv;
5316 SvREFCNT_dec(PL_lex_repl);
5317 PL_lex_repl = Nullsv;
5318 croak("Substitution replacement not terminated");
5320 PL_multi_start = first_start; /* so whole substitution is taken together */
5322 pm = (PMOP*)newPMOP(OP_SUBST, 0);
5328 else if (strchr("iogcmsx", *s))
5329 pmflag(&pm->op_pmflags,*s++);
5336 pm->op_pmflags |= PMf_EVAL;
5337 repl = newSVpv("",0);
5339 sv_catpv(repl, es ? "eval " : "do ");
5340 sv_catpvn(repl, "{ ", 2);
5341 sv_catsv(repl, PL_lex_repl);
5342 sv_catpvn(repl, " };", 2);
5343 SvCOMPILED_on(repl);
5344 SvREFCNT_dec(PL_lex_repl);
5348 pm->op_pmpermflags = pm->op_pmflags;
5349 PL_lex_op = (OP*)pm;
5350 yylval.ival = OP_SUBST;
5355 scan_trans(char *start)
5366 yylval.ival = OP_NULL;
5368 s = scan_str(start);
5371 SvREFCNT_dec(PL_lex_stuff);
5372 PL_lex_stuff = Nullsv;
5373 croak("Transliteration pattern not terminated");
5375 if (s[-1] == PL_multi_open)
5381 SvREFCNT_dec(PL_lex_stuff);
5382 PL_lex_stuff = Nullsv;
5384 SvREFCNT_dec(PL_lex_repl);
5385 PL_lex_repl = Nullsv;
5386 croak("Transliteration replacement not terminated");
5390 o = newSVOP(OP_TRANS, 0, 0);
5391 utf8 = OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF;
5394 New(803,tbl,256,short);
5395 o = newPVOP(OP_TRANS, 0, (char*)tbl);
5399 complement = del = squash = 0;
5400 while (strchr("cdsCU", *s)) {
5402 complement = OPpTRANS_COMPLEMENT;
5404 del = OPpTRANS_DELETE;
5406 squash = OPpTRANS_SQUASH;
5411 utf8 &= ~OPpTRANS_FROM_UTF;
5413 utf8 |= OPpTRANS_FROM_UTF;
5417 utf8 &= ~OPpTRANS_TO_UTF;
5419 utf8 |= OPpTRANS_TO_UTF;
5422 croak("Too many /C and /U options");
5427 o->op_private = del|squash|complement|utf8;
5430 yylval.ival = OP_TRANS;
5435 scan_heredoc(register char *s)
5439 I32 op_type = OP_SCALAR;
5446 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
5450 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
5453 for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
5454 if (*peek && strchr("`'\"",*peek)) {
5457 s = delimcpy(d, e, s, PL_bufend, term, &len);
5467 if (!isALNUM_lazy(s))
5468 deprecate("bare << to mean <<\"\"");
5469 for (; isALNUM_lazy(s); s++) {
5474 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
5475 croak("Delimiter for here document is too long");
5478 len = d - PL_tokenbuf;
5479 #ifndef PERL_STRICT_CR
5480 d = strchr(s, '\r');
5484 while (s < PL_bufend) {
5490 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
5499 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5504 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
5505 herewas = newSVpv(s,PL_bufend-s);
5507 s--, herewas = newSVpv(s,d-s);
5508 s += SvCUR(herewas);
5510 tmpstr = NEWSV(87,79);
5511 sv_upgrade(tmpstr, SVt_PVIV);
5516 else if (term == '`') {
5517 op_type = OP_BACKTICK;
5518 SvIVX(tmpstr) = '\\';
5522 PL_multi_start = PL_curcop->cop_line;
5523 PL_multi_open = PL_multi_close = '<';
5524 term = *PL_tokenbuf;
5527 while (s < PL_bufend &&
5528 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5530 PL_curcop->cop_line++;
5532 if (s >= PL_bufend) {
5533 PL_curcop->cop_line = PL_multi_start;
5534 missingterm(PL_tokenbuf);
5536 sv_setpvn(tmpstr,d+1,s-d);
5538 PL_curcop->cop_line++; /* the preceding stmt passes a newline */
5540 sv_catpvn(herewas,s,PL_bufend-s);
5541 sv_setsv(PL_linestr,herewas);
5542 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
5543 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5546 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
5547 while (s >= PL_bufend) { /* multiple line string? */
5549 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5550 PL_curcop->cop_line = PL_multi_start;
5551 missingterm(PL_tokenbuf);
5553 PL_curcop->cop_line++;
5554 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5555 #ifndef PERL_STRICT_CR
5556 if (PL_bufend - PL_linestart >= 2) {
5557 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
5558 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
5560 PL_bufend[-2] = '\n';
5562 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5564 else if (PL_bufend[-1] == '\r')
5565 PL_bufend[-1] = '\n';
5567 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
5568 PL_bufend[-1] = '\n';
5570 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5571 SV *sv = NEWSV(88,0);
5573 sv_upgrade(sv, SVt_PVMG);
5574 sv_setsv(sv,PL_linestr);
5575 av_store(GvAV(PL_curcop->cop_filegv),
5576 (I32)PL_curcop->cop_line,sv);
5578 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
5581 sv_catsv(PL_linestr,herewas);
5582 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5586 sv_catsv(tmpstr,PL_linestr);
5589 PL_multi_end = PL_curcop->cop_line;
5591 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
5592 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
5593 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
5595 SvREFCNT_dec(herewas);
5596 PL_lex_stuff = tmpstr;
5597 yylval.ival = op_type;
5602 takes: current position in input buffer
5603 returns: new position in input buffer
5604 side-effects: yylval and lex_op are set.
5609 <FH> read from filehandle
5610 <pkg::FH> read from package qualified filehandle
5611 <pkg'FH> read from package qualified filehandle
5612 <$fh> read from filehandle in $fh
5618 scan_inputsymbol(char *start)
5620 register char *s = start; /* current position in buffer */
5625 d = PL_tokenbuf; /* start of temp holding space */
5626 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
5627 s = delimcpy(d, e, s + 1, PL_bufend, '>', &len); /* extract until > */
5629 /* die if we didn't have space for the contents of the <>,
5633 if (len >= sizeof PL_tokenbuf)
5634 croak("Excessively long <> operator");
5636 croak("Unterminated <> operator");
5641 Remember, only scalar variables are interpreted as filehandles by
5642 this code. Anything more complex (e.g., <$fh{$num}>) will be
5643 treated as a glob() call.
5644 This code makes use of the fact that except for the $ at the front,
5645 a scalar variable and a filehandle look the same.
5647 if (*d == '$' && d[1]) d++;
5649 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
5650 while (*d && (isALNUM_lazy(d) || *d == '\'' || *d == ':'))
5653 /* If we've tried to read what we allow filehandles to look like, and
5654 there's still text left, then it must be a glob() and not a getline.
5655 Use scan_str to pull out the stuff between the <> and treat it
5656 as nothing more than a string.
5659 if (d - PL_tokenbuf != len) {
5660 yylval.ival = OP_GLOB;
5662 s = scan_str(start);
5664 croak("Glob not terminated");
5668 /* we're in a filehandle read situation */
5671 /* turn <> into <ARGV> */
5673 (void)strcpy(d,"ARGV");
5675 /* if <$fh>, create the ops to turn the variable into a
5681 /* try to find it in the pad for this block, otherwise find
5682 add symbol table ops
5684 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
5685 OP *o = newOP(OP_PADSV, 0);
5687 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
5690 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
5691 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
5692 newUNOP(OP_RV2SV, 0,
5693 newGVOP(OP_GV, 0, gv)));
5695 PL_lex_op->op_flags |= OPf_SPECIAL;
5696 /* we created the ops in PL_lex_op, so make yylval.ival a null op */
5697 yylval.ival = OP_NULL;
5700 /* If it's none of the above, it must be a literal filehandle
5701 (<Foo::BAR> or <FOO>) so build a simple readline OP */
5703 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
5704 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
5705 yylval.ival = OP_NULL;
5714 takes: start position in buffer
5715 returns: position to continue reading from buffer
5716 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
5717 updates the read buffer.
5719 This subroutine pulls a string out of the input. It is called for:
5720 q single quotes q(literal text)
5721 ' single quotes 'literal text'
5722 qq double quotes qq(interpolate $here please)
5723 " double quotes "interpolate $here please"
5724 qx backticks qx(/bin/ls -l)
5725 ` backticks `/bin/ls -l`
5726 qw quote words @EXPORT_OK = qw( func() $spam )
5727 m// regexp match m/this/
5728 s/// regexp substitute s/this/that/
5729 tr/// string transliterate tr/this/that/
5730 y/// string transliterate y/this/that/
5731 ($*@) sub prototypes sub foo ($)
5732 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
5734 In most of these cases (all but <>, patterns and transliterate)
5735 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
5736 calls scan_str(). s/// makes yylex() call scan_subst() which calls
5737 scan_str(). tr/// and y/// make yylex() call scan_trans() which
5740 It skips whitespace before the string starts, and treats the first
5741 character as the delimiter. If the delimiter is one of ([{< then
5742 the corresponding "close" character )]}> is used as the closing
5743 delimiter. It allows quoting of delimiters, and if the string has
5744 balanced delimiters ([{<>}]) it allows nesting.
5746 The lexer always reads these strings into lex_stuff, except in the
5747 case of the operators which take *two* arguments (s/// and tr///)
5748 when it checks to see if lex_stuff is full (presumably with the 1st
5749 arg to s or tr) and if so puts the string into lex_repl.
5754 scan_str(char *start)
5757 SV *sv; /* scalar value: string */
5758 char *tmps; /* temp string, used for delimiter matching */
5759 register char *s = start; /* current position in the buffer */
5760 register char term; /* terminating character */
5761 register char *to; /* current position in the sv's data */
5762 I32 brackets = 1; /* bracket nesting level */
5764 /* skip space before the delimiter */
5768 /* mark where we are, in case we need to report errors */
5771 /* after skipping whitespace, the next character is the terminator */
5773 /* mark where we are */
5774 PL_multi_start = PL_curcop->cop_line;
5775 PL_multi_open = term;
5777 /* find corresponding closing delimiter */
5778 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
5780 PL_multi_close = term;
5782 /* create a new SV to hold the contents. 87 is leak category, I'm
5783 assuming. 79 is the SV's initial length. What a random number. */
5785 sv_upgrade(sv, SVt_PVIV);
5787 (void)SvPOK_only(sv); /* validate pointer */
5789 /* move past delimiter and try to read a complete string */
5792 /* extend sv if need be */
5793 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
5794 /* set 'to' to the next character in the sv's string */
5795 to = SvPVX(sv)+SvCUR(sv);
5797 /* if open delimiter is the close delimiter read unbridle */
5798 if (PL_multi_open == PL_multi_close) {
5799 for (; s < PL_bufend; s++,to++) {
5800 /* embedded newlines increment the current line number */
5801 if (*s == '\n' && !PL_rsfp)
5802 PL_curcop->cop_line++;
5803 /* handle quoted delimiters */
5804 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
5807 /* any other quotes are simply copied straight through */
5811 /* terminate when run out of buffer (the for() condition), or
5812 have found the terminator */
5813 else if (*s == term)
5819 /* if the terminator isn't the same as the start character (e.g.,
5820 matched brackets), we have to allow more in the quoting, and
5821 be prepared for nested brackets.
5824 /* read until we run out of string, or we find the terminator */
5825 for (; s < PL_bufend; s++,to++) {
5826 /* embedded newlines increment the line count */
5827 if (*s == '\n' && !PL_rsfp)
5828 PL_curcop->cop_line++;
5829 /* backslashes can escape the open or closing characters */
5830 if (*s == '\\' && s+1 < PL_bufend) {
5831 if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))
5836 /* allow nested opens and closes */
5837 else if (*s == PL_multi_close && --brackets <= 0)
5839 else if (*s == PL_multi_open)
5844 /* terminate the copied string and update the sv's end-of-string */
5846 SvCUR_set(sv, to - SvPVX(sv));
5849 * this next chunk reads more into the buffer if we're not done yet
5852 if (s < PL_bufend) break; /* handle case where we are done yet :-) */
5854 #ifndef PERL_STRICT_CR
5855 if (to - SvPVX(sv) >= 2) {
5856 if ((to[-2] == '\r' && to[-1] == '\n') ||
5857 (to[-2] == '\n' && to[-1] == '\r'))
5861 SvCUR_set(sv, to - SvPVX(sv));
5863 else if (to[-1] == '\r')
5866 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
5870 /* if we're out of file, or a read fails, bail and reset the current
5871 line marker so we can report where the unterminated string began
5874 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5876 PL_curcop->cop_line = PL_multi_start;
5879 /* we read a line, so increment our line counter */
5880 PL_curcop->cop_line++;
5882 /* update debugger info */
5883 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5884 SV *sv = NEWSV(88,0);
5886 sv_upgrade(sv, SVt_PVMG);
5887 sv_setsv(sv,PL_linestr);
5888 av_store(GvAV(PL_curcop->cop_filegv),
5889 (I32)PL_curcop->cop_line, sv);
5892 /* having changed the buffer, we must update PL_bufend */
5893 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5896 /* at this point, we have successfully read the delimited string */
5898 PL_multi_end = PL_curcop->cop_line;
5901 /* if we allocated too much space, give some back */
5902 if (SvCUR(sv) + 5 < SvLEN(sv)) {
5903 SvLEN_set(sv, SvCUR(sv) + 1);
5904 Renew(SvPVX(sv), SvLEN(sv), char);
5907 /* decide whether this is the first or second quoted string we've read
5920 takes: pointer to position in buffer
5921 returns: pointer to new position in buffer
5922 side-effects: builds ops for the constant in yylval.op
5924 Read a number in any of the formats that Perl accepts:
5926 0(x[0-7A-F]+)|([0-7]+)|(b[01])
5927 [\d_]+(\.[\d_]*)?[Ee](\d+)
5929 Underbars (_) are allowed in decimal numbers. If -w is on,
5930 underbars before a decimal point must be at three digit intervals.
5932 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
5935 If it reads a number without a decimal point or an exponent, it will
5936 try converting the number to an integer and see if it can do so
5937 without loss of precision.
5941 scan_num(char *start)
5943 register char *s = start; /* current position in buffer */
5944 register char *d; /* destination in temp buffer */
5945 register char *e; /* end of temp buffer */
5946 I32 tryiv; /* used to see if it can be an int */
5947 double value; /* number read, as a double */
5948 SV *sv; /* place to put the converted number */
5949 I32 floatit; /* boolean: int or float? */
5950 char *lastub = 0; /* position of last underbar */
5951 static char number_too_long[] = "Number too long";
5953 /* We use the first character to decide what type of number this is */
5957 croak("panic: scan_num");
5959 /* if it starts with a 0, it could be an octal number, a decimal in
5960 0.13 disguise, or a hexadecimal number, or a binary number.
5965 u holds the "number so far"
5966 shift the power of 2 of the base
5967 (hex == 4, octal == 3, binary == 1)
5968 overflowed was the number more than we can hold?
5970 Shift is used when we add a digit. It also serves as an "are
5971 we in octal/hex/binary?" indicator to disallow hex characters
5976 bool overflowed = FALSE;
5982 } else if (s[1] == 'b') {
5986 /* check for a decimal in disguise */
5987 else if (s[1] == '.')
5989 /* so it must be octal */
5994 /* read the rest of the number */
5996 UV n, b; /* n is used in the overflow test, b is the digit we're adding on */
6000 /* if we don't mention it, we're done */
6009 /* 8 and 9 are not octal */
6012 yyerror("Illegal octal digit");
6015 yyerror("Illegal binary digit");
6019 case '2': case '3': case '4':
6020 case '5': case '6': case '7':
6022 yyerror("Illegal binary digit");
6026 b = *s++ & 15; /* ASCII digit -> value of digit */
6030 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
6031 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
6032 /* make sure they said 0x */
6037 /* Prepare to put the digit we have onto the end
6038 of the number so far. We check for overflows.
6042 n = u << shift; /* make room for the digit */
6043 if (!overflowed && (n >> shift) != u
6044 && !(PL_hints & HINT_NEW_BINARY)) {
6045 warn("Integer overflow in %s number",
6046 (shift == 4) ? "hex"
6047 : ((shift == 3) ? "octal" : "binary"));
6050 u = n | b; /* add the digit to the end */
6055 /* if we get here, we had success: make a scalar value from
6061 if ( PL_hints & HINT_NEW_BINARY)
6062 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
6067 handle decimal numbers.
6068 we're also sent here when we read a 0 as the first digit
6070 case '1': case '2': case '3': case '4': case '5':
6071 case '6': case '7': case '8': case '9': case '.':
6074 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
6077 /* read next group of digits and _ and copy into d */
6078 while (isDIGIT(*s) || *s == '_') {
6079 /* skip underscores, checking for misplaced ones
6083 dTHR; /* only for ckWARN */
6084 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
6085 warner(WARN_SYNTAX, "Misplaced _ in number");
6089 /* check for end of fixed-length buffer */
6091 croak(number_too_long);
6092 /* if we're ok, copy the character */
6097 /* final misplaced underbar check */
6098 if (lastub && s - lastub != 3) {
6100 if (ckWARN(WARN_SYNTAX))
6101 warner(WARN_SYNTAX, "Misplaced _ in number");
6104 /* read a decimal portion if there is one. avoid
6105 3..5 being interpreted as the number 3. followed
6108 if (*s == '.' && s[1] != '.') {
6112 /* copy, ignoring underbars, until we run out of
6113 digits. Note: no misplaced underbar checks!
6115 for (; isDIGIT(*s) || *s == '_'; s++) {
6116 /* fixed length buffer check */
6118 croak(number_too_long);
6124 /* read exponent part, if present */
6125 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
6129 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
6130 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
6132 /* allow positive or negative exponent */
6133 if (*s == '+' || *s == '-')
6136 /* read digits of exponent (no underbars :-) */
6137 while (isDIGIT(*s)) {
6139 croak(number_too_long);
6144 /* terminate the string */
6147 /* make an sv from the string */
6149 /* reset numeric locale in case we were earlier left in Swaziland */
6150 SET_NUMERIC_STANDARD();
6151 value = atof(PL_tokenbuf);
6154 See if we can make do with an integer value without loss of
6155 precision. We use I_V to cast to an int, because some
6156 compilers have issues. Then we try casting it back and see
6157 if it was the same. We only do this if we know we
6158 specifically read an integer.
6160 Note: if floatit is true, then we don't need to do the
6164 if (!floatit && (double)tryiv == value)
6165 sv_setiv(sv, tryiv);
6167 sv_setnv(sv, value);
6168 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) )
6169 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
6170 (floatit ? "float" : "integer"), sv, Nullsv, NULL);
6174 /* make the op for the constant and return */
6176 yylval.opval = newSVOP(OP_CONST, 0, sv);
6182 scan_formline(register char *s)
6187 SV *stuff = newSVpv("",0);
6188 bool needargs = FALSE;
6191 if (*s == '.' || *s == '}') {
6193 #ifdef PERL_STRICT_CR
6194 for (t = s+1;*t == ' ' || *t == '\t'; t++) ;
6196 for (t = s+1;*t == ' ' || *t == '\t' || *t == '\r'; t++) ;
6198 if (*t == '\n' || t == PL_bufend)
6201 if (PL_in_eval && !PL_rsfp) {
6202 eol = strchr(s,'\n');
6207 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6209 for (t = s; t < eol; t++) {
6210 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
6212 goto enough; /* ~~ must be first line in formline */
6214 if (*t == '@' || *t == '^')
6217 sv_catpvn(stuff, s, eol-s);
6221 s = filter_gets(PL_linestr, PL_rsfp, 0);
6222 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
6223 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
6226 yyerror("Format not terminated");
6236 PL_lex_state = LEX_NORMAL;
6237 PL_nextval[PL_nexttoke].ival = 0;
6241 PL_lex_state = LEX_FORMLINE;
6242 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
6244 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
6248 SvREFCNT_dec(stuff);
6249 PL_lex_formbrack = 0;
6260 PL_cshlen = strlen(PL_cshname);
6265 start_subparse(I32 is_format, U32 flags)
6268 I32 oldsavestack_ix = PL_savestack_ix;
6269 CV* outsidecv = PL_compcv;
6273 assert(SvTYPE(PL_compcv) == SVt_PVCV);
6275 save_I32(&PL_subline);
6276 save_item(PL_subname);
6278 SAVESPTR(PL_curpad);
6279 SAVESPTR(PL_comppad);
6280 SAVESPTR(PL_comppad_name);
6281 SAVESPTR(PL_compcv);
6282 SAVEI32(PL_comppad_name_fill);
6283 SAVEI32(PL_min_intro_pending);
6284 SAVEI32(PL_max_intro_pending);
6285 SAVEI32(PL_pad_reset_pending);
6287 PL_compcv = (CV*)NEWSV(1104,0);
6288 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
6289 CvFLAGS(PL_compcv) |= flags;
6291 PL_comppad = newAV();
6292 av_push(PL_comppad, Nullsv);
6293 PL_curpad = AvARRAY(PL_comppad);
6294 PL_comppad_name = newAV();
6295 PL_comppad_name_fill = 0;
6296 PL_min_intro_pending = 0;
6298 PL_subline = PL_curcop->cop_line;
6300 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
6301 PL_curpad[0] = (SV*)newAV();
6302 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
6303 #endif /* USE_THREADS */
6305 comppadlist = newAV();
6306 AvREAL_off(comppadlist);
6307 av_store(comppadlist, 0, (SV*)PL_comppad_name);
6308 av_store(comppadlist, 1, (SV*)PL_comppad);
6310 CvPADLIST(PL_compcv) = comppadlist;
6311 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
6313 CvOWNER(PL_compcv) = 0;
6314 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
6315 MUTEX_INIT(CvMUTEXP(PL_compcv));
6316 #endif /* USE_THREADS */
6318 return oldsavestack_ix;
6337 char *context = NULL;
6341 if (!yychar || (yychar == ';' && !PL_rsfp))
6343 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
6344 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
6345 while (isSPACE(*PL_oldoldbufptr))
6347 context = PL_oldoldbufptr;
6348 contlen = PL_bufptr - PL_oldoldbufptr;
6350 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
6351 PL_oldbufptr != PL_bufptr) {
6352 while (isSPACE(*PL_oldbufptr))
6354 context = PL_oldbufptr;
6355 contlen = PL_bufptr - PL_oldbufptr;
6357 else if (yychar > 255)
6358 where = "next token ???";
6359 else if ((yychar & 127) == 127) {
6360 if (PL_lex_state == LEX_NORMAL ||
6361 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
6362 where = "at end of line";
6363 else if (PL_lex_inpat)
6364 where = "within pattern";
6366 where = "within string";
6369 SV *where_sv = sv_2mortal(newSVpv("next char ", 0));
6371 sv_catpvf(where_sv, "^%c", toCTRL(yychar));
6372 else if (isPRINT_LC(yychar))
6373 sv_catpvf(where_sv, "%c", yychar);
6375 sv_catpvf(where_sv, "\\%03o", yychar & 255);
6376 where = SvPVX(where_sv);
6378 msg = sv_2mortal(newSVpv(s, 0));
6379 sv_catpvf(msg, " at %_ line %ld, ",
6380 GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
6382 sv_catpvf(msg, "near \"%.*s\"\n", contlen, context);
6384 sv_catpvf(msg, "%s\n", where);
6385 if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
6387 " (Might be a runaway multi-line %c%c string starting on line %ld)\n",
6388 (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
6393 else if (PL_in_eval)
6394 sv_catsv(ERRSV, msg);
6396 PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
6397 if (++PL_error_count >= 10)
6398 croak("%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
6400 PL_in_my_stash = Nullhv;