3 * Copyright (c) 1991-1999, 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 /* In variables name $^X, these are the legal values for X.
78 * 1999-02-27 mjd-perl-patch@plover.com */
79 #define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
81 /* The following are arranged oddly so that the guard on the switch statement
82 * can get by with a single comparison (if the compiler is smart enough).
85 /* #define LEX_NOTPARSING 11 is done in perl.h. */
88 #define LEX_INTERPNORMAL 9
89 #define LEX_INTERPCASEMOD 8
90 #define LEX_INTERPPUSH 7
91 #define LEX_INTERPSTART 6
92 #define LEX_INTERPEND 5
93 #define LEX_INTERPENDMAYBE 4
94 #define LEX_INTERPCONCAT 3
95 #define LEX_INTERPCONST 2
96 #define LEX_FORMLINE 1
97 #define LEX_KNOWNEXT 0
103 #include <sys/file.h>
106 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
108 # include <unistd.h> /* Needed for execv() */
116 #ifdef USE_PURE_BISON
117 YYSTYPE* yylval_pointer = NULL;
118 int* yychar_pointer = NULL;
121 # define yylval (*yylval_pointer)
122 # define yychar (*yychar_pointer)
123 # define PERL_YYLEX_PARAM yylval_pointer,yychar_pointer
125 # define PERL_YYLEX_PARAM
128 #include "keywords.h"
133 #define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
135 #define TOKEN(retval) return (PL_bufptr = s,(int)retval)
136 #define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
137 #define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
138 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
139 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
140 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
141 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
142 #define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
143 #define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
144 #define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
145 #define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
146 #define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
147 #define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
148 #define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
149 #define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
150 #define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
151 #define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
152 #define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
153 #define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
154 #define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
156 /* This bit of chicanery makes a unary function followed by
157 * a parenthesis into a function with one argument, highest precedence.
159 #define UNI(f) return(yylval.ival = f, \
162 PL_last_uni = PL_oldbufptr, \
163 PL_last_lop_op = f, \
164 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
166 #define UNIBRACK(f) return(yylval.ival = f, \
168 PL_last_uni = PL_oldbufptr, \
169 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
171 /* grandfather return to old style */
172 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
177 if (*PL_bufptr == '=') {
179 if (toketype == ANDAND)
180 yylval.ival = OP_ANDASSIGN;
181 else if (toketype == OROR)
182 yylval.ival = OP_ORASSIGN;
189 no_op(char *what, char *s)
191 char *oldbp = PL_bufptr;
192 bool is_first = (PL_oldbufptr == PL_linestart);
195 yywarn(form("%s found where operator expected", what));
197 warn("\t(Missing semicolon on previous line?)\n");
198 else if (PL_oldoldbufptr && isIDFIRST_lazy(PL_oldoldbufptr)) {
200 for (t = PL_oldoldbufptr; *t && (isALNUM_lazy(t) || *t == ':'); t++) ;
201 if (t < PL_bufptr && isSPACE(*t))
202 warn("\t(Do you need to predeclare %.*s?)\n",
203 t - PL_oldoldbufptr, PL_oldoldbufptr);
207 warn("\t(Missing operator before end of line?)\n");
209 warn("\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
219 char *nl = strrchr(s,'\n');
225 iscntrl(PL_multi_close)
227 PL_multi_close < 32 || PL_multi_close == 127
231 tmpbuf[1] = toCTRL(PL_multi_close);
237 *tmpbuf = PL_multi_close;
241 q = strchr(s,'"') ? '\'' : '"';
242 croak("Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
249 if (ckWARN(WARN_DEPRECATED))
250 warner(WARN_DEPRECATED, "Use of %s is deprecated", s);
256 deprecate("comma-less variable list");
262 win32_textfilter(int idx, SV *sv, int maxlen)
264 I32 count = FILTER_READ(idx+1, sv, maxlen);
265 if (count > 0 && !maxlen)
266 win32_strip_return(sv);
274 utf16_textfilter(int idx, SV *sv, int maxlen)
276 I32 count = FILTER_READ(idx+1, sv, maxlen);
280 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
281 tend = utf16_to_utf8((U16*)SvPVX(sv), tmps, SvCUR(sv));
282 sv_usepvn(sv, (char*)tmps, tend - tmps);
289 utf16rev_textfilter(int idx, SV *sv, int maxlen)
291 I32 count = FILTER_READ(idx+1, sv, maxlen);
295 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
296 tend = utf16_to_utf8_reversed((U16*)SvPVX(sv), tmps, SvCUR(sv));
297 sv_usepvn(sv, (char*)tmps, tend - tmps);
312 SAVEI32(PL_lex_dojoin);
313 SAVEI32(PL_lex_brackets);
314 SAVEI32(PL_lex_fakebrack);
315 SAVEI32(PL_lex_casemods);
316 SAVEI32(PL_lex_starts);
317 SAVEI32(PL_lex_state);
318 SAVESPTR(PL_lex_inpat);
319 SAVEI32(PL_lex_inwhat);
320 SAVEI16(PL_curcop->cop_line);
323 SAVEPPTR(PL_oldbufptr);
324 SAVEPPTR(PL_oldoldbufptr);
325 SAVEPPTR(PL_linestart);
326 SAVESPTR(PL_linestr);
327 SAVEPPTR(PL_lex_brackstack);
328 SAVEPPTR(PL_lex_casestack);
329 SAVEDESTRUCTOR(restore_rsfp, PL_rsfp);
330 SAVESPTR(PL_lex_stuff);
331 SAVEI32(PL_lex_defer);
332 SAVESPTR(PL_lex_repl);
333 SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
334 SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect);
336 PL_lex_state = LEX_NORMAL;
340 PL_lex_fakebrack = 0;
341 New(899, PL_lex_brackstack, 120, char);
342 New(899, PL_lex_casestack, 12, char);
343 SAVEFREEPV(PL_lex_brackstack);
344 SAVEFREEPV(PL_lex_casestack);
346 *PL_lex_casestack = '\0';
349 PL_lex_stuff = Nullsv;
350 PL_lex_repl = Nullsv;
354 if (SvREADONLY(PL_linestr))
355 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
356 s = SvPV(PL_linestr, len);
357 if (len && s[len-1] != ';') {
358 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
359 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
360 sv_catpvn(PL_linestr, "\n;", 2);
362 SvTEMP_off(PL_linestr);
363 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
364 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
366 PL_rs = newSVpvn("\n", 1);
373 PL_doextract = FALSE;
377 restore_rsfp(void *f)
379 PerlIO *fp = (PerlIO*)f;
381 if (PL_rsfp == PerlIO_stdin())
382 PerlIO_clearerr(PL_rsfp);
383 else if (PL_rsfp && (PL_rsfp != fp))
384 PerlIO_close(PL_rsfp);
389 restore_expect(void *e)
391 /* a safe way to store a small integer in a pointer */
392 PL_expect = (expectation)((char *)e - PL_tokenbuf);
396 restore_lex_expect(void *e)
398 /* a safe way to store a small integer in a pointer */
399 PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);
411 PL_curcop->cop_line++;
414 while (*s == ' ' || *s == '\t') s++;
415 if (strnEQ(s, "line ", 5)) {
424 while (*s == ' ' || *s == '\t')
426 if (*s == '"' && (t = strchr(s+1, '"')))
430 return; /* false alarm */
431 for (t = s; !isSPACE(*t); t++) ;
436 PL_curcop->cop_filegv = gv_fetchfile(s);
438 PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
440 PL_curcop->cop_line = atoi(n)-1;
444 skipspace(register char *s)
447 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
448 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
454 while (s < PL_bufend && isSPACE(*s)) {
455 if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
458 if (s < PL_bufend && *s == '#') {
459 while (s < PL_bufend && *s != '\n')
463 if (PL_in_eval && !PL_rsfp) {
469 if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL)
471 if ((s = filter_gets(PL_linestr, PL_rsfp, (prevlen = SvCUR(PL_linestr)))) == Nullch) {
472 if (PL_minus_n || PL_minus_p) {
473 sv_setpv(PL_linestr,PL_minus_p ?
474 ";}continue{print or die qq(-p destination: $!\\n)" :
476 sv_catpv(PL_linestr,";}");
477 PL_minus_n = PL_minus_p = 0;
480 sv_setpv(PL_linestr,";");
481 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
482 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
483 if (PL_preprocess && !PL_in_eval)
484 (void)PerlProc_pclose(PL_rsfp);
485 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
486 PerlIO_clearerr(PL_rsfp);
488 (void)PerlIO_close(PL_rsfp);
492 PL_linestart = PL_bufptr = s + prevlen;
493 PL_bufend = s + SvCUR(PL_linestr);
496 if (PERLDB_LINE && PL_curstash != PL_debstash) {
497 SV *sv = NEWSV(85,0);
499 sv_upgrade(sv, SVt_PVMG);
500 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
501 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
512 if (PL_oldoldbufptr != PL_last_uni)
514 while (isSPACE(*PL_last_uni))
516 for (s = PL_last_uni; isALNUM_lazy(s) || *s == '-'; s++) ;
517 if ((t = strchr(s, '(')) && t < PL_bufptr)
521 warn("Warning: Use of \"%s\" without parens is ambiguous", PL_last_uni);
528 #define UNI(f) return uni(f,s)
536 PL_last_uni = PL_oldbufptr;
547 #endif /* CRIPPLED_CC */
549 #define LOP(f,x) return lop(f,x,s)
552 lop(I32 f, expectation x, char *s)
559 PL_last_lop = PL_oldbufptr;
575 PL_nexttype[PL_nexttoke] = type;
577 if (PL_lex_state != LEX_KNOWNEXT) {
578 PL_lex_defer = PL_lex_state;
579 PL_lex_expect = PL_expect;
580 PL_lex_state = LEX_KNOWNEXT;
585 force_word(register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
590 start = skipspace(start);
592 if (isIDFIRST_lazy(s) ||
593 (allow_pack && *s == ':') ||
594 (allow_initial_tick && *s == '\'') )
596 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
597 if (check_keyword && keyword(PL_tokenbuf, len))
599 if (token == METHOD) {
604 PL_expect = XOPERATOR;
607 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
608 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
615 force_ident(register char *s, int kind)
618 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
619 PL_nextval[PL_nexttoke].opval = o;
622 dTHR; /* just for in_eval */
623 o->op_private = OPpCONST_ENTERED;
624 /* XXX see note in pp_entereval() for why we forgo typo
625 warnings if the symbol must be introduced in an eval.
627 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
628 kind == '$' ? SVt_PV :
629 kind == '@' ? SVt_PVAV :
630 kind == '%' ? SVt_PVHV :
638 force_version(char *s)
640 OP *version = Nullop;
644 /* default VERSION number -- GBARR */
649 for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
650 if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
652 /* real VERSION number -- GBARR */
653 version = yylval.opval;
657 /* NOTE: The parser sees the package name and the VERSION swapped */
658 PL_nextval[PL_nexttoke].opval = version;
676 s = SvPV_force(sv, len);
680 while (s < send && *s != '\\')
685 if ( PL_hints & HINT_NEW_STRING )
686 pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
689 if (s + 1 < send && (s[1] == '\\'))
690 s++; /* all that, just for this */
695 SvCUR_set(sv, d - SvPVX(sv));
697 if ( PL_hints & HINT_NEW_STRING )
698 return new_constant(NULL, 0, "q", sv, pv, "q");
705 register I32 op_type = yylval.ival;
707 if (op_type == OP_NULL) {
708 yylval.opval = PL_lex_op;
712 if (op_type == OP_CONST || op_type == OP_READLINE) {
713 SV *sv = tokeq(PL_lex_stuff);
715 if (SvTYPE(sv) == SVt_PVIV) {
716 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
722 nsv = newSVpvn(p, len);
726 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
727 PL_lex_stuff = Nullsv;
731 PL_sublex_info.super_state = PL_lex_state;
732 PL_sublex_info.sub_inwhat = op_type;
733 PL_sublex_info.sub_op = PL_lex_op;
734 PL_lex_state = LEX_INTERPPUSH;
738 yylval.opval = PL_lex_op;
752 PL_lex_state = PL_sublex_info.super_state;
753 SAVEI32(PL_lex_dojoin);
754 SAVEI32(PL_lex_brackets);
755 SAVEI32(PL_lex_fakebrack);
756 SAVEI32(PL_lex_casemods);
757 SAVEI32(PL_lex_starts);
758 SAVEI32(PL_lex_state);
759 SAVESPTR(PL_lex_inpat);
760 SAVEI32(PL_lex_inwhat);
761 SAVEI16(PL_curcop->cop_line);
763 SAVEPPTR(PL_oldbufptr);
764 SAVEPPTR(PL_oldoldbufptr);
765 SAVEPPTR(PL_linestart);
766 SAVESPTR(PL_linestr);
767 SAVEPPTR(PL_lex_brackstack);
768 SAVEPPTR(PL_lex_casestack);
770 PL_linestr = PL_lex_stuff;
771 PL_lex_stuff = Nullsv;
773 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
774 PL_bufend += SvCUR(PL_linestr);
775 SAVEFREESV(PL_linestr);
777 PL_lex_dojoin = FALSE;
779 PL_lex_fakebrack = 0;
780 New(899, PL_lex_brackstack, 120, char);
781 New(899, PL_lex_casestack, 12, char);
782 SAVEFREEPV(PL_lex_brackstack);
783 SAVEFREEPV(PL_lex_casestack);
785 *PL_lex_casestack = '\0';
787 PL_lex_state = LEX_INTERPCONCAT;
788 PL_curcop->cop_line = PL_multi_start;
790 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
791 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
792 PL_lex_inpat = PL_sublex_info.sub_op;
794 PL_lex_inpat = Nullop;
802 if (!PL_lex_starts++) {
803 PL_expect = XOPERATOR;
804 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpvn("",0));
808 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
809 PL_lex_state = LEX_INTERPCASEMOD;
810 return yylex(PERL_YYLEX_PARAM);
813 /* Is there a right-hand side to take care of? */
814 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
815 PL_linestr = PL_lex_repl;
817 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
818 PL_bufend += SvCUR(PL_linestr);
819 SAVEFREESV(PL_linestr);
820 PL_lex_dojoin = FALSE;
822 PL_lex_fakebrack = 0;
824 *PL_lex_casestack = '\0';
826 if (SvEVALED(PL_lex_repl)) {
827 PL_lex_state = LEX_INTERPNORMAL;
829 /* we don't clear PL_lex_repl here, so that we can check later
830 whether this is an evalled subst; that means we rely on the
831 logic to ensure sublex_done() is called again only via the
832 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
835 PL_lex_state = LEX_INTERPCONCAT;
836 PL_lex_repl = Nullsv;
842 PL_bufend = SvPVX(PL_linestr);
843 PL_bufend += SvCUR(PL_linestr);
844 PL_expect = XOPERATOR;
852 Extracts a pattern, double-quoted string, or transliteration. This
855 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
856 processing a pattern (PL_lex_inpat is true), a transliteration
857 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
859 Returns a pointer to the character scanned up to. Iff this is
860 advanced from the start pointer supplied (ie if anything was
861 successfully parsed), will leave an OP for the substring scanned
862 in yylval. Caller must intuit reason for not parsing further
863 by looking at the next characters herself.
867 double-quoted style: \r and \n
868 regexp special ones: \D \s
870 backrefs: \1 (deprecated in substitution replacements)
871 case and quoting: \U \Q \E
872 stops on @ and $, but not for $ as tail anchor
875 characters are VERY literal, except for - not at the start or end
876 of the string, which indicates a range. scan_const expands the
877 range to the full set of intermediate characters.
879 In double-quoted strings:
881 double-quoted style: \r and \n
883 backrefs: \1 (deprecated)
884 case and quoting: \U \Q \E
887 scan_const does *not* construct ops to handle interpolated strings.
888 It stops processing as soon as it finds an embedded $ or @ variable
889 and leaves it to the caller to work out what's going on.
891 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
893 $ in pattern could be $foo or could be tail anchor. Assumption:
894 it's a tail anchor if $ is the last thing in the string, or if it's
895 followed by one of ")| \n\t"
897 \1 (backreferences) are turned into $1
899 The structure of the code is
900 while (there's a character to process) {
901 handle transliteration ranges
903 skip # initiated comments in //x patterns
904 check for embedded @foo
905 check for embedded scalars
907 leave intact backslashes from leave (below)
908 deprecate \1 in strings and sub replacements
909 handle string-changing backslashes \l \U \Q \E, etc.
910 switch (what was escaped) {
911 handle - in a transliteration (becomes a literal -)
912 handle \132 octal characters
913 handle 0x15 hex characters
914 handle \cV (control V)
915 handle printf backslashes (\f, \r, \n, etc)
918 } (end while character to read)
923 scan_const(char *start)
925 register char *send = PL_bufend; /* end of the constant */
926 SV *sv = NEWSV(93, send - start); /* sv for the constant */
927 register char *s = start; /* start of the constant */
928 register char *d = SvPVX(sv); /* destination for copies */
929 bool dorange = FALSE; /* are we in a translit range? */
931 I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
932 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
934 I32 thisutf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
935 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
938 /* leaveit is the set of acceptably-backslashed characters */
941 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
944 while (s < send || dorange) {
945 /* get transliterations out of the way (they're most literal) */
946 if (PL_lex_inwhat == OP_TRANS) {
947 /* expand a range A-Z to the full set of characters. AIE! */
949 I32 i; /* current expanded character */
950 I32 min; /* first character in range */
951 I32 max; /* last character in range */
953 i = d - SvPVX(sv); /* remember current offset */
954 SvGROW(sv, SvLEN(sv) + 256); /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */
955 d = SvPVX(sv) + i; /* restore d after the grow potentially has changed the ptr */
956 d -= 2; /* eat the first char and the - */
958 min = (U8)*d; /* first char in range */
959 max = (U8)d[1]; /* last char in range */
962 if ((isLOWER(min) && isLOWER(max)) ||
963 (isUPPER(min) && isUPPER(max))) {
965 for (i = min; i <= max; i++)
969 for (i = min; i <= max; i++)
976 for (i = min; i <= max; i++)
979 /* mark the range as done, and continue */
984 /* range begins (ignore - as first or last char) */
985 else if (*s == '-' && s+1 < send && s != start) {
987 *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
996 /* if we get here, we're not doing a transliteration */
998 /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
999 except for the last char, which will be done separately. */
1000 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
1002 while (s < send && *s != ')')
1004 } else if (s[2] == '{'
1005 || s[2] == 'p' && s[3] == '{') { /* This should march regcomp.c */
1007 char *regparse = s + (s[2] == '{' ? 3 : 4);
1010 while (count && (c = *regparse)) {
1011 if (c == '\\' && regparse[1])
1019 if (*regparse != ')') {
1020 regparse--; /* Leave one char for continuation. */
1021 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
1023 while (s < regparse)
1028 /* likewise skip #-initiated comments in //x patterns */
1029 else if (*s == '#' && PL_lex_inpat &&
1030 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
1031 while (s+1 < send && *s != '\n')
1035 /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
1036 else if (*s == '@' && s[1] && (isALNUM_lazy(s+1) || strchr(":'{$", s[1])))
1039 /* check for embedded scalars. only stop if we're sure it's a
1042 else if (*s == '$') {
1043 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
1045 if (s + 1 < send && !strchr("()| \n\t", s[1]))
1046 break; /* in regexp, $ might be tail anchor */
1049 /* (now in tr/// code again) */
1051 if (*s & 0x80 && thisutf) {
1052 dTHR; /* only for ckWARN */
1053 if (ckWARN(WARN_UTF8)) {
1054 (void)utf8_to_uv((U8*)s, &len); /* could cvt latin-1 to utf8 here... */
1064 if (*s == '\\' && s+1 < send) {
1067 /* some backslashes we leave behind */
1068 if (*leaveit && *s && strchr(leaveit, *s)) {
1074 /* deprecate \1 in strings and substitution replacements */
1075 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1076 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1078 dTHR; /* only for ckWARN */
1079 if (ckWARN(WARN_SYNTAX))
1080 warner(WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1085 /* string-change backslash escapes */
1086 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1091 /* if we get here, it's either a quoted -, or a digit */
1094 /* quoted - in transliterations */
1096 if (PL_lex_inwhat == OP_TRANS) {
1104 if (ckWARN(WARN_UNSAFE) && isALPHA(*s))
1106 "Unrecognized escape \\%c passed through",
1108 /* default action is to copy the quoted character */
1113 /* \132 indicates an octal constant */
1114 case '0': case '1': case '2': case '3':
1115 case '4': case '5': case '6': case '7':
1116 *d++ = scan_oct(s, 3, &len);
1120 /* \x24 indicates a hex constant */
1124 char* e = strchr(s, '}');
1127 yyerror("Missing right brace on \\x{}");
1132 if (ckWARN(WARN_UTF8))
1134 "Use of \\x{} without utf8 declaration");
1136 /* note: utf always shorter than hex */
1137 d = (char*)uv_to_utf8((U8*)d,
1138 scan_hex(s + 1, e - s - 1, &len));
1143 UV uv = (UV)scan_hex(s, 2, &len);
1144 if (utf && PL_lex_inwhat == OP_TRANS &&
1145 utf != (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1147 d = (char*)uv_to_utf8((U8*)d, uv); /* doing a CU or UC */
1150 if (uv >= 127 && UTF) {
1152 if (ckWARN(WARN_UTF8))
1154 "\\x%.*s will produce malformed UTF-8 character; use \\x{%.*s} for that",
1163 /* \c is a control character */
1177 /* printf-style backslashes, formfeeds, newlines, etc */
1203 } /* end if (backslash) */
1206 } /* while loop to process each character */
1208 /* terminate the string and set up the sv */
1210 SvCUR_set(sv, d - SvPVX(sv));
1213 /* shrink the sv if we allocated more than we used */
1214 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1215 SvLEN_set(sv, SvCUR(sv) + 1);
1216 Renew(SvPVX(sv), SvLEN(sv), char);
1219 /* return the substring (via yylval) only if we parsed anything */
1220 if (s > PL_bufptr) {
1221 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1222 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1224 ( PL_lex_inwhat == OP_TRANS
1226 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1229 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1235 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1237 intuit_more(register char *s)
1239 if (PL_lex_brackets)
1241 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1243 if (*s != '{' && *s != '[')
1248 /* In a pattern, so maybe we have {n,m}. */
1265 /* On the other hand, maybe we have a character class */
1268 if (*s == ']' || *s == '^')
1271 int weight = 2; /* let's weigh the evidence */
1273 unsigned char un_char = 255, last_un_char;
1274 char *send = strchr(s,']');
1275 char tmpbuf[sizeof PL_tokenbuf * 4];
1277 if (!send) /* has to be an expression */
1280 Zero(seen,256,char);
1283 else if (isDIGIT(*s)) {
1285 if (isDIGIT(s[1]) && s[2] == ']')
1291 for (; s < send; s++) {
1292 last_un_char = un_char;
1293 un_char = (unsigned char)*s;
1298 weight -= seen[un_char] * 10;
1299 if (isALNUM_lazy(s+1)) {
1300 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1301 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1306 else if (*s == '$' && s[1] &&
1307 strchr("[#!%*<>()-=",s[1])) {
1308 if (/*{*/ strchr("])} =",s[2]))
1317 if (strchr("wds]",s[1]))
1319 else if (seen['\''] || seen['"'])
1321 else if (strchr("rnftbxcav",s[1]))
1323 else if (isDIGIT(s[1])) {
1325 while (s[1] && isDIGIT(s[1]))
1335 if (strchr("aA01! ",last_un_char))
1337 if (strchr("zZ79~",s[1]))
1339 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1340 weight -= 5; /* cope with negative subscript */
1343 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1344 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1349 if (keyword(tmpbuf, d - tmpbuf))
1352 if (un_char == last_un_char + 1)
1354 weight -= seen[un_char];
1359 if (weight >= 0) /* probably a character class */
1367 intuit_method(char *start, GV *gv)
1369 char *s = start + (*start == '$');
1370 char tmpbuf[sizeof PL_tokenbuf];
1378 if ((cv = GvCVu(gv))) {
1379 char *proto = SvPVX(cv);
1389 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1390 if (*start == '$') {
1391 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1396 return *s == '(' ? FUNCMETH : METHOD;
1398 if (!keyword(tmpbuf, len)) {
1399 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1404 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1405 if (indirgv && GvCVu(indirgv))
1407 /* filehandle or package name makes it a method */
1408 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1410 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1411 return 0; /* no assumptions -- "=>" quotes bearword */
1413 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1414 newSVpvn(tmpbuf,len));
1415 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1419 return *s == '(' ? FUNCMETH : METHOD;
1429 char *pdb = PerlEnv_getenv("PERL5DB");
1433 SETERRNO(0,SS$_NORMAL);
1434 return "BEGIN { require 'perl5db.pl' }";
1440 /* Encoded script support. filter_add() effectively inserts a
1441 * 'pre-processing' function into the current source input stream.
1442 * Note that the filter function only applies to the current source file
1443 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1445 * The datasv parameter (which may be NULL) can be used to pass
1446 * private data to this instance of the filter. The filter function
1447 * can recover the SV using the FILTER_DATA macro and use it to
1448 * store private buffers and state information.
1450 * The supplied datasv parameter is upgraded to a PVIO type
1451 * and the IoDIRP field is used to store the function pointer.
1452 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1453 * private use must be set using malloc'd pointers.
1457 filter_add(filter_t funcp, SV *datasv)
1459 if (!funcp){ /* temporary handy debugging hack to be deleted */
1460 PL_filter_debug = atoi((char*)datasv);
1463 if (!PL_rsfp_filters)
1464 PL_rsfp_filters = newAV();
1466 datasv = NEWSV(255,0);
1467 if (!SvUPGRADE(datasv, SVt_PVIO))
1468 die("Can't upgrade filter_add data to SVt_PVIO");
1469 IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
1470 if (PL_filter_debug) {
1472 warn("filter_add func %p (%s)", funcp, SvPV(datasv, n_a));
1474 av_unshift(PL_rsfp_filters, 1);
1475 av_store(PL_rsfp_filters, 0, datasv) ;
1480 /* Delete most recently added instance of this filter function. */
1482 filter_del(filter_t funcp)
1484 if (PL_filter_debug)
1485 warn("filter_del func %p", funcp);
1486 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1488 /* if filter is on top of stack (usual case) just pop it off */
1489 if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (DIR*)funcp){
1490 IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) = NULL;
1491 sv_free(av_pop(PL_rsfp_filters));
1495 /* we need to search for the correct entry and clear it */
1496 die("filter_del can only delete in reverse order (currently)");
1500 /* Invoke the n'th filter function for the current rsfp. */
1502 filter_read(int idx, SV *buf_sv, int maxlen)
1505 /* 0 = read one text line */
1510 if (!PL_rsfp_filters)
1512 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
1513 /* Provide a default input filter to make life easy. */
1514 /* Note that we append to the line. This is handy. */
1515 if (PL_filter_debug)
1516 warn("filter_read %d: from rsfp\n", idx);
1520 int old_len = SvCUR(buf_sv) ;
1522 /* ensure buf_sv is large enough */
1523 SvGROW(buf_sv, old_len + maxlen) ;
1524 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1525 if (PerlIO_error(PL_rsfp))
1526 return -1; /* error */
1528 return 0 ; /* end of file */
1530 SvCUR_set(buf_sv, old_len + len) ;
1533 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1534 if (PerlIO_error(PL_rsfp))
1535 return -1; /* error */
1537 return 0 ; /* end of file */
1540 return SvCUR(buf_sv);
1542 /* Skip this filter slot if filter has been deleted */
1543 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
1544 if (PL_filter_debug)
1545 warn("filter_read %d: skipped (filter deleted)\n", idx);
1546 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1548 /* Get function pointer hidden within datasv */
1549 funcp = (filter_t)IoDIRP(datasv);
1550 if (PL_filter_debug) {
1552 warn("filter_read %d: via function %p (%s)\n",
1553 idx, funcp, SvPV(datasv,n_a));
1555 /* Call function. The function is expected to */
1556 /* call "FILTER_READ(idx+1, buf_sv)" first. */
1557 /* Return: <0:error, =0:eof, >0:not eof */
1558 return (*funcp)(PERL_OBJECT_THIS_ idx, buf_sv, maxlen);
1562 filter_gets(register SV *sv, register PerlIO *fp, STRLEN append)
1565 if (!PL_rsfp_filters) {
1566 filter_add(win32_textfilter,NULL);
1569 if (PL_rsfp_filters) {
1572 SvCUR_set(sv, 0); /* start with empty line */
1573 if (FILTER_READ(0, sv, 0) > 0)
1574 return ( SvPVX(sv) ) ;
1579 return (sv_gets(sv, fp, append));
1584 static char* exp_name[] =
1585 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
1591 Works out what to call the token just pulled out of the input
1592 stream. The yacc parser takes care of taking the ops we return and
1593 stitching them into a tree.
1599 if read an identifier
1600 if we're in a my declaration
1601 croak if they tried to say my($foo::bar)
1602 build the ops for a my() declaration
1603 if it's an access to a my() variable
1604 are we in a sort block?
1605 croak if my($a); $a <=> $b
1606 build ops for access to a my() variable
1607 if in a dq string, and they've said @foo and we can't find @foo
1609 build ops for a bareword
1610 if we already built the token before, use it.
1613 int yylex(PERL_YYLEX_PARAM_DECL)
1623 #ifdef USE_PURE_BISON
1624 yylval_pointer = lvalp;
1625 yychar_pointer = lcharp;
1628 /* check if there's an identifier for us to look at */
1629 if (PL_pending_ident) {
1630 /* pit holds the identifier we read and pending_ident is reset */
1631 char pit = PL_pending_ident;
1632 PL_pending_ident = 0;
1634 /* if we're in a my(), we can't allow dynamics here.
1635 $foo'bar has already been turned into $foo::bar, so
1636 just check for colons.
1638 if it's a legal name, the OP is a PADANY.
1641 if (strchr(PL_tokenbuf,':'))
1642 yyerror(form(PL_no_myglob,PL_tokenbuf));
1644 yylval.opval = newOP(OP_PADANY, 0);
1645 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
1650 build the ops for accesses to a my() variable.
1652 Deny my($a) or my($b) in a sort block, *if* $a or $b is
1653 then used in a comparison. This catches most, but not
1654 all cases. For instance, it catches
1655 sort { my($a); $a <=> $b }
1657 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1658 (although why you'd do that is anyone's guess).
1661 if (!strchr(PL_tokenbuf,':')) {
1663 /* Check for single character per-thread SVs */
1664 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1665 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1666 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
1668 yylval.opval = newOP(OP_THREADSV, 0);
1669 yylval.opval->op_targ = tmp;
1672 #endif /* USE_THREADS */
1673 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
1674 /* if it's a sort block and they're naming $a or $b */
1675 if (PL_last_lop_op == OP_SORT &&
1676 PL_tokenbuf[0] == '$' &&
1677 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
1680 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
1681 d < PL_bufend && *d != '\n';
1684 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
1685 croak("Can't use \"my %s\" in sort comparison",
1691 yylval.opval = newOP(OP_PADANY, 0);
1692 yylval.opval->op_targ = tmp;
1698 Whine if they've said @foo in a doublequoted string,
1699 and @foo isn't a variable we can find in the symbol
1702 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
1703 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
1704 if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
1705 yyerror(form("In string, %s now must be written as \\%s",
1706 PL_tokenbuf, PL_tokenbuf));
1709 /* build ops for a bareword */
1710 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
1711 yylval.opval->op_private = OPpCONST_ENTERED;
1712 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
1713 ((PL_tokenbuf[0] == '$') ? SVt_PV
1714 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
1719 /* no identifier pending identification */
1721 switch (PL_lex_state) {
1723 case LEX_NORMAL: /* Some compilers will produce faster */
1724 case LEX_INTERPNORMAL: /* code if we comment these out. */
1728 /* when we're already built the next token, just pull it out the queue */
1731 yylval = PL_nextval[PL_nexttoke];
1733 PL_lex_state = PL_lex_defer;
1734 PL_expect = PL_lex_expect;
1735 PL_lex_defer = LEX_NORMAL;
1737 return(PL_nexttype[PL_nexttoke]);
1739 /* interpolated case modifiers like \L \U, including \Q and \E.
1740 when we get here, PL_bufptr is at the \
1742 case LEX_INTERPCASEMOD:
1744 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
1745 croak("panic: INTERPCASEMOD");
1747 /* handle \E or end of string */
1748 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
1752 if (PL_lex_casemods) {
1753 oldmod = PL_lex_casestack[--PL_lex_casemods];
1754 PL_lex_casestack[PL_lex_casemods] = '\0';
1756 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
1758 PL_lex_state = LEX_INTERPCONCAT;
1762 if (PL_bufptr != PL_bufend)
1764 PL_lex_state = LEX_INTERPCONCAT;
1765 return yylex(PERL_YYLEX_PARAM);
1769 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
1770 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
1771 if (strchr("LU", *s) &&
1772 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
1774 PL_lex_casestack[--PL_lex_casemods] = '\0';
1777 if (PL_lex_casemods > 10) {
1778 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
1779 if (newlb != PL_lex_casestack) {
1781 PL_lex_casestack = newlb;
1784 PL_lex_casestack[PL_lex_casemods++] = *s;
1785 PL_lex_casestack[PL_lex_casemods] = '\0';
1786 PL_lex_state = LEX_INTERPCONCAT;
1787 PL_nextval[PL_nexttoke].ival = 0;
1790 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
1792 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
1794 PL_nextval[PL_nexttoke].ival = OP_LC;
1796 PL_nextval[PL_nexttoke].ival = OP_UC;
1798 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
1800 croak("panic: yylex");
1803 if (PL_lex_starts) {
1809 return yylex(PERL_YYLEX_PARAM);
1812 case LEX_INTERPPUSH:
1813 return sublex_push();
1815 case LEX_INTERPSTART:
1816 if (PL_bufptr == PL_bufend)
1817 return sublex_done();
1819 PL_lex_dojoin = (*PL_bufptr == '@');
1820 PL_lex_state = LEX_INTERPNORMAL;
1821 if (PL_lex_dojoin) {
1822 PL_nextval[PL_nexttoke].ival = 0;
1825 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
1826 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
1827 force_next(PRIVATEREF);
1829 force_ident("\"", '$');
1830 #endif /* USE_THREADS */
1831 PL_nextval[PL_nexttoke].ival = 0;
1833 PL_nextval[PL_nexttoke].ival = 0;
1835 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
1838 if (PL_lex_starts++) {
1842 return yylex(PERL_YYLEX_PARAM);
1844 case LEX_INTERPENDMAYBE:
1845 if (intuit_more(PL_bufptr)) {
1846 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
1852 if (PL_lex_dojoin) {
1853 PL_lex_dojoin = FALSE;
1854 PL_lex_state = LEX_INTERPCONCAT;
1857 if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
1858 && SvEVALED(PL_lex_repl))
1860 if (PL_bufptr != PL_bufend)
1861 croak("Bad evalled substitution pattern");
1862 PL_lex_repl = Nullsv;
1865 case LEX_INTERPCONCAT:
1867 if (PL_lex_brackets)
1868 croak("panic: INTERPCONCAT");
1870 if (PL_bufptr == PL_bufend)
1871 return sublex_done();
1873 if (SvIVX(PL_linestr) == '\'') {
1874 SV *sv = newSVsv(PL_linestr);
1877 else if ( PL_hints & HINT_NEW_RE )
1878 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
1879 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1883 s = scan_const(PL_bufptr);
1885 PL_lex_state = LEX_INTERPCASEMOD;
1887 PL_lex_state = LEX_INTERPSTART;
1890 if (s != PL_bufptr) {
1891 PL_nextval[PL_nexttoke] = yylval;
1894 if (PL_lex_starts++)
1898 return yylex(PERL_YYLEX_PARAM);
1902 return yylex(PERL_YYLEX_PARAM);
1904 PL_lex_state = LEX_NORMAL;
1905 s = scan_formline(PL_bufptr);
1906 if (!PL_lex_formbrack)
1912 PL_oldoldbufptr = PL_oldbufptr;
1915 PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
1921 if (isIDFIRST_lazy(s))
1923 croak("Unrecognized character \\x%02X", *s & 255);
1926 goto fake_eof; /* emulate EOF on ^D or ^Z */
1931 if (PL_lex_brackets)
1932 yyerror("Missing right curly or square bracket");
1935 if (s++ < PL_bufend)
1936 goto retry; /* ignore stray nulls */
1939 if (!PL_in_eval && !PL_preambled) {
1940 PL_preambled = TRUE;
1941 sv_setpv(PL_linestr,incl_perldb());
1942 if (SvCUR(PL_linestr))
1943 sv_catpv(PL_linestr,";");
1945 while(AvFILLp(PL_preambleav) >= 0) {
1946 SV *tmpsv = av_shift(PL_preambleav);
1947 sv_catsv(PL_linestr, tmpsv);
1948 sv_catpv(PL_linestr, ";");
1951 sv_free((SV*)PL_preambleav);
1952 PL_preambleav = NULL;
1954 if (PL_minus_n || PL_minus_p) {
1955 sv_catpv(PL_linestr, "LINE: while (<>) {");
1957 sv_catpv(PL_linestr,"chomp;");
1959 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
1961 GvIMPORTED_AV_on(gv);
1963 if (strchr("/'\"", *PL_splitstr)
1964 && strchr(PL_splitstr + 1, *PL_splitstr))
1965 sv_catpvf(PL_linestr, "@F=split(%s);", PL_splitstr);
1968 s = "'~#\200\1'"; /* surely one char is unused...*/
1969 while (s[1] && strchr(PL_splitstr, *s)) s++;
1971 sv_catpvf(PL_linestr, "@F=split(%s%c",
1972 "q" + (delim == '\''), delim);
1973 for (s = PL_splitstr; *s; s++) {
1975 sv_catpvn(PL_linestr, "\\", 1);
1976 sv_catpvn(PL_linestr, s, 1);
1978 sv_catpvf(PL_linestr, "%c);", delim);
1982 sv_catpv(PL_linestr,"@F=split(' ');");
1985 sv_catpv(PL_linestr, "\n");
1986 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1987 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1988 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1989 SV *sv = NEWSV(85,0);
1991 sv_upgrade(sv, SVt_PVMG);
1992 sv_setsv(sv,PL_linestr);
1993 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1998 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
2001 if (PL_preprocess && !PL_in_eval)
2002 (void)PerlProc_pclose(PL_rsfp);
2003 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
2004 PerlIO_clearerr(PL_rsfp);
2006 (void)PerlIO_close(PL_rsfp);
2008 PL_doextract = FALSE;
2010 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
2011 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
2012 sv_catpv(PL_linestr,";}");
2013 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2014 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2015 PL_minus_n = PL_minus_p = 0;
2018 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2019 sv_setpv(PL_linestr,"");
2020 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
2023 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
2024 PL_doextract = FALSE;
2026 /* Incest with pod. */
2027 if (*s == '=' && strnEQ(s, "=cut", 4)) {
2028 sv_setpv(PL_linestr, "");
2029 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2030 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2031 PL_doextract = FALSE;
2035 } while (PL_doextract);
2036 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
2037 if (PERLDB_LINE && PL_curstash != PL_debstash) {
2038 SV *sv = NEWSV(85,0);
2040 sv_upgrade(sv, SVt_PVMG);
2041 sv_setsv(sv,PL_linestr);
2042 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
2044 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2045 if (PL_curcop->cop_line == 1) {
2046 while (s < PL_bufend && isSPACE(*s))
2048 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
2052 if (*s == '#' && *(s+1) == '!')
2054 #ifdef ALTERNATE_SHEBANG
2056 static char as[] = ALTERNATE_SHEBANG;
2057 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2058 d = s + (sizeof(as) - 1);
2060 #endif /* ALTERNATE_SHEBANG */
2069 while (*d && !isSPACE(*d))
2073 #ifdef ARG_ZERO_IS_SCRIPT
2074 if (ipathend > ipath) {
2076 * HP-UX (at least) sets argv[0] to the script name,
2077 * which makes $^X incorrect. And Digital UNIX and Linux,
2078 * at least, set argv[0] to the basename of the Perl
2079 * interpreter. So, having found "#!", we'll set it right.
2081 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2082 assert(SvPOK(x) || SvGMAGICAL(x));
2083 if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
2084 sv_setpvn(x, ipath, ipathend - ipath);
2087 TAINT_NOT; /* $^X is always tainted, but that's OK */
2089 #endif /* ARG_ZERO_IS_SCRIPT */
2094 d = instr(s,"perl -");
2096 d = instr(s,"perl");
2097 #ifdef ALTERNATE_SHEBANG
2099 * If the ALTERNATE_SHEBANG on this system starts with a
2100 * character that can be part of a Perl expression, then if
2101 * we see it but not "perl", we're probably looking at the
2102 * start of Perl code, not a request to hand off to some
2103 * other interpreter. Similarly, if "perl" is there, but
2104 * not in the first 'word' of the line, we assume the line
2105 * contains the start of the Perl program.
2107 if (d && *s != '#') {
2109 while (*c && !strchr("; \t\r\n\f\v#", *c))
2112 d = Nullch; /* "perl" not in first word; ignore */
2114 *s = '#'; /* Don't try to parse shebang line */
2116 #endif /* ALTERNATE_SHEBANG */
2121 !instr(s,"indir") &&
2122 instr(PL_origargv[0],"perl"))
2128 while (s < PL_bufend && isSPACE(*s))
2130 if (s < PL_bufend) {
2131 Newz(899,newargv,PL_origargc+3,char*);
2133 while (s < PL_bufend && !isSPACE(*s))
2136 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2139 newargv = PL_origargv;
2141 PerlProc_execv(ipath, newargv);
2142 croak("Can't exec %s", ipath);
2145 U32 oldpdb = PL_perldb;
2146 bool oldn = PL_minus_n;
2147 bool oldp = PL_minus_p;
2149 while (*d && !isSPACE(*d)) d++;
2150 while (*d == ' ' || *d == '\t') d++;
2154 if (*d == 'M' || *d == 'm') {
2156 while (*d && !isSPACE(*d)) d++;
2157 croak("Too late for \"-%.*s\" option",
2160 d = moreswitches(d);
2162 if (PERLDB_LINE && !oldpdb ||
2163 ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
2164 /* if we have already added "LINE: while (<>) {",
2165 we must not do it again */
2167 sv_setpv(PL_linestr, "");
2168 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2169 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2170 PL_preambled = FALSE;
2172 (void)gv_fetchfile(PL_origfilename);
2179 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2181 PL_lex_state = LEX_FORMLINE;
2182 return yylex(PERL_YYLEX_PARAM);
2186 #ifdef PERL_STRICT_CR
2187 warn("Illegal character \\%03o (carriage return)", '\r');
2189 "(Maybe you didn't strip carriage returns after a network transfer?)\n");
2191 case ' ': case '\t': case '\f': case 013:
2196 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2198 while (s < d && *s != '\n')
2203 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2205 PL_lex_state = LEX_FORMLINE;
2206 return yylex(PERL_YYLEX_PARAM);
2215 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2220 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2223 if (strnEQ(s,"=>",2)) {
2224 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2225 OPERATOR('-'); /* unary minus */
2227 PL_last_uni = PL_oldbufptr;
2228 PL_last_lop_op = OP_FTEREAD; /* good enough */
2230 case 'r': FTST(OP_FTEREAD);
2231 case 'w': FTST(OP_FTEWRITE);
2232 case 'x': FTST(OP_FTEEXEC);
2233 case 'o': FTST(OP_FTEOWNED);
2234 case 'R': FTST(OP_FTRREAD);
2235 case 'W': FTST(OP_FTRWRITE);
2236 case 'X': FTST(OP_FTREXEC);
2237 case 'O': FTST(OP_FTROWNED);
2238 case 'e': FTST(OP_FTIS);
2239 case 'z': FTST(OP_FTZERO);
2240 case 's': FTST(OP_FTSIZE);
2241 case 'f': FTST(OP_FTFILE);
2242 case 'd': FTST(OP_FTDIR);
2243 case 'l': FTST(OP_FTLINK);
2244 case 'p': FTST(OP_FTPIPE);
2245 case 'S': FTST(OP_FTSOCK);
2246 case 'u': FTST(OP_FTSUID);
2247 case 'g': FTST(OP_FTSGID);
2248 case 'k': FTST(OP_FTSVTX);
2249 case 'b': FTST(OP_FTBLK);
2250 case 'c': FTST(OP_FTCHR);
2251 case 't': FTST(OP_FTTTY);
2252 case 'T': FTST(OP_FTTEXT);
2253 case 'B': FTST(OP_FTBINARY);
2254 case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2255 case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2256 case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
2258 croak("Unrecognized file test: -%c", (int)tmp);
2265 if (PL_expect == XOPERATOR)
2270 else if (*s == '>') {
2273 if (isIDFIRST_lazy(s)) {
2274 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2282 if (PL_expect == XOPERATOR)
2285 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2287 OPERATOR('-'); /* unary minus */
2294 if (PL_expect == XOPERATOR)
2299 if (PL_expect == XOPERATOR)
2302 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2308 if (PL_expect != XOPERATOR) {
2309 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2310 PL_expect = XOPERATOR;
2311 force_ident(PL_tokenbuf, '*');
2324 if (PL_expect == XOPERATOR) {
2328 PL_tokenbuf[0] = '%';
2329 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2330 if (!PL_tokenbuf[1]) {
2332 yyerror("Final % should be \\% or %name");
2335 PL_pending_ident = '%';
2357 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2358 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
2363 if (PL_curcop->cop_line < PL_copline)
2364 PL_copline = PL_curcop->cop_line;
2375 if (PL_lex_brackets <= 0)
2376 yyerror("Unmatched right square bracket");
2379 if (PL_lex_state == LEX_INTERPNORMAL) {
2380 if (PL_lex_brackets == 0) {
2381 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
2382 PL_lex_state = LEX_INTERPEND;
2389 if (PL_lex_brackets > 100) {
2390 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2391 if (newlb != PL_lex_brackstack) {
2393 PL_lex_brackstack = newlb;
2396 switch (PL_expect) {
2398 if (PL_lex_formbrack) {
2402 if (PL_oldoldbufptr == PL_last_lop)
2403 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2405 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2406 OPERATOR(HASHBRACK);
2408 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2411 PL_tokenbuf[0] = '\0';
2412 if (d < PL_bufend && *d == '-') {
2413 PL_tokenbuf[0] = '-';
2415 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2418 if (d < PL_bufend && isIDFIRST_lazy(d)) {
2419 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2421 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2424 char minus = (PL_tokenbuf[0] == '-');
2425 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2432 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2436 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2441 if (PL_oldoldbufptr == PL_last_lop)
2442 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2444 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2447 OPERATOR(HASHBRACK);
2448 /* This hack serves to disambiguate a pair of curlies
2449 * as being a block or an anon hash. Normally, expectation
2450 * determines that, but in cases where we're not in a
2451 * position to expect anything in particular (like inside
2452 * eval"") we have to resolve the ambiguity. This code
2453 * covers the case where the first term in the curlies is a
2454 * quoted string. Most other cases need to be explicitly
2455 * disambiguated by prepending a `+' before the opening
2456 * curly in order to force resolution as an anon hash.
2458 * XXX should probably propagate the outer expectation
2459 * into eval"" to rely less on this hack, but that could
2460 * potentially break current behavior of eval"".
2464 if (*s == '\'' || *s == '"' || *s == '`') {
2465 /* common case: get past first string, handling escapes */
2466 for (t++; t < PL_bufend && *t != *s;)
2467 if (*t++ == '\\' && (*t == '\\' || *t == *s))
2471 else if (*s == 'q') {
2474 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
2475 && !isALNUM(*t)))) {
2477 char open, close, term;
2480 while (t < PL_bufend && isSPACE(*t))
2484 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2488 for (t++; t < PL_bufend; t++) {
2489 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
2491 else if (*t == open)
2495 for (t++; t < PL_bufend; t++) {
2496 if (*t == '\\' && t+1 < PL_bufend)
2498 else if (*t == close && --brackets <= 0)
2500 else if (*t == open)
2506 else if (isIDFIRST_lazy(s)) {
2507 for (t++; t < PL_bufend && isALNUM_lazy(t); t++) ;
2509 while (t < PL_bufend && isSPACE(*t))
2511 /* if comma follows first term, call it an anon hash */
2512 /* XXX it could be a comma expression with loop modifiers */
2513 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
2514 || (*t == '=' && t[1] == '>')))
2515 OPERATOR(HASHBRACK);
2516 if (PL_expect == XREF)
2517 PL_expect = XSTATE; /* was XTERM, trying XSTATE */
2519 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2525 yylval.ival = PL_curcop->cop_line;
2526 if (isSPACE(*s) || *s == '#')
2527 PL_copline = NOLINE; /* invalidate current command line number */
2532 if (PL_lex_brackets <= 0)
2533 yyerror("Unmatched right curly bracket");
2535 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2536 if (PL_lex_brackets < PL_lex_formbrack)
2537 PL_lex_formbrack = 0;
2538 if (PL_lex_state == LEX_INTERPNORMAL) {
2539 if (PL_lex_brackets == 0) {
2540 if (PL_lex_fakebrack) {
2541 PL_lex_state = LEX_INTERPEND;
2543 return yylex(PERL_YYLEX_PARAM); /* ignore fake brackets */
2545 if (*s == '-' && s[1] == '>')
2546 PL_lex_state = LEX_INTERPENDMAYBE;
2547 else if (*s != '[' && *s != '{')
2548 PL_lex_state = LEX_INTERPEND;
2551 if (PL_lex_brackets < PL_lex_fakebrack) {
2553 PL_lex_fakebrack = 0;
2554 return yylex(PERL_YYLEX_PARAM); /* ignore fake brackets */
2564 if (PL_expect == XOPERATOR) {
2565 if (ckWARN(WARN_SEMICOLON) && isIDFIRST_lazy(s) && PL_bufptr == PL_linestart) {
2566 PL_curcop->cop_line--;
2567 warner(WARN_SEMICOLON, PL_warn_nosemi);
2568 PL_curcop->cop_line++;
2573 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2575 PL_expect = XOPERATOR;
2576 force_ident(PL_tokenbuf, '&');
2580 yylval.ival = (OPpENTERSUB_AMPER<<8);
2599 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
2600 warner(WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
2602 if (PL_expect == XSTATE && isALPHA(tmp) &&
2603 (s == PL_linestart+1 || s[-2] == '\n') )
2605 if (PL_in_eval && !PL_rsfp) {
2610 if (strnEQ(s,"=cut",4)) {
2624 PL_doextract = TRUE;
2627 if (PL_lex_brackets < PL_lex_formbrack) {
2629 #ifdef PERL_STRICT_CR
2630 for (t = s; *t == ' ' || *t == '\t'; t++) ;
2632 for (t = s; *t == ' ' || *t == '\t' || *t == '\r'; t++) ;
2634 if (*t == '\n' || *t == '#') {
2652 if (PL_expect != XOPERATOR) {
2653 if (s[1] != '<' && !strchr(s,'>'))
2656 s = scan_heredoc(s);
2658 s = scan_inputsymbol(s);
2659 TERM(sublex_start());
2664 SHop(OP_LEFT_SHIFT);
2678 SHop(OP_RIGHT_SHIFT);
2687 if (PL_expect == XOPERATOR) {
2688 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2691 return ','; /* grandfather non-comma-format format */
2695 if (s[1] == '#' && (isIDFIRST_lazy(s+2) || strchr("{$:+-", s[2]))) {
2696 if (PL_expect == XOPERATOR)
2697 no_op("Array length", PL_bufptr);
2698 PL_tokenbuf[0] = '@';
2699 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2701 if (!PL_tokenbuf[1])
2703 PL_expect = XOPERATOR;
2704 PL_pending_ident = '#';
2708 if (PL_expect == XOPERATOR)
2709 no_op("Scalar", PL_bufptr);
2710 PL_tokenbuf[0] = '$';
2711 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2712 if (!PL_tokenbuf[1]) {
2714 yyerror("Final $ should be \\$ or $name");
2718 /* This kludge not intended to be bulletproof. */
2719 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
2720 yylval.opval = newSVOP(OP_CONST, 0,
2721 newSViv((IV)PL_compiling.cop_arybase));
2722 yylval.opval->op_private = OPpCONST_ARYBASE;
2728 if (PL_lex_state == LEX_NORMAL)
2731 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2734 PL_tokenbuf[0] = '@';
2735 if (ckWARN(WARN_SYNTAX)) {
2737 isSPACE(*t) || isALNUM_lazy(t) || *t == '$';
2740 PL_bufptr = skipspace(PL_bufptr);
2741 while (t < PL_bufend && *t != ']')
2744 "Multidimensional syntax %.*s not supported",
2745 (t - PL_bufptr) + 1, PL_bufptr);
2749 else if (*s == '{') {
2750 PL_tokenbuf[0] = '%';
2751 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
2752 (t = strchr(s, '}')) && (t = strchr(t, '=')))
2754 char tmpbuf[sizeof PL_tokenbuf];
2756 for (t++; isSPACE(*t); t++) ;
2757 if (isIDFIRST_lazy(t)) {
2758 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
2759 for (; isSPACE(*t); t++) ;
2760 if (*t == ';' && perl_get_cv(tmpbuf, FALSE))
2762 "You need to quote \"%s\"", tmpbuf);
2768 PL_expect = XOPERATOR;
2769 if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
2770 bool islop = (PL_last_lop == PL_oldoldbufptr);
2771 if (!islop || PL_last_lop_op == OP_GREPSTART)
2772 PL_expect = XOPERATOR;
2773 else if (strchr("$@\"'`q", *s))
2774 PL_expect = XTERM; /* e.g. print $fh "foo" */
2775 else if (strchr("&*<%", *s) && isIDFIRST_lazy(s+1))
2776 PL_expect = XTERM; /* e.g. print $fh &sub */
2777 else if (isIDFIRST_lazy(s)) {
2778 char tmpbuf[sizeof PL_tokenbuf];
2779 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
2780 if (tmp = keyword(tmpbuf, len)) {
2781 /* binary operators exclude handle interpretations */
2793 PL_expect = XTERM; /* e.g. print $fh length() */
2798 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
2799 if (gv && GvCVu(gv))
2800 PL_expect = XTERM; /* e.g. print $fh subr() */
2803 else if (isDIGIT(*s))
2804 PL_expect = XTERM; /* e.g. print $fh 3 */
2805 else if (*s == '.' && isDIGIT(s[1]))
2806 PL_expect = XTERM; /* e.g. print $fh .3 */
2807 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
2808 PL_expect = XTERM; /* e.g. print $fh -1 */
2809 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
2810 PL_expect = XTERM; /* print $fh <<"EOF" */
2812 PL_pending_ident = '$';
2816 if (PL_expect == XOPERATOR)
2818 PL_tokenbuf[0] = '@';
2819 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2820 if (!PL_tokenbuf[1]) {
2822 yyerror("Final @ should be \\@ or @name");
2825 if (PL_lex_state == LEX_NORMAL)
2827 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2829 PL_tokenbuf[0] = '%';
2831 /* Warn about @ where they meant $. */
2832 if (ckWARN(WARN_SYNTAX)) {
2833 if (*s == '[' || *s == '{') {
2835 while (*t && (isALNUM_lazy(t) || strchr(" \t$#+-'\"", *t)))
2837 if (*t == '}' || *t == ']') {
2839 PL_bufptr = skipspace(PL_bufptr);
2841 "Scalar value %.*s better written as $%.*s",
2842 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
2847 PL_pending_ident = '@';
2850 case '/': /* may either be division or pattern */
2851 case '?': /* may either be conditional or pattern */
2852 if (PL_expect != XOPERATOR) {
2853 /* Disable warning on "study /blah/" */
2854 if (PL_oldoldbufptr == PL_last_uni
2855 && (*PL_last_uni != 's' || s - PL_last_uni < 5
2856 || memNE(PL_last_uni, "study", 5) || isALNUM_lazy(PL_last_uni+5)))
2858 s = scan_pat(s,OP_MATCH);
2859 TERM(sublex_start());
2867 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
2868 #ifdef PERL_STRICT_CR
2871 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
2873 && (s == PL_linestart || s[-1] == '\n') )
2875 PL_lex_formbrack = 0;
2879 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
2885 yylval.ival = OPf_SPECIAL;
2891 if (PL_expect != XOPERATOR)
2896 case '0': case '1': case '2': case '3': case '4':
2897 case '5': case '6': case '7': case '8': case '9':
2899 if (PL_expect == XOPERATOR)
2905 if (PL_expect == XOPERATOR) {
2906 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2909 return ','; /* grandfather non-comma-format format */
2915 missingterm((char*)0);
2916 yylval.ival = OP_CONST;
2917 TERM(sublex_start());
2921 if (PL_expect == XOPERATOR) {
2922 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2925 return ','; /* grandfather non-comma-format format */
2931 missingterm((char*)0);
2932 yylval.ival = OP_CONST;
2933 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
2934 if (*d == '$' || *d == '@' || *d == '\\' || *d & 0x80) {
2935 yylval.ival = OP_STRINGIFY;
2939 TERM(sublex_start());
2943 if (PL_expect == XOPERATOR)
2944 no_op("Backticks",s);
2946 missingterm((char*)0);
2947 yylval.ival = OP_BACKTICK;
2949 TERM(sublex_start());
2953 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
2954 warner(WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
2956 if (PL_expect == XOPERATOR)
2957 no_op("Backslash",s);
2961 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
3001 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3003 /* Some keywords can be followed by any delimiter, including ':' */
3004 tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
3005 len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
3006 (PL_tokenbuf[0] == 'q' &&
3007 strchr("qwxr", PL_tokenbuf[1]))));
3009 /* x::* is just a word, unless x is "CORE" */
3010 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
3014 while (d < PL_bufend && isSPACE(*d))
3015 d++; /* no comments skipped here, or s### is misparsed */
3017 /* Is this a label? */
3018 if (!tmp && PL_expect == XSTATE
3019 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
3021 yylval.pval = savepv(PL_tokenbuf);
3026 /* Check for keywords */
3027 tmp = keyword(PL_tokenbuf, len);
3029 /* Is this a word before a => operator? */
3030 if (strnEQ(d,"=>",2)) {
3032 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
3033 yylval.opval->op_private = OPpCONST_BARE;
3037 if (tmp < 0) { /* second-class keyword? */
3038 GV *ogv = Nullgv; /* override (winner) */
3039 GV *hgv = Nullgv; /* hidden (loser) */
3040 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
3042 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
3045 if (GvIMPORTED_CV(gv))
3047 else if (! CvMETHOD(cv))
3051 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3052 (gv = *gvp) != (GV*)&PL_sv_undef &&
3053 GvCVu(gv) && GvIMPORTED_CV(gv))
3059 tmp = 0; /* overridden by import or by GLOBAL */
3062 && -tmp==KEY_lock /* XXX generalizable kludge */
3063 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
3065 tmp = 0; /* any sub overrides "weak" keyword */
3067 else { /* no override */
3071 if (ckWARN(WARN_AMBIGUOUS) && hgv
3072 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
3073 warner(WARN_AMBIGUOUS,
3074 "Ambiguous call resolved as CORE::%s(), %s",
3075 GvENAME(hgv), "qualify as such or use &");
3082 default: /* not a keyword */
3085 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
3087 /* Get the rest if it looks like a package qualifier */
3089 if (*s == '\'' || *s == ':' && s[1] == ':') {
3091 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
3094 croak("Bad name after %s%s", PL_tokenbuf,
3095 *s == '\'' ? "'" : "::");
3099 if (PL_expect == XOPERATOR) {
3100 if (PL_bufptr == PL_linestart) {
3101 PL_curcop->cop_line--;
3102 warner(WARN_SEMICOLON, PL_warn_nosemi);
3103 PL_curcop->cop_line++;
3106 no_op("Bareword",s);
3109 /* Look for a subroutine with this name in current package,
3110 unless name is "Foo::", in which case Foo is a bearword
3111 (and a package name). */
3114 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3116 if (ckWARN(WARN_UNSAFE) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3118 "Bareword \"%s\" refers to nonexistent package",
3121 PL_tokenbuf[len] = '\0';
3128 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3131 /* if we saw a global override before, get the right name */
3134 sv = newSVpvn("CORE::GLOBAL::",14);
3135 sv_catpv(sv,PL_tokenbuf);
3138 sv = newSVpv(PL_tokenbuf,0);
3140 /* Presume this is going to be a bareword of some sort. */
3143 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3144 yylval.opval->op_private = OPpCONST_BARE;
3146 /* And if "Foo::", then that's what it certainly is. */
3151 /* See if it's the indirect object for a list operator. */
3153 if (PL_oldoldbufptr &&
3154 PL_oldoldbufptr < PL_bufptr &&
3155 (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
3156 /* NO SKIPSPACE BEFORE HERE! */
3157 (PL_expect == XREF ||
3158 ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
3160 bool immediate_paren = *s == '(';
3162 /* (Now we can afford to cross potential line boundary.) */
3165 /* Two barewords in a row may indicate method call. */
3167 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp=intuit_method(s,gv)))
3170 /* If not a declared subroutine, it's an indirect object. */
3171 /* (But it's an indir obj regardless for sort.) */
3173 if ((PL_last_lop_op == OP_SORT ||
3174 (!immediate_paren && (!gv || !GvCVu(gv)))) &&
3175 (PL_last_lop_op != OP_MAPSTART &&
3176 PL_last_lop_op != OP_GREPSTART))
3178 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3183 /* If followed by a paren, it's certainly a subroutine. */
3185 PL_expect = XOPERATOR;
3189 PL_last_proto = Nullch;
3190 if (gv && GvCVu(gv)) {
3192 if ((cv = GvCV(gv)) && SvPOK(cv))
3193 PL_last_proto = SvPV((SV*)cv, n_a);
3194 for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
3195 if (*d == ')' && (sv = cv_const_sv(cv))) {
3200 PL_nextval[PL_nexttoke].opval = yylval.opval;
3201 PL_expect = XOPERATOR;
3204 PL_last_lop_op = OP_ENTERSUB;
3208 /* If followed by var or block, call it a method (unless sub) */
3210 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3211 PL_last_lop = PL_oldbufptr;
3212 PL_last_lop_op = OP_METHOD;
3216 /* If followed by a bareword, see if it looks like indir obj. */
3218 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp = intuit_method(s,gv)))
3221 /* Not a method, so call it a subroutine (if defined) */
3223 if (gv && GvCVu(gv)) {
3225 if (lastchar == '-')
3226 warn("Ambiguous use of -%s resolved as -&%s()",
3227 PL_tokenbuf, PL_tokenbuf);
3228 PL_last_lop = PL_oldbufptr;
3229 PL_last_lop_op = OP_ENTERSUB;
3230 PL_last_proto = Nullch;
3231 /* Check for a constant sub */
3233 if ((sv = cv_const_sv(cv))) {
3235 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3236 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3237 yylval.opval->op_private = 0;
3241 /* Resolve to GV now. */
3242 op_free(yylval.opval);
3243 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
3244 PL_last_lop_op = OP_ENTERSUB;
3245 /* Is there a prototype? */
3248 PL_last_proto = SvPV((SV*)cv, len);
3251 if (strEQ(PL_last_proto, "$"))
3253 if (*PL_last_proto == '&' && *s == '{') {
3254 sv_setpv(PL_subname,"__ANON__");
3258 PL_nextval[PL_nexttoke].opval = yylval.opval;
3264 /* It could be a prototypical bearword. */
3265 if (PL_last_lop_op == OP_ENTERSUB && PL_last_proto &&
3266 PL_last_proto[PL_last_proto[0] == ';' ? 1 : 0] == '*')
3268 PL_last_proto = Nullch;
3272 if (PL_hints & HINT_STRICT_SUBS &&
3275 PL_last_lop_op != OP_TRUNCATE && /* S/F prototype in opcode.pl */
3276 PL_last_lop_op != OP_ACCEPT &&
3277 PL_last_lop_op != OP_PIPE_OP &&
3278 PL_last_lop_op != OP_SOCKPAIR)
3281 "Bareword \"%s\" not allowed while \"strict subs\" in use",
3286 /* Call it a bare word */
3289 if (ckWARN(WARN_RESERVED)) {
3290 if (lastchar != '-') {
3291 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3293 warner(WARN_RESERVED, PL_warn_reserved, PL_tokenbuf);
3298 if (lastchar && strchr("*%&", lastchar)) {
3299 warn("Operator or semicolon missing before %c%s",
3300 lastchar, PL_tokenbuf);
3301 warn("Ambiguous use of %c resolved as operator %c",
3302 lastchar, lastchar);
3308 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3309 newSVsv(GvSV(PL_curcop->cop_filegv)));
3313 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3314 newSVpvf("%ld", (long)PL_curcop->cop_line));
3317 case KEY___PACKAGE__:
3318 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3320 ? newSVsv(PL_curstname)
3329 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
3330 char *pname = "main";
3331 if (PL_tokenbuf[2] == 'D')
3332 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
3333 gv = gv_fetchpv(form("%s::DATA", pname), TRUE, SVt_PVIO);
3336 GvIOp(gv) = newIO();
3337 IoIFP(GvIOp(gv)) = PL_rsfp;
3338 #if defined(HAS_FCNTL) && defined(F_SETFD)
3340 int fd = PerlIO_fileno(PL_rsfp);
3341 fcntl(fd,F_SETFD,fd >= 3);
3344 /* Mark this internal pseudo-handle as clean */
3345 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3347 IoTYPE(GvIOp(gv)) = '|';
3348 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
3349 IoTYPE(GvIOp(gv)) = '-';
3351 IoTYPE(GvIOp(gv)) = '<';
3362 if (PL_expect == XSTATE) {
3369 if (*s == ':' && s[1] == ':') {
3372 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3373 tmp = keyword(PL_tokenbuf, len);
3387 LOP(OP_ACCEPT,XTERM);
3393 LOP(OP_ATAN2,XTERM);
3402 LOP(OP_BLESS,XTERM);
3411 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
3428 if (!PL_cryptseen++)
3431 LOP(OP_CRYPT,XTERM);
3434 if (ckWARN(WARN_OCTAL)) {
3435 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
3436 if (*d != '0' && isDIGIT(*d))
3437 yywarn("chmod: mode argument is missing initial 0");
3439 LOP(OP_CHMOD,XTERM);
3442 LOP(OP_CHOWN,XTERM);
3445 LOP(OP_CONNECT,XTERM);
3461 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3465 PL_hints |= HINT_BLOCK_SCOPE;
3475 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3476 LOP(OP_DBMOPEN,XTERM);
3482 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3489 yylval.ival = PL_curcop->cop_line;
3503 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
3504 UNIBRACK(OP_ENTEREVAL);
3519 case KEY_endhostent:
3525 case KEY_endservent:
3528 case KEY_endprotoent:
3539 yylval.ival = PL_curcop->cop_line;
3541 if (PL_expect == XSTATE && isIDFIRST_lazy(s)) {
3543 if ((PL_bufend - p) >= 3 &&
3544 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3547 if (isIDFIRST_lazy(p))
3548 croak("Missing $ on loop variable");
3553 LOP(OP_FORMLINE,XTERM);
3559 LOP(OP_FCNTL,XTERM);
3565 LOP(OP_FLOCK,XTERM);
3574 LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
3577 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3592 case KEY_getpriority:
3593 LOP(OP_GETPRIORITY,XTERM);
3595 case KEY_getprotobyname:
3598 case KEY_getprotobynumber:
3599 LOP(OP_GPBYNUMBER,XTERM);
3601 case KEY_getprotoent:
3613 case KEY_getpeername:
3614 UNI(OP_GETPEERNAME);
3616 case KEY_gethostbyname:
3619 case KEY_gethostbyaddr:
3620 LOP(OP_GHBYADDR,XTERM);
3622 case KEY_gethostent:
3625 case KEY_getnetbyname:
3628 case KEY_getnetbyaddr:
3629 LOP(OP_GNBYADDR,XTERM);
3634 case KEY_getservbyname:
3635 LOP(OP_GSBYNAME,XTERM);
3637 case KEY_getservbyport:
3638 LOP(OP_GSBYPORT,XTERM);
3640 case KEY_getservent:
3643 case KEY_getsockname:
3644 UNI(OP_GETSOCKNAME);
3646 case KEY_getsockopt:
3647 LOP(OP_GSOCKOPT,XTERM);
3669 yylval.ival = PL_curcop->cop_line;
3673 LOP(OP_INDEX,XTERM);
3679 LOP(OP_IOCTL,XTERM);
3691 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3722 LOP(OP_LISTEN,XTERM);
3731 s = scan_pat(s,OP_MATCH);
3732 TERM(sublex_start());
3735 LOP(OP_MAPSTART, XREF);
3738 LOP(OP_MKDIR,XTERM);
3741 LOP(OP_MSGCTL,XTERM);
3744 LOP(OP_MSGGET,XTERM);
3747 LOP(OP_MSGRCV,XTERM);
3750 LOP(OP_MSGSND,XTERM);
3755 if (isIDFIRST_lazy(s)) {
3756 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
3757 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
3758 if (!PL_in_my_stash) {
3761 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
3768 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3775 if (PL_expect != XSTATE)
3776 yyerror("\"no\" not allowed in expression");
3777 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3778 s = force_version(s);
3787 if (isIDFIRST_lazy(s)) {
3789 for (d = s; isALNUM_lazy(d); d++) ;
3791 if (strchr("|&*+-=!?:.", *t))
3792 warn("Precedence problem: open %.*s should be open(%.*s)",
3798 yylval.ival = OP_OR;
3808 LOP(OP_OPEN_DIR,XTERM);
3811 checkcomma(s,PL_tokenbuf,"filehandle");
3815 checkcomma(s,PL_tokenbuf,"filehandle");
3834 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3838 LOP(OP_PIPE_OP,XTERM);
3843 missingterm((char*)0);
3844 yylval.ival = OP_CONST;
3845 TERM(sublex_start());
3853 missingterm((char*)0);
3855 if (SvCUR(PL_lex_stuff)) {
3858 d = SvPV_force(PL_lex_stuff, len);
3860 for (; isSPACE(*d) && len; --len, ++d) ;
3863 if (!warned && ckWARN(WARN_SYNTAX)) {
3864 for (; !isSPACE(*d) && len; --len, ++d) {
3867 "Possible attempt to separate words with commas");
3870 else if (*d == '#') {
3872 "Possible attempt to put comments in qw() list");
3878 for (; !isSPACE(*d) && len; --len, ++d) ;
3880 words = append_elem(OP_LIST, words,
3881 newSVOP(OP_CONST, 0, newSVpvn(b, d-b)));
3885 PL_nextval[PL_nexttoke].opval = words;
3890 SvREFCNT_dec(PL_lex_stuff);
3891 PL_lex_stuff = Nullsv;
3898 missingterm((char*)0);
3899 yylval.ival = OP_STRINGIFY;
3900 if (SvIVX(PL_lex_stuff) == '\'')
3901 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
3902 TERM(sublex_start());
3905 s = scan_pat(s,OP_QR);
3906 TERM(sublex_start());
3911 missingterm((char*)0);
3912 yylval.ival = OP_BACKTICK;
3914 TERM(sublex_start());
3920 *PL_tokenbuf = '\0';
3921 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3922 if (isIDFIRST_lazy(PL_tokenbuf))
3923 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
3925 yyerror("<> should be quotes");
3932 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3936 LOP(OP_RENAME,XTERM);
3945 LOP(OP_RINDEX,XTERM);
3968 LOP(OP_REVERSE,XTERM);
3979 TERM(sublex_start());
3981 TOKEN(1); /* force error */
3990 LOP(OP_SELECT,XTERM);
3996 LOP(OP_SEMCTL,XTERM);
3999 LOP(OP_SEMGET,XTERM);
4002 LOP(OP_SEMOP,XTERM);
4008 LOP(OP_SETPGRP,XTERM);
4010 case KEY_setpriority:
4011 LOP(OP_SETPRIORITY,XTERM);
4013 case KEY_sethostent:
4019 case KEY_setservent:
4022 case KEY_setprotoent:
4032 LOP(OP_SEEKDIR,XTERM);
4034 case KEY_setsockopt:
4035 LOP(OP_SSOCKOPT,XTERM);
4041 LOP(OP_SHMCTL,XTERM);
4044 LOP(OP_SHMGET,XTERM);
4047 LOP(OP_SHMREAD,XTERM);
4050 LOP(OP_SHMWRITE,XTERM);
4053 LOP(OP_SHUTDOWN,XTERM);
4062 LOP(OP_SOCKET,XTERM);
4064 case KEY_socketpair:
4065 LOP(OP_SOCKPAIR,XTERM);
4068 checkcomma(s,PL_tokenbuf,"subroutine name");
4070 if (*s == ';' || *s == ')') /* probably a close */
4071 croak("sort is now a reserved word");
4073 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4077 LOP(OP_SPLIT,XTERM);
4080 LOP(OP_SPRINTF,XTERM);
4083 LOP(OP_SPLICE,XTERM);
4099 LOP(OP_SUBSTR,XTERM);
4106 if (isIDFIRST_lazy(s) || *s == '\'' || *s == ':') {
4107 char tmpbuf[sizeof PL_tokenbuf];
4109 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4110 if (strchr(tmpbuf, ':'))
4111 sv_setpv(PL_subname, tmpbuf);
4113 sv_setsv(PL_subname,PL_curstname);
4114 sv_catpvn(PL_subname,"::",2);
4115 sv_catpvn(PL_subname,tmpbuf,len);
4117 s = force_word(s,WORD,FALSE,TRUE,TRUE);
4121 PL_expect = XTERMBLOCK;
4122 sv_setpv(PL_subname,"?");
4125 if (tmp == KEY_format) {
4128 PL_lex_formbrack = PL_lex_brackets + 1;
4132 /* Look for a prototype */
4139 SvREFCNT_dec(PL_lex_stuff);
4140 PL_lex_stuff = Nullsv;
4141 croak("Prototype not terminated");
4144 d = SvPVX(PL_lex_stuff);
4146 for (p = d; *p; ++p) {
4151 SvCUR(PL_lex_stuff) = tmp;
4154 PL_nextval[1] = PL_nextval[0];
4155 PL_nexttype[1] = PL_nexttype[0];
4156 PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
4157 PL_nexttype[0] = THING;
4158 if (PL_nexttoke == 1) {
4159 PL_lex_defer = PL_lex_state;
4160 PL_lex_expect = PL_expect;
4161 PL_lex_state = LEX_KNOWNEXT;
4163 PL_lex_stuff = Nullsv;
4166 if (*SvPV(PL_subname,n_a) == '?') {
4167 sv_setpv(PL_subname,"__ANON__");
4174 LOP(OP_SYSTEM,XREF);
4177 LOP(OP_SYMLINK,XTERM);
4180 LOP(OP_SYSCALL,XTERM);
4183 LOP(OP_SYSOPEN,XTERM);
4186 LOP(OP_SYSSEEK,XTERM);
4189 LOP(OP_SYSREAD,XTERM);
4192 LOP(OP_SYSWRITE,XTERM);
4196 TERM(sublex_start());
4217 LOP(OP_TRUNCATE,XTERM);
4229 yylval.ival = PL_curcop->cop_line;
4233 yylval.ival = PL_curcop->cop_line;
4237 LOP(OP_UNLINK,XTERM);
4243 LOP(OP_UNPACK,XTERM);
4246 LOP(OP_UTIME,XTERM);
4249 if (ckWARN(WARN_OCTAL)) {
4250 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4251 if (*d != '0' && isDIGIT(*d))
4252 yywarn("umask: argument is missing initial 0");
4257 LOP(OP_UNSHIFT,XTERM);
4260 if (PL_expect != XSTATE)
4261 yyerror("\"use\" not allowed in expression");
4264 s = force_version(s);
4265 if(*s == ';' || (s = skipspace(s), *s == ';')) {
4266 PL_nextval[PL_nexttoke].opval = Nullop;
4271 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4272 s = force_version(s);
4285 yylval.ival = PL_curcop->cop_line;
4289 PL_hints |= HINT_BLOCK_SCOPE;
4296 LOP(OP_WAITPID,XTERM);
4304 static char ctl_l[2];
4306 if (ctl_l[0] == '\0')
4307 ctl_l[0] = toCTRL('L');
4308 gv_fetchpv(ctl_l,TRUE, SVt_PV);
4311 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
4316 if (PL_expect == XOPERATOR)
4322 yylval.ival = OP_XOR;
4327 TERM(sublex_start());
4333 keyword(register char *d, I32 len)
4338 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
4339 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
4340 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
4341 if (strEQ(d,"__DATA__")) return KEY___DATA__;
4342 if (strEQ(d,"__END__")) return KEY___END__;
4346 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
4351 if (strEQ(d,"and")) return -KEY_and;
4352 if (strEQ(d,"abs")) return -KEY_abs;
4355 if (strEQ(d,"alarm")) return -KEY_alarm;
4356 if (strEQ(d,"atan2")) return -KEY_atan2;
4359 if (strEQ(d,"accept")) return -KEY_accept;
4364 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
4367 if (strEQ(d,"bless")) return -KEY_bless;
4368 if (strEQ(d,"bind")) return -KEY_bind;
4369 if (strEQ(d,"binmode")) return -KEY_binmode;
4372 if (strEQ(d,"CORE")) return -KEY_CORE;
4377 if (strEQ(d,"cmp")) return -KEY_cmp;
4378 if (strEQ(d,"chr")) return -KEY_chr;
4379 if (strEQ(d,"cos")) return -KEY_cos;
4382 if (strEQ(d,"chop")) return KEY_chop;
4385 if (strEQ(d,"close")) return -KEY_close;
4386 if (strEQ(d,"chdir")) return -KEY_chdir;
4387 if (strEQ(d,"chomp")) return KEY_chomp;
4388 if (strEQ(d,"chmod")) return -KEY_chmod;
4389 if (strEQ(d,"chown")) return -KEY_chown;
4390 if (strEQ(d,"crypt")) return -KEY_crypt;
4393 if (strEQ(d,"chroot")) return -KEY_chroot;
4394 if (strEQ(d,"caller")) return -KEY_caller;
4397 if (strEQ(d,"connect")) return -KEY_connect;
4400 if (strEQ(d,"closedir")) return -KEY_closedir;
4401 if (strEQ(d,"continue")) return -KEY_continue;
4406 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
4411 if (strEQ(d,"do")) return KEY_do;
4414 if (strEQ(d,"die")) return -KEY_die;
4417 if (strEQ(d,"dump")) return -KEY_dump;
4420 if (strEQ(d,"delete")) return KEY_delete;
4423 if (strEQ(d,"defined")) return KEY_defined;
4424 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
4427 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
4432 if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
4433 if (strEQ(d,"END")) return KEY_END;
4438 if (strEQ(d,"eq")) return -KEY_eq;
4441 if (strEQ(d,"eof")) return -KEY_eof;
4442 if (strEQ(d,"exp")) return -KEY_exp;
4445 if (strEQ(d,"else")) return KEY_else;
4446 if (strEQ(d,"exit")) return -KEY_exit;
4447 if (strEQ(d,"eval")) return KEY_eval;
4448 if (strEQ(d,"exec")) return -KEY_exec;
4449 if (strEQ(d,"each")) return KEY_each;
4452 if (strEQ(d,"elsif")) return KEY_elsif;
4455 if (strEQ(d,"exists")) return KEY_exists;
4456 if (strEQ(d,"elseif")) warn("elseif should be elsif");
4459 if (strEQ(d,"endgrent")) return -KEY_endgrent;
4460 if (strEQ(d,"endpwent")) return -KEY_endpwent;
4463 if (strEQ(d,"endnetent")) return -KEY_endnetent;
4466 if (strEQ(d,"endhostent")) return -KEY_endhostent;
4467 if (strEQ(d,"endservent")) return -KEY_endservent;
4470 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
4477 if (strEQ(d,"for")) return KEY_for;
4480 if (strEQ(d,"fork")) return -KEY_fork;
4483 if (strEQ(d,"fcntl")) return -KEY_fcntl;
4484 if (strEQ(d,"flock")) return -KEY_flock;
4487 if (strEQ(d,"format")) return KEY_format;
4488 if (strEQ(d,"fileno")) return -KEY_fileno;
4491 if (strEQ(d,"foreach")) return KEY_foreach;
4494 if (strEQ(d,"formline")) return -KEY_formline;
4500 if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
4501 if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
4505 if (strnEQ(d,"get",3)) {
4510 if (strEQ(d,"ppid")) return -KEY_getppid;
4511 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
4514 if (strEQ(d,"pwent")) return -KEY_getpwent;
4515 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
4516 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
4519 if (strEQ(d,"peername")) return -KEY_getpeername;
4520 if (strEQ(d,"protoent")) return -KEY_getprotoent;
4521 if (strEQ(d,"priority")) return -KEY_getpriority;
4524 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
4527 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
4531 else if (*d == 'h') {
4532 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
4533 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
4534 if (strEQ(d,"hostent")) return -KEY_gethostent;
4536 else if (*d == 'n') {
4537 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
4538 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
4539 if (strEQ(d,"netent")) return -KEY_getnetent;
4541 else if (*d == 's') {
4542 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
4543 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
4544 if (strEQ(d,"servent")) return -KEY_getservent;
4545 if (strEQ(d,"sockname")) return -KEY_getsockname;
4546 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
4548 else if (*d == 'g') {
4549 if (strEQ(d,"grent")) return -KEY_getgrent;
4550 if (strEQ(d,"grnam")) return -KEY_getgrnam;
4551 if (strEQ(d,"grgid")) return -KEY_getgrgid;
4553 else if (*d == 'l') {
4554 if (strEQ(d,"login")) return -KEY_getlogin;
4556 else if (strEQ(d,"c")) return -KEY_getc;
4561 if (strEQ(d,"gt")) return -KEY_gt;
4562 if (strEQ(d,"ge")) return -KEY_ge;
4565 if (strEQ(d,"grep")) return KEY_grep;
4566 if (strEQ(d,"goto")) return KEY_goto;
4567 if (strEQ(d,"glob")) return KEY_glob;
4570 if (strEQ(d,"gmtime")) return -KEY_gmtime;
4575 if (strEQ(d,"hex")) return -KEY_hex;
4578 if (strEQ(d,"INIT")) return KEY_INIT;
4583 if (strEQ(d,"if")) return KEY_if;
4586 if (strEQ(d,"int")) return -KEY_int;
4589 if (strEQ(d,"index")) return -KEY_index;
4590 if (strEQ(d,"ioctl")) return -KEY_ioctl;
4595 if (strEQ(d,"join")) return -KEY_join;
4599 if (strEQ(d,"keys")) return KEY_keys;
4600 if (strEQ(d,"kill")) return -KEY_kill;
4605 if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
4606 if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
4612 if (strEQ(d,"lt")) return -KEY_lt;
4613 if (strEQ(d,"le")) return -KEY_le;
4614 if (strEQ(d,"lc")) return -KEY_lc;
4617 if (strEQ(d,"log")) return -KEY_log;
4620 if (strEQ(d,"last")) return KEY_last;
4621 if (strEQ(d,"link")) return -KEY_link;
4622 if (strEQ(d,"lock")) return -KEY_lock;
4625 if (strEQ(d,"local")) return KEY_local;
4626 if (strEQ(d,"lstat")) return -KEY_lstat;
4629 if (strEQ(d,"length")) return -KEY_length;
4630 if (strEQ(d,"listen")) return -KEY_listen;
4633 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
4636 if (strEQ(d,"localtime")) return -KEY_localtime;
4642 case 1: return KEY_m;
4644 if (strEQ(d,"my")) return KEY_my;
4647 if (strEQ(d,"map")) return KEY_map;
4650 if (strEQ(d,"mkdir")) return -KEY_mkdir;
4653 if (strEQ(d,"msgctl")) return -KEY_msgctl;
4654 if (strEQ(d,"msgget")) return -KEY_msgget;
4655 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
4656 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
4661 if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
4664 if (strEQ(d,"next")) return KEY_next;
4665 if (strEQ(d,"ne")) return -KEY_ne;
4666 if (strEQ(d,"not")) return -KEY_not;
4667 if (strEQ(d,"no")) return KEY_no;
4672 if (strEQ(d,"or")) return -KEY_or;
4675 if (strEQ(d,"ord")) return -KEY_ord;
4676 if (strEQ(d,"oct")) return -KEY_oct;
4677 if (strEQ(d,"our")) { deprecate("reserved word \"our\"");
4681 if (strEQ(d,"open")) return -KEY_open;
4684 if (strEQ(d,"opendir")) return -KEY_opendir;
4691 if (strEQ(d,"pop")) return KEY_pop;
4692 if (strEQ(d,"pos")) return KEY_pos;
4695 if (strEQ(d,"push")) return KEY_push;
4696 if (strEQ(d,"pack")) return -KEY_pack;
4697 if (strEQ(d,"pipe")) return -KEY_pipe;
4700 if (strEQ(d,"print")) return KEY_print;
4703 if (strEQ(d,"printf")) return KEY_printf;
4706 if (strEQ(d,"package")) return KEY_package;
4709 if (strEQ(d,"prototype")) return KEY_prototype;
4714 if (strEQ(d,"q")) return KEY_q;
4715 if (strEQ(d,"qr")) return KEY_qr;
4716 if (strEQ(d,"qq")) return KEY_qq;
4717 if (strEQ(d,"qw")) return KEY_qw;
4718 if (strEQ(d,"qx")) return KEY_qx;
4720 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
4725 if (strEQ(d,"ref")) return -KEY_ref;
4728 if (strEQ(d,"read")) return -KEY_read;
4729 if (strEQ(d,"rand")) return -KEY_rand;
4730 if (strEQ(d,"recv")) return -KEY_recv;
4731 if (strEQ(d,"redo")) return KEY_redo;
4734 if (strEQ(d,"rmdir")) return -KEY_rmdir;
4735 if (strEQ(d,"reset")) return -KEY_reset;
4738 if (strEQ(d,"return")) return KEY_return;
4739 if (strEQ(d,"rename")) return -KEY_rename;
4740 if (strEQ(d,"rindex")) return -KEY_rindex;
4743 if (strEQ(d,"require")) return -KEY_require;
4744 if (strEQ(d,"reverse")) return -KEY_reverse;
4745 if (strEQ(d,"readdir")) return -KEY_readdir;
4748 if (strEQ(d,"readlink")) return -KEY_readlink;
4749 if (strEQ(d,"readline")) return -KEY_readline;
4750 if (strEQ(d,"readpipe")) return -KEY_readpipe;
4753 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
4759 case 0: return KEY_s;
4761 if (strEQ(d,"scalar")) return KEY_scalar;
4766 if (strEQ(d,"seek")) return -KEY_seek;
4767 if (strEQ(d,"send")) return -KEY_send;
4770 if (strEQ(d,"semop")) return -KEY_semop;
4773 if (strEQ(d,"select")) return -KEY_select;
4774 if (strEQ(d,"semctl")) return -KEY_semctl;
4775 if (strEQ(d,"semget")) return -KEY_semget;
4778 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
4779 if (strEQ(d,"seekdir")) return -KEY_seekdir;
4782 if (strEQ(d,"setpwent")) return -KEY_setpwent;
4783 if (strEQ(d,"setgrent")) return -KEY_setgrent;
4786 if (strEQ(d,"setnetent")) return -KEY_setnetent;
4789 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
4790 if (strEQ(d,"sethostent")) return -KEY_sethostent;
4791 if (strEQ(d,"setservent")) return -KEY_setservent;
4794 if (strEQ(d,"setpriority")) return -KEY_setpriority;
4795 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
4802 if (strEQ(d,"shift")) return KEY_shift;
4805 if (strEQ(d,"shmctl")) return -KEY_shmctl;
4806 if (strEQ(d,"shmget")) return -KEY_shmget;
4809 if (strEQ(d,"shmread")) return -KEY_shmread;
4812 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
4813 if (strEQ(d,"shutdown")) return -KEY_shutdown;
4818 if (strEQ(d,"sin")) return -KEY_sin;
4821 if (strEQ(d,"sleep")) return -KEY_sleep;
4824 if (strEQ(d,"sort")) return KEY_sort;
4825 if (strEQ(d,"socket")) return -KEY_socket;
4826 if (strEQ(d,"socketpair")) return -KEY_socketpair;
4829 if (strEQ(d,"split")) return KEY_split;
4830 if (strEQ(d,"sprintf")) return -KEY_sprintf;
4831 if (strEQ(d,"splice")) return KEY_splice;
4834 if (strEQ(d,"sqrt")) return -KEY_sqrt;
4837 if (strEQ(d,"srand")) return -KEY_srand;
4840 if (strEQ(d,"stat")) return -KEY_stat;
4841 if (strEQ(d,"study")) return KEY_study;
4844 if (strEQ(d,"substr")) return -KEY_substr;
4845 if (strEQ(d,"sub")) return KEY_sub;
4850 if (strEQ(d,"system")) return -KEY_system;
4853 if (strEQ(d,"symlink")) return -KEY_symlink;
4854 if (strEQ(d,"syscall")) return -KEY_syscall;
4855 if (strEQ(d,"sysopen")) return -KEY_sysopen;
4856 if (strEQ(d,"sysread")) return -KEY_sysread;
4857 if (strEQ(d,"sysseek")) return -KEY_sysseek;
4860 if (strEQ(d,"syswrite")) return -KEY_syswrite;
4869 if (strEQ(d,"tr")) return KEY_tr;
4872 if (strEQ(d,"tie")) return KEY_tie;
4875 if (strEQ(d,"tell")) return -KEY_tell;
4876 if (strEQ(d,"tied")) return KEY_tied;
4877 if (strEQ(d,"time")) return -KEY_time;
4880 if (strEQ(d,"times")) return -KEY_times;
4883 if (strEQ(d,"telldir")) return -KEY_telldir;
4886 if (strEQ(d,"truncate")) return -KEY_truncate;
4893 if (strEQ(d,"uc")) return -KEY_uc;
4896 if (strEQ(d,"use")) return KEY_use;
4899 if (strEQ(d,"undef")) return KEY_undef;
4900 if (strEQ(d,"until")) return KEY_until;
4901 if (strEQ(d,"untie")) return KEY_untie;
4902 if (strEQ(d,"utime")) return -KEY_utime;
4903 if (strEQ(d,"umask")) return -KEY_umask;
4906 if (strEQ(d,"unless")) return KEY_unless;
4907 if (strEQ(d,"unpack")) return -KEY_unpack;
4908 if (strEQ(d,"unlink")) return -KEY_unlink;
4911 if (strEQ(d,"unshift")) return KEY_unshift;
4912 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
4917 if (strEQ(d,"values")) return -KEY_values;
4918 if (strEQ(d,"vec")) return -KEY_vec;
4923 if (strEQ(d,"warn")) return -KEY_warn;
4924 if (strEQ(d,"wait")) return -KEY_wait;
4927 if (strEQ(d,"while")) return KEY_while;
4928 if (strEQ(d,"write")) return -KEY_write;
4931 if (strEQ(d,"waitpid")) return -KEY_waitpid;
4934 if (strEQ(d,"wantarray")) return -KEY_wantarray;
4939 if (len == 1) return -KEY_x;
4940 if (strEQ(d,"xor")) return -KEY_xor;
4943 if (len == 1) return KEY_y;
4952 checkcomma(register char *s, char *name, char *what)
4956 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
4957 dTHR; /* only for ckWARN */
4958 if (ckWARN(WARN_SYNTAX)) {
4960 for (w = s+2; *w && level; w++) {
4967 for (; *w && isSPACE(*w); w++) ;
4968 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
4969 warner(WARN_SYNTAX, "%s (...) interpreted as function",name);
4972 while (s < PL_bufend && isSPACE(*s))
4976 while (s < PL_bufend && isSPACE(*s))
4978 if (isIDFIRST_lazy(s)) {
4980 while (isALNUM_lazy(s))
4982 while (s < PL_bufend && isSPACE(*s))
4987 kw = keyword(w, s - w) || perl_get_cv(w, FALSE) != 0;
4991 croak("No comma allowed after %s", what);
4997 new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
5000 HV *table = GvHV(PL_hintgv); /* ^H */
5003 bool oldcatch = CATCH_GET;
5008 yyerror("%^H is not defined");
5011 cvp = hv_fetch(table, key, strlen(key), FALSE);
5012 if (!cvp || !SvOK(*cvp)) {
5014 sprintf(buf,"$^H{%s} is not defined", key);
5018 sv_2mortal(sv); /* Parent created it permanently */
5021 pv = sv_2mortal(newSVpvn(s, len));
5023 typesv = sv_2mortal(newSVpv(type, 0));
5025 typesv = &PL_sv_undef;
5027 Zero(&myop, 1, BINOP);
5028 myop.op_last = (OP *) &myop;
5029 myop.op_next = Nullop;
5030 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
5032 PUSHSTACKi(PERLSI_OVERLOAD);
5035 PL_op = (OP *) &myop;
5036 if (PERLDB_SUB && PL_curstash != PL_debstash)
5037 PL_op->op_private |= OPpENTERSUB_DB;
5048 if (PL_op = pp_entersub(ARGS))
5055 CATCH_SET(oldcatch);
5060 sprintf(buf,"Call to &{$^H{%s}} did not return a defined value", key);
5063 return SvREFCNT_inc(res);
5067 scan_word(register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
5069 register char *d = dest;
5070 register char *e = d + destlen - 3; /* two-character token, ending NUL */
5073 croak(ident_too_long);
5074 if (isALNUM(*s)) /* UTF handled below */
5076 else if (*s == '\'' && allow_package && isIDFIRST_lazy(s+1)) {
5081 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
5085 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5086 char *t = s + UTF8SKIP(s);
5087 while (*t & 0x80 && is_utf8_mark((U8*)t))
5089 if (d + (t - s) > e)
5090 croak(ident_too_long);
5091 Copy(s, d, t - s, char);
5104 scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
5111 if (PL_lex_brackets == 0)
5112 PL_lex_fakebrack = 0;
5116 e = d + destlen - 3; /* two-character token, ending NUL */
5118 while (isDIGIT(*s)) {
5120 croak(ident_too_long);
5127 croak(ident_too_long);
5128 if (isALNUM(*s)) /* UTF handled below */
5130 else if (*s == '\'' && isIDFIRST_lazy(s+1)) {
5135 else if (*s == ':' && s[1] == ':') {
5139 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5140 char *t = s + UTF8SKIP(s);
5141 while (*t & 0x80 && is_utf8_mark((U8*)t))
5143 if (d + (t - s) > e)
5144 croak(ident_too_long);
5145 Copy(s, d, t - s, char);
5156 if (PL_lex_state != LEX_NORMAL)
5157 PL_lex_state = LEX_INTERPENDMAYBE;
5160 if (*s == '$' && s[1] &&
5161 (isALNUM_lazy(s+1) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
5174 if (*d == '^' && *s && isCONTROLVAR(*s)) {
5179 if (isSPACE(s[-1])) {
5182 if (ch != ' ' && ch != '\t') {
5188 if (isIDFIRST_lazy(d)) {
5192 while (e < send && isALNUM_lazy(e) || *e == ':') {
5194 while (e < send && *e & 0x80 && is_utf8_mark((U8*)e))
5197 Copy(s, d, e - s, char);
5202 while ((isALNUM(*s) || *s == ':') && d < e)
5205 croak(ident_too_long);
5208 while (s < send && (*s == ' ' || *s == '\t')) s++;
5209 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
5210 dTHR; /* only for ckWARN */
5211 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
5212 char *brack = *s == '[' ? "[...]" : "{...}";
5213 warner(WARN_AMBIGUOUS,
5214 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
5215 funny, dest, brack, funny, dest, brack);
5217 PL_lex_fakebrack = PL_lex_brackets+1;
5219 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5223 /* Handle extended ${^Foo} variables
5224 * 1999-02-27 mjd-perl-patch@plover.com */
5225 else if (!isALNUM(*d) && !isPRINT(*d) /* isCTRL(d) */
5229 while (isALNUM(*s) && d < e) {
5233 croak(ident_too_long);
5238 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
5239 PL_lex_state = LEX_INTERPEND;
5242 if (PL_lex_state == LEX_NORMAL) {
5243 dTHR; /* only for ckWARN */
5244 if (ckWARN(WARN_AMBIGUOUS) &&
5245 (keyword(dest, d - dest) || perl_get_cv(dest, FALSE)))
5247 warner(WARN_AMBIGUOUS,
5248 "Ambiguous use of %c{%s} resolved to %c%s",
5249 funny, dest, funny, dest);
5254 s = bracket; /* let the parser handle it */
5258 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
5259 PL_lex_state = LEX_INTERPEND;
5263 void pmflag(U16 *pmfl, int ch)
5268 *pmfl |= PMf_GLOBAL;
5270 *pmfl |= PMf_CONTINUE;
5274 *pmfl |= PMf_MULTILINE;
5276 *pmfl |= PMf_SINGLELINE;
5278 *pmfl |= PMf_EXTENDED;
5282 scan_pat(char *start, I32 type)
5287 s = scan_str(start);
5290 SvREFCNT_dec(PL_lex_stuff);
5291 PL_lex_stuff = Nullsv;
5292 croak("Search pattern not terminated");
5295 pm = (PMOP*)newPMOP(type, 0);
5296 if (PL_multi_open == '?')
5297 pm->op_pmflags |= PMf_ONCE;
5299 while (*s && strchr("iomsx", *s))
5300 pmflag(&pm->op_pmflags,*s++);
5303 while (*s && strchr("iogcmsx", *s))
5304 pmflag(&pm->op_pmflags,*s++);
5306 pm->op_pmpermflags = pm->op_pmflags;
5308 PL_lex_op = (OP*)pm;
5309 yylval.ival = OP_MATCH;
5314 scan_subst(char *start)
5321 yylval.ival = OP_NULL;
5323 s = scan_str(start);
5327 SvREFCNT_dec(PL_lex_stuff);
5328 PL_lex_stuff = Nullsv;
5329 croak("Substitution pattern not terminated");
5332 if (s[-1] == PL_multi_open)
5335 first_start = PL_multi_start;
5339 SvREFCNT_dec(PL_lex_stuff);
5340 PL_lex_stuff = Nullsv;
5342 SvREFCNT_dec(PL_lex_repl);
5343 PL_lex_repl = Nullsv;
5344 croak("Substitution replacement not terminated");
5346 PL_multi_start = first_start; /* so whole substitution is taken together */
5348 pm = (PMOP*)newPMOP(OP_SUBST, 0);
5354 else if (strchr("iogcmsx", *s))
5355 pmflag(&pm->op_pmflags,*s++);
5362 PL_sublex_info.super_bufptr = s;
5363 PL_sublex_info.super_bufend = PL_bufend;
5365 pm->op_pmflags |= PMf_EVAL;
5366 repl = newSVpvn("",0);
5368 sv_catpv(repl, es ? "eval " : "do ");
5369 sv_catpvn(repl, "{ ", 2);
5370 sv_catsv(repl, PL_lex_repl);
5371 sv_catpvn(repl, " };", 2);
5373 SvREFCNT_dec(PL_lex_repl);
5377 pm->op_pmpermflags = pm->op_pmflags;
5378 PL_lex_op = (OP*)pm;
5379 yylval.ival = OP_SUBST;
5384 scan_trans(char *start)
5395 yylval.ival = OP_NULL;
5397 s = scan_str(start);
5400 SvREFCNT_dec(PL_lex_stuff);
5401 PL_lex_stuff = Nullsv;
5402 croak("Transliteration pattern not terminated");
5404 if (s[-1] == PL_multi_open)
5410 SvREFCNT_dec(PL_lex_stuff);
5411 PL_lex_stuff = Nullsv;
5413 SvREFCNT_dec(PL_lex_repl);
5414 PL_lex_repl = Nullsv;
5415 croak("Transliteration replacement not terminated");
5419 o = newSVOP(OP_TRANS, 0, 0);
5420 utf8 = OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF;
5423 New(803,tbl,256,short);
5424 o = newPVOP(OP_TRANS, 0, (char*)tbl);
5428 complement = del = squash = 0;
5429 while (strchr("cdsCU", *s)) {
5431 complement = OPpTRANS_COMPLEMENT;
5433 del = OPpTRANS_DELETE;
5435 squash = OPpTRANS_SQUASH;
5440 utf8 &= ~OPpTRANS_FROM_UTF;
5442 utf8 |= OPpTRANS_FROM_UTF;
5446 utf8 &= ~OPpTRANS_TO_UTF;
5448 utf8 |= OPpTRANS_TO_UTF;
5451 croak("Too many /C and /U options");
5456 o->op_private = del|squash|complement|utf8;
5459 yylval.ival = OP_TRANS;
5464 scan_heredoc(register char *s)
5468 I32 op_type = OP_SCALAR;
5475 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
5479 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
5482 for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
5483 if (*peek && strchr("`'\"",*peek)) {
5486 s = delimcpy(d, e, s, PL_bufend, term, &len);
5496 if (!isALNUM_lazy(s))
5497 deprecate("bare << to mean <<\"\"");
5498 for (; isALNUM_lazy(s); s++) {
5503 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
5504 croak("Delimiter for here document is too long");
5507 len = d - PL_tokenbuf;
5508 #ifndef PERL_STRICT_CR
5509 d = strchr(s, '\r');
5513 while (s < PL_bufend) {
5519 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
5528 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5533 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
5534 herewas = newSVpvn(s,PL_bufend-s);
5536 s--, herewas = newSVpvn(s,d-s);
5537 s += SvCUR(herewas);
5539 tmpstr = NEWSV(87,79);
5540 sv_upgrade(tmpstr, SVt_PVIV);
5545 else if (term == '`') {
5546 op_type = OP_BACKTICK;
5547 SvIVX(tmpstr) = '\\';
5551 PL_multi_start = PL_curcop->cop_line;
5552 PL_multi_open = PL_multi_close = '<';
5553 term = *PL_tokenbuf;
5554 if (PL_lex_inwhat == OP_SUBST && PL_in_eval && !PL_rsfp) {
5555 char *bufptr = PL_sublex_info.super_bufptr;
5556 char *bufend = PL_sublex_info.super_bufend;
5557 char *olds = s - SvCUR(herewas);
5558 s = strchr(bufptr, '\n');
5562 while (s < bufend &&
5563 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5565 PL_curcop->cop_line++;
5568 PL_curcop->cop_line = PL_multi_start;
5569 missingterm(PL_tokenbuf);
5571 sv_setpvn(herewas,bufptr,d-bufptr+1);
5572 sv_setpvn(tmpstr,d+1,s-d);
5574 sv_catpvn(herewas,s,bufend-s);
5575 (void)strcpy(bufptr,SvPVX(herewas));
5582 while (s < PL_bufend &&
5583 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5585 PL_curcop->cop_line++;
5587 if (s >= PL_bufend) {
5588 PL_curcop->cop_line = PL_multi_start;
5589 missingterm(PL_tokenbuf);
5591 sv_setpvn(tmpstr,d+1,s-d);
5593 PL_curcop->cop_line++; /* the preceding stmt passes a newline */
5595 sv_catpvn(herewas,s,PL_bufend-s);
5596 sv_setsv(PL_linestr,herewas);
5597 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
5598 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5601 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
5602 while (s >= PL_bufend) { /* multiple line string? */
5604 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5605 PL_curcop->cop_line = PL_multi_start;
5606 missingterm(PL_tokenbuf);
5608 PL_curcop->cop_line++;
5609 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5610 #ifndef PERL_STRICT_CR
5611 if (PL_bufend - PL_linestart >= 2) {
5612 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
5613 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
5615 PL_bufend[-2] = '\n';
5617 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5619 else if (PL_bufend[-1] == '\r')
5620 PL_bufend[-1] = '\n';
5622 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
5623 PL_bufend[-1] = '\n';
5625 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5626 SV *sv = NEWSV(88,0);
5628 sv_upgrade(sv, SVt_PVMG);
5629 sv_setsv(sv,PL_linestr);
5630 av_store(GvAV(PL_curcop->cop_filegv),
5631 (I32)PL_curcop->cop_line,sv);
5633 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
5636 sv_catsv(PL_linestr,herewas);
5637 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5641 sv_catsv(tmpstr,PL_linestr);
5646 PL_multi_end = PL_curcop->cop_line;
5647 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
5648 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
5649 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
5651 SvREFCNT_dec(herewas);
5652 PL_lex_stuff = tmpstr;
5653 yylval.ival = op_type;
5658 takes: current position in input buffer
5659 returns: new position in input buffer
5660 side-effects: yylval and lex_op are set.
5665 <FH> read from filehandle
5666 <pkg::FH> read from package qualified filehandle
5667 <pkg'FH> read from package qualified filehandle
5668 <$fh> read from filehandle in $fh
5674 scan_inputsymbol(char *start)
5676 register char *s = start; /* current position in buffer */
5682 d = PL_tokenbuf; /* start of temp holding space */
5683 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
5684 end = strchr(s, '\n');
5687 s = delimcpy(d, e, s + 1, end, '>', &len); /* extract until > */
5689 /* die if we didn't have space for the contents of the <>,
5690 or if it didn't end, or if we see a newline
5693 if (len >= sizeof PL_tokenbuf)
5694 croak("Excessively long <> operator");
5696 croak("Unterminated <> operator");
5701 Remember, only scalar variables are interpreted as filehandles by
5702 this code. Anything more complex (e.g., <$fh{$num}>) will be
5703 treated as a glob() call.
5704 This code makes use of the fact that except for the $ at the front,
5705 a scalar variable and a filehandle look the same.
5707 if (*d == '$' && d[1]) d++;
5709 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
5710 while (*d && (isALNUM_lazy(d) || *d == '\'' || *d == ':'))
5713 /* If we've tried to read what we allow filehandles to look like, and
5714 there's still text left, then it must be a glob() and not a getline.
5715 Use scan_str to pull out the stuff between the <> and treat it
5716 as nothing more than a string.
5719 if (d - PL_tokenbuf != len) {
5720 yylval.ival = OP_GLOB;
5722 s = scan_str(start);
5724 croak("Glob not terminated");
5728 /* we're in a filehandle read situation */
5731 /* turn <> into <ARGV> */
5733 (void)strcpy(d,"ARGV");
5735 /* if <$fh>, create the ops to turn the variable into a
5741 /* try to find it in the pad for this block, otherwise find
5742 add symbol table ops
5744 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
5745 OP *o = newOP(OP_PADSV, 0);
5747 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
5750 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
5751 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
5752 newUNOP(OP_RV2SV, 0,
5753 newGVOP(OP_GV, 0, gv)));
5755 PL_lex_op->op_flags |= OPf_SPECIAL;
5756 /* we created the ops in PL_lex_op, so make yylval.ival a null op */
5757 yylval.ival = OP_NULL;
5760 /* If it's none of the above, it must be a literal filehandle
5761 (<Foo::BAR> or <FOO>) so build a simple readline OP */
5763 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
5764 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
5765 yylval.ival = OP_NULL;
5774 takes: start position in buffer
5775 returns: position to continue reading from buffer
5776 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
5777 updates the read buffer.
5779 This subroutine pulls a string out of the input. It is called for:
5780 q single quotes q(literal text)
5781 ' single quotes 'literal text'
5782 qq double quotes qq(interpolate $here please)
5783 " double quotes "interpolate $here please"
5784 qx backticks qx(/bin/ls -l)
5785 ` backticks `/bin/ls -l`
5786 qw quote words @EXPORT_OK = qw( func() $spam )
5787 m// regexp match m/this/
5788 s/// regexp substitute s/this/that/
5789 tr/// string transliterate tr/this/that/
5790 y/// string transliterate y/this/that/
5791 ($*@) sub prototypes sub foo ($)
5792 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
5794 In most of these cases (all but <>, patterns and transliterate)
5795 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
5796 calls scan_str(). s/// makes yylex() call scan_subst() which calls
5797 scan_str(). tr/// and y/// make yylex() call scan_trans() which
5800 It skips whitespace before the string starts, and treats the first
5801 character as the delimiter. If the delimiter is one of ([{< then
5802 the corresponding "close" character )]}> is used as the closing
5803 delimiter. It allows quoting of delimiters, and if the string has
5804 balanced delimiters ([{<>}]) it allows nesting.
5806 The lexer always reads these strings into lex_stuff, except in the
5807 case of the operators which take *two* arguments (s/// and tr///)
5808 when it checks to see if lex_stuff is full (presumably with the 1st
5809 arg to s or tr) and if so puts the string into lex_repl.
5814 scan_str(char *start)
5817 SV *sv; /* scalar value: string */
5818 char *tmps; /* temp string, used for delimiter matching */
5819 register char *s = start; /* current position in the buffer */
5820 register char term; /* terminating character */
5821 register char *to; /* current position in the sv's data */
5822 I32 brackets = 1; /* bracket nesting level */
5824 /* skip space before the delimiter */
5828 /* mark where we are, in case we need to report errors */
5831 /* after skipping whitespace, the next character is the terminator */
5833 /* mark where we are */
5834 PL_multi_start = PL_curcop->cop_line;
5835 PL_multi_open = term;
5837 /* find corresponding closing delimiter */
5838 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
5840 PL_multi_close = term;
5842 /* create a new SV to hold the contents. 87 is leak category, I'm
5843 assuming. 79 is the SV's initial length. What a random number. */
5845 sv_upgrade(sv, SVt_PVIV);
5847 (void)SvPOK_only(sv); /* validate pointer */
5849 /* move past delimiter and try to read a complete string */
5852 /* extend sv if need be */
5853 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
5854 /* set 'to' to the next character in the sv's string */
5855 to = SvPVX(sv)+SvCUR(sv);
5857 /* if open delimiter is the close delimiter read unbridle */
5858 if (PL_multi_open == PL_multi_close) {
5859 for (; s < PL_bufend; s++,to++) {
5860 /* embedded newlines increment the current line number */
5861 if (*s == '\n' && !PL_rsfp)
5862 PL_curcop->cop_line++;
5863 /* handle quoted delimiters */
5864 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
5867 /* any other quotes are simply copied straight through */
5871 /* terminate when run out of buffer (the for() condition), or
5872 have found the terminator */
5873 else if (*s == term)
5879 /* if the terminator isn't the same as the start character (e.g.,
5880 matched brackets), we have to allow more in the quoting, and
5881 be prepared for nested brackets.
5884 /* read until we run out of string, or we find the terminator */
5885 for (; s < PL_bufend; s++,to++) {
5886 /* embedded newlines increment the line count */
5887 if (*s == '\n' && !PL_rsfp)
5888 PL_curcop->cop_line++;
5889 /* backslashes can escape the open or closing characters */
5890 if (*s == '\\' && s+1 < PL_bufend) {
5891 if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))
5896 /* allow nested opens and closes */
5897 else if (*s == PL_multi_close && --brackets <= 0)
5899 else if (*s == PL_multi_open)
5904 /* terminate the copied string and update the sv's end-of-string */
5906 SvCUR_set(sv, to - SvPVX(sv));
5909 * this next chunk reads more into the buffer if we're not done yet
5912 if (s < PL_bufend) break; /* handle case where we are done yet :-) */
5914 #ifndef PERL_STRICT_CR
5915 if (to - SvPVX(sv) >= 2) {
5916 if ((to[-2] == '\r' && to[-1] == '\n') ||
5917 (to[-2] == '\n' && to[-1] == '\r'))
5921 SvCUR_set(sv, to - SvPVX(sv));
5923 else if (to[-1] == '\r')
5926 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
5930 /* if we're out of file, or a read fails, bail and reset the current
5931 line marker so we can report where the unterminated string began
5934 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5936 PL_curcop->cop_line = PL_multi_start;
5939 /* we read a line, so increment our line counter */
5940 PL_curcop->cop_line++;
5942 /* update debugger info */
5943 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5944 SV *sv = NEWSV(88,0);
5946 sv_upgrade(sv, SVt_PVMG);
5947 sv_setsv(sv,PL_linestr);
5948 av_store(GvAV(PL_curcop->cop_filegv),
5949 (I32)PL_curcop->cop_line, sv);
5952 /* having changed the buffer, we must update PL_bufend */
5953 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5956 /* at this point, we have successfully read the delimited string */
5958 PL_multi_end = PL_curcop->cop_line;
5961 /* if we allocated too much space, give some back */
5962 if (SvCUR(sv) + 5 < SvLEN(sv)) {
5963 SvLEN_set(sv, SvCUR(sv) + 1);
5964 Renew(SvPVX(sv), SvLEN(sv), char);
5967 /* decide whether this is the first or second quoted string we've read
5980 takes: pointer to position in buffer
5981 returns: pointer to new position in buffer
5982 side-effects: builds ops for the constant in yylval.op
5984 Read a number in any of the formats that Perl accepts:
5986 0(x[0-7A-F]+)|([0-7]+)|(b[01])
5987 [\d_]+(\.[\d_]*)?[Ee](\d+)
5989 Underbars (_) are allowed in decimal numbers. If -w is on,
5990 underbars before a decimal point must be at three digit intervals.
5992 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
5995 If it reads a number without a decimal point or an exponent, it will
5996 try converting the number to an integer and see if it can do so
5997 without loss of precision.
6001 scan_num(char *start)
6003 register char *s = start; /* current position in buffer */
6004 register char *d; /* destination in temp buffer */
6005 register char *e; /* end of temp buffer */
6006 I32 tryiv; /* used to see if it can be an int */
6007 double value; /* number read, as a double */
6008 SV *sv; /* place to put the converted number */
6009 I32 floatit; /* boolean: int or float? */
6010 char *lastub = 0; /* position of last underbar */
6011 static char number_too_long[] = "Number too long";
6013 /* We use the first character to decide what type of number this is */
6017 croak("panic: scan_num");
6019 /* if it starts with a 0, it could be an octal number, a decimal in
6020 0.13 disguise, or a hexadecimal number, or a binary number.
6025 u holds the "number so far"
6026 shift the power of 2 of the base
6027 (hex == 4, octal == 3, binary == 1)
6028 overflowed was the number more than we can hold?
6030 Shift is used when we add a digit. It also serves as an "are
6031 we in octal/hex/binary?" indicator to disallow hex characters
6036 bool overflowed = FALSE;
6042 } else if (s[1] == 'b') {
6046 /* check for a decimal in disguise */
6047 else if (s[1] == '.')
6049 /* so it must be octal */
6054 /* read the rest of the number */
6056 UV n, b; /* n is used in the overflow test, b is the digit we're adding on */
6060 /* if we don't mention it, we're done */
6069 /* 8 and 9 are not octal */
6072 yyerror(form("Illegal octal digit '%c'", *s));
6075 yyerror(form("Illegal binary digit '%c'", *s));
6079 case '2': case '3': case '4':
6080 case '5': case '6': case '7':
6082 yyerror(form("Illegal binary digit '%c'", *s));
6086 b = *s++ & 15; /* ASCII digit -> value of digit */
6090 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
6091 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
6092 /* make sure they said 0x */
6097 /* Prepare to put the digit we have onto the end
6098 of the number so far. We check for overflows.
6102 n = u << shift; /* make room for the digit */
6103 if (!overflowed && (n >> shift) != u
6104 && !(PL_hints & HINT_NEW_BINARY)) {
6105 warn("Integer overflow in %s number",
6106 (shift == 4) ? "hex"
6107 : ((shift == 3) ? "octal" : "binary"));
6110 u = n | b; /* add the digit to the end */
6115 /* if we get here, we had success: make a scalar value from
6121 if ( PL_hints & HINT_NEW_BINARY)
6122 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
6127 handle decimal numbers.
6128 we're also sent here when we read a 0 as the first digit
6130 case '1': case '2': case '3': case '4': case '5':
6131 case '6': case '7': case '8': case '9': case '.':
6134 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
6137 /* read next group of digits and _ and copy into d */
6138 while (isDIGIT(*s) || *s == '_') {
6139 /* skip underscores, checking for misplaced ones
6143 dTHR; /* only for ckWARN */
6144 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
6145 warner(WARN_SYNTAX, "Misplaced _ in number");
6149 /* check for end of fixed-length buffer */
6151 croak(number_too_long);
6152 /* if we're ok, copy the character */
6157 /* final misplaced underbar check */
6158 if (lastub && s - lastub != 3) {
6160 if (ckWARN(WARN_SYNTAX))
6161 warner(WARN_SYNTAX, "Misplaced _ in number");
6164 /* read a decimal portion if there is one. avoid
6165 3..5 being interpreted as the number 3. followed
6168 if (*s == '.' && s[1] != '.') {
6172 /* copy, ignoring underbars, until we run out of
6173 digits. Note: no misplaced underbar checks!
6175 for (; isDIGIT(*s) || *s == '_'; s++) {
6176 /* fixed length buffer check */
6178 croak(number_too_long);
6184 /* read exponent part, if present */
6185 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
6189 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
6190 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
6192 /* allow positive or negative exponent */
6193 if (*s == '+' || *s == '-')
6196 /* read digits of exponent (no underbars :-) */
6197 while (isDIGIT(*s)) {
6199 croak(number_too_long);
6204 /* terminate the string */
6207 /* make an sv from the string */
6209 /* reset numeric locale in case we were earlier left in Swaziland */
6210 SET_NUMERIC_STANDARD();
6211 value = atof(PL_tokenbuf);
6214 See if we can make do with an integer value without loss of
6215 precision. We use I_V to cast to an int, because some
6216 compilers have issues. Then we try casting it back and see
6217 if it was the same. We only do this if we know we
6218 specifically read an integer.
6220 Note: if floatit is true, then we don't need to do the
6224 if (!floatit && (double)tryiv == value)
6225 sv_setiv(sv, tryiv);
6227 sv_setnv(sv, value);
6228 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) )
6229 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
6230 (floatit ? "float" : "integer"), sv, Nullsv, NULL);
6234 /* make the op for the constant and return */
6236 yylval.opval = newSVOP(OP_CONST, 0, sv);
6242 scan_formline(register char *s)
6247 SV *stuff = newSVpvn("",0);
6248 bool needargs = FALSE;
6251 if (*s == '.' || *s == '}') {
6253 #ifdef PERL_STRICT_CR
6254 for (t = s+1;*t == ' ' || *t == '\t'; t++) ;
6256 for (t = s+1;*t == ' ' || *t == '\t' || *t == '\r'; t++) ;
6258 if (*t == '\n' || t == PL_bufend)
6261 if (PL_in_eval && !PL_rsfp) {
6262 eol = strchr(s,'\n');
6267 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6269 for (t = s; t < eol; t++) {
6270 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
6272 goto enough; /* ~~ must be first line in formline */
6274 if (*t == '@' || *t == '^')
6277 sv_catpvn(stuff, s, eol-s);
6281 s = filter_gets(PL_linestr, PL_rsfp, 0);
6282 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
6283 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
6286 yyerror("Format not terminated");
6296 PL_lex_state = LEX_NORMAL;
6297 PL_nextval[PL_nexttoke].ival = 0;
6301 PL_lex_state = LEX_FORMLINE;
6302 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
6304 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
6308 SvREFCNT_dec(stuff);
6309 PL_lex_formbrack = 0;
6320 PL_cshlen = strlen(PL_cshname);
6325 start_subparse(I32 is_format, U32 flags)
6328 I32 oldsavestack_ix = PL_savestack_ix;
6329 CV* outsidecv = PL_compcv;
6333 assert(SvTYPE(PL_compcv) == SVt_PVCV);
6335 save_I32(&PL_subline);
6336 save_item(PL_subname);
6338 SAVESPTR(PL_curpad);
6339 SAVESPTR(PL_comppad);
6340 SAVESPTR(PL_comppad_name);
6341 SAVESPTR(PL_compcv);
6342 SAVEI32(PL_comppad_name_fill);
6343 SAVEI32(PL_min_intro_pending);
6344 SAVEI32(PL_max_intro_pending);
6345 SAVEI32(PL_pad_reset_pending);
6347 PL_compcv = (CV*)NEWSV(1104,0);
6348 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
6349 CvFLAGS(PL_compcv) |= flags;
6351 PL_comppad = newAV();
6352 av_push(PL_comppad, Nullsv);
6353 PL_curpad = AvARRAY(PL_comppad);
6354 PL_comppad_name = newAV();
6355 PL_comppad_name_fill = 0;
6356 PL_min_intro_pending = 0;
6358 PL_subline = PL_curcop->cop_line;
6360 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
6361 PL_curpad[0] = (SV*)newAV();
6362 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
6363 #endif /* USE_THREADS */
6365 comppadlist = newAV();
6366 AvREAL_off(comppadlist);
6367 av_store(comppadlist, 0, (SV*)PL_comppad_name);
6368 av_store(comppadlist, 1, (SV*)PL_comppad);
6370 CvPADLIST(PL_compcv) = comppadlist;
6371 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
6373 CvOWNER(PL_compcv) = 0;
6374 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
6375 MUTEX_INIT(CvMUTEXP(PL_compcv));
6376 #endif /* USE_THREADS */
6378 return oldsavestack_ix;
6397 char *context = NULL;
6401 if (!yychar || (yychar == ';' && !PL_rsfp))
6403 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
6404 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
6405 while (isSPACE(*PL_oldoldbufptr))
6407 context = PL_oldoldbufptr;
6408 contlen = PL_bufptr - PL_oldoldbufptr;
6410 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
6411 PL_oldbufptr != PL_bufptr) {
6412 while (isSPACE(*PL_oldbufptr))
6414 context = PL_oldbufptr;
6415 contlen = PL_bufptr - PL_oldbufptr;
6417 else if (yychar > 255)
6418 where = "next token ???";
6419 else if ((yychar & 127) == 127) {
6420 if (PL_lex_state == LEX_NORMAL ||
6421 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
6422 where = "at end of line";
6423 else if (PL_lex_inpat)
6424 where = "within pattern";
6426 where = "within string";
6429 SV *where_sv = sv_2mortal(newSVpvn("next char ", 10));
6431 sv_catpvf(where_sv, "^%c", toCTRL(yychar));
6432 else if (isPRINT_LC(yychar))
6433 sv_catpvf(where_sv, "%c", yychar);
6435 sv_catpvf(where_sv, "\\%03o", yychar & 255);
6436 where = SvPVX(where_sv);
6438 msg = sv_2mortal(newSVpv(s, 0));
6439 sv_catpvf(msg, " at %_ line %ld, ",
6440 GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
6442 sv_catpvf(msg, "near \"%.*s\"\n", contlen, context);
6444 sv_catpvf(msg, "%s\n", where);
6445 if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
6447 " (Might be a runaway multi-line %c%c string starting on line %ld)\n",
6448 (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
6453 else if (PL_in_eval)
6454 sv_catsv(ERRSV, msg);
6456 PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
6457 if (++PL_error_count >= 10)
6458 croak("%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
6460 PL_in_my_stash = Nullhv;