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);
513 if (PL_oldoldbufptr != PL_last_uni)
515 while (isSPACE(*PL_last_uni))
517 for (s = PL_last_uni; isALNUM_lazy(s) || *s == '-'; s++) ;
518 if ((t = strchr(s, '(')) && t < PL_bufptr)
522 warn("Warning: Use of \"%s\" without parens is ambiguous", PL_last_uni);
529 #define UNI(f) return uni(f,s)
537 PL_last_uni = PL_oldbufptr;
548 #endif /* CRIPPLED_CC */
550 #define LOP(f,x) return lop(f,x,s)
553 lop(I32 f, expectation x, char *s)
560 PL_last_lop = PL_oldbufptr;
576 PL_nexttype[PL_nexttoke] = type;
578 if (PL_lex_state != LEX_KNOWNEXT) {
579 PL_lex_defer = PL_lex_state;
580 PL_lex_expect = PL_expect;
581 PL_lex_state = LEX_KNOWNEXT;
586 force_word(register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
591 start = skipspace(start);
593 if (isIDFIRST_lazy(s) ||
594 (allow_pack && *s == ':') ||
595 (allow_initial_tick && *s == '\'') )
597 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
598 if (check_keyword && keyword(PL_tokenbuf, len))
600 if (token == METHOD) {
605 PL_expect = XOPERATOR;
608 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
609 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
616 force_ident(register char *s, int kind)
619 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
620 PL_nextval[PL_nexttoke].opval = o;
623 dTHR; /* just for in_eval */
624 o->op_private = OPpCONST_ENTERED;
625 /* XXX see note in pp_entereval() for why we forgo typo
626 warnings if the symbol must be introduced in an eval.
628 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
629 kind == '$' ? SVt_PV :
630 kind == '@' ? SVt_PVAV :
631 kind == '%' ? SVt_PVHV :
639 force_version(char *s)
641 OP *version = Nullop;
645 /* default VERSION number -- GBARR */
650 for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
651 if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
653 /* real VERSION number -- GBARR */
654 version = yylval.opval;
658 /* NOTE: The parser sees the package name and the VERSION swapped */
659 PL_nextval[PL_nexttoke].opval = version;
677 s = SvPV_force(sv, len);
681 while (s < send && *s != '\\')
686 if ( PL_hints & HINT_NEW_STRING )
687 pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
690 if (s + 1 < send && (s[1] == '\\'))
691 s++; /* all that, just for this */
696 SvCUR_set(sv, d - SvPVX(sv));
698 if ( PL_hints & HINT_NEW_STRING )
699 return new_constant(NULL, 0, "q", sv, pv, "q");
706 register I32 op_type = yylval.ival;
708 if (op_type == OP_NULL) {
709 yylval.opval = PL_lex_op;
713 if (op_type == OP_CONST || op_type == OP_READLINE) {
714 SV *sv = tokeq(PL_lex_stuff);
716 if (SvTYPE(sv) == SVt_PVIV) {
717 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
723 nsv = newSVpvn(p, len);
727 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
728 PL_lex_stuff = Nullsv;
732 PL_sublex_info.super_state = PL_lex_state;
733 PL_sublex_info.sub_inwhat = op_type;
734 PL_sublex_info.sub_op = PL_lex_op;
735 PL_lex_state = LEX_INTERPPUSH;
739 yylval.opval = PL_lex_op;
753 PL_lex_state = PL_sublex_info.super_state;
754 SAVEI32(PL_lex_dojoin);
755 SAVEI32(PL_lex_brackets);
756 SAVEI32(PL_lex_fakebrack);
757 SAVEI32(PL_lex_casemods);
758 SAVEI32(PL_lex_starts);
759 SAVEI32(PL_lex_state);
760 SAVESPTR(PL_lex_inpat);
761 SAVEI32(PL_lex_inwhat);
762 SAVEI16(PL_curcop->cop_line);
764 SAVEPPTR(PL_oldbufptr);
765 SAVEPPTR(PL_oldoldbufptr);
766 SAVEPPTR(PL_linestart);
767 SAVESPTR(PL_linestr);
768 SAVEPPTR(PL_lex_brackstack);
769 SAVEPPTR(PL_lex_casestack);
771 PL_linestr = PL_lex_stuff;
772 PL_lex_stuff = Nullsv;
774 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
775 PL_bufend += SvCUR(PL_linestr);
776 SAVEFREESV(PL_linestr);
778 PL_lex_dojoin = FALSE;
780 PL_lex_fakebrack = 0;
781 New(899, PL_lex_brackstack, 120, char);
782 New(899, PL_lex_casestack, 12, char);
783 SAVEFREEPV(PL_lex_brackstack);
784 SAVEFREEPV(PL_lex_casestack);
786 *PL_lex_casestack = '\0';
788 PL_lex_state = LEX_INTERPCONCAT;
789 PL_curcop->cop_line = PL_multi_start;
791 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
792 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
793 PL_lex_inpat = PL_sublex_info.sub_op;
795 PL_lex_inpat = Nullop;
803 if (!PL_lex_starts++) {
804 PL_expect = XOPERATOR;
805 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpvn("",0));
809 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
810 PL_lex_state = LEX_INTERPCASEMOD;
811 return yylex(PERL_YYLEX_PARAM);
814 /* Is there a right-hand side to take care of? */
815 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
816 PL_linestr = PL_lex_repl;
818 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
819 PL_bufend += SvCUR(PL_linestr);
820 SAVEFREESV(PL_linestr);
821 PL_lex_dojoin = FALSE;
823 PL_lex_fakebrack = 0;
825 *PL_lex_casestack = '\0';
827 if (SvEVALED(PL_lex_repl)) {
828 PL_lex_state = LEX_INTERPNORMAL;
830 /* we don't clear PL_lex_repl here, so that we can check later
831 whether this is an evalled subst; that means we rely on the
832 logic to ensure sublex_done() is called again only via the
833 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
836 PL_lex_state = LEX_INTERPCONCAT;
837 PL_lex_repl = Nullsv;
843 PL_bufend = SvPVX(PL_linestr);
844 PL_bufend += SvCUR(PL_linestr);
845 PL_expect = XOPERATOR;
853 Extracts a pattern, double-quoted string, or transliteration. This
856 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
857 processing a pattern (PL_lex_inpat is true), a transliteration
858 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
860 Returns a pointer to the character scanned up to. Iff this is
861 advanced from the start pointer supplied (ie if anything was
862 successfully parsed), will leave an OP for the substring scanned
863 in yylval. Caller must intuit reason for not parsing further
864 by looking at the next characters herself.
868 double-quoted style: \r and \n
869 regexp special ones: \D \s
871 backrefs: \1 (deprecated in substitution replacements)
872 case and quoting: \U \Q \E
873 stops on @ and $, but not for $ as tail anchor
876 characters are VERY literal, except for - not at the start or end
877 of the string, which indicates a range. scan_const expands the
878 range to the full set of intermediate characters.
880 In double-quoted strings:
882 double-quoted style: \r and \n
884 backrefs: \1 (deprecated)
885 case and quoting: \U \Q \E
888 scan_const does *not* construct ops to handle interpolated strings.
889 It stops processing as soon as it finds an embedded $ or @ variable
890 and leaves it to the caller to work out what's going on.
892 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
894 $ in pattern could be $foo or could be tail anchor. Assumption:
895 it's a tail anchor if $ is the last thing in the string, or if it's
896 followed by one of ")| \n\t"
898 \1 (backreferences) are turned into $1
900 The structure of the code is
901 while (there's a character to process) {
902 handle transliteration ranges
904 skip # initiated comments in //x patterns
905 check for embedded @foo
906 check for embedded scalars
908 leave intact backslashes from leave (below)
909 deprecate \1 in strings and sub replacements
910 handle string-changing backslashes \l \U \Q \E, etc.
911 switch (what was escaped) {
912 handle - in a transliteration (becomes a literal -)
913 handle \132 octal characters
914 handle 0x15 hex characters
915 handle \cV (control V)
916 handle printf backslashes (\f, \r, \n, etc)
919 } (end while character to read)
924 scan_const(char *start)
926 register char *send = PL_bufend; /* end of the constant */
927 SV *sv = NEWSV(93, send - start); /* sv for the constant */
928 register char *s = start; /* start of the constant */
929 register char *d = SvPVX(sv); /* destination for copies */
930 bool dorange = FALSE; /* are we in a translit range? */
932 I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
933 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
935 I32 thisutf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
936 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
939 /* leaveit is the set of acceptably-backslashed characters */
942 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
945 while (s < send || dorange) {
946 /* get transliterations out of the way (they're most literal) */
947 if (PL_lex_inwhat == OP_TRANS) {
948 /* expand a range A-Z to the full set of characters. AIE! */
950 I32 i; /* current expanded character */
951 I32 min; /* first character in range */
952 I32 max; /* last character in range */
954 i = d - SvPVX(sv); /* remember current offset */
955 SvGROW(sv, SvLEN(sv) + 256); /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */
956 d = SvPVX(sv) + i; /* restore d after the grow potentially has changed the ptr */
957 d -= 2; /* eat the first char and the - */
959 min = (U8)*d; /* first char in range */
960 max = (U8)d[1]; /* last char in range */
963 if ((isLOWER(min) && isLOWER(max)) ||
964 (isUPPER(min) && isUPPER(max))) {
966 for (i = min; i <= max; i++)
970 for (i = min; i <= max; i++)
977 for (i = min; i <= max; i++)
980 /* mark the range as done, and continue */
985 /* range begins (ignore - as first or last char) */
986 else if (*s == '-' && s+1 < send && s != start) {
988 *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
997 /* if we get here, we're not doing a transliteration */
999 /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
1000 except for the last char, which will be done separately. */
1001 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
1003 while (s < send && *s != ')')
1005 } else if (s[2] == '{'
1006 || s[2] == 'p' && s[3] == '{') { /* This should march regcomp.c */
1008 char *regparse = s + (s[2] == '{' ? 3 : 4);
1011 while (count && (c = *regparse)) {
1012 if (c == '\\' && regparse[1])
1020 if (*regparse != ')') {
1021 regparse--; /* Leave one char for continuation. */
1022 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
1024 while (s < regparse)
1029 /* likewise skip #-initiated comments in //x patterns */
1030 else if (*s == '#' && PL_lex_inpat &&
1031 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
1032 while (s+1 < send && *s != '\n')
1036 /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
1037 else if (*s == '@' && s[1] && (isALNUM_lazy(s+1) || strchr(":'{$", s[1])))
1040 /* check for embedded scalars. only stop if we're sure it's a
1043 else if (*s == '$') {
1044 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
1046 if (s + 1 < send && !strchr("()| \n\t", s[1]))
1047 break; /* in regexp, $ might be tail anchor */
1050 /* (now in tr/// code again) */
1052 if (*s & 0x80 && thisutf) {
1053 dTHR; /* only for ckWARN */
1054 if (ckWARN(WARN_UTF8)) {
1055 (void)utf8_to_uv((U8*)s, &len); /* could cvt latin-1 to utf8 here... */
1065 if (*s == '\\' && s+1 < send) {
1068 /* some backslashes we leave behind */
1069 if (*leaveit && *s && strchr(leaveit, *s)) {
1075 /* deprecate \1 in strings and substitution replacements */
1076 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1077 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1079 dTHR; /* only for ckWARN */
1080 if (ckWARN(WARN_SYNTAX))
1081 warner(WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1086 /* string-change backslash escapes */
1087 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1092 /* if we get here, it's either a quoted -, or a digit */
1095 /* quoted - in transliterations */
1097 if (PL_lex_inwhat == OP_TRANS) {
1105 if (ckWARN(WARN_UNSAFE) && isALPHA(*s))
1107 "Unrecognized escape \\%c passed through",
1109 /* default action is to copy the quoted character */
1114 /* \132 indicates an octal constant */
1115 case '0': case '1': case '2': case '3':
1116 case '4': case '5': case '6': case '7':
1117 *d++ = scan_oct(s, 3, &len);
1121 /* \x24 indicates a hex constant */
1125 char* e = strchr(s, '}');
1128 yyerror("Missing right brace on \\x{}");
1133 if (ckWARN(WARN_UTF8))
1135 "Use of \\x{} without utf8 declaration");
1137 /* note: utf always shorter than hex */
1138 d = (char*)uv_to_utf8((U8*)d,
1139 scan_hex(s + 1, e - s - 1, &len));
1144 UV uv = (UV)scan_hex(s, 2, &len);
1145 if (utf && PL_lex_inwhat == OP_TRANS &&
1146 utf != (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1148 d = (char*)uv_to_utf8((U8*)d, uv); /* doing a CU or UC */
1151 if (uv >= 127 && UTF) {
1153 if (ckWARN(WARN_UTF8))
1155 "\\x%.*s will produce malformed UTF-8 character; use \\x{%.*s} for that",
1164 /* \c is a control character */
1178 /* printf-style backslashes, formfeeds, newlines, etc */
1204 } /* end if (backslash) */
1207 } /* while loop to process each character */
1209 /* terminate the string and set up the sv */
1211 SvCUR_set(sv, d - SvPVX(sv));
1214 /* shrink the sv if we allocated more than we used */
1215 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1216 SvLEN_set(sv, SvCUR(sv) + 1);
1217 Renew(SvPVX(sv), SvLEN(sv), char);
1220 /* return the substring (via yylval) only if we parsed anything */
1221 if (s > PL_bufptr) {
1222 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1223 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1225 ( PL_lex_inwhat == OP_TRANS
1227 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1230 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1236 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1238 intuit_more(register char *s)
1240 if (PL_lex_brackets)
1242 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1244 if (*s != '{' && *s != '[')
1249 /* In a pattern, so maybe we have {n,m}. */
1266 /* On the other hand, maybe we have a character class */
1269 if (*s == ']' || *s == '^')
1272 int weight = 2; /* let's weigh the evidence */
1274 unsigned char un_char = 255, last_un_char;
1275 char *send = strchr(s,']');
1276 char tmpbuf[sizeof PL_tokenbuf * 4];
1278 if (!send) /* has to be an expression */
1281 Zero(seen,256,char);
1284 else if (isDIGIT(*s)) {
1286 if (isDIGIT(s[1]) && s[2] == ']')
1292 for (; s < send; s++) {
1293 last_un_char = un_char;
1294 un_char = (unsigned char)*s;
1299 weight -= seen[un_char] * 10;
1300 if (isALNUM_lazy(s+1)) {
1301 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1302 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1307 else if (*s == '$' && s[1] &&
1308 strchr("[#!%*<>()-=",s[1])) {
1309 if (/*{*/ strchr("])} =",s[2]))
1318 if (strchr("wds]",s[1]))
1320 else if (seen['\''] || seen['"'])
1322 else if (strchr("rnftbxcav",s[1]))
1324 else if (isDIGIT(s[1])) {
1326 while (s[1] && isDIGIT(s[1]))
1336 if (strchr("aA01! ",last_un_char))
1338 if (strchr("zZ79~",s[1]))
1340 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1341 weight -= 5; /* cope with negative subscript */
1344 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1345 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1350 if (keyword(tmpbuf, d - tmpbuf))
1353 if (un_char == last_un_char + 1)
1355 weight -= seen[un_char];
1360 if (weight >= 0) /* probably a character class */
1368 intuit_method(char *start, GV *gv)
1370 char *s = start + (*start == '$');
1371 char tmpbuf[sizeof PL_tokenbuf];
1379 if ((cv = GvCVu(gv))) {
1380 char *proto = SvPVX(cv);
1390 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1391 if (*start == '$') {
1392 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1397 return *s == '(' ? FUNCMETH : METHOD;
1399 if (!keyword(tmpbuf, len)) {
1400 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1405 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1406 if (indirgv && GvCVu(indirgv))
1408 /* filehandle or package name makes it a method */
1409 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1411 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1412 return 0; /* no assumptions -- "=>" quotes bearword */
1414 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1415 newSVpvn(tmpbuf,len));
1416 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1420 return *s == '(' ? FUNCMETH : METHOD;
1430 char *pdb = PerlEnv_getenv("PERL5DB");
1434 SETERRNO(0,SS$_NORMAL);
1435 return "BEGIN { require 'perl5db.pl' }";
1441 /* Encoded script support. filter_add() effectively inserts a
1442 * 'pre-processing' function into the current source input stream.
1443 * Note that the filter function only applies to the current source file
1444 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1446 * The datasv parameter (which may be NULL) can be used to pass
1447 * private data to this instance of the filter. The filter function
1448 * can recover the SV using the FILTER_DATA macro and use it to
1449 * store private buffers and state information.
1451 * The supplied datasv parameter is upgraded to a PVIO type
1452 * and the IoDIRP field is used to store the function pointer.
1453 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1454 * private use must be set using malloc'd pointers.
1458 filter_add(filter_t funcp, SV *datasv)
1460 if (!funcp){ /* temporary handy debugging hack to be deleted */
1461 PL_filter_debug = atoi((char*)datasv);
1464 if (!PL_rsfp_filters)
1465 PL_rsfp_filters = newAV();
1467 datasv = NEWSV(255,0);
1468 if (!SvUPGRADE(datasv, SVt_PVIO))
1469 die("Can't upgrade filter_add data to SVt_PVIO");
1470 IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
1471 if (PL_filter_debug) {
1473 warn("filter_add func %p (%s)", funcp, SvPV(datasv, n_a));
1475 av_unshift(PL_rsfp_filters, 1);
1476 av_store(PL_rsfp_filters, 0, datasv) ;
1481 /* Delete most recently added instance of this filter function. */
1483 filter_del(filter_t funcp)
1485 if (PL_filter_debug)
1486 warn("filter_del func %p", funcp);
1487 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1489 /* if filter is on top of stack (usual case) just pop it off */
1490 if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (DIR*)funcp){
1491 IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) = NULL;
1492 sv_free(av_pop(PL_rsfp_filters));
1496 /* we need to search for the correct entry and clear it */
1497 die("filter_del can only delete in reverse order (currently)");
1501 /* Invoke the n'th filter function for the current rsfp. */
1503 filter_read(int idx, SV *buf_sv, int maxlen)
1506 /* 0 = read one text line */
1511 if (!PL_rsfp_filters)
1513 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
1514 /* Provide a default input filter to make life easy. */
1515 /* Note that we append to the line. This is handy. */
1516 if (PL_filter_debug)
1517 warn("filter_read %d: from rsfp\n", idx);
1521 int old_len = SvCUR(buf_sv) ;
1523 /* ensure buf_sv is large enough */
1524 SvGROW(buf_sv, old_len + maxlen) ;
1525 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1526 if (PerlIO_error(PL_rsfp))
1527 return -1; /* error */
1529 return 0 ; /* end of file */
1531 SvCUR_set(buf_sv, old_len + len) ;
1534 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1535 if (PerlIO_error(PL_rsfp))
1536 return -1; /* error */
1538 return 0 ; /* end of file */
1541 return SvCUR(buf_sv);
1543 /* Skip this filter slot if filter has been deleted */
1544 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
1545 if (PL_filter_debug)
1546 warn("filter_read %d: skipped (filter deleted)\n", idx);
1547 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1549 /* Get function pointer hidden within datasv */
1550 funcp = (filter_t)IoDIRP(datasv);
1551 if (PL_filter_debug) {
1553 warn("filter_read %d: via function %p (%s)\n",
1554 idx, funcp, SvPV(datasv,n_a));
1556 /* Call function. The function is expected to */
1557 /* call "FILTER_READ(idx+1, buf_sv)" first. */
1558 /* Return: <0:error, =0:eof, >0:not eof */
1559 return (*funcp)(PERL_OBJECT_THIS_ idx, buf_sv, maxlen);
1563 filter_gets(register SV *sv, register PerlIO *fp, STRLEN append)
1566 if (!PL_rsfp_filters) {
1567 filter_add(win32_textfilter,NULL);
1570 if (PL_rsfp_filters) {
1573 SvCUR_set(sv, 0); /* start with empty line */
1574 if (FILTER_READ(0, sv, 0) > 0)
1575 return ( SvPVX(sv) ) ;
1580 return (sv_gets(sv, fp, append));
1585 static char* exp_name[] =
1586 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
1592 Works out what to call the token just pulled out of the input
1593 stream. The yacc parser takes care of taking the ops we return and
1594 stitching them into a tree.
1600 if read an identifier
1601 if we're in a my declaration
1602 croak if they tried to say my($foo::bar)
1603 build the ops for a my() declaration
1604 if it's an access to a my() variable
1605 are we in a sort block?
1606 croak if my($a); $a <=> $b
1607 build ops for access to a my() variable
1608 if in a dq string, and they've said @foo and we can't find @foo
1610 build ops for a bareword
1611 if we already built the token before, use it.
1614 int yylex(PERL_YYLEX_PARAM_DECL)
1624 #ifdef USE_PURE_BISON
1625 yylval_pointer = lvalp;
1626 yychar_pointer = lcharp;
1629 /* check if there's an identifier for us to look at */
1630 if (PL_pending_ident) {
1631 /* pit holds the identifier we read and pending_ident is reset */
1632 char pit = PL_pending_ident;
1633 PL_pending_ident = 0;
1635 /* if we're in a my(), we can't allow dynamics here.
1636 $foo'bar has already been turned into $foo::bar, so
1637 just check for colons.
1639 if it's a legal name, the OP is a PADANY.
1642 if (strchr(PL_tokenbuf,':'))
1643 yyerror(form(PL_no_myglob,PL_tokenbuf));
1645 yylval.opval = newOP(OP_PADANY, 0);
1646 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
1651 build the ops for accesses to a my() variable.
1653 Deny my($a) or my($b) in a sort block, *if* $a or $b is
1654 then used in a comparison. This catches most, but not
1655 all cases. For instance, it catches
1656 sort { my($a); $a <=> $b }
1658 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1659 (although why you'd do that is anyone's guess).
1662 if (!strchr(PL_tokenbuf,':')) {
1664 /* Check for single character per-thread SVs */
1665 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1666 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1667 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
1669 yylval.opval = newOP(OP_THREADSV, 0);
1670 yylval.opval->op_targ = tmp;
1673 #endif /* USE_THREADS */
1674 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
1675 /* if it's a sort block and they're naming $a or $b */
1676 if (PL_last_lop_op == OP_SORT &&
1677 PL_tokenbuf[0] == '$' &&
1678 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
1681 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
1682 d < PL_bufend && *d != '\n';
1685 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
1686 croak("Can't use \"my %s\" in sort comparison",
1692 yylval.opval = newOP(OP_PADANY, 0);
1693 yylval.opval->op_targ = tmp;
1699 Whine if they've said @foo in a doublequoted string,
1700 and @foo isn't a variable we can find in the symbol
1703 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
1704 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
1705 if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
1706 yyerror(form("In string, %s now must be written as \\%s",
1707 PL_tokenbuf, PL_tokenbuf));
1710 /* build ops for a bareword */
1711 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
1712 yylval.opval->op_private = OPpCONST_ENTERED;
1713 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
1714 ((PL_tokenbuf[0] == '$') ? SVt_PV
1715 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
1720 /* no identifier pending identification */
1722 switch (PL_lex_state) {
1724 case LEX_NORMAL: /* Some compilers will produce faster */
1725 case LEX_INTERPNORMAL: /* code if we comment these out. */
1729 /* when we're already built the next token, just pull it out the queue */
1732 yylval = PL_nextval[PL_nexttoke];
1734 PL_lex_state = PL_lex_defer;
1735 PL_expect = PL_lex_expect;
1736 PL_lex_defer = LEX_NORMAL;
1738 return(PL_nexttype[PL_nexttoke]);
1740 /* interpolated case modifiers like \L \U, including \Q and \E.
1741 when we get here, PL_bufptr is at the \
1743 case LEX_INTERPCASEMOD:
1745 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
1746 croak("panic: INTERPCASEMOD");
1748 /* handle \E or end of string */
1749 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
1753 if (PL_lex_casemods) {
1754 oldmod = PL_lex_casestack[--PL_lex_casemods];
1755 PL_lex_casestack[PL_lex_casemods] = '\0';
1757 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
1759 PL_lex_state = LEX_INTERPCONCAT;
1763 if (PL_bufptr != PL_bufend)
1765 PL_lex_state = LEX_INTERPCONCAT;
1766 return yylex(PERL_YYLEX_PARAM);
1770 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
1771 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
1772 if (strchr("LU", *s) &&
1773 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
1775 PL_lex_casestack[--PL_lex_casemods] = '\0';
1778 if (PL_lex_casemods > 10) {
1779 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
1780 if (newlb != PL_lex_casestack) {
1782 PL_lex_casestack = newlb;
1785 PL_lex_casestack[PL_lex_casemods++] = *s;
1786 PL_lex_casestack[PL_lex_casemods] = '\0';
1787 PL_lex_state = LEX_INTERPCONCAT;
1788 PL_nextval[PL_nexttoke].ival = 0;
1791 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
1793 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
1795 PL_nextval[PL_nexttoke].ival = OP_LC;
1797 PL_nextval[PL_nexttoke].ival = OP_UC;
1799 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
1801 croak("panic: yylex");
1804 if (PL_lex_starts) {
1810 return yylex(PERL_YYLEX_PARAM);
1813 case LEX_INTERPPUSH:
1814 return sublex_push();
1816 case LEX_INTERPSTART:
1817 if (PL_bufptr == PL_bufend)
1818 return sublex_done();
1820 PL_lex_dojoin = (*PL_bufptr == '@');
1821 PL_lex_state = LEX_INTERPNORMAL;
1822 if (PL_lex_dojoin) {
1823 PL_nextval[PL_nexttoke].ival = 0;
1826 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
1827 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
1828 force_next(PRIVATEREF);
1830 force_ident("\"", '$');
1831 #endif /* USE_THREADS */
1832 PL_nextval[PL_nexttoke].ival = 0;
1834 PL_nextval[PL_nexttoke].ival = 0;
1836 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
1839 if (PL_lex_starts++) {
1843 return yylex(PERL_YYLEX_PARAM);
1845 case LEX_INTERPENDMAYBE:
1846 if (intuit_more(PL_bufptr)) {
1847 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
1853 if (PL_lex_dojoin) {
1854 PL_lex_dojoin = FALSE;
1855 PL_lex_state = LEX_INTERPCONCAT;
1858 if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
1859 && SvEVALED(PL_lex_repl))
1861 if (PL_bufptr != PL_bufend)
1862 croak("Bad evalled substitution pattern");
1863 PL_lex_repl = Nullsv;
1866 case LEX_INTERPCONCAT:
1868 if (PL_lex_brackets)
1869 croak("panic: INTERPCONCAT");
1871 if (PL_bufptr == PL_bufend)
1872 return sublex_done();
1874 if (SvIVX(PL_linestr) == '\'') {
1875 SV *sv = newSVsv(PL_linestr);
1878 else if ( PL_hints & HINT_NEW_RE )
1879 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
1880 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1884 s = scan_const(PL_bufptr);
1886 PL_lex_state = LEX_INTERPCASEMOD;
1888 PL_lex_state = LEX_INTERPSTART;
1891 if (s != PL_bufptr) {
1892 PL_nextval[PL_nexttoke] = yylval;
1895 if (PL_lex_starts++)
1899 return yylex(PERL_YYLEX_PARAM);
1903 return yylex(PERL_YYLEX_PARAM);
1905 PL_lex_state = LEX_NORMAL;
1906 s = scan_formline(PL_bufptr);
1907 if (!PL_lex_formbrack)
1913 PL_oldoldbufptr = PL_oldbufptr;
1916 PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
1922 if (isIDFIRST_lazy(s))
1924 croak("Unrecognized character \\x%02X", *s & 255);
1927 goto fake_eof; /* emulate EOF on ^D or ^Z */
1932 if (PL_lex_brackets)
1933 yyerror("Missing right curly or square bracket");
1936 if (s++ < PL_bufend)
1937 goto retry; /* ignore stray nulls */
1940 if (!PL_in_eval && !PL_preambled) {
1941 PL_preambled = TRUE;
1942 sv_setpv(PL_linestr,incl_perldb());
1943 if (SvCUR(PL_linestr))
1944 sv_catpv(PL_linestr,";");
1946 while(AvFILLp(PL_preambleav) >= 0) {
1947 SV *tmpsv = av_shift(PL_preambleav);
1948 sv_catsv(PL_linestr, tmpsv);
1949 sv_catpv(PL_linestr, ";");
1952 sv_free((SV*)PL_preambleav);
1953 PL_preambleav = NULL;
1955 if (PL_minus_n || PL_minus_p) {
1956 sv_catpv(PL_linestr, "LINE: while (<>) {");
1958 sv_catpv(PL_linestr,"chomp;");
1960 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
1962 GvIMPORTED_AV_on(gv);
1964 if (strchr("/'\"", *PL_splitstr)
1965 && strchr(PL_splitstr + 1, *PL_splitstr))
1966 sv_catpvf(PL_linestr, "@F=split(%s);", PL_splitstr);
1969 s = "'~#\200\1'"; /* surely one char is unused...*/
1970 while (s[1] && strchr(PL_splitstr, *s)) s++;
1972 sv_catpvf(PL_linestr, "@F=split(%s%c",
1973 "q" + (delim == '\''), delim);
1974 for (s = PL_splitstr; *s; s++) {
1976 sv_catpvn(PL_linestr, "\\", 1);
1977 sv_catpvn(PL_linestr, s, 1);
1979 sv_catpvf(PL_linestr, "%c);", delim);
1983 sv_catpv(PL_linestr,"@F=split(' ');");
1986 sv_catpv(PL_linestr, "\n");
1987 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1988 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1989 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1990 SV *sv = NEWSV(85,0);
1992 sv_upgrade(sv, SVt_PVMG);
1993 sv_setsv(sv,PL_linestr);
1994 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1999 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
2002 if (PL_preprocess && !PL_in_eval)
2003 (void)PerlProc_pclose(PL_rsfp);
2004 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
2005 PerlIO_clearerr(PL_rsfp);
2007 (void)PerlIO_close(PL_rsfp);
2009 PL_doextract = FALSE;
2011 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
2012 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
2013 sv_catpv(PL_linestr,";}");
2014 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2015 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2016 PL_minus_n = PL_minus_p = 0;
2019 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2020 sv_setpv(PL_linestr,"");
2021 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
2024 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
2025 PL_doextract = FALSE;
2027 /* Incest with pod. */
2028 if (*s == '=' && strnEQ(s, "=cut", 4)) {
2029 sv_setpv(PL_linestr, "");
2030 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2031 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2032 PL_doextract = FALSE;
2036 } while (PL_doextract);
2037 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
2038 if (PERLDB_LINE && PL_curstash != PL_debstash) {
2039 SV *sv = NEWSV(85,0);
2041 sv_upgrade(sv, SVt_PVMG);
2042 sv_setsv(sv,PL_linestr);
2043 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
2045 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2046 if (PL_curcop->cop_line == 1) {
2047 while (s < PL_bufend && isSPACE(*s))
2049 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
2053 if (*s == '#' && *(s+1) == '!')
2055 #ifdef ALTERNATE_SHEBANG
2057 static char as[] = ALTERNATE_SHEBANG;
2058 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2059 d = s + (sizeof(as) - 1);
2061 #endif /* ALTERNATE_SHEBANG */
2070 while (*d && !isSPACE(*d))
2074 #ifdef ARG_ZERO_IS_SCRIPT
2075 if (ipathend > ipath) {
2077 * HP-UX (at least) sets argv[0] to the script name,
2078 * which makes $^X incorrect. And Digital UNIX and Linux,
2079 * at least, set argv[0] to the basename of the Perl
2080 * interpreter. So, having found "#!", we'll set it right.
2082 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2083 assert(SvPOK(x) || SvGMAGICAL(x));
2084 if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
2085 sv_setpvn(x, ipath, ipathend - ipath);
2088 TAINT_NOT; /* $^X is always tainted, but that's OK */
2090 #endif /* ARG_ZERO_IS_SCRIPT */
2095 d = instr(s,"perl -");
2097 d = instr(s,"perl");
2098 #ifdef ALTERNATE_SHEBANG
2100 * If the ALTERNATE_SHEBANG on this system starts with a
2101 * character that can be part of a Perl expression, then if
2102 * we see it but not "perl", we're probably looking at the
2103 * start of Perl code, not a request to hand off to some
2104 * other interpreter. Similarly, if "perl" is there, but
2105 * not in the first 'word' of the line, we assume the line
2106 * contains the start of the Perl program.
2108 if (d && *s != '#') {
2110 while (*c && !strchr("; \t\r\n\f\v#", *c))
2113 d = Nullch; /* "perl" not in first word; ignore */
2115 *s = '#'; /* Don't try to parse shebang line */
2117 #endif /* ALTERNATE_SHEBANG */
2122 !instr(s,"indir") &&
2123 instr(PL_origargv[0],"perl"))
2129 while (s < PL_bufend && isSPACE(*s))
2131 if (s < PL_bufend) {
2132 Newz(899,newargv,PL_origargc+3,char*);
2134 while (s < PL_bufend && !isSPACE(*s))
2137 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2140 newargv = PL_origargv;
2142 PerlProc_execv(ipath, newargv);
2143 croak("Can't exec %s", ipath);
2146 U32 oldpdb = PL_perldb;
2147 bool oldn = PL_minus_n;
2148 bool oldp = PL_minus_p;
2150 while (*d && !isSPACE(*d)) d++;
2151 while (*d == ' ' || *d == '\t') d++;
2155 if (*d == 'M' || *d == 'm') {
2157 while (*d && !isSPACE(*d)) d++;
2158 croak("Too late for \"-%.*s\" option",
2161 d = moreswitches(d);
2163 if (PERLDB_LINE && !oldpdb ||
2164 ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
2165 /* if we have already added "LINE: while (<>) {",
2166 we must not do it again */
2168 sv_setpv(PL_linestr, "");
2169 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2170 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2171 PL_preambled = FALSE;
2173 (void)gv_fetchfile(PL_origfilename);
2180 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2182 PL_lex_state = LEX_FORMLINE;
2183 return yylex(PERL_YYLEX_PARAM);
2187 #ifdef PERL_STRICT_CR
2188 warn("Illegal character \\%03o (carriage return)", '\r');
2190 "(Maybe you didn't strip carriage returns after a network transfer?)\n");
2192 case ' ': case '\t': case '\f': case 013:
2197 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2199 while (s < d && *s != '\n')
2204 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2206 PL_lex_state = LEX_FORMLINE;
2207 return yylex(PERL_YYLEX_PARAM);
2216 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2221 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2224 if (strnEQ(s,"=>",2)) {
2225 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2226 OPERATOR('-'); /* unary minus */
2228 PL_last_uni = PL_oldbufptr;
2229 PL_last_lop_op = OP_FTEREAD; /* good enough */
2231 case 'r': FTST(OP_FTEREAD);
2232 case 'w': FTST(OP_FTEWRITE);
2233 case 'x': FTST(OP_FTEEXEC);
2234 case 'o': FTST(OP_FTEOWNED);
2235 case 'R': FTST(OP_FTRREAD);
2236 case 'W': FTST(OP_FTRWRITE);
2237 case 'X': FTST(OP_FTREXEC);
2238 case 'O': FTST(OP_FTROWNED);
2239 case 'e': FTST(OP_FTIS);
2240 case 'z': FTST(OP_FTZERO);
2241 case 's': FTST(OP_FTSIZE);
2242 case 'f': FTST(OP_FTFILE);
2243 case 'd': FTST(OP_FTDIR);
2244 case 'l': FTST(OP_FTLINK);
2245 case 'p': FTST(OP_FTPIPE);
2246 case 'S': FTST(OP_FTSOCK);
2247 case 'u': FTST(OP_FTSUID);
2248 case 'g': FTST(OP_FTSGID);
2249 case 'k': FTST(OP_FTSVTX);
2250 case 'b': FTST(OP_FTBLK);
2251 case 'c': FTST(OP_FTCHR);
2252 case 't': FTST(OP_FTTTY);
2253 case 'T': FTST(OP_FTTEXT);
2254 case 'B': FTST(OP_FTBINARY);
2255 case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2256 case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2257 case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
2259 croak("Unrecognized file test: -%c", (int)tmp);
2266 if (PL_expect == XOPERATOR)
2271 else if (*s == '>') {
2274 if (isIDFIRST_lazy(s)) {
2275 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2283 if (PL_expect == XOPERATOR)
2286 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2288 OPERATOR('-'); /* unary minus */
2295 if (PL_expect == XOPERATOR)
2300 if (PL_expect == XOPERATOR)
2303 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2309 if (PL_expect != XOPERATOR) {
2310 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2311 PL_expect = XOPERATOR;
2312 force_ident(PL_tokenbuf, '*');
2325 if (PL_expect == XOPERATOR) {
2329 PL_tokenbuf[0] = '%';
2330 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2331 if (!PL_tokenbuf[1]) {
2333 yyerror("Final % should be \\% or %name");
2336 PL_pending_ident = '%';
2358 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2359 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
2364 if (PL_curcop->cop_line < PL_copline)
2365 PL_copline = PL_curcop->cop_line;
2376 if (PL_lex_brackets <= 0)
2377 yyerror("Unmatched right square bracket");
2380 if (PL_lex_state == LEX_INTERPNORMAL) {
2381 if (PL_lex_brackets == 0) {
2382 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
2383 PL_lex_state = LEX_INTERPEND;
2390 if (PL_lex_brackets > 100) {
2391 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2392 if (newlb != PL_lex_brackstack) {
2394 PL_lex_brackstack = newlb;
2397 switch (PL_expect) {
2399 if (PL_lex_formbrack) {
2403 if (PL_oldoldbufptr == PL_last_lop)
2404 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2406 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2407 OPERATOR(HASHBRACK);
2409 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2412 PL_tokenbuf[0] = '\0';
2413 if (d < PL_bufend && *d == '-') {
2414 PL_tokenbuf[0] = '-';
2416 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2419 if (d < PL_bufend && isIDFIRST_lazy(d)) {
2420 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2422 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2425 char minus = (PL_tokenbuf[0] == '-');
2426 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2433 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2437 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2442 if (PL_oldoldbufptr == PL_last_lop)
2443 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2445 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2448 OPERATOR(HASHBRACK);
2449 /* This hack serves to disambiguate a pair of curlies
2450 * as being a block or an anon hash. Normally, expectation
2451 * determines that, but in cases where we're not in a
2452 * position to expect anything in particular (like inside
2453 * eval"") we have to resolve the ambiguity. This code
2454 * covers the case where the first term in the curlies is a
2455 * quoted string. Most other cases need to be explicitly
2456 * disambiguated by prepending a `+' before the opening
2457 * curly in order to force resolution as an anon hash.
2459 * XXX should probably propagate the outer expectation
2460 * into eval"" to rely less on this hack, but that could
2461 * potentially break current behavior of eval"".
2465 if (*s == '\'' || *s == '"' || *s == '`') {
2466 /* common case: get past first string, handling escapes */
2467 for (t++; t < PL_bufend && *t != *s;)
2468 if (*t++ == '\\' && (*t == '\\' || *t == *s))
2472 else if (*s == 'q') {
2475 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
2476 && !isALNUM(*t)))) {
2478 char open, close, term;
2481 while (t < PL_bufend && isSPACE(*t))
2485 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2489 for (t++; t < PL_bufend; t++) {
2490 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
2492 else if (*t == open)
2496 for (t++; t < PL_bufend; t++) {
2497 if (*t == '\\' && t+1 < PL_bufend)
2499 else if (*t == close && --brackets <= 0)
2501 else if (*t == open)
2507 else if (isIDFIRST_lazy(s)) {
2508 for (t++; t < PL_bufend && isALNUM_lazy(t); t++) ;
2510 while (t < PL_bufend && isSPACE(*t))
2512 /* if comma follows first term, call it an anon hash */
2513 /* XXX it could be a comma expression with loop modifiers */
2514 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
2515 || (*t == '=' && t[1] == '>')))
2516 OPERATOR(HASHBRACK);
2517 if (PL_expect == XREF)
2518 PL_expect = XSTATE; /* was XTERM, trying XSTATE */
2520 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2526 yylval.ival = PL_curcop->cop_line;
2527 if (isSPACE(*s) || *s == '#')
2528 PL_copline = NOLINE; /* invalidate current command line number */
2533 if (PL_lex_brackets <= 0)
2534 yyerror("Unmatched right curly bracket");
2536 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2537 if (PL_lex_brackets < PL_lex_formbrack)
2538 PL_lex_formbrack = 0;
2539 if (PL_lex_state == LEX_INTERPNORMAL) {
2540 if (PL_lex_brackets == 0) {
2541 if (PL_lex_fakebrack) {
2542 PL_lex_state = LEX_INTERPEND;
2544 return yylex(PERL_YYLEX_PARAM); /* ignore fake brackets */
2546 if (*s == '-' && s[1] == '>')
2547 PL_lex_state = LEX_INTERPENDMAYBE;
2548 else if (*s != '[' && *s != '{')
2549 PL_lex_state = LEX_INTERPEND;
2552 if (PL_lex_brackets < PL_lex_fakebrack) {
2554 PL_lex_fakebrack = 0;
2555 return yylex(PERL_YYLEX_PARAM); /* ignore fake brackets */
2565 if (PL_expect == XOPERATOR) {
2566 if (ckWARN(WARN_SEMICOLON) && isIDFIRST_lazy(s) && PL_bufptr == PL_linestart) {
2567 PL_curcop->cop_line--;
2568 warner(WARN_SEMICOLON, PL_warn_nosemi);
2569 PL_curcop->cop_line++;
2574 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2576 PL_expect = XOPERATOR;
2577 force_ident(PL_tokenbuf, '&');
2581 yylval.ival = (OPpENTERSUB_AMPER<<8);
2600 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
2601 warner(WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
2603 if (PL_expect == XSTATE && isALPHA(tmp) &&
2604 (s == PL_linestart+1 || s[-2] == '\n') )
2606 if (PL_in_eval && !PL_rsfp) {
2611 if (strnEQ(s,"=cut",4)) {
2625 PL_doextract = TRUE;
2628 if (PL_lex_brackets < PL_lex_formbrack) {
2630 #ifdef PERL_STRICT_CR
2631 for (t = s; *t == ' ' || *t == '\t'; t++) ;
2633 for (t = s; *t == ' ' || *t == '\t' || *t == '\r'; t++) ;
2635 if (*t == '\n' || *t == '#') {
2653 if (PL_expect != XOPERATOR) {
2654 if (s[1] != '<' && !strchr(s,'>'))
2657 s = scan_heredoc(s);
2659 s = scan_inputsymbol(s);
2660 TERM(sublex_start());
2665 SHop(OP_LEFT_SHIFT);
2679 SHop(OP_RIGHT_SHIFT);
2688 if (PL_expect == XOPERATOR) {
2689 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2692 return ','; /* grandfather non-comma-format format */
2696 if (s[1] == '#' && (isIDFIRST_lazy(s+2) || strchr("{$:+-", s[2]))) {
2697 if (PL_expect == XOPERATOR)
2698 no_op("Array length", PL_bufptr);
2699 PL_tokenbuf[0] = '@';
2700 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2702 if (!PL_tokenbuf[1])
2704 PL_expect = XOPERATOR;
2705 PL_pending_ident = '#';
2709 if (PL_expect == XOPERATOR)
2710 no_op("Scalar", PL_bufptr);
2711 PL_tokenbuf[0] = '$';
2712 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2713 if (!PL_tokenbuf[1]) {
2715 yyerror("Final $ should be \\$ or $name");
2719 /* This kludge not intended to be bulletproof. */
2720 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
2721 yylval.opval = newSVOP(OP_CONST, 0,
2722 newSViv((IV)PL_compiling.cop_arybase));
2723 yylval.opval->op_private = OPpCONST_ARYBASE;
2729 if (PL_lex_state == LEX_NORMAL)
2732 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2735 PL_tokenbuf[0] = '@';
2736 if (ckWARN(WARN_SYNTAX)) {
2738 isSPACE(*t) || isALNUM_lazy(t) || *t == '$';
2741 PL_bufptr = skipspace(PL_bufptr);
2742 while (t < PL_bufend && *t != ']')
2745 "Multidimensional syntax %.*s not supported",
2746 (t - PL_bufptr) + 1, PL_bufptr);
2750 else if (*s == '{') {
2751 PL_tokenbuf[0] = '%';
2752 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
2753 (t = strchr(s, '}')) && (t = strchr(t, '=')))
2755 char tmpbuf[sizeof PL_tokenbuf];
2757 for (t++; isSPACE(*t); t++) ;
2758 if (isIDFIRST_lazy(t)) {
2759 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
2760 for (; isSPACE(*t); t++) ;
2761 if (*t == ';' && perl_get_cv(tmpbuf, FALSE))
2763 "You need to quote \"%s\"", tmpbuf);
2769 PL_expect = XOPERATOR;
2770 if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
2771 bool islop = (PL_last_lop == PL_oldoldbufptr);
2772 if (!islop || PL_last_lop_op == OP_GREPSTART)
2773 PL_expect = XOPERATOR;
2774 else if (strchr("$@\"'`q", *s))
2775 PL_expect = XTERM; /* e.g. print $fh "foo" */
2776 else if (strchr("&*<%", *s) && isIDFIRST_lazy(s+1))
2777 PL_expect = XTERM; /* e.g. print $fh &sub */
2778 else if (isIDFIRST_lazy(s)) {
2779 char tmpbuf[sizeof PL_tokenbuf];
2780 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
2781 if (tmp = keyword(tmpbuf, len)) {
2782 /* binary operators exclude handle interpretations */
2794 PL_expect = XTERM; /* e.g. print $fh length() */
2799 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
2800 if (gv && GvCVu(gv))
2801 PL_expect = XTERM; /* e.g. print $fh subr() */
2804 else if (isDIGIT(*s))
2805 PL_expect = XTERM; /* e.g. print $fh 3 */
2806 else if (*s == '.' && isDIGIT(s[1]))
2807 PL_expect = XTERM; /* e.g. print $fh .3 */
2808 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
2809 PL_expect = XTERM; /* e.g. print $fh -1 */
2810 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
2811 PL_expect = XTERM; /* print $fh <<"EOF" */
2813 PL_pending_ident = '$';
2817 if (PL_expect == XOPERATOR)
2819 PL_tokenbuf[0] = '@';
2820 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2821 if (!PL_tokenbuf[1]) {
2823 yyerror("Final @ should be \\@ or @name");
2826 if (PL_lex_state == LEX_NORMAL)
2828 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2830 PL_tokenbuf[0] = '%';
2832 /* Warn about @ where they meant $. */
2833 if (ckWARN(WARN_SYNTAX)) {
2834 if (*s == '[' || *s == '{') {
2836 while (*t && (isALNUM_lazy(t) || strchr(" \t$#+-'\"", *t)))
2838 if (*t == '}' || *t == ']') {
2840 PL_bufptr = skipspace(PL_bufptr);
2842 "Scalar value %.*s better written as $%.*s",
2843 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
2848 PL_pending_ident = '@';
2851 case '/': /* may either be division or pattern */
2852 case '?': /* may either be conditional or pattern */
2853 if (PL_expect != XOPERATOR) {
2854 /* Disable warning on "study /blah/" */
2855 if (PL_oldoldbufptr == PL_last_uni
2856 && (*PL_last_uni != 's' || s - PL_last_uni < 5
2857 || memNE(PL_last_uni, "study", 5) || isALNUM_lazy(PL_last_uni+5)))
2859 s = scan_pat(s,OP_MATCH);
2860 TERM(sublex_start());
2868 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
2869 #ifdef PERL_STRICT_CR
2872 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
2874 && (s == PL_linestart || s[-1] == '\n') )
2876 PL_lex_formbrack = 0;
2880 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
2886 yylval.ival = OPf_SPECIAL;
2892 if (PL_expect != XOPERATOR)
2897 case '0': case '1': case '2': case '3': case '4':
2898 case '5': case '6': case '7': case '8': case '9':
2900 if (PL_expect == XOPERATOR)
2906 if (PL_expect == XOPERATOR) {
2907 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2910 return ','; /* grandfather non-comma-format format */
2916 missingterm((char*)0);
2917 yylval.ival = OP_CONST;
2918 TERM(sublex_start());
2922 if (PL_expect == XOPERATOR) {
2923 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2926 return ','; /* grandfather non-comma-format format */
2932 missingterm((char*)0);
2933 yylval.ival = OP_CONST;
2934 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
2935 if (*d == '$' || *d == '@' || *d == '\\' || *d & 0x80) {
2936 yylval.ival = OP_STRINGIFY;
2940 TERM(sublex_start());
2944 if (PL_expect == XOPERATOR)
2945 no_op("Backticks",s);
2947 missingterm((char*)0);
2948 yylval.ival = OP_BACKTICK;
2950 TERM(sublex_start());
2954 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
2955 warner(WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
2957 if (PL_expect == XOPERATOR)
2958 no_op("Backslash",s);
2962 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
3002 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3004 /* Some keywords can be followed by any delimiter, including ':' */
3005 tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
3006 len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
3007 (PL_tokenbuf[0] == 'q' &&
3008 strchr("qwxr", PL_tokenbuf[1]))));
3010 /* x::* is just a word, unless x is "CORE" */
3011 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
3015 while (d < PL_bufend && isSPACE(*d))
3016 d++; /* no comments skipped here, or s### is misparsed */
3018 /* Is this a label? */
3019 if (!tmp && PL_expect == XSTATE
3020 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
3022 yylval.pval = savepv(PL_tokenbuf);
3027 /* Check for keywords */
3028 tmp = keyword(PL_tokenbuf, len);
3030 /* Is this a word before a => operator? */
3031 if (strnEQ(d,"=>",2)) {
3033 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
3034 yylval.opval->op_private = OPpCONST_BARE;
3038 if (tmp < 0) { /* second-class keyword? */
3039 GV *ogv = Nullgv; /* override (winner) */
3040 GV *hgv = Nullgv; /* hidden (loser) */
3041 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
3043 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
3046 if (GvIMPORTED_CV(gv))
3048 else if (! CvMETHOD(cv))
3052 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3053 (gv = *gvp) != (GV*)&PL_sv_undef &&
3054 GvCVu(gv) && GvIMPORTED_CV(gv))
3060 tmp = 0; /* overridden by import or by GLOBAL */
3063 && -tmp==KEY_lock /* XXX generalizable kludge */
3064 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
3066 tmp = 0; /* any sub overrides "weak" keyword */
3068 else { /* no override */
3072 if (ckWARN(WARN_AMBIGUOUS) && hgv
3073 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
3074 warner(WARN_AMBIGUOUS,
3075 "Ambiguous call resolved as CORE::%s(), %s",
3076 GvENAME(hgv), "qualify as such or use &");
3083 default: /* not a keyword */
3086 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
3088 /* Get the rest if it looks like a package qualifier */
3090 if (*s == '\'' || *s == ':' && s[1] == ':') {
3092 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
3095 croak("Bad name after %s%s", PL_tokenbuf,
3096 *s == '\'' ? "'" : "::");
3100 if (PL_expect == XOPERATOR) {
3101 if (PL_bufptr == PL_linestart) {
3102 PL_curcop->cop_line--;
3103 warner(WARN_SEMICOLON, PL_warn_nosemi);
3104 PL_curcop->cop_line++;
3107 no_op("Bareword",s);
3110 /* Look for a subroutine with this name in current package,
3111 unless name is "Foo::", in which case Foo is a bearword
3112 (and a package name). */
3115 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3117 if (ckWARN(WARN_UNSAFE) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3119 "Bareword \"%s\" refers to nonexistent package",
3122 PL_tokenbuf[len] = '\0';
3129 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3132 /* if we saw a global override before, get the right name */
3135 sv = newSVpvn("CORE::GLOBAL::",14);
3136 sv_catpv(sv,PL_tokenbuf);
3139 sv = newSVpv(PL_tokenbuf,0);
3141 /* Presume this is going to be a bareword of some sort. */
3144 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3145 yylval.opval->op_private = OPpCONST_BARE;
3147 /* And if "Foo::", then that's what it certainly is. */
3152 /* See if it's the indirect object for a list operator. */
3154 if (PL_oldoldbufptr &&
3155 PL_oldoldbufptr < PL_bufptr &&
3156 (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
3157 /* NO SKIPSPACE BEFORE HERE! */
3158 (PL_expect == XREF ||
3159 ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
3161 bool immediate_paren = *s == '(';
3163 /* (Now we can afford to cross potential line boundary.) */
3166 /* Two barewords in a row may indicate method call. */
3168 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp=intuit_method(s,gv)))
3171 /* If not a declared subroutine, it's an indirect object. */
3172 /* (But it's an indir obj regardless for sort.) */
3174 if ((PL_last_lop_op == OP_SORT ||
3175 (!immediate_paren && (!gv || !GvCVu(gv)))) &&
3176 (PL_last_lop_op != OP_MAPSTART &&
3177 PL_last_lop_op != OP_GREPSTART))
3179 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3184 /* If followed by a paren, it's certainly a subroutine. */
3186 PL_expect = XOPERATOR;
3190 if (gv && GvCVu(gv)) {
3191 for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
3192 if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
3197 PL_nextval[PL_nexttoke].opval = yylval.opval;
3198 PL_expect = XOPERATOR;
3204 /* If followed by var or block, call it a method (unless sub) */
3206 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3207 PL_last_lop = PL_oldbufptr;
3208 PL_last_lop_op = OP_METHOD;
3212 /* If followed by a bareword, see if it looks like indir obj. */
3214 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp = intuit_method(s,gv)))
3217 /* Not a method, so call it a subroutine (if defined) */
3219 if (gv && GvCVu(gv)) {
3221 if (lastchar == '-')
3222 warn("Ambiguous use of -%s resolved as -&%s()",
3223 PL_tokenbuf, PL_tokenbuf);
3224 /* Check for a constant sub */
3226 if ((sv = cv_const_sv(cv))) {
3228 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3229 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3230 yylval.opval->op_private = 0;
3234 /* Resolve to GV now. */
3235 op_free(yylval.opval);
3236 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
3237 yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
3238 PL_last_lop = PL_oldbufptr;
3239 PL_last_lop_op = OP_ENTERSUB;
3240 /* Is there a prototype? */
3243 char *proto = SvPV((SV*)cv, len);
3246 if (strEQ(proto, "$"))
3248 if (*proto == '&' && *s == '{') {
3249 sv_setpv(PL_subname,"__ANON__");
3253 PL_nextval[PL_nexttoke].opval = yylval.opval;
3259 /* Call it a bare word */
3261 if (PL_hints & HINT_STRICT_SUBS)
3262 yylval.opval->op_private |= OPpCONST_STRICT;
3265 if (ckWARN(WARN_RESERVED)) {
3266 if (lastchar != '-') {
3267 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3269 warner(WARN_RESERVED, PL_warn_reserved,
3276 if (lastchar && strchr("*%&", lastchar)) {
3277 warn("Operator or semicolon missing before %c%s",
3278 lastchar, PL_tokenbuf);
3279 warn("Ambiguous use of %c resolved as operator %c",
3280 lastchar, lastchar);
3286 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3287 newSVsv(GvSV(PL_curcop->cop_filegv)));
3291 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3292 newSVpvf("%ld", (long)PL_curcop->cop_line));
3295 case KEY___PACKAGE__:
3296 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3298 ? newSVsv(PL_curstname)
3307 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
3308 char *pname = "main";
3309 if (PL_tokenbuf[2] == 'D')
3310 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
3311 gv = gv_fetchpv(form("%s::DATA", pname), TRUE, SVt_PVIO);
3314 GvIOp(gv) = newIO();
3315 IoIFP(GvIOp(gv)) = PL_rsfp;
3316 #if defined(HAS_FCNTL) && defined(F_SETFD)
3318 int fd = PerlIO_fileno(PL_rsfp);
3319 fcntl(fd,F_SETFD,fd >= 3);
3322 /* Mark this internal pseudo-handle as clean */
3323 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3325 IoTYPE(GvIOp(gv)) = '|';
3326 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
3327 IoTYPE(GvIOp(gv)) = '-';
3329 IoTYPE(GvIOp(gv)) = '<';
3340 if (PL_expect == XSTATE) {
3347 if (*s == ':' && s[1] == ':') {
3350 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3351 tmp = keyword(PL_tokenbuf, len);
3365 LOP(OP_ACCEPT,XTERM);
3371 LOP(OP_ATAN2,XTERM);
3380 LOP(OP_BLESS,XTERM);
3389 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
3406 if (!PL_cryptseen++)
3409 LOP(OP_CRYPT,XTERM);
3412 if (ckWARN(WARN_OCTAL)) {
3413 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
3414 if (*d != '0' && isDIGIT(*d))
3415 yywarn("chmod: mode argument is missing initial 0");
3417 LOP(OP_CHMOD,XTERM);
3420 LOP(OP_CHOWN,XTERM);
3423 LOP(OP_CONNECT,XTERM);
3439 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3443 PL_hints |= HINT_BLOCK_SCOPE;
3453 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3454 LOP(OP_DBMOPEN,XTERM);
3460 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3467 yylval.ival = PL_curcop->cop_line;
3481 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
3482 UNIBRACK(OP_ENTEREVAL);
3497 case KEY_endhostent:
3503 case KEY_endservent:
3506 case KEY_endprotoent:
3517 yylval.ival = PL_curcop->cop_line;
3519 if (PL_expect == XSTATE && isIDFIRST_lazy(s)) {
3521 if ((PL_bufend - p) >= 3 &&
3522 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3525 if (isIDFIRST_lazy(p))
3526 croak("Missing $ on loop variable");
3531 LOP(OP_FORMLINE,XTERM);
3537 LOP(OP_FCNTL,XTERM);
3543 LOP(OP_FLOCK,XTERM);
3552 LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
3555 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3570 case KEY_getpriority:
3571 LOP(OP_GETPRIORITY,XTERM);
3573 case KEY_getprotobyname:
3576 case KEY_getprotobynumber:
3577 LOP(OP_GPBYNUMBER,XTERM);
3579 case KEY_getprotoent:
3591 case KEY_getpeername:
3592 UNI(OP_GETPEERNAME);
3594 case KEY_gethostbyname:
3597 case KEY_gethostbyaddr:
3598 LOP(OP_GHBYADDR,XTERM);
3600 case KEY_gethostent:
3603 case KEY_getnetbyname:
3606 case KEY_getnetbyaddr:
3607 LOP(OP_GNBYADDR,XTERM);
3612 case KEY_getservbyname:
3613 LOP(OP_GSBYNAME,XTERM);
3615 case KEY_getservbyport:
3616 LOP(OP_GSBYPORT,XTERM);
3618 case KEY_getservent:
3621 case KEY_getsockname:
3622 UNI(OP_GETSOCKNAME);
3624 case KEY_getsockopt:
3625 LOP(OP_GSOCKOPT,XTERM);
3647 yylval.ival = PL_curcop->cop_line;
3651 LOP(OP_INDEX,XTERM);
3657 LOP(OP_IOCTL,XTERM);
3669 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3700 LOP(OP_LISTEN,XTERM);
3709 s = scan_pat(s,OP_MATCH);
3710 TERM(sublex_start());
3713 LOP(OP_MAPSTART, XREF);
3716 LOP(OP_MKDIR,XTERM);
3719 LOP(OP_MSGCTL,XTERM);
3722 LOP(OP_MSGGET,XTERM);
3725 LOP(OP_MSGRCV,XTERM);
3728 LOP(OP_MSGSND,XTERM);
3733 if (isIDFIRST_lazy(s)) {
3734 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
3735 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
3736 if (!PL_in_my_stash) {
3739 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
3746 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3753 if (PL_expect != XSTATE)
3754 yyerror("\"no\" not allowed in expression");
3755 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3756 s = force_version(s);
3765 if (isIDFIRST_lazy(s)) {
3767 for (d = s; isALNUM_lazy(d); d++) ;
3769 if (strchr("|&*+-=!?:.", *t))
3770 warn("Precedence problem: open %.*s should be open(%.*s)",
3776 yylval.ival = OP_OR;
3786 LOP(OP_OPEN_DIR,XTERM);
3789 checkcomma(s,PL_tokenbuf,"filehandle");
3793 checkcomma(s,PL_tokenbuf,"filehandle");
3812 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3816 LOP(OP_PIPE_OP,XTERM);
3821 missingterm((char*)0);
3822 yylval.ival = OP_CONST;
3823 TERM(sublex_start());
3831 missingterm((char*)0);
3833 if (SvCUR(PL_lex_stuff)) {
3836 d = SvPV_force(PL_lex_stuff, len);
3838 for (; isSPACE(*d) && len; --len, ++d) ;
3841 if (!warned && ckWARN(WARN_SYNTAX)) {
3842 for (; !isSPACE(*d) && len; --len, ++d) {
3845 "Possible attempt to separate words with commas");
3848 else if (*d == '#') {
3850 "Possible attempt to put comments in qw() list");
3856 for (; !isSPACE(*d) && len; --len, ++d) ;
3858 words = append_elem(OP_LIST, words,
3859 newSVOP(OP_CONST, 0, newSVpvn(b, d-b)));
3863 PL_nextval[PL_nexttoke].opval = words;
3868 SvREFCNT_dec(PL_lex_stuff);
3869 PL_lex_stuff = Nullsv;
3876 missingterm((char*)0);
3877 yylval.ival = OP_STRINGIFY;
3878 if (SvIVX(PL_lex_stuff) == '\'')
3879 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
3880 TERM(sublex_start());
3883 s = scan_pat(s,OP_QR);
3884 TERM(sublex_start());
3889 missingterm((char*)0);
3890 yylval.ival = OP_BACKTICK;
3892 TERM(sublex_start());
3898 *PL_tokenbuf = '\0';
3899 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3900 if (isIDFIRST_lazy(PL_tokenbuf))
3901 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
3903 yyerror("<> should be quotes");
3910 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3914 LOP(OP_RENAME,XTERM);
3923 LOP(OP_RINDEX,XTERM);
3946 LOP(OP_REVERSE,XTERM);
3957 TERM(sublex_start());
3959 TOKEN(1); /* force error */
3968 LOP(OP_SELECT,XTERM);
3974 LOP(OP_SEMCTL,XTERM);
3977 LOP(OP_SEMGET,XTERM);
3980 LOP(OP_SEMOP,XTERM);
3986 LOP(OP_SETPGRP,XTERM);
3988 case KEY_setpriority:
3989 LOP(OP_SETPRIORITY,XTERM);
3991 case KEY_sethostent:
3997 case KEY_setservent:
4000 case KEY_setprotoent:
4010 LOP(OP_SEEKDIR,XTERM);
4012 case KEY_setsockopt:
4013 LOP(OP_SSOCKOPT,XTERM);
4019 LOP(OP_SHMCTL,XTERM);
4022 LOP(OP_SHMGET,XTERM);
4025 LOP(OP_SHMREAD,XTERM);
4028 LOP(OP_SHMWRITE,XTERM);
4031 LOP(OP_SHUTDOWN,XTERM);
4040 LOP(OP_SOCKET,XTERM);
4042 case KEY_socketpair:
4043 LOP(OP_SOCKPAIR,XTERM);
4046 checkcomma(s,PL_tokenbuf,"subroutine name");
4048 if (*s == ';' || *s == ')') /* probably a close */
4049 croak("sort is now a reserved word");
4051 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4055 LOP(OP_SPLIT,XTERM);
4058 LOP(OP_SPRINTF,XTERM);
4061 LOP(OP_SPLICE,XTERM);
4077 LOP(OP_SUBSTR,XTERM);
4084 if (isIDFIRST_lazy(s) || *s == '\'' || *s == ':') {
4085 char tmpbuf[sizeof PL_tokenbuf];
4087 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4088 if (strchr(tmpbuf, ':'))
4089 sv_setpv(PL_subname, tmpbuf);
4091 sv_setsv(PL_subname,PL_curstname);
4092 sv_catpvn(PL_subname,"::",2);
4093 sv_catpvn(PL_subname,tmpbuf,len);
4095 s = force_word(s,WORD,FALSE,TRUE,TRUE);
4099 PL_expect = XTERMBLOCK;
4100 sv_setpv(PL_subname,"?");
4103 if (tmp == KEY_format) {
4106 PL_lex_formbrack = PL_lex_brackets + 1;
4110 /* Look for a prototype */
4117 SvREFCNT_dec(PL_lex_stuff);
4118 PL_lex_stuff = Nullsv;
4119 croak("Prototype not terminated");
4122 d = SvPVX(PL_lex_stuff);
4124 for (p = d; *p; ++p) {
4129 SvCUR(PL_lex_stuff) = tmp;
4132 PL_nextval[1] = PL_nextval[0];
4133 PL_nexttype[1] = PL_nexttype[0];
4134 PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
4135 PL_nexttype[0] = THING;
4136 if (PL_nexttoke == 1) {
4137 PL_lex_defer = PL_lex_state;
4138 PL_lex_expect = PL_expect;
4139 PL_lex_state = LEX_KNOWNEXT;
4141 PL_lex_stuff = Nullsv;
4144 if (*SvPV(PL_subname,n_a) == '?') {
4145 sv_setpv(PL_subname,"__ANON__");
4152 LOP(OP_SYSTEM,XREF);
4155 LOP(OP_SYMLINK,XTERM);
4158 LOP(OP_SYSCALL,XTERM);
4161 LOP(OP_SYSOPEN,XTERM);
4164 LOP(OP_SYSSEEK,XTERM);
4167 LOP(OP_SYSREAD,XTERM);
4170 LOP(OP_SYSWRITE,XTERM);
4174 TERM(sublex_start());
4195 LOP(OP_TRUNCATE,XTERM);
4207 yylval.ival = PL_curcop->cop_line;
4211 yylval.ival = PL_curcop->cop_line;
4215 LOP(OP_UNLINK,XTERM);
4221 LOP(OP_UNPACK,XTERM);
4224 LOP(OP_UTIME,XTERM);
4227 if (ckWARN(WARN_OCTAL)) {
4228 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4229 if (*d != '0' && isDIGIT(*d))
4230 yywarn("umask: argument is missing initial 0");
4235 LOP(OP_UNSHIFT,XTERM);
4238 if (PL_expect != XSTATE)
4239 yyerror("\"use\" not allowed in expression");
4242 s = force_version(s);
4243 if(*s == ';' || (s = skipspace(s), *s == ';')) {
4244 PL_nextval[PL_nexttoke].opval = Nullop;
4249 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4250 s = force_version(s);
4263 yylval.ival = PL_curcop->cop_line;
4267 PL_hints |= HINT_BLOCK_SCOPE;
4274 LOP(OP_WAITPID,XTERM);
4282 static char ctl_l[2];
4284 if (ctl_l[0] == '\0')
4285 ctl_l[0] = toCTRL('L');
4286 gv_fetchpv(ctl_l,TRUE, SVt_PV);
4289 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
4294 if (PL_expect == XOPERATOR)
4300 yylval.ival = OP_XOR;
4305 TERM(sublex_start());
4311 keyword(register char *d, I32 len)
4316 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
4317 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
4318 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
4319 if (strEQ(d,"__DATA__")) return KEY___DATA__;
4320 if (strEQ(d,"__END__")) return KEY___END__;
4324 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
4329 if (strEQ(d,"and")) return -KEY_and;
4330 if (strEQ(d,"abs")) return -KEY_abs;
4333 if (strEQ(d,"alarm")) return -KEY_alarm;
4334 if (strEQ(d,"atan2")) return -KEY_atan2;
4337 if (strEQ(d,"accept")) return -KEY_accept;
4342 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
4345 if (strEQ(d,"bless")) return -KEY_bless;
4346 if (strEQ(d,"bind")) return -KEY_bind;
4347 if (strEQ(d,"binmode")) return -KEY_binmode;
4350 if (strEQ(d,"CORE")) return -KEY_CORE;
4355 if (strEQ(d,"cmp")) return -KEY_cmp;
4356 if (strEQ(d,"chr")) return -KEY_chr;
4357 if (strEQ(d,"cos")) return -KEY_cos;
4360 if (strEQ(d,"chop")) return KEY_chop;
4363 if (strEQ(d,"close")) return -KEY_close;
4364 if (strEQ(d,"chdir")) return -KEY_chdir;
4365 if (strEQ(d,"chomp")) return KEY_chomp;
4366 if (strEQ(d,"chmod")) return -KEY_chmod;
4367 if (strEQ(d,"chown")) return -KEY_chown;
4368 if (strEQ(d,"crypt")) return -KEY_crypt;
4371 if (strEQ(d,"chroot")) return -KEY_chroot;
4372 if (strEQ(d,"caller")) return -KEY_caller;
4375 if (strEQ(d,"connect")) return -KEY_connect;
4378 if (strEQ(d,"closedir")) return -KEY_closedir;
4379 if (strEQ(d,"continue")) return -KEY_continue;
4384 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
4389 if (strEQ(d,"do")) return KEY_do;
4392 if (strEQ(d,"die")) return -KEY_die;
4395 if (strEQ(d,"dump")) return -KEY_dump;
4398 if (strEQ(d,"delete")) return KEY_delete;
4401 if (strEQ(d,"defined")) return KEY_defined;
4402 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
4405 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
4410 if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
4411 if (strEQ(d,"END")) return KEY_END;
4416 if (strEQ(d,"eq")) return -KEY_eq;
4419 if (strEQ(d,"eof")) return -KEY_eof;
4420 if (strEQ(d,"exp")) return -KEY_exp;
4423 if (strEQ(d,"else")) return KEY_else;
4424 if (strEQ(d,"exit")) return -KEY_exit;
4425 if (strEQ(d,"eval")) return KEY_eval;
4426 if (strEQ(d,"exec")) return -KEY_exec;
4427 if (strEQ(d,"each")) return KEY_each;
4430 if (strEQ(d,"elsif")) return KEY_elsif;
4433 if (strEQ(d,"exists")) return KEY_exists;
4434 if (strEQ(d,"elseif")) warn("elseif should be elsif");
4437 if (strEQ(d,"endgrent")) return -KEY_endgrent;
4438 if (strEQ(d,"endpwent")) return -KEY_endpwent;
4441 if (strEQ(d,"endnetent")) return -KEY_endnetent;
4444 if (strEQ(d,"endhostent")) return -KEY_endhostent;
4445 if (strEQ(d,"endservent")) return -KEY_endservent;
4448 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
4455 if (strEQ(d,"for")) return KEY_for;
4458 if (strEQ(d,"fork")) return -KEY_fork;
4461 if (strEQ(d,"fcntl")) return -KEY_fcntl;
4462 if (strEQ(d,"flock")) return -KEY_flock;
4465 if (strEQ(d,"format")) return KEY_format;
4466 if (strEQ(d,"fileno")) return -KEY_fileno;
4469 if (strEQ(d,"foreach")) return KEY_foreach;
4472 if (strEQ(d,"formline")) return -KEY_formline;
4478 if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
4479 if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
4483 if (strnEQ(d,"get",3)) {
4488 if (strEQ(d,"ppid")) return -KEY_getppid;
4489 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
4492 if (strEQ(d,"pwent")) return -KEY_getpwent;
4493 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
4494 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
4497 if (strEQ(d,"peername")) return -KEY_getpeername;
4498 if (strEQ(d,"protoent")) return -KEY_getprotoent;
4499 if (strEQ(d,"priority")) return -KEY_getpriority;
4502 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
4505 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
4509 else if (*d == 'h') {
4510 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
4511 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
4512 if (strEQ(d,"hostent")) return -KEY_gethostent;
4514 else if (*d == 'n') {
4515 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
4516 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
4517 if (strEQ(d,"netent")) return -KEY_getnetent;
4519 else if (*d == 's') {
4520 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
4521 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
4522 if (strEQ(d,"servent")) return -KEY_getservent;
4523 if (strEQ(d,"sockname")) return -KEY_getsockname;
4524 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
4526 else if (*d == 'g') {
4527 if (strEQ(d,"grent")) return -KEY_getgrent;
4528 if (strEQ(d,"grnam")) return -KEY_getgrnam;
4529 if (strEQ(d,"grgid")) return -KEY_getgrgid;
4531 else if (*d == 'l') {
4532 if (strEQ(d,"login")) return -KEY_getlogin;
4534 else if (strEQ(d,"c")) return -KEY_getc;
4539 if (strEQ(d,"gt")) return -KEY_gt;
4540 if (strEQ(d,"ge")) return -KEY_ge;
4543 if (strEQ(d,"grep")) return KEY_grep;
4544 if (strEQ(d,"goto")) return KEY_goto;
4545 if (strEQ(d,"glob")) return KEY_glob;
4548 if (strEQ(d,"gmtime")) return -KEY_gmtime;
4553 if (strEQ(d,"hex")) return -KEY_hex;
4556 if (strEQ(d,"INIT")) return KEY_INIT;
4561 if (strEQ(d,"if")) return KEY_if;
4564 if (strEQ(d,"int")) return -KEY_int;
4567 if (strEQ(d,"index")) return -KEY_index;
4568 if (strEQ(d,"ioctl")) return -KEY_ioctl;
4573 if (strEQ(d,"join")) return -KEY_join;
4577 if (strEQ(d,"keys")) return KEY_keys;
4578 if (strEQ(d,"kill")) return -KEY_kill;
4583 if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
4584 if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
4590 if (strEQ(d,"lt")) return -KEY_lt;
4591 if (strEQ(d,"le")) return -KEY_le;
4592 if (strEQ(d,"lc")) return -KEY_lc;
4595 if (strEQ(d,"log")) return -KEY_log;
4598 if (strEQ(d,"last")) return KEY_last;
4599 if (strEQ(d,"link")) return -KEY_link;
4600 if (strEQ(d,"lock")) return -KEY_lock;
4603 if (strEQ(d,"local")) return KEY_local;
4604 if (strEQ(d,"lstat")) return -KEY_lstat;
4607 if (strEQ(d,"length")) return -KEY_length;
4608 if (strEQ(d,"listen")) return -KEY_listen;
4611 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
4614 if (strEQ(d,"localtime")) return -KEY_localtime;
4620 case 1: return KEY_m;
4622 if (strEQ(d,"my")) return KEY_my;
4625 if (strEQ(d,"map")) return KEY_map;
4628 if (strEQ(d,"mkdir")) return -KEY_mkdir;
4631 if (strEQ(d,"msgctl")) return -KEY_msgctl;
4632 if (strEQ(d,"msgget")) return -KEY_msgget;
4633 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
4634 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
4639 if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
4642 if (strEQ(d,"next")) return KEY_next;
4643 if (strEQ(d,"ne")) return -KEY_ne;
4644 if (strEQ(d,"not")) return -KEY_not;
4645 if (strEQ(d,"no")) return KEY_no;
4650 if (strEQ(d,"or")) return -KEY_or;
4653 if (strEQ(d,"ord")) return -KEY_ord;
4654 if (strEQ(d,"oct")) return -KEY_oct;
4655 if (strEQ(d,"our")) { deprecate("reserved word \"our\"");
4659 if (strEQ(d,"open")) return -KEY_open;
4662 if (strEQ(d,"opendir")) return -KEY_opendir;
4669 if (strEQ(d,"pop")) return KEY_pop;
4670 if (strEQ(d,"pos")) return KEY_pos;
4673 if (strEQ(d,"push")) return KEY_push;
4674 if (strEQ(d,"pack")) return -KEY_pack;
4675 if (strEQ(d,"pipe")) return -KEY_pipe;
4678 if (strEQ(d,"print")) return KEY_print;
4681 if (strEQ(d,"printf")) return KEY_printf;
4684 if (strEQ(d,"package")) return KEY_package;
4687 if (strEQ(d,"prototype")) return KEY_prototype;
4692 if (strEQ(d,"q")) return KEY_q;
4693 if (strEQ(d,"qr")) return KEY_qr;
4694 if (strEQ(d,"qq")) return KEY_qq;
4695 if (strEQ(d,"qw")) return KEY_qw;
4696 if (strEQ(d,"qx")) return KEY_qx;
4698 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
4703 if (strEQ(d,"ref")) return -KEY_ref;
4706 if (strEQ(d,"read")) return -KEY_read;
4707 if (strEQ(d,"rand")) return -KEY_rand;
4708 if (strEQ(d,"recv")) return -KEY_recv;
4709 if (strEQ(d,"redo")) return KEY_redo;
4712 if (strEQ(d,"rmdir")) return -KEY_rmdir;
4713 if (strEQ(d,"reset")) return -KEY_reset;
4716 if (strEQ(d,"return")) return KEY_return;
4717 if (strEQ(d,"rename")) return -KEY_rename;
4718 if (strEQ(d,"rindex")) return -KEY_rindex;
4721 if (strEQ(d,"require")) return -KEY_require;
4722 if (strEQ(d,"reverse")) return -KEY_reverse;
4723 if (strEQ(d,"readdir")) return -KEY_readdir;
4726 if (strEQ(d,"readlink")) return -KEY_readlink;
4727 if (strEQ(d,"readline")) return -KEY_readline;
4728 if (strEQ(d,"readpipe")) return -KEY_readpipe;
4731 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
4737 case 0: return KEY_s;
4739 if (strEQ(d,"scalar")) return KEY_scalar;
4744 if (strEQ(d,"seek")) return -KEY_seek;
4745 if (strEQ(d,"send")) return -KEY_send;
4748 if (strEQ(d,"semop")) return -KEY_semop;
4751 if (strEQ(d,"select")) return -KEY_select;
4752 if (strEQ(d,"semctl")) return -KEY_semctl;
4753 if (strEQ(d,"semget")) return -KEY_semget;
4756 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
4757 if (strEQ(d,"seekdir")) return -KEY_seekdir;
4760 if (strEQ(d,"setpwent")) return -KEY_setpwent;
4761 if (strEQ(d,"setgrent")) return -KEY_setgrent;
4764 if (strEQ(d,"setnetent")) return -KEY_setnetent;
4767 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
4768 if (strEQ(d,"sethostent")) return -KEY_sethostent;
4769 if (strEQ(d,"setservent")) return -KEY_setservent;
4772 if (strEQ(d,"setpriority")) return -KEY_setpriority;
4773 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
4780 if (strEQ(d,"shift")) return KEY_shift;
4783 if (strEQ(d,"shmctl")) return -KEY_shmctl;
4784 if (strEQ(d,"shmget")) return -KEY_shmget;
4787 if (strEQ(d,"shmread")) return -KEY_shmread;
4790 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
4791 if (strEQ(d,"shutdown")) return -KEY_shutdown;
4796 if (strEQ(d,"sin")) return -KEY_sin;
4799 if (strEQ(d,"sleep")) return -KEY_sleep;
4802 if (strEQ(d,"sort")) return KEY_sort;
4803 if (strEQ(d,"socket")) return -KEY_socket;
4804 if (strEQ(d,"socketpair")) return -KEY_socketpair;
4807 if (strEQ(d,"split")) return KEY_split;
4808 if (strEQ(d,"sprintf")) return -KEY_sprintf;
4809 if (strEQ(d,"splice")) return KEY_splice;
4812 if (strEQ(d,"sqrt")) return -KEY_sqrt;
4815 if (strEQ(d,"srand")) return -KEY_srand;
4818 if (strEQ(d,"stat")) return -KEY_stat;
4819 if (strEQ(d,"study")) return KEY_study;
4822 if (strEQ(d,"substr")) return -KEY_substr;
4823 if (strEQ(d,"sub")) return KEY_sub;
4828 if (strEQ(d,"system")) return -KEY_system;
4831 if (strEQ(d,"symlink")) return -KEY_symlink;
4832 if (strEQ(d,"syscall")) return -KEY_syscall;
4833 if (strEQ(d,"sysopen")) return -KEY_sysopen;
4834 if (strEQ(d,"sysread")) return -KEY_sysread;
4835 if (strEQ(d,"sysseek")) return -KEY_sysseek;
4838 if (strEQ(d,"syswrite")) return -KEY_syswrite;
4847 if (strEQ(d,"tr")) return KEY_tr;
4850 if (strEQ(d,"tie")) return KEY_tie;
4853 if (strEQ(d,"tell")) return -KEY_tell;
4854 if (strEQ(d,"tied")) return KEY_tied;
4855 if (strEQ(d,"time")) return -KEY_time;
4858 if (strEQ(d,"times")) return -KEY_times;
4861 if (strEQ(d,"telldir")) return -KEY_telldir;
4864 if (strEQ(d,"truncate")) return -KEY_truncate;
4871 if (strEQ(d,"uc")) return -KEY_uc;
4874 if (strEQ(d,"use")) return KEY_use;
4877 if (strEQ(d,"undef")) return KEY_undef;
4878 if (strEQ(d,"until")) return KEY_until;
4879 if (strEQ(d,"untie")) return KEY_untie;
4880 if (strEQ(d,"utime")) return -KEY_utime;
4881 if (strEQ(d,"umask")) return -KEY_umask;
4884 if (strEQ(d,"unless")) return KEY_unless;
4885 if (strEQ(d,"unpack")) return -KEY_unpack;
4886 if (strEQ(d,"unlink")) return -KEY_unlink;
4889 if (strEQ(d,"unshift")) return KEY_unshift;
4890 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
4895 if (strEQ(d,"values")) return -KEY_values;
4896 if (strEQ(d,"vec")) return -KEY_vec;
4901 if (strEQ(d,"warn")) return -KEY_warn;
4902 if (strEQ(d,"wait")) return -KEY_wait;
4905 if (strEQ(d,"while")) return KEY_while;
4906 if (strEQ(d,"write")) return -KEY_write;
4909 if (strEQ(d,"waitpid")) return -KEY_waitpid;
4912 if (strEQ(d,"wantarray")) return -KEY_wantarray;
4917 if (len == 1) return -KEY_x;
4918 if (strEQ(d,"xor")) return -KEY_xor;
4921 if (len == 1) return KEY_y;
4930 checkcomma(register char *s, char *name, char *what)
4934 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
4935 dTHR; /* only for ckWARN */
4936 if (ckWARN(WARN_SYNTAX)) {
4938 for (w = s+2; *w && level; w++) {
4945 for (; *w && isSPACE(*w); w++) ;
4946 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
4947 warner(WARN_SYNTAX, "%s (...) interpreted as function",name);
4950 while (s < PL_bufend && isSPACE(*s))
4954 while (s < PL_bufend && isSPACE(*s))
4956 if (isIDFIRST_lazy(s)) {
4958 while (isALNUM_lazy(s))
4960 while (s < PL_bufend && isSPACE(*s))
4965 kw = keyword(w, s - w) || perl_get_cv(w, FALSE) != 0;
4969 croak("No comma allowed after %s", what);
4975 new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
4978 HV *table = GvHV(PL_hintgv); /* ^H */
4981 bool oldcatch = CATCH_GET;
4986 yyerror("%^H is not defined");
4989 cvp = hv_fetch(table, key, strlen(key), FALSE);
4990 if (!cvp || !SvOK(*cvp)) {
4992 sprintf(buf,"$^H{%s} is not defined", key);
4996 sv_2mortal(sv); /* Parent created it permanently */
4999 pv = sv_2mortal(newSVpvn(s, len));
5001 typesv = sv_2mortal(newSVpv(type, 0));
5003 typesv = &PL_sv_undef;
5005 Zero(&myop, 1, BINOP);
5006 myop.op_last = (OP *) &myop;
5007 myop.op_next = Nullop;
5008 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
5010 PUSHSTACKi(PERLSI_OVERLOAD);
5013 PL_op = (OP *) &myop;
5014 if (PERLDB_SUB && PL_curstash != PL_debstash)
5015 PL_op->op_private |= OPpENTERSUB_DB;
5026 if (PL_op = pp_entersub(ARGS))
5033 CATCH_SET(oldcatch);
5038 sprintf(buf,"Call to &{$^H{%s}} did not return a defined value", key);
5041 return SvREFCNT_inc(res);
5045 scan_word(register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
5047 register char *d = dest;
5048 register char *e = d + destlen - 3; /* two-character token, ending NUL */
5051 croak(ident_too_long);
5052 if (isALNUM(*s)) /* UTF handled below */
5054 else if (*s == '\'' && allow_package && isIDFIRST_lazy(s+1)) {
5059 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
5063 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5064 char *t = s + UTF8SKIP(s);
5065 while (*t & 0x80 && is_utf8_mark((U8*)t))
5067 if (d + (t - s) > e)
5068 croak(ident_too_long);
5069 Copy(s, d, t - s, char);
5082 scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
5089 if (PL_lex_brackets == 0)
5090 PL_lex_fakebrack = 0;
5094 e = d + destlen - 3; /* two-character token, ending NUL */
5096 while (isDIGIT(*s)) {
5098 croak(ident_too_long);
5105 croak(ident_too_long);
5106 if (isALNUM(*s)) /* UTF handled below */
5108 else if (*s == '\'' && isIDFIRST_lazy(s+1)) {
5113 else if (*s == ':' && s[1] == ':') {
5117 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5118 char *t = s + UTF8SKIP(s);
5119 while (*t & 0x80 && is_utf8_mark((U8*)t))
5121 if (d + (t - s) > e)
5122 croak(ident_too_long);
5123 Copy(s, d, t - s, char);
5134 if (PL_lex_state != LEX_NORMAL)
5135 PL_lex_state = LEX_INTERPENDMAYBE;
5138 if (*s == '$' && s[1] &&
5139 (isALNUM_lazy(s+1) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
5152 if (*d == '^' && *s && isCONTROLVAR(*s)) {
5157 if (isSPACE(s[-1])) {
5160 if (ch != ' ' && ch != '\t') {
5166 if (isIDFIRST_lazy(d)) {
5170 while (e < send && isALNUM_lazy(e) || *e == ':') {
5172 while (e < send && *e & 0x80 && is_utf8_mark((U8*)e))
5175 Copy(s, d, e - s, char);
5180 while ((isALNUM(*s) || *s == ':') && d < e)
5183 croak(ident_too_long);
5186 while (s < send && (*s == ' ' || *s == '\t')) s++;
5187 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
5188 dTHR; /* only for ckWARN */
5189 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
5190 char *brack = *s == '[' ? "[...]" : "{...}";
5191 warner(WARN_AMBIGUOUS,
5192 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
5193 funny, dest, brack, funny, dest, brack);
5195 PL_lex_fakebrack = PL_lex_brackets+1;
5197 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5201 /* Handle extended ${^Foo} variables
5202 * 1999-02-27 mjd-perl-patch@plover.com */
5203 else if (!isALNUM(*d) && !isPRINT(*d) /* isCTRL(d) */
5207 while (isALNUM(*s) && d < e) {
5211 croak(ident_too_long);
5216 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
5217 PL_lex_state = LEX_INTERPEND;
5220 if (PL_lex_state == LEX_NORMAL) {
5221 dTHR; /* only for ckWARN */
5222 if (ckWARN(WARN_AMBIGUOUS) &&
5223 (keyword(dest, d - dest) || perl_get_cv(dest, FALSE)))
5225 warner(WARN_AMBIGUOUS,
5226 "Ambiguous use of %c{%s} resolved to %c%s",
5227 funny, dest, funny, dest);
5232 s = bracket; /* let the parser handle it */
5236 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
5237 PL_lex_state = LEX_INTERPEND;
5241 void pmflag(U16 *pmfl, int ch)
5246 *pmfl |= PMf_GLOBAL;
5248 *pmfl |= PMf_CONTINUE;
5252 *pmfl |= PMf_MULTILINE;
5254 *pmfl |= PMf_SINGLELINE;
5256 *pmfl |= PMf_EXTENDED;
5260 scan_pat(char *start, I32 type)
5265 s = scan_str(start);
5268 SvREFCNT_dec(PL_lex_stuff);
5269 PL_lex_stuff = Nullsv;
5270 croak("Search pattern not terminated");
5273 pm = (PMOP*)newPMOP(type, 0);
5274 if (PL_multi_open == '?')
5275 pm->op_pmflags |= PMf_ONCE;
5277 while (*s && strchr("iomsx", *s))
5278 pmflag(&pm->op_pmflags,*s++);
5281 while (*s && strchr("iogcmsx", *s))
5282 pmflag(&pm->op_pmflags,*s++);
5284 pm->op_pmpermflags = pm->op_pmflags;
5286 PL_lex_op = (OP*)pm;
5287 yylval.ival = OP_MATCH;
5292 scan_subst(char *start)
5299 yylval.ival = OP_NULL;
5301 s = scan_str(start);
5305 SvREFCNT_dec(PL_lex_stuff);
5306 PL_lex_stuff = Nullsv;
5307 croak("Substitution pattern not terminated");
5310 if (s[-1] == PL_multi_open)
5313 first_start = PL_multi_start;
5317 SvREFCNT_dec(PL_lex_stuff);
5318 PL_lex_stuff = Nullsv;
5320 SvREFCNT_dec(PL_lex_repl);
5321 PL_lex_repl = Nullsv;
5322 croak("Substitution replacement not terminated");
5324 PL_multi_start = first_start; /* so whole substitution is taken together */
5326 pm = (PMOP*)newPMOP(OP_SUBST, 0);
5332 else if (strchr("iogcmsx", *s))
5333 pmflag(&pm->op_pmflags,*s++);
5340 PL_sublex_info.super_bufptr = s;
5341 PL_sublex_info.super_bufend = PL_bufend;
5343 pm->op_pmflags |= PMf_EVAL;
5344 repl = newSVpvn("",0);
5346 sv_catpv(repl, es ? "eval " : "do ");
5347 sv_catpvn(repl, "{ ", 2);
5348 sv_catsv(repl, PL_lex_repl);
5349 sv_catpvn(repl, " };", 2);
5351 SvREFCNT_dec(PL_lex_repl);
5355 pm->op_pmpermflags = pm->op_pmflags;
5356 PL_lex_op = (OP*)pm;
5357 yylval.ival = OP_SUBST;
5362 scan_trans(char *start)
5373 yylval.ival = OP_NULL;
5375 s = scan_str(start);
5378 SvREFCNT_dec(PL_lex_stuff);
5379 PL_lex_stuff = Nullsv;
5380 croak("Transliteration pattern not terminated");
5382 if (s[-1] == PL_multi_open)
5388 SvREFCNT_dec(PL_lex_stuff);
5389 PL_lex_stuff = Nullsv;
5391 SvREFCNT_dec(PL_lex_repl);
5392 PL_lex_repl = Nullsv;
5393 croak("Transliteration replacement not terminated");
5397 o = newSVOP(OP_TRANS, 0, 0);
5398 utf8 = OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF;
5401 New(803,tbl,256,short);
5402 o = newPVOP(OP_TRANS, 0, (char*)tbl);
5406 complement = del = squash = 0;
5407 while (strchr("cdsCU", *s)) {
5409 complement = OPpTRANS_COMPLEMENT;
5411 del = OPpTRANS_DELETE;
5413 squash = OPpTRANS_SQUASH;
5418 utf8 &= ~OPpTRANS_FROM_UTF;
5420 utf8 |= OPpTRANS_FROM_UTF;
5424 utf8 &= ~OPpTRANS_TO_UTF;
5426 utf8 |= OPpTRANS_TO_UTF;
5429 croak("Too many /C and /U options");
5434 o->op_private = del|squash|complement|utf8;
5437 yylval.ival = OP_TRANS;
5442 scan_heredoc(register char *s)
5446 I32 op_type = OP_SCALAR;
5453 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
5457 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
5460 for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
5461 if (*peek && strchr("`'\"",*peek)) {
5464 s = delimcpy(d, e, s, PL_bufend, term, &len);
5474 if (!isALNUM_lazy(s))
5475 deprecate("bare << to mean <<\"\"");
5476 for (; isALNUM_lazy(s); s++) {
5481 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
5482 croak("Delimiter for here document is too long");
5485 len = d - PL_tokenbuf;
5486 #ifndef PERL_STRICT_CR
5487 d = strchr(s, '\r');
5491 while (s < PL_bufend) {
5497 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
5506 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5511 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
5512 herewas = newSVpvn(s,PL_bufend-s);
5514 s--, herewas = newSVpvn(s,d-s);
5515 s += SvCUR(herewas);
5517 tmpstr = NEWSV(87,79);
5518 sv_upgrade(tmpstr, SVt_PVIV);
5523 else if (term == '`') {
5524 op_type = OP_BACKTICK;
5525 SvIVX(tmpstr) = '\\';
5529 PL_multi_start = PL_curcop->cop_line;
5530 PL_multi_open = PL_multi_close = '<';
5531 term = *PL_tokenbuf;
5532 if (PL_lex_inwhat == OP_SUBST && PL_in_eval && !PL_rsfp) {
5533 char *bufptr = PL_sublex_info.super_bufptr;
5534 char *bufend = PL_sublex_info.super_bufend;
5535 char *olds = s - SvCUR(herewas);
5536 s = strchr(bufptr, '\n');
5540 while (s < bufend &&
5541 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5543 PL_curcop->cop_line++;
5546 PL_curcop->cop_line = PL_multi_start;
5547 missingterm(PL_tokenbuf);
5549 sv_setpvn(herewas,bufptr,d-bufptr+1);
5550 sv_setpvn(tmpstr,d+1,s-d);
5552 sv_catpvn(herewas,s,bufend-s);
5553 (void)strcpy(bufptr,SvPVX(herewas));
5560 while (s < PL_bufend &&
5561 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5563 PL_curcop->cop_line++;
5565 if (s >= PL_bufend) {
5566 PL_curcop->cop_line = PL_multi_start;
5567 missingterm(PL_tokenbuf);
5569 sv_setpvn(tmpstr,d+1,s-d);
5571 PL_curcop->cop_line++; /* the preceding stmt passes a newline */
5573 sv_catpvn(herewas,s,PL_bufend-s);
5574 sv_setsv(PL_linestr,herewas);
5575 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
5576 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5579 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
5580 while (s >= PL_bufend) { /* multiple line string? */
5582 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5583 PL_curcop->cop_line = PL_multi_start;
5584 missingterm(PL_tokenbuf);
5586 PL_curcop->cop_line++;
5587 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5588 #ifndef PERL_STRICT_CR
5589 if (PL_bufend - PL_linestart >= 2) {
5590 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
5591 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
5593 PL_bufend[-2] = '\n';
5595 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5597 else if (PL_bufend[-1] == '\r')
5598 PL_bufend[-1] = '\n';
5600 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
5601 PL_bufend[-1] = '\n';
5603 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5604 SV *sv = NEWSV(88,0);
5606 sv_upgrade(sv, SVt_PVMG);
5607 sv_setsv(sv,PL_linestr);
5608 av_store(GvAV(PL_curcop->cop_filegv),
5609 (I32)PL_curcop->cop_line,sv);
5611 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
5614 sv_catsv(PL_linestr,herewas);
5615 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5619 sv_catsv(tmpstr,PL_linestr);
5624 PL_multi_end = PL_curcop->cop_line;
5625 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
5626 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
5627 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
5629 SvREFCNT_dec(herewas);
5630 PL_lex_stuff = tmpstr;
5631 yylval.ival = op_type;
5636 takes: current position in input buffer
5637 returns: new position in input buffer
5638 side-effects: yylval and lex_op are set.
5643 <FH> read from filehandle
5644 <pkg::FH> read from package qualified filehandle
5645 <pkg'FH> read from package qualified filehandle
5646 <$fh> read from filehandle in $fh
5652 scan_inputsymbol(char *start)
5654 register char *s = start; /* current position in buffer */
5660 d = PL_tokenbuf; /* start of temp holding space */
5661 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
5662 end = strchr(s, '\n');
5665 s = delimcpy(d, e, s + 1, end, '>', &len); /* extract until > */
5667 /* die if we didn't have space for the contents of the <>,
5668 or if it didn't end, or if we see a newline
5671 if (len >= sizeof PL_tokenbuf)
5672 croak("Excessively long <> operator");
5674 croak("Unterminated <> operator");
5679 Remember, only scalar variables are interpreted as filehandles by
5680 this code. Anything more complex (e.g., <$fh{$num}>) will be
5681 treated as a glob() call.
5682 This code makes use of the fact that except for the $ at the front,
5683 a scalar variable and a filehandle look the same.
5685 if (*d == '$' && d[1]) d++;
5687 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
5688 while (*d && (isALNUM_lazy(d) || *d == '\'' || *d == ':'))
5691 /* If we've tried to read what we allow filehandles to look like, and
5692 there's still text left, then it must be a glob() and not a getline.
5693 Use scan_str to pull out the stuff between the <> and treat it
5694 as nothing more than a string.
5697 if (d - PL_tokenbuf != len) {
5698 yylval.ival = OP_GLOB;
5700 s = scan_str(start);
5702 croak("Glob not terminated");
5706 /* we're in a filehandle read situation */
5709 /* turn <> into <ARGV> */
5711 (void)strcpy(d,"ARGV");
5713 /* if <$fh>, create the ops to turn the variable into a
5719 /* try to find it in the pad for this block, otherwise find
5720 add symbol table ops
5722 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
5723 OP *o = newOP(OP_PADSV, 0);
5725 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
5728 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
5729 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
5730 newUNOP(OP_RV2SV, 0,
5731 newGVOP(OP_GV, 0, gv)));
5733 PL_lex_op->op_flags |= OPf_SPECIAL;
5734 /* we created the ops in PL_lex_op, so make yylval.ival a null op */
5735 yylval.ival = OP_NULL;
5738 /* If it's none of the above, it must be a literal filehandle
5739 (<Foo::BAR> or <FOO>) so build a simple readline OP */
5741 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
5742 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
5743 yylval.ival = OP_NULL;
5752 takes: start position in buffer
5753 returns: position to continue reading from buffer
5754 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
5755 updates the read buffer.
5757 This subroutine pulls a string out of the input. It is called for:
5758 q single quotes q(literal text)
5759 ' single quotes 'literal text'
5760 qq double quotes qq(interpolate $here please)
5761 " double quotes "interpolate $here please"
5762 qx backticks qx(/bin/ls -l)
5763 ` backticks `/bin/ls -l`
5764 qw quote words @EXPORT_OK = qw( func() $spam )
5765 m// regexp match m/this/
5766 s/// regexp substitute s/this/that/
5767 tr/// string transliterate tr/this/that/
5768 y/// string transliterate y/this/that/
5769 ($*@) sub prototypes sub foo ($)
5770 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
5772 In most of these cases (all but <>, patterns and transliterate)
5773 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
5774 calls scan_str(). s/// makes yylex() call scan_subst() which calls
5775 scan_str(). tr/// and y/// make yylex() call scan_trans() which
5778 It skips whitespace before the string starts, and treats the first
5779 character as the delimiter. If the delimiter is one of ([{< then
5780 the corresponding "close" character )]}> is used as the closing
5781 delimiter. It allows quoting of delimiters, and if the string has
5782 balanced delimiters ([{<>}]) it allows nesting.
5784 The lexer always reads these strings into lex_stuff, except in the
5785 case of the operators which take *two* arguments (s/// and tr///)
5786 when it checks to see if lex_stuff is full (presumably with the 1st
5787 arg to s or tr) and if so puts the string into lex_repl.
5792 scan_str(char *start)
5795 SV *sv; /* scalar value: string */
5796 char *tmps; /* temp string, used for delimiter matching */
5797 register char *s = start; /* current position in the buffer */
5798 register char term; /* terminating character */
5799 register char *to; /* current position in the sv's data */
5800 I32 brackets = 1; /* bracket nesting level */
5802 /* skip space before the delimiter */
5806 /* mark where we are, in case we need to report errors */
5809 /* after skipping whitespace, the next character is the terminator */
5811 /* mark where we are */
5812 PL_multi_start = PL_curcop->cop_line;
5813 PL_multi_open = term;
5815 /* find corresponding closing delimiter */
5816 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
5818 PL_multi_close = term;
5820 /* create a new SV to hold the contents. 87 is leak category, I'm
5821 assuming. 79 is the SV's initial length. What a random number. */
5823 sv_upgrade(sv, SVt_PVIV);
5825 (void)SvPOK_only(sv); /* validate pointer */
5827 /* move past delimiter and try to read a complete string */
5830 /* extend sv if need be */
5831 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
5832 /* set 'to' to the next character in the sv's string */
5833 to = SvPVX(sv)+SvCUR(sv);
5835 /* if open delimiter is the close delimiter read unbridle */
5836 if (PL_multi_open == PL_multi_close) {
5837 for (; s < PL_bufend; s++,to++) {
5838 /* embedded newlines increment the current line number */
5839 if (*s == '\n' && !PL_rsfp)
5840 PL_curcop->cop_line++;
5841 /* handle quoted delimiters */
5842 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
5845 /* any other quotes are simply copied straight through */
5849 /* terminate when run out of buffer (the for() condition), or
5850 have found the terminator */
5851 else if (*s == term)
5857 /* if the terminator isn't the same as the start character (e.g.,
5858 matched brackets), we have to allow more in the quoting, and
5859 be prepared for nested brackets.
5862 /* read until we run out of string, or we find the terminator */
5863 for (; s < PL_bufend; s++,to++) {
5864 /* embedded newlines increment the line count */
5865 if (*s == '\n' && !PL_rsfp)
5866 PL_curcop->cop_line++;
5867 /* backslashes can escape the open or closing characters */
5868 if (*s == '\\' && s+1 < PL_bufend) {
5869 if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))
5874 /* allow nested opens and closes */
5875 else if (*s == PL_multi_close && --brackets <= 0)
5877 else if (*s == PL_multi_open)
5882 /* terminate the copied string and update the sv's end-of-string */
5884 SvCUR_set(sv, to - SvPVX(sv));
5887 * this next chunk reads more into the buffer if we're not done yet
5890 if (s < PL_bufend) break; /* handle case where we are done yet :-) */
5892 #ifndef PERL_STRICT_CR
5893 if (to - SvPVX(sv) >= 2) {
5894 if ((to[-2] == '\r' && to[-1] == '\n') ||
5895 (to[-2] == '\n' && to[-1] == '\r'))
5899 SvCUR_set(sv, to - SvPVX(sv));
5901 else if (to[-1] == '\r')
5904 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
5908 /* if we're out of file, or a read fails, bail and reset the current
5909 line marker so we can report where the unterminated string began
5912 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5914 PL_curcop->cop_line = PL_multi_start;
5917 /* we read a line, so increment our line counter */
5918 PL_curcop->cop_line++;
5920 /* update debugger info */
5921 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5922 SV *sv = NEWSV(88,0);
5924 sv_upgrade(sv, SVt_PVMG);
5925 sv_setsv(sv,PL_linestr);
5926 av_store(GvAV(PL_curcop->cop_filegv),
5927 (I32)PL_curcop->cop_line, sv);
5930 /* having changed the buffer, we must update PL_bufend */
5931 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5934 /* at this point, we have successfully read the delimited string */
5936 PL_multi_end = PL_curcop->cop_line;
5939 /* if we allocated too much space, give some back */
5940 if (SvCUR(sv) + 5 < SvLEN(sv)) {
5941 SvLEN_set(sv, SvCUR(sv) + 1);
5942 Renew(SvPVX(sv), SvLEN(sv), char);
5945 /* decide whether this is the first or second quoted string we've read
5958 takes: pointer to position in buffer
5959 returns: pointer to new position in buffer
5960 side-effects: builds ops for the constant in yylval.op
5962 Read a number in any of the formats that Perl accepts:
5964 0(x[0-7A-F]+)|([0-7]+)|(b[01])
5965 [\d_]+(\.[\d_]*)?[Ee](\d+)
5967 Underbars (_) are allowed in decimal numbers. If -w is on,
5968 underbars before a decimal point must be at three digit intervals.
5970 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
5973 If it reads a number without a decimal point or an exponent, it will
5974 try converting the number to an integer and see if it can do so
5975 without loss of precision.
5979 scan_num(char *start)
5981 register char *s = start; /* current position in buffer */
5982 register char *d; /* destination in temp buffer */
5983 register char *e; /* end of temp buffer */
5984 I32 tryiv; /* used to see if it can be an int */
5985 double value; /* number read, as a double */
5986 SV *sv; /* place to put the converted number */
5987 I32 floatit; /* boolean: int or float? */
5988 char *lastub = 0; /* position of last underbar */
5989 static char number_too_long[] = "Number too long";
5991 /* We use the first character to decide what type of number this is */
5995 croak("panic: scan_num");
5997 /* if it starts with a 0, it could be an octal number, a decimal in
5998 0.13 disguise, or a hexadecimal number, or a binary number.
6003 u holds the "number so far"
6004 shift the power of 2 of the base
6005 (hex == 4, octal == 3, binary == 1)
6006 overflowed was the number more than we can hold?
6008 Shift is used when we add a digit. It also serves as an "are
6009 we in octal/hex/binary?" indicator to disallow hex characters
6014 bool overflowed = FALSE;
6020 } else if (s[1] == 'b') {
6024 /* check for a decimal in disguise */
6025 else if (s[1] == '.')
6027 /* so it must be octal */
6032 /* read the rest of the number */
6034 UV n, b; /* n is used in the overflow test, b is the digit we're adding on */
6038 /* if we don't mention it, we're done */
6047 /* 8 and 9 are not octal */
6050 yyerror(form("Illegal octal digit '%c'", *s));
6053 yyerror(form("Illegal binary digit '%c'", *s));
6057 case '2': case '3': case '4':
6058 case '5': case '6': case '7':
6060 yyerror(form("Illegal binary digit '%c'", *s));
6064 b = *s++ & 15; /* ASCII digit -> value of digit */
6068 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
6069 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
6070 /* make sure they said 0x */
6075 /* Prepare to put the digit we have onto the end
6076 of the number so far. We check for overflows.
6080 n = u << shift; /* make room for the digit */
6081 if (!overflowed && (n >> shift) != u
6082 && !(PL_hints & HINT_NEW_BINARY)) {
6083 warn("Integer overflow in %s number",
6084 (shift == 4) ? "hex"
6085 : ((shift == 3) ? "octal" : "binary"));
6088 u = n | b; /* add the digit to the end */
6093 /* if we get here, we had success: make a scalar value from
6099 if ( PL_hints & HINT_NEW_BINARY)
6100 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
6105 handle decimal numbers.
6106 we're also sent here when we read a 0 as the first digit
6108 case '1': case '2': case '3': case '4': case '5':
6109 case '6': case '7': case '8': case '9': case '.':
6112 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
6115 /* read next group of digits and _ and copy into d */
6116 while (isDIGIT(*s) || *s == '_') {
6117 /* skip underscores, checking for misplaced ones
6121 dTHR; /* only for ckWARN */
6122 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
6123 warner(WARN_SYNTAX, "Misplaced _ in number");
6127 /* check for end of fixed-length buffer */
6129 croak(number_too_long);
6130 /* if we're ok, copy the character */
6135 /* final misplaced underbar check */
6136 if (lastub && s - lastub != 3) {
6138 if (ckWARN(WARN_SYNTAX))
6139 warner(WARN_SYNTAX, "Misplaced _ in number");
6142 /* read a decimal portion if there is one. avoid
6143 3..5 being interpreted as the number 3. followed
6146 if (*s == '.' && s[1] != '.') {
6150 /* copy, ignoring underbars, until we run out of
6151 digits. Note: no misplaced underbar checks!
6153 for (; isDIGIT(*s) || *s == '_'; s++) {
6154 /* fixed length buffer check */
6156 croak(number_too_long);
6162 /* read exponent part, if present */
6163 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
6167 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
6168 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
6170 /* allow positive or negative exponent */
6171 if (*s == '+' || *s == '-')
6174 /* read digits of exponent (no underbars :-) */
6175 while (isDIGIT(*s)) {
6177 croak(number_too_long);
6182 /* terminate the string */
6185 /* make an sv from the string */
6187 /* reset numeric locale in case we were earlier left in Swaziland */
6188 SET_NUMERIC_STANDARD();
6189 value = atof(PL_tokenbuf);
6192 See if we can make do with an integer value without loss of
6193 precision. We use I_V to cast to an int, because some
6194 compilers have issues. Then we try casting it back and see
6195 if it was the same. We only do this if we know we
6196 specifically read an integer.
6198 Note: if floatit is true, then we don't need to do the
6202 if (!floatit && (double)tryiv == value)
6203 sv_setiv(sv, tryiv);
6205 sv_setnv(sv, value);
6206 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) )
6207 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
6208 (floatit ? "float" : "integer"), sv, Nullsv, NULL);
6212 /* make the op for the constant and return */
6214 yylval.opval = newSVOP(OP_CONST, 0, sv);
6220 scan_formline(register char *s)
6225 SV *stuff = newSVpvn("",0);
6226 bool needargs = FALSE;
6229 if (*s == '.' || *s == '}') {
6231 #ifdef PERL_STRICT_CR
6232 for (t = s+1;*t == ' ' || *t == '\t'; t++) ;
6234 for (t = s+1;*t == ' ' || *t == '\t' || *t == '\r'; t++) ;
6236 if (*t == '\n' || t == PL_bufend)
6239 if (PL_in_eval && !PL_rsfp) {
6240 eol = strchr(s,'\n');
6245 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6247 for (t = s; t < eol; t++) {
6248 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
6250 goto enough; /* ~~ must be first line in formline */
6252 if (*t == '@' || *t == '^')
6255 sv_catpvn(stuff, s, eol-s);
6259 s = filter_gets(PL_linestr, PL_rsfp, 0);
6260 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
6261 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
6264 yyerror("Format not terminated");
6274 PL_lex_state = LEX_NORMAL;
6275 PL_nextval[PL_nexttoke].ival = 0;
6279 PL_lex_state = LEX_FORMLINE;
6280 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
6282 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
6286 SvREFCNT_dec(stuff);
6287 PL_lex_formbrack = 0;
6298 PL_cshlen = strlen(PL_cshname);
6303 start_subparse(I32 is_format, U32 flags)
6306 I32 oldsavestack_ix = PL_savestack_ix;
6307 CV* outsidecv = PL_compcv;
6311 assert(SvTYPE(PL_compcv) == SVt_PVCV);
6313 save_I32(&PL_subline);
6314 save_item(PL_subname);
6316 SAVESPTR(PL_curpad);
6317 SAVESPTR(PL_comppad);
6318 SAVESPTR(PL_comppad_name);
6319 SAVESPTR(PL_compcv);
6320 SAVEI32(PL_comppad_name_fill);
6321 SAVEI32(PL_min_intro_pending);
6322 SAVEI32(PL_max_intro_pending);
6323 SAVEI32(PL_pad_reset_pending);
6325 PL_compcv = (CV*)NEWSV(1104,0);
6326 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
6327 CvFLAGS(PL_compcv) |= flags;
6329 PL_comppad = newAV();
6330 av_push(PL_comppad, Nullsv);
6331 PL_curpad = AvARRAY(PL_comppad);
6332 PL_comppad_name = newAV();
6333 PL_comppad_name_fill = 0;
6334 PL_min_intro_pending = 0;
6336 PL_subline = PL_curcop->cop_line;
6338 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
6339 PL_curpad[0] = (SV*)newAV();
6340 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
6341 #endif /* USE_THREADS */
6343 comppadlist = newAV();
6344 AvREAL_off(comppadlist);
6345 av_store(comppadlist, 0, (SV*)PL_comppad_name);
6346 av_store(comppadlist, 1, (SV*)PL_comppad);
6348 CvPADLIST(PL_compcv) = comppadlist;
6349 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
6351 CvOWNER(PL_compcv) = 0;
6352 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
6353 MUTEX_INIT(CvMUTEXP(PL_compcv));
6354 #endif /* USE_THREADS */
6356 return oldsavestack_ix;
6364 PL_in_eval |= EVAL_WARNONLY;
6366 PL_in_eval &= ~EVAL_WARNONLY;
6375 char *context = NULL;
6379 if (!yychar || (yychar == ';' && !PL_rsfp))
6381 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
6382 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
6383 while (isSPACE(*PL_oldoldbufptr))
6385 context = PL_oldoldbufptr;
6386 contlen = PL_bufptr - PL_oldoldbufptr;
6388 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
6389 PL_oldbufptr != PL_bufptr) {
6390 while (isSPACE(*PL_oldbufptr))
6392 context = PL_oldbufptr;
6393 contlen = PL_bufptr - PL_oldbufptr;
6395 else if (yychar > 255)
6396 where = "next token ???";
6397 else if ((yychar & 127) == 127) {
6398 if (PL_lex_state == LEX_NORMAL ||
6399 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
6400 where = "at end of line";
6401 else if (PL_lex_inpat)
6402 where = "within pattern";
6404 where = "within string";
6407 SV *where_sv = sv_2mortal(newSVpvn("next char ", 10));
6409 sv_catpvf(where_sv, "^%c", toCTRL(yychar));
6410 else if (isPRINT_LC(yychar))
6411 sv_catpvf(where_sv, "%c", yychar);
6413 sv_catpvf(where_sv, "\\%03o", yychar & 255);
6414 where = SvPVX(where_sv);
6416 msg = sv_2mortal(newSVpv(s, 0));
6417 sv_catpvf(msg, " at %_ line %ld, ",
6418 GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
6420 sv_catpvf(msg, "near \"%.*s\"\n", contlen, context);
6422 sv_catpvf(msg, "%s\n", where);
6423 if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
6425 " (Might be a runaway multi-line %c%c string starting on line %ld)\n",
6426 (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
6429 if (PL_in_eval & EVAL_WARNONLY)
6431 else if (PL_in_eval)
6432 sv_catsv(ERRSV, msg);
6434 PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
6435 if (++PL_error_count >= 10)
6436 croak("%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
6438 PL_in_my_stash = Nullhv;