3 * Copyright (c) 1991-1997, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "It all comes from here, the stench and the peril." --Frodo
18 static void check_uni _((void));
19 static void force_next _((I32 type));
20 static char *force_version _((char *start));
21 static char *force_word _((char *start, int token, int check_keyword, int allow_pack, int allow_tick));
22 static SV *tokeq _((SV *sv));
23 static char *scan_const _((char *start));
24 static char *scan_formline _((char *s));
25 static char *scan_heredoc _((char *s));
26 static char *scan_ident _((char *s, char *send, char *dest, STRLEN destlen,
28 static char *scan_inputsymbol _((char *start));
29 static char *scan_pat _((char *start, I32 type));
30 static char *scan_str _((char *start));
31 static char *scan_subst _((char *start));
32 static char *scan_trans _((char *start));
33 static char *scan_word _((char *s, char *dest, STRLEN destlen,
34 int allow_package, STRLEN *slp));
35 static char *skipspace _((char *s));
36 static void checkcomma _((char *s, char *name, char *what));
37 static void force_ident _((char *s, int kind));
38 static void incline _((char *s));
39 static int intuit_method _((char *s, GV *gv));
40 static int intuit_more _((char *s));
41 static I32 lop _((I32 f, expectation x, char *s));
42 static void missingterm _((char *s));
43 static void no_op _((char *what, char *s));
44 static void set_csh _((void));
45 static I32 sublex_done _((void));
46 static I32 sublex_push _((void));
47 static I32 sublex_start _((void));
49 static int uni _((I32 f, char *s));
51 static char * filter_gets _((SV *sv, PerlIO *fp, STRLEN append));
52 static void restore_rsfp _((void *f));
53 static SV *new_constant _((char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type));
54 static void restore_expect _((void *e));
55 static void restore_lex_expect _((void *e));
56 #endif /* PERL_OBJECT */
58 static char ident_too_long[] = "Identifier too long";
60 #define UTF (PL_hints & HINT_UTF8)
62 /* The following are arranged oddly so that the guard on the switch statement
63 * can get by with a single comparison (if the compiler is smart enough).
66 /* #define LEX_NOTPARSING 11 is done in perl.h. */
69 #define LEX_INTERPNORMAL 9
70 #define LEX_INTERPCASEMOD 8
71 #define LEX_INTERPPUSH 7
72 #define LEX_INTERPSTART 6
73 #define LEX_INTERPEND 5
74 #define LEX_INTERPENDMAYBE 4
75 #define LEX_INTERPCONCAT 3
76 #define LEX_INTERPCONST 2
77 #define LEX_FORMLINE 1
78 #define LEX_KNOWNEXT 0
87 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
89 # include <unistd.h> /* Needed for execv() */
102 #define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
104 #define TOKEN(retval) return (PL_bufptr = s,(int)retval)
105 #define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
106 #define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
107 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
108 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
109 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
110 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
111 #define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
112 #define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
113 #define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
114 #define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
115 #define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
116 #define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
117 #define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
118 #define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
119 #define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
120 #define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
121 #define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
122 #define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
123 #define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
125 /* This bit of chicanery makes a unary function followed by
126 * a parenthesis into a function with one argument, highest precedence.
128 #define UNI(f) return(yylval.ival = f, \
131 PL_last_uni = PL_oldbufptr, \
132 PL_last_lop_op = f, \
133 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
135 #define UNIBRACK(f) return(yylval.ival = f, \
137 PL_last_uni = PL_oldbufptr, \
138 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
140 /* grandfather return to old style */
141 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
146 if (*PL_bufptr == '=') {
148 if (toketype == ANDAND)
149 yylval.ival = OP_ANDASSIGN;
150 else if (toketype == OROR)
151 yylval.ival = OP_ORASSIGN;
158 no_op(char *what, char *s)
160 char *oldbp = PL_bufptr;
161 bool is_first = (PL_oldbufptr == PL_linestart);
164 yywarn(form("%s found where operator expected", what));
166 warn("\t(Missing semicolon on previous line?)\n");
167 else if (PL_oldoldbufptr && isIDFIRST(*PL_oldoldbufptr)) {
169 for (t = PL_oldoldbufptr; *t && (isALNUM(*t) || *t == ':'); t++) ;
170 if (t < PL_bufptr && isSPACE(*t))
171 warn("\t(Do you need to predeclare %.*s?)\n",
172 t - PL_oldoldbufptr, PL_oldoldbufptr);
176 warn("\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
186 char *nl = strrchr(s,'\n');
192 iscntrl(PL_multi_close)
194 PL_multi_close < 32 || PL_multi_close == 127
198 tmpbuf[1] = toCTRL(PL_multi_close);
204 *tmpbuf = PL_multi_close;
208 q = strchr(s,'"') ? '\'' : '"';
209 croak("Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
216 if (ckWARN(WARN_DEPRECATED))
217 warner(WARN_DEPRECATED, "Use of %s is deprecated", s);
223 deprecate("comma-less variable list");
229 win32_textfilter(int idx, SV *sv, int maxlen)
231 I32 count = FILTER_READ(idx+1, sv, maxlen);
232 if (count > 0 && !maxlen)
233 win32_strip_return(sv);
239 utf16_textfilter(int idx, SV *sv, int maxlen)
241 I32 count = FILTER_READ(idx+1, sv, maxlen);
245 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, char);
246 tend = utf16_to_utf8((U16*)SvPVX(sv), tmps, SvCUR(sv));
247 sv_usepvn(sv, tmps, tend - tmps);
254 utf16rev_textfilter(int idx, SV *sv, int maxlen)
256 I32 count = FILTER_READ(idx+1, sv, maxlen);
260 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, char);
261 tend = utf16_to_utf8_reversed((U16*)SvPVX(sv), tmps, SvCUR(sv));
262 sv_usepvn(sv, tmps, tend - tmps);
275 SAVEI32(PL_lex_dojoin);
276 SAVEI32(PL_lex_brackets);
277 SAVEI32(PL_lex_fakebrack);
278 SAVEI32(PL_lex_casemods);
279 SAVEI32(PL_lex_starts);
280 SAVEI32(PL_lex_state);
281 SAVESPTR(PL_lex_inpat);
282 SAVEI32(PL_lex_inwhat);
283 SAVEI16(PL_curcop->cop_line);
286 SAVEPPTR(PL_oldbufptr);
287 SAVEPPTR(PL_oldoldbufptr);
288 SAVEPPTR(PL_linestart);
289 SAVESPTR(PL_linestr);
290 SAVEPPTR(PL_lex_brackstack);
291 SAVEPPTR(PL_lex_casestack);
292 SAVEDESTRUCTOR(restore_rsfp, PL_rsfp);
293 SAVESPTR(PL_lex_stuff);
294 SAVEI32(PL_lex_defer);
295 SAVESPTR(PL_lex_repl);
296 SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
297 SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect);
299 PL_lex_state = LEX_NORMAL;
303 PL_lex_fakebrack = 0;
304 New(899, PL_lex_brackstack, 120, char);
305 New(899, PL_lex_casestack, 12, char);
306 SAVEFREEPV(PL_lex_brackstack);
307 SAVEFREEPV(PL_lex_casestack);
309 *PL_lex_casestack = '\0';
312 PL_lex_stuff = Nullsv;
313 PL_lex_repl = Nullsv;
317 if (SvREADONLY(PL_linestr))
318 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
319 s = SvPV(PL_linestr, len);
320 if (len && s[len-1] != ';') {
321 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
322 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
323 sv_catpvn(PL_linestr, "\n;", 2);
325 SvTEMP_off(PL_linestr);
326 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
327 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
329 PL_rs = newSVpv("\n", 1);
336 PL_doextract = FALSE;
340 restore_rsfp(void *f)
342 PerlIO *fp = (PerlIO*)f;
344 if (PL_rsfp == PerlIO_stdin())
345 PerlIO_clearerr(PL_rsfp);
346 else if (PL_rsfp && (PL_rsfp != fp))
347 PerlIO_close(PL_rsfp);
352 restore_expect(void *e)
354 /* a safe way to store a small integer in a pointer */
355 PL_expect = (expectation)((char *)e - PL_tokenbuf);
359 restore_lex_expect(void *e)
361 /* a safe way to store a small integer in a pointer */
362 PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);
374 PL_curcop->cop_line++;
377 while (*s == ' ' || *s == '\t') s++;
378 if (strnEQ(s, "line ", 5)) {
387 while (*s == ' ' || *s == '\t')
389 if (*s == '"' && (t = strchr(s+1, '"')))
393 return; /* false alarm */
394 for (t = s; !isSPACE(*t); t++) ;
399 PL_curcop->cop_filegv = gv_fetchfile(s);
401 PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
403 PL_curcop->cop_line = atoi(n)-1;
407 skipspace(register char *s)
410 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
411 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
417 while (s < PL_bufend && isSPACE(*s))
419 if (s < PL_bufend && *s == '#') {
420 while (s < PL_bufend && *s != '\n')
425 if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL)
427 if ((s = filter_gets(PL_linestr, PL_rsfp, (prevlen = SvCUR(PL_linestr)))) == Nullch) {
428 if (PL_minus_n || PL_minus_p) {
429 sv_setpv(PL_linestr,PL_minus_p ?
430 ";}continue{print or die qq(-p destination: $!\\n)" :
432 sv_catpv(PL_linestr,";}");
433 PL_minus_n = PL_minus_p = 0;
436 sv_setpv(PL_linestr,";");
437 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
438 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
439 if (PL_preprocess && !PL_in_eval)
440 (void)PerlProc_pclose(PL_rsfp);
441 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
442 PerlIO_clearerr(PL_rsfp);
444 (void)PerlIO_close(PL_rsfp);
448 PL_linestart = PL_bufptr = s + prevlen;
449 PL_bufend = s + SvCUR(PL_linestr);
452 if (PERLDB_LINE && PL_curstash != PL_debstash) {
453 SV *sv = NEWSV(85,0);
455 sv_upgrade(sv, SVt_PVMG);
456 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
457 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
468 if (PL_oldoldbufptr != PL_last_uni)
470 while (isSPACE(*PL_last_uni))
472 for (s = PL_last_uni; isALNUM(*s) || *s == '-'; s++) ;
473 if ((t = strchr(s, '(')) && t < PL_bufptr)
477 warn("Warning: Use of \"%s\" without parens is ambiguous", PL_last_uni);
484 #define UNI(f) return uni(f,s)
492 PL_last_uni = PL_oldbufptr;
503 #endif /* CRIPPLED_CC */
505 #define LOP(f,x) return lop(f,x,s)
508 lop(I32 f, expectation x, char *s)
515 PL_last_lop = PL_oldbufptr;
531 PL_nexttype[PL_nexttoke] = type;
533 if (PL_lex_state != LEX_KNOWNEXT) {
534 PL_lex_defer = PL_lex_state;
535 PL_lex_expect = PL_expect;
536 PL_lex_state = LEX_KNOWNEXT;
541 force_word(register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
546 start = skipspace(start);
549 (allow_pack && *s == ':') ||
550 (allow_initial_tick && *s == '\'') )
552 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
553 if (check_keyword && keyword(PL_tokenbuf, len))
555 if (token == METHOD) {
560 PL_expect = XOPERATOR;
565 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
566 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
573 force_ident(register char *s, int kind)
576 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
577 PL_nextval[PL_nexttoke].opval = o;
580 dTHR; /* just for in_eval */
581 o->op_private = OPpCONST_ENTERED;
582 /* XXX see note in pp_entereval() for why we forgo typo
583 warnings if the symbol must be introduced in an eval.
585 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
586 kind == '$' ? SVt_PV :
587 kind == '@' ? SVt_PVAV :
588 kind == '%' ? SVt_PVHV :
596 force_version(char *s)
598 OP *version = Nullop;
602 /* default VERSION number -- GBARR */
607 for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
608 if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
610 /* real VERSION number -- GBARR */
611 version = yylval.opval;
615 /* NOTE: The parser sees the package name and the VERSION swapped */
616 PL_nextval[PL_nexttoke].opval = version;
634 s = SvPV_force(sv, len);
638 while (s < send && *s != '\\')
643 if ( PL_hints & HINT_NEW_STRING )
644 pv = sv_2mortal(newSVpv(SvPVX(pv), len));
647 if (s + 1 < send && (s[1] == '\\'))
648 s++; /* all that, just for this */
653 SvCUR_set(sv, d - SvPVX(sv));
655 if ( PL_hints & HINT_NEW_STRING )
656 return new_constant(NULL, 0, "q", sv, pv, "q");
663 register I32 op_type = yylval.ival;
665 if (op_type == OP_NULL) {
666 yylval.opval = PL_lex_op;
670 if (op_type == OP_CONST || op_type == OP_READLINE) {
671 SV *sv = tokeq(PL_lex_stuff);
673 if (SvTYPE(sv) == SVt_PVIV) {
674 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
680 nsv = newSVpv(p, len);
684 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
685 PL_lex_stuff = Nullsv;
689 PL_sublex_info.super_state = PL_lex_state;
690 PL_sublex_info.sub_inwhat = op_type;
691 PL_sublex_info.sub_op = PL_lex_op;
692 PL_lex_state = LEX_INTERPPUSH;
696 yylval.opval = PL_lex_op;
710 PL_lex_state = PL_sublex_info.super_state;
711 SAVEI32(PL_lex_dojoin);
712 SAVEI32(PL_lex_brackets);
713 SAVEI32(PL_lex_fakebrack);
714 SAVEI32(PL_lex_casemods);
715 SAVEI32(PL_lex_starts);
716 SAVEI32(PL_lex_state);
717 SAVESPTR(PL_lex_inpat);
718 SAVEI32(PL_lex_inwhat);
719 SAVEI16(PL_curcop->cop_line);
721 SAVEPPTR(PL_oldbufptr);
722 SAVEPPTR(PL_oldoldbufptr);
723 SAVEPPTR(PL_linestart);
724 SAVESPTR(PL_linestr);
725 SAVEPPTR(PL_lex_brackstack);
726 SAVEPPTR(PL_lex_casestack);
728 PL_linestr = PL_lex_stuff;
729 PL_lex_stuff = Nullsv;
731 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
732 PL_bufend += SvCUR(PL_linestr);
733 SAVEFREESV(PL_linestr);
735 PL_lex_dojoin = FALSE;
737 PL_lex_fakebrack = 0;
738 New(899, PL_lex_brackstack, 120, char);
739 New(899, PL_lex_casestack, 12, char);
740 SAVEFREEPV(PL_lex_brackstack);
741 SAVEFREEPV(PL_lex_casestack);
743 *PL_lex_casestack = '\0';
745 PL_lex_state = LEX_INTERPCONCAT;
746 PL_curcop->cop_line = PL_multi_start;
748 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
749 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
750 PL_lex_inpat = PL_sublex_info.sub_op;
752 PL_lex_inpat = Nullop;
760 if (!PL_lex_starts++) {
761 PL_expect = XOPERATOR;
762 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv("",0));
766 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
767 PL_lex_state = LEX_INTERPCASEMOD;
771 /* Is there a right-hand side to take care of? */
772 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
773 PL_linestr = PL_lex_repl;
775 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
776 PL_bufend += SvCUR(PL_linestr);
777 SAVEFREESV(PL_linestr);
778 PL_lex_dojoin = FALSE;
780 PL_lex_fakebrack = 0;
782 *PL_lex_casestack = '\0';
784 if (SvCOMPILED(PL_lex_repl)) {
785 PL_lex_state = LEX_INTERPNORMAL;
789 PL_lex_state = LEX_INTERPCONCAT;
790 PL_lex_repl = Nullsv;
795 PL_bufend = SvPVX(PL_linestr);
796 PL_bufend += SvCUR(PL_linestr);
797 PL_expect = XOPERATOR;
805 Extracts a pattern, double-quoted string, or transliteration. This
808 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
809 processing a pattern (PL_lex_inpat is true), a transliteration
810 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
812 Returns a pointer to the character scanned up to. Iff this is
813 advanced from the start pointer supplied (ie if anything was
814 successfully parsed), will leave an OP for the substring scanned
815 in yylval. Caller must intuit reason for not parsing further
816 by looking at the next characters herself.
820 double-quoted style: \r and \n
821 regexp special ones: \D \s
823 backrefs: \1 (deprecated in substitution replacements)
824 case and quoting: \U \Q \E
825 stops on @ and $, but not for $ as tail anchor
828 characters are VERY literal, except for - not at the start or end
829 of the string, which indicates a range. scan_const expands the
830 range to the full set of intermediate characters.
832 In double-quoted strings:
834 double-quoted style: \r and \n
836 backrefs: \1 (deprecated)
837 case and quoting: \U \Q \E
840 scan_const does *not* construct ops to handle interpolated strings.
841 It stops processing as soon as it finds an embedded $ or @ variable
842 and leaves it to the caller to work out what's going on.
844 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
846 $ in pattern could be $foo or could be tail anchor. Assumption:
847 it's a tail anchor if $ is the last thing in the string, or if it's
848 followed by one of ")| \n\t"
850 \1 (backreferences) are turned into $1
852 The structure of the code is
853 while (there's a character to process) {
854 handle transliteration ranges
856 skip # initiated comments in //x patterns
857 check for embedded @foo
858 check for embedded scalars
860 leave intact backslashes from leave (below)
861 deprecate \1 in strings and sub replacements
862 handle string-changing backslashes \l \U \Q \E, etc.
863 switch (what was escaped) {
864 handle - in a transliteration (becomes a literal -)
865 handle \132 octal characters
866 handle 0x15 hex characters
867 handle \cV (control V)
868 handle printf backslashes (\f, \r, \n, etc)
871 } (end while character to read)
876 scan_const(char *start)
878 register char *send = PL_bufend; /* end of the constant */
879 SV *sv = NEWSV(93, send - start); /* sv for the constant */
880 register char *s = start; /* start of the constant */
881 register char *d = SvPVX(sv); /* destination for copies */
882 bool dorange = FALSE; /* are we in a translit range? */
884 I32 utf = PL_lex_inwhat == OP_TRANS
885 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
887 I32 thisutf = PL_lex_inwhat == OP_TRANS
888 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
891 /* leaveit is the set of acceptably-backslashed characters */
894 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
897 while (s < send || dorange) {
898 /* get transliterations out of the way (they're most literal) */
899 if (PL_lex_inwhat == OP_TRANS) {
900 /* expand a range A-Z to the full set of characters. AIE! */
902 I32 i; /* current expanded character */
903 I32 max; /* last character in range */
905 i = d - SvPVX(sv); /* remember current offset */
906 SvGROW(sv, SvLEN(sv) + 256); /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */
907 d = SvPVX(sv) + i; /* restore d after the grow potentially has changed the ptr */
908 d -= 2; /* eat the first char and the - */
910 max = (U8)d[1]; /* last char in range */
912 for (i = (U8)*d; i <= max; i++)
915 /* mark the range as done, and continue */
920 /* range begins (ignore - as first or last char) */
921 else if (*s == '-' && s+1 < send && s != start) {
923 *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
932 /* if we get here, we're not doing a transliteration */
934 /* skip for regexp comments /(?#comment)/ */
935 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
937 while (s < send && *s != ')')
939 } else if (s[2] == '{') { /* This should march regcomp.c */
941 char *regparse = s + 3;
944 while (count && (c = *regparse)) {
945 if (c == '\\' && regparse[1])
953 if (*regparse == ')')
956 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
957 while (s < regparse && *s != ')')
962 /* likewise skip #-initiated comments in //x patterns */
963 else if (*s == '#' && PL_lex_inpat &&
964 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
965 while (s+1 < send && *s != '\n')
969 /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
970 else if (*s == '@' && s[1] && (isALNUM(s[1]) || strchr(":'{$", s[1])))
973 /* check for embedded scalars. only stop if we're sure it's a
976 else if (*s == '$') {
977 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
979 if (s + 1 < send && !strchr("()| \n\t", s[1]))
980 break; /* in regexp, $ might be tail anchor */
983 /* (now in tr/// code again) */
985 if (*s & 0x80 && thisutf) {
986 dTHR; /* only for ckWARN */
987 if (ckWARN(WARN_UTF8)) {
988 (void)utf8_to_uv(s, &len); /* could cvt latin-1 to utf8 here... */
998 if (*s == '\\' && s+1 < send) {
1001 /* some backslashes we leave behind */
1002 if (*s && strchr(leaveit, *s)) {
1008 /* deprecate \1 in strings and substitution replacements */
1009 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1010 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1012 dTHR; /* only for ckWARN */
1013 if (ckWARN(WARN_SYNTAX))
1014 warner(WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1019 /* string-change backslash escapes */
1020 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1025 /* if we get here, it's either a quoted -, or a digit */
1028 /* quoted - in transliterations */
1030 if (PL_lex_inwhat == OP_TRANS) {
1035 /* default action is to copy the quoted character */
1040 /* \132 indicates an octal constant */
1041 case '0': case '1': case '2': case '3':
1042 case '4': case '5': case '6': case '7':
1043 *d++ = scan_oct(s, 3, &len);
1047 /* \x24 indicates a hex constant */
1051 char* e = strchr(s, '}');
1054 yyerror("Missing right brace on \\x{}");
1057 if (ckWARN(WARN_UTF8))
1059 "Use of \\x{} without utf8 declaration");
1061 /* note: utf always shorter than hex */
1062 d = uv_to_utf8(d, scan_hex(s + 1, e - s - 1, &len));
1067 UV uv = (UV)scan_hex(s, 2, &len);
1068 if (utf && PL_lex_inwhat == OP_TRANS &&
1069 utf != (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1071 d = uv_to_utf8(d, uv); /* doing a CU or UC */
1074 if (uv >= 127 && UTF) {
1076 if (ckWARN(WARN_UTF8))
1078 "\\x%.*s will produce malformed UTF-8 character; use \\x{%.*s} for that",
1087 /* \c is a control character */
1101 /* printf-style backslashes, formfeeds, newlines, etc */
1127 } /* end if (backslash) */
1130 } /* while loop to process each character */
1132 /* terminate the string and set up the sv */
1134 SvCUR_set(sv, d - SvPVX(sv));
1137 /* shrink the sv if we allocated more than we used */
1138 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1139 SvLEN_set(sv, SvCUR(sv) + 1);
1140 Renew(SvPVX(sv), SvLEN(sv), char);
1143 /* return the substring (via yylval) only if we parsed anything */
1144 if (s > PL_bufptr) {
1145 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1146 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1148 ( PL_lex_inwhat == OP_TRANS
1150 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1153 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1159 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1161 intuit_more(register char *s)
1163 if (PL_lex_brackets)
1165 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1167 if (*s != '{' && *s != '[')
1172 /* In a pattern, so maybe we have {n,m}. */
1189 /* On the other hand, maybe we have a character class */
1192 if (*s == ']' || *s == '^')
1195 int weight = 2; /* let's weigh the evidence */
1197 unsigned char un_char = 255, last_un_char;
1198 char *send = strchr(s,']');
1199 char tmpbuf[sizeof PL_tokenbuf * 4];
1201 if (!send) /* has to be an expression */
1204 Zero(seen,256,char);
1207 else if (isDIGIT(*s)) {
1209 if (isDIGIT(s[1]) && s[2] == ']')
1215 for (; s < send; s++) {
1216 last_un_char = un_char;
1217 un_char = (unsigned char)*s;
1222 weight -= seen[un_char] * 10;
1223 if (isALNUM(s[1])) {
1224 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1225 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1230 else if (*s == '$' && s[1] &&
1231 strchr("[#!%*<>()-=",s[1])) {
1232 if (/*{*/ strchr("])} =",s[2]))
1241 if (strchr("wds]",s[1]))
1243 else if (seen['\''] || seen['"'])
1245 else if (strchr("rnftbxcav",s[1]))
1247 else if (isDIGIT(s[1])) {
1249 while (s[1] && isDIGIT(s[1]))
1259 if (strchr("aA01! ",last_un_char))
1261 if (strchr("zZ79~",s[1]))
1263 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1264 weight -= 5; /* cope with negative subscript */
1267 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1268 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1273 if (keyword(tmpbuf, d - tmpbuf))
1276 if (un_char == last_un_char + 1)
1278 weight -= seen[un_char];
1283 if (weight >= 0) /* probably a character class */
1291 intuit_method(char *start, GV *gv)
1293 char *s = start + (*start == '$');
1294 char tmpbuf[sizeof PL_tokenbuf];
1302 if ((cv = GvCVu(gv))) {
1303 char *proto = SvPVX(cv);
1313 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1314 if (*start == '$') {
1315 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1320 return *s == '(' ? FUNCMETH : METHOD;
1322 if (!keyword(tmpbuf, len)) {
1323 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1328 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1329 if (indirgv && GvCVu(indirgv))
1331 /* filehandle or package name makes it a method */
1332 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1334 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1335 return 0; /* no assumptions -- "=>" quotes bearword */
1337 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1339 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1343 return *s == '(' ? FUNCMETH : METHOD;
1353 char *pdb = PerlEnv_getenv("PERL5DB");
1357 SETERRNO(0,SS$_NORMAL);
1358 return "BEGIN { require 'perl5db.pl' }";
1364 /* Encoded script support. filter_add() effectively inserts a
1365 * 'pre-processing' function into the current source input stream.
1366 * Note that the filter function only applies to the current source file
1367 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1369 * The datasv parameter (which may be NULL) can be used to pass
1370 * private data to this instance of the filter. The filter function
1371 * can recover the SV using the FILTER_DATA macro and use it to
1372 * store private buffers and state information.
1374 * The supplied datasv parameter is upgraded to a PVIO type
1375 * and the IoDIRP field is used to store the function pointer.
1376 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1377 * private use must be set using malloc'd pointers.
1379 static int filter_debug = 0;
1382 filter_add(filter_t funcp, SV *datasv)
1384 if (!funcp){ /* temporary handy debugging hack to be deleted */
1385 filter_debug = atoi((char*)datasv);
1388 if (!PL_rsfp_filters)
1389 PL_rsfp_filters = newAV();
1391 datasv = NEWSV(255,0);
1392 if (!SvUPGRADE(datasv, SVt_PVIO))
1393 die("Can't upgrade filter_add data to SVt_PVIO");
1394 IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
1396 warn("filter_add func %p (%s)", funcp, SvPV(datasv,PL_na));
1397 av_unshift(PL_rsfp_filters, 1);
1398 av_store(PL_rsfp_filters, 0, datasv) ;
1403 /* Delete most recently added instance of this filter function. */
1405 filter_del(filter_t funcp)
1408 warn("filter_del func %p", funcp);
1409 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1411 /* if filter is on top of stack (usual case) just pop it off */
1412 if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (void*)funcp){
1413 sv_free(av_pop(PL_rsfp_filters));
1417 /* we need to search for the correct entry and clear it */
1418 die("filter_del can only delete in reverse order (currently)");
1422 /* Invoke the n'th filter function for the current rsfp. */
1424 filter_read(int idx, SV *buf_sv, int maxlen)
1427 /* 0 = read one text line */
1432 if (!PL_rsfp_filters)
1434 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
1435 /* Provide a default input filter to make life easy. */
1436 /* Note that we append to the line. This is handy. */
1438 warn("filter_read %d: from rsfp\n", idx);
1442 int old_len = SvCUR(buf_sv) ;
1444 /* ensure buf_sv is large enough */
1445 SvGROW(buf_sv, old_len + maxlen) ;
1446 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1447 if (PerlIO_error(PL_rsfp))
1448 return -1; /* error */
1450 return 0 ; /* end of file */
1452 SvCUR_set(buf_sv, old_len + len) ;
1455 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1456 if (PerlIO_error(PL_rsfp))
1457 return -1; /* error */
1459 return 0 ; /* end of file */
1462 return SvCUR(buf_sv);
1464 /* Skip this filter slot if filter has been deleted */
1465 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
1467 warn("filter_read %d: skipped (filter deleted)\n", idx);
1468 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1470 /* Get function pointer hidden within datasv */
1471 funcp = (filter_t)IoDIRP(datasv);
1473 warn("filter_read %d: via function %p (%s)\n",
1474 idx, funcp, SvPV(datasv,PL_na));
1475 /* Call function. The function is expected to */
1476 /* call "FILTER_READ(idx+1, buf_sv)" first. */
1477 /* Return: <0:error, =0:eof, >0:not eof */
1478 return (*funcp)(PERL_OBJECT_THIS_ idx, buf_sv, maxlen);
1482 filter_gets(register SV *sv, register PerlIO *fp, STRLEN append)
1485 if (!PL_rsfp_filters) {
1486 filter_add(win32_textfilter,NULL);
1489 if (PL_rsfp_filters) {
1492 SvCUR_set(sv, 0); /* start with empty line */
1493 if (FILTER_READ(0, sv, 0) > 0)
1494 return ( SvPVX(sv) ) ;
1499 return (sv_gets(sv, fp, append));
1504 static char* exp_name[] =
1505 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
1508 EXT int yychar; /* last token */
1513 Works out what to call the token just pulled out of the input
1514 stream. The yacc parser takes care of taking the ops we return and
1515 stitching them into a tree.
1521 if read an identifier
1522 if we're in a my declaration
1523 croak if they tried to say my($foo::bar)
1524 build the ops for a my() declaration
1525 if it's an access to a my() variable
1526 are we in a sort block?
1527 croak if my($a); $a <=> $b
1528 build ops for access to a my() variable
1529 if in a dq string, and they've said @foo and we can't find @foo
1531 build ops for a bareword
1532 if we already built the token before, use it.
1546 /* check if there's an identifier for us to look at */
1547 if (PL_pending_ident) {
1548 /* pit holds the identifier we read and pending_ident is reset */
1549 char pit = PL_pending_ident;
1550 PL_pending_ident = 0;
1552 /* if we're in a my(), we can't allow dynamics here.
1553 $foo'bar has already been turned into $foo::bar, so
1554 just check for colons.
1556 if it's a legal name, the OP is a PADANY.
1559 if (strchr(PL_tokenbuf,':'))
1560 croak(no_myglob,PL_tokenbuf);
1562 yylval.opval = newOP(OP_PADANY, 0);
1563 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
1568 build the ops for accesses to a my() variable.
1570 Deny my($a) or my($b) in a sort block, *if* $a or $b is
1571 then used in a comparison. This catches most, but not
1572 all cases. For instance, it catches
1573 sort { my($a); $a <=> $b }
1575 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1576 (although why you'd do that is anyone's guess).
1579 if (!strchr(PL_tokenbuf,':')) {
1581 /* Check for single character per-thread SVs */
1582 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1583 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1584 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
1586 yylval.opval = newOP(OP_THREADSV, 0);
1587 yylval.opval->op_targ = tmp;
1590 #endif /* USE_THREADS */
1591 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
1592 /* if it's a sort block and they're naming $a or $b */
1593 if (PL_last_lop_op == OP_SORT &&
1594 PL_tokenbuf[0] == '$' &&
1595 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
1598 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
1599 d < PL_bufend && *d != '\n';
1602 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
1603 croak("Can't use \"my %s\" in sort comparison",
1609 yylval.opval = newOP(OP_PADANY, 0);
1610 yylval.opval->op_targ = tmp;
1616 Whine if they've said @foo in a doublequoted string,
1617 and @foo isn't a variable we can find in the symbol
1620 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
1621 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
1622 if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
1623 yyerror(form("In string, %s now must be written as \\%s",
1624 PL_tokenbuf, PL_tokenbuf));
1627 /* build ops for a bareword */
1628 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
1629 yylval.opval->op_private = OPpCONST_ENTERED;
1630 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
1631 ((PL_tokenbuf[0] == '$') ? SVt_PV
1632 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
1637 /* no identifier pending identification */
1639 switch (PL_lex_state) {
1641 case LEX_NORMAL: /* Some compilers will produce faster */
1642 case LEX_INTERPNORMAL: /* code if we comment these out. */
1646 /* when we're already built the next token, just pull it out the queue */
1649 yylval = PL_nextval[PL_nexttoke];
1651 PL_lex_state = PL_lex_defer;
1652 PL_expect = PL_lex_expect;
1653 PL_lex_defer = LEX_NORMAL;
1655 return(PL_nexttype[PL_nexttoke]);
1657 /* interpolated case modifiers like \L \U, including \Q and \E.
1658 when we get here, PL_bufptr is at the \
1660 case LEX_INTERPCASEMOD:
1662 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
1663 croak("panic: INTERPCASEMOD");
1665 /* handle \E or end of string */
1666 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
1670 if (PL_lex_casemods) {
1671 oldmod = PL_lex_casestack[--PL_lex_casemods];
1672 PL_lex_casestack[PL_lex_casemods] = '\0';
1674 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
1676 PL_lex_state = LEX_INTERPCONCAT;
1680 if (PL_bufptr != PL_bufend)
1682 PL_lex_state = LEX_INTERPCONCAT;
1687 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
1688 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
1689 if (strchr("LU", *s) &&
1690 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
1692 PL_lex_casestack[--PL_lex_casemods] = '\0';
1695 if (PL_lex_casemods > 10) {
1696 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
1697 if (newlb != PL_lex_casestack) {
1699 PL_lex_casestack = newlb;
1702 PL_lex_casestack[PL_lex_casemods++] = *s;
1703 PL_lex_casestack[PL_lex_casemods] = '\0';
1704 PL_lex_state = LEX_INTERPCONCAT;
1705 PL_nextval[PL_nexttoke].ival = 0;
1708 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
1710 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
1712 PL_nextval[PL_nexttoke].ival = OP_LC;
1714 PL_nextval[PL_nexttoke].ival = OP_UC;
1716 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
1718 croak("panic: yylex");
1721 if (PL_lex_starts) {
1730 case LEX_INTERPPUSH:
1731 return sublex_push();
1733 case LEX_INTERPSTART:
1734 if (PL_bufptr == PL_bufend)
1735 return sublex_done();
1737 PL_lex_dojoin = (*PL_bufptr == '@');
1738 PL_lex_state = LEX_INTERPNORMAL;
1739 if (PL_lex_dojoin) {
1740 PL_nextval[PL_nexttoke].ival = 0;
1743 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
1744 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
1745 force_next(PRIVATEREF);
1747 force_ident("\"", '$');
1748 #endif /* USE_THREADS */
1749 PL_nextval[PL_nexttoke].ival = 0;
1751 PL_nextval[PL_nexttoke].ival = 0;
1753 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
1756 if (PL_lex_starts++) {
1762 case LEX_INTERPENDMAYBE:
1763 if (intuit_more(PL_bufptr)) {
1764 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
1770 if (PL_lex_dojoin) {
1771 PL_lex_dojoin = FALSE;
1772 PL_lex_state = LEX_INTERPCONCAT;
1776 case LEX_INTERPCONCAT:
1778 if (PL_lex_brackets)
1779 croak("panic: INTERPCONCAT");
1781 if (PL_bufptr == PL_bufend)
1782 return sublex_done();
1784 if (SvIVX(PL_linestr) == '\'') {
1785 SV *sv = newSVsv(PL_linestr);
1788 else if ( PL_hints & HINT_NEW_RE )
1789 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
1790 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1794 s = scan_const(PL_bufptr);
1796 PL_lex_state = LEX_INTERPCASEMOD;
1798 PL_lex_state = LEX_INTERPSTART;
1801 if (s != PL_bufptr) {
1802 PL_nextval[PL_nexttoke] = yylval;
1805 if (PL_lex_starts++)
1815 PL_lex_state = LEX_NORMAL;
1816 s = scan_formline(PL_bufptr);
1817 if (!PL_lex_formbrack)
1823 PL_oldoldbufptr = PL_oldbufptr;
1826 PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
1833 * Note: we try to be careful never to call the isXXX_utf8() functions unless we're
1834 * pretty sure we've seen the beginning of a UTF-8 character (that is, the two high
1835 * bits are set). Otherwise we risk loading in the heavy-duty SWASHINIT and SWASHGET
1836 * routines unnecessarily. You will see this not just here but throughout this file.
1838 if (UTF && (*s & 0xc0) == 0x80) {
1839 if (isIDFIRST_utf8(s))
1842 croak("Unrecognized character \\x%02X", *s & 255);
1845 goto fake_eof; /* emulate EOF on ^D or ^Z */
1850 if (PL_lex_brackets)
1851 yyerror("Missing right bracket");
1854 if (s++ < PL_bufend)
1855 goto retry; /* ignore stray nulls */
1858 if (!PL_in_eval && !PL_preambled) {
1859 PL_preambled = TRUE;
1860 sv_setpv(PL_linestr,incl_perldb());
1861 if (SvCUR(PL_linestr))
1862 sv_catpv(PL_linestr,";");
1864 while(AvFILLp(PL_preambleav) >= 0) {
1865 SV *tmpsv = av_shift(PL_preambleav);
1866 sv_catsv(PL_linestr, tmpsv);
1867 sv_catpv(PL_linestr, ";");
1870 sv_free((SV*)PL_preambleav);
1871 PL_preambleav = NULL;
1873 if (PL_minus_n || PL_minus_p) {
1874 sv_catpv(PL_linestr, "LINE: while (<>) {");
1876 sv_catpv(PL_linestr,"chomp;");
1878 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
1880 GvIMPORTED_AV_on(gv);
1882 if (strchr("/'\"", *PL_splitstr)
1883 && strchr(PL_splitstr + 1, *PL_splitstr))
1884 sv_catpvf(PL_linestr, "@F=split(%s);", PL_splitstr);
1887 s = "'~#\200\1'"; /* surely one char is unused...*/
1888 while (s[1] && strchr(PL_splitstr, *s)) s++;
1890 sv_catpvf(PL_linestr, "@F=split(%s%c",
1891 "q" + (delim == '\''), delim);
1892 for (s = PL_splitstr; *s; s++) {
1894 sv_catpvn(PL_linestr, "\\", 1);
1895 sv_catpvn(PL_linestr, s, 1);
1897 sv_catpvf(PL_linestr, "%c);", delim);
1901 sv_catpv(PL_linestr,"@F=split(' ');");
1904 sv_catpv(PL_linestr, "\n");
1905 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1906 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1907 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1908 SV *sv = NEWSV(85,0);
1910 sv_upgrade(sv, SVt_PVMG);
1911 sv_setsv(sv,PL_linestr);
1912 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1917 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
1920 if (PL_preprocess && !PL_in_eval)
1921 (void)PerlProc_pclose(PL_rsfp);
1922 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
1923 PerlIO_clearerr(PL_rsfp);
1925 (void)PerlIO_close(PL_rsfp);
1927 PL_doextract = FALSE;
1929 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
1930 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
1931 sv_catpv(PL_linestr,";}");
1932 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1933 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1934 PL_minus_n = PL_minus_p = 0;
1937 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1938 sv_setpv(PL_linestr,"");
1939 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
1942 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
1943 PL_doextract = FALSE;
1945 /* Incest with pod. */
1946 if (*s == '=' && strnEQ(s, "=cut", 4)) {
1947 sv_setpv(PL_linestr, "");
1948 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1949 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1950 PL_doextract = FALSE;
1954 } while (PL_doextract);
1955 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
1956 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1957 SV *sv = NEWSV(85,0);
1959 sv_upgrade(sv, SVt_PVMG);
1960 sv_setsv(sv,PL_linestr);
1961 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1963 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1964 if (PL_curcop->cop_line == 1) {
1965 while (s < PL_bufend && isSPACE(*s))
1967 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
1971 if (*s == '#' && *(s+1) == '!')
1973 #ifdef ALTERNATE_SHEBANG
1975 static char as[] = ALTERNATE_SHEBANG;
1976 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
1977 d = s + (sizeof(as) - 1);
1979 #endif /* ALTERNATE_SHEBANG */
1988 while (*d && !isSPACE(*d))
1992 #ifdef ARG_ZERO_IS_SCRIPT
1993 if (ipathend > ipath) {
1995 * HP-UX (at least) sets argv[0] to the script name,
1996 * which makes $^X incorrect. And Digital UNIX and Linux,
1997 * at least, set argv[0] to the basename of the Perl
1998 * interpreter. So, having found "#!", we'll set it right.
2000 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2001 assert(SvPOK(x) || SvGMAGICAL(x));
2002 if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
2003 sv_setpvn(x, ipath, ipathend - ipath);
2006 TAINT_NOT; /* $^X is always tainted, but that's OK */
2008 #endif /* ARG_ZERO_IS_SCRIPT */
2013 d = instr(s,"perl -");
2015 d = instr(s,"perl");
2016 #ifdef ALTERNATE_SHEBANG
2018 * If the ALTERNATE_SHEBANG on this system starts with a
2019 * character that can be part of a Perl expression, then if
2020 * we see it but not "perl", we're probably looking at the
2021 * start of Perl code, not a request to hand off to some
2022 * other interpreter. Similarly, if "perl" is there, but
2023 * not in the first 'word' of the line, we assume the line
2024 * contains the start of the Perl program.
2026 if (d && *s != '#') {
2028 while (*c && !strchr("; \t\r\n\f\v#", *c))
2031 d = Nullch; /* "perl" not in first word; ignore */
2033 *s = '#'; /* Don't try to parse shebang line */
2035 #endif /* ALTERNATE_SHEBANG */
2040 !instr(s,"indir") &&
2041 instr(PL_origargv[0],"perl"))
2047 while (s < PL_bufend && isSPACE(*s))
2049 if (s < PL_bufend) {
2050 Newz(899,newargv,PL_origargc+3,char*);
2052 while (s < PL_bufend && !isSPACE(*s))
2055 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2058 newargv = PL_origargv;
2060 execv(ipath, newargv);
2061 croak("Can't exec %s", ipath);
2064 U32 oldpdb = PL_perldb;
2065 bool oldn = PL_minus_n;
2066 bool oldp = PL_minus_p;
2068 while (*d && !isSPACE(*d)) d++;
2069 while (*d == ' ' || *d == '\t') d++;
2073 if (*d == 'M' || *d == 'm') {
2075 while (*d && !isSPACE(*d)) d++;
2076 croak("Too late for \"-%.*s\" option",
2079 d = moreswitches(d);
2081 if (PERLDB_LINE && !oldpdb ||
2082 ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
2083 /* if we have already added "LINE: while (<>) {",
2084 we must not do it again */
2086 sv_setpv(PL_linestr, "");
2087 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2088 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2089 PL_preambled = FALSE;
2091 (void)gv_fetchfile(PL_origfilename);
2098 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2100 PL_lex_state = LEX_FORMLINE;
2105 #ifdef PERL_STRICT_CR
2106 warn("Illegal character \\%03o (carriage return)", '\r');
2108 "(Maybe you didn't strip carriage returns after a network transfer?)\n");
2110 case ' ': case '\t': case '\f': case 013:
2115 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2117 while (s < d && *s != '\n')
2122 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2124 PL_lex_state = LEX_FORMLINE;
2134 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2139 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2142 if (strnEQ(s,"=>",2)) {
2143 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2144 OPERATOR('-'); /* unary minus */
2146 PL_last_uni = PL_oldbufptr;
2147 PL_last_lop_op = OP_FTEREAD; /* good enough */
2149 case 'r': FTST(OP_FTEREAD);
2150 case 'w': FTST(OP_FTEWRITE);
2151 case 'x': FTST(OP_FTEEXEC);
2152 case 'o': FTST(OP_FTEOWNED);
2153 case 'R': FTST(OP_FTRREAD);
2154 case 'W': FTST(OP_FTRWRITE);
2155 case 'X': FTST(OP_FTREXEC);
2156 case 'O': FTST(OP_FTROWNED);
2157 case 'e': FTST(OP_FTIS);
2158 case 'z': FTST(OP_FTZERO);
2159 case 's': FTST(OP_FTSIZE);
2160 case 'f': FTST(OP_FTFILE);
2161 case 'd': FTST(OP_FTDIR);
2162 case 'l': FTST(OP_FTLINK);
2163 case 'p': FTST(OP_FTPIPE);
2164 case 'S': FTST(OP_FTSOCK);
2165 case 'u': FTST(OP_FTSUID);
2166 case 'g': FTST(OP_FTSGID);
2167 case 'k': FTST(OP_FTSVTX);
2168 case 'b': FTST(OP_FTBLK);
2169 case 'c': FTST(OP_FTCHR);
2170 case 't': FTST(OP_FTTTY);
2171 case 'T': FTST(OP_FTTEXT);
2172 case 'B': FTST(OP_FTBINARY);
2173 case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2174 case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2175 case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
2177 croak("Unrecognized file test: -%c", (int)tmp);
2184 if (PL_expect == XOPERATOR)
2189 else if (*s == '>') {
2192 if (isIDFIRST(*s)) {
2193 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2201 if (PL_expect == XOPERATOR)
2204 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2206 OPERATOR('-'); /* unary minus */
2213 if (PL_expect == XOPERATOR)
2218 if (PL_expect == XOPERATOR)
2221 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2227 if (PL_expect != XOPERATOR) {
2228 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2229 PL_expect = XOPERATOR;
2230 force_ident(PL_tokenbuf, '*');
2243 if (PL_expect == XOPERATOR) {
2247 PL_tokenbuf[0] = '%';
2248 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2249 if (!PL_tokenbuf[1]) {
2251 yyerror("Final % should be \\% or %name");
2254 PL_pending_ident = '%';
2276 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2277 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
2282 if (PL_curcop->cop_line < PL_copline)
2283 PL_copline = PL_curcop->cop_line;
2294 if (PL_lex_brackets <= 0)
2295 yyerror("Unmatched right bracket");
2298 if (PL_lex_state == LEX_INTERPNORMAL) {
2299 if (PL_lex_brackets == 0) {
2300 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
2301 PL_lex_state = LEX_INTERPEND;
2308 if (PL_lex_brackets > 100) {
2309 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2310 if (newlb != PL_lex_brackstack) {
2312 PL_lex_brackstack = newlb;
2315 switch (PL_expect) {
2317 if (PL_lex_formbrack) {
2321 if (PL_oldoldbufptr == PL_last_lop)
2322 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2324 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2325 OPERATOR(HASHBRACK);
2327 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2330 PL_tokenbuf[0] = '\0';
2331 if (d < PL_bufend && *d == '-') {
2332 PL_tokenbuf[0] = '-';
2334 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2337 if (d < PL_bufend && isIDFIRST(*d)) {
2338 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2340 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2343 char minus = (PL_tokenbuf[0] == '-');
2344 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2351 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2355 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2360 if (PL_oldoldbufptr == PL_last_lop)
2361 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2363 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2366 OPERATOR(HASHBRACK);
2367 /* This hack serves to disambiguate a pair of curlies
2368 * as being a block or an anon hash. Normally, expectation
2369 * determines that, but in cases where we're not in a
2370 * position to expect anything in particular (like inside
2371 * eval"") we have to resolve the ambiguity. This code
2372 * covers the case where the first term in the curlies is a
2373 * quoted string. Most other cases need to be explicitly
2374 * disambiguated by prepending a `+' before the opening
2375 * curly in order to force resolution as an anon hash.
2377 * XXX should probably propagate the outer expectation
2378 * into eval"" to rely less on this hack, but that could
2379 * potentially break current behavior of eval"".
2383 if (*s == '\'' || *s == '"' || *s == '`') {
2384 /* common case: get past first string, handling escapes */
2385 for (t++; t < PL_bufend && *t != *s;)
2386 if (*t++ == '\\' && (*t == '\\' || *t == *s))
2390 else if (*s == 'q') {
2393 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
2394 && !isALNUM(*t)))) {
2396 char open, close, term;
2399 while (t < PL_bufend && isSPACE(*t))
2403 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2407 for (t++; t < PL_bufend; t++) {
2408 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
2410 else if (*t == open)
2414 for (t++; t < PL_bufend; t++) {
2415 if (*t == '\\' && t+1 < PL_bufend)
2417 else if (*t == close && --brackets <= 0)
2419 else if (*t == open)
2425 else if (isALPHA(*s)) {
2426 for (t++; t < PL_bufend && isALNUM(*t); t++) ;
2428 while (t < PL_bufend && isSPACE(*t))
2430 /* if comma follows first term, call it an anon hash */
2431 /* XXX it could be a comma expression with loop modifiers */
2432 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
2433 || (*t == '=' && t[1] == '>')))
2434 OPERATOR(HASHBRACK);
2435 if (PL_expect == XREF)
2438 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2444 yylval.ival = PL_curcop->cop_line;
2445 if (isSPACE(*s) || *s == '#')
2446 PL_copline = NOLINE; /* invalidate current command line number */
2451 if (PL_lex_brackets <= 0)
2452 yyerror("Unmatched right bracket");
2454 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2455 if (PL_lex_brackets < PL_lex_formbrack)
2456 PL_lex_formbrack = 0;
2457 if (PL_lex_state == LEX_INTERPNORMAL) {
2458 if (PL_lex_brackets == 0) {
2459 if (PL_lex_fakebrack) {
2460 PL_lex_state = LEX_INTERPEND;
2462 return yylex(); /* ignore fake brackets */
2464 if (*s == '-' && s[1] == '>')
2465 PL_lex_state = LEX_INTERPENDMAYBE;
2466 else if (*s != '[' && *s != '{')
2467 PL_lex_state = LEX_INTERPEND;
2470 if (PL_lex_brackets < PL_lex_fakebrack) {
2472 PL_lex_fakebrack = 0;
2473 return yylex(); /* ignore fake brackets */
2483 if (PL_expect == XOPERATOR) {
2484 if (ckWARN(WARN_SEMICOLON) && isALPHA(*s) && PL_bufptr == PL_linestart) {
2485 PL_curcop->cop_line--;
2486 warner(WARN_SEMICOLON, warn_nosemi);
2487 PL_curcop->cop_line++;
2492 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2494 PL_expect = XOPERATOR;
2495 force_ident(PL_tokenbuf, '&');
2499 yylval.ival = (OPpENTERSUB_AMPER<<8);
2518 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
2519 warner(WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
2521 if (PL_expect == XSTATE && isALPHA(tmp) &&
2522 (s == PL_linestart+1 || s[-2] == '\n') )
2524 if (PL_in_eval && !PL_rsfp) {
2529 if (strnEQ(s,"=cut",4)) {
2543 PL_doextract = TRUE;
2546 if (PL_lex_brackets < PL_lex_formbrack) {
2548 for (t = s; *t == ' ' || *t == '\t'; t++) ;
2549 if (*t == '\n' || *t == '#') {
2567 if (PL_expect != XOPERATOR) {
2568 if (s[1] != '<' && !strchr(s,'>'))
2571 s = scan_heredoc(s);
2573 s = scan_inputsymbol(s);
2574 TERM(sublex_start());
2579 SHop(OP_LEFT_SHIFT);
2593 SHop(OP_RIGHT_SHIFT);
2602 if (PL_expect == XOPERATOR) {
2603 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2606 return ','; /* grandfather non-comma-format format */
2610 if (s[1] == '#' && (isALPHA(s[2]) || strchr("_{$:", s[2]))) {
2611 if (PL_expect == XOPERATOR)
2612 no_op("Array length", PL_bufptr);
2613 PL_tokenbuf[0] = '@';
2614 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2616 if (!PL_tokenbuf[1])
2618 PL_expect = XOPERATOR;
2619 PL_pending_ident = '#';
2623 if (PL_expect == XOPERATOR)
2624 no_op("Scalar", PL_bufptr);
2625 PL_tokenbuf[0] = '$';
2626 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2627 if (!PL_tokenbuf[1]) {
2629 yyerror("Final $ should be \\$ or $name");
2633 /* This kludge not intended to be bulletproof. */
2634 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
2635 yylval.opval = newSVOP(OP_CONST, 0,
2636 newSViv((IV)PL_compiling.cop_arybase));
2637 yylval.opval->op_private = OPpCONST_ARYBASE;
2642 if (PL_lex_state == LEX_NORMAL)
2645 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2648 PL_tokenbuf[0] = '@';
2649 if (ckWARN(WARN_SYNTAX)) {
2651 isSPACE(*t) || isALNUM(*t) || *t == '$';
2654 PL_bufptr = skipspace(PL_bufptr);
2655 while (t < PL_bufend && *t != ']')
2658 "Multidimensional syntax %.*s not supported",
2659 (t - PL_bufptr) + 1, PL_bufptr);
2663 else if (*s == '{') {
2664 PL_tokenbuf[0] = '%';
2665 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
2666 (t = strchr(s, '}')) && (t = strchr(t, '=')))
2668 char tmpbuf[sizeof PL_tokenbuf];
2670 for (t++; isSPACE(*t); t++) ;
2671 if (isIDFIRST(*t)) {
2672 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
2673 if (*t != '(' && perl_get_cv(tmpbuf, FALSE))
2675 "You need to quote \"%s\"", tmpbuf);
2681 PL_expect = XOPERATOR;
2682 if (PL_lex_state == LEX_NORMAL && isSPACE(*d)) {
2683 bool islop = (PL_last_lop == PL_oldoldbufptr);
2684 if (!islop || PL_last_lop_op == OP_GREPSTART)
2685 PL_expect = XOPERATOR;
2686 else if (strchr("$@\"'`q", *s))
2687 PL_expect = XTERM; /* e.g. print $fh "foo" */
2688 else if (strchr("&*<%", *s) && isIDFIRST(s[1]))
2689 PL_expect = XTERM; /* e.g. print $fh &sub */
2690 else if (isIDFIRST(*s)) {
2691 char tmpbuf[sizeof PL_tokenbuf];
2692 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
2693 if (tmp = keyword(tmpbuf, len)) {
2694 /* binary operators exclude handle interpretations */
2706 PL_expect = XTERM; /* e.g. print $fh length() */
2711 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
2712 if (gv && GvCVu(gv))
2713 PL_expect = XTERM; /* e.g. print $fh subr() */
2716 else if (isDIGIT(*s))
2717 PL_expect = XTERM; /* e.g. print $fh 3 */
2718 else if (*s == '.' && isDIGIT(s[1]))
2719 PL_expect = XTERM; /* e.g. print $fh .3 */
2720 else if (strchr("/?-+", *s) && !isSPACE(s[1]))
2721 PL_expect = XTERM; /* e.g. print $fh -1 */
2722 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]))
2723 PL_expect = XTERM; /* print $fh <<"EOF" */
2725 PL_pending_ident = '$';
2729 if (PL_expect == XOPERATOR)
2731 PL_tokenbuf[0] = '@';
2732 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2733 if (!PL_tokenbuf[1]) {
2735 yyerror("Final @ should be \\@ or @name");
2738 if (PL_lex_state == LEX_NORMAL)
2740 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2742 PL_tokenbuf[0] = '%';
2744 /* Warn about @ where they meant $. */
2745 if (ckWARN(WARN_SYNTAX)) {
2746 if (*s == '[' || *s == '{') {
2748 while (*t && (isALNUM(*t) || strchr(" \t$#+-'\"", *t)))
2750 if (*t == '}' || *t == ']') {
2752 PL_bufptr = skipspace(PL_bufptr);
2754 "Scalar value %.*s better written as $%.*s",
2755 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
2760 PL_pending_ident = '@';
2763 case '/': /* may either be division or pattern */
2764 case '?': /* may either be conditional or pattern */
2765 if (PL_expect != XOPERATOR) {
2766 /* Disable warning on "study /blah/" */
2767 if (PL_oldoldbufptr == PL_last_uni
2768 && (*PL_last_uni != 's' || s - PL_last_uni < 5
2769 || memNE(PL_last_uni, "study", 5) || isALNUM(PL_last_uni[5])))
2771 s = scan_pat(s,OP_MATCH);
2772 TERM(sublex_start());
2780 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack && s[1] == '\n' &&
2781 (s == PL_linestart || s[-1] == '\n') ) {
2782 PL_lex_formbrack = 0;
2786 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
2792 yylval.ival = OPf_SPECIAL;
2798 if (PL_expect != XOPERATOR)
2803 case '0': case '1': case '2': case '3': case '4':
2804 case '5': case '6': case '7': case '8': case '9':
2806 if (PL_expect == XOPERATOR)
2812 if (PL_expect == XOPERATOR) {
2813 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2816 return ','; /* grandfather non-comma-format format */
2822 missingterm((char*)0);
2823 yylval.ival = OP_CONST;
2824 TERM(sublex_start());
2828 if (PL_expect == XOPERATOR) {
2829 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2832 return ','; /* grandfather non-comma-format format */
2838 missingterm((char*)0);
2839 yylval.ival = OP_CONST;
2840 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
2841 if (*d == '$' || *d == '@' || *d == '\\' || *d & 0x80) {
2842 yylval.ival = OP_STRINGIFY;
2846 TERM(sublex_start());
2850 if (PL_expect == XOPERATOR)
2851 no_op("Backticks",s);
2853 missingterm((char*)0);
2854 yylval.ival = OP_BACKTICK;
2856 TERM(sublex_start());
2860 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
2861 warner(WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
2863 if (PL_expect == XOPERATOR)
2864 no_op("Backslash",s);
2868 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
2907 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
2909 /* Some keywords can be followed by any delimiter, including ':' */
2910 tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
2911 len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
2912 (PL_tokenbuf[0] == 'q' &&
2913 strchr("qwxr", PL_tokenbuf[1]))));
2915 /* x::* is just a word, unless x is "CORE" */
2916 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
2920 while (d < PL_bufend && isSPACE(*d))
2921 d++; /* no comments skipped here, or s### is misparsed */
2923 /* Is this a label? */
2924 if (!tmp && PL_expect == XSTATE
2925 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
2927 yylval.pval = savepv(PL_tokenbuf);
2932 /* Check for keywords */
2933 tmp = keyword(PL_tokenbuf, len);
2935 /* Is this a word before a => operator? */
2936 if (strnEQ(d,"=>",2)) {
2938 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
2939 yylval.opval->op_private = OPpCONST_BARE;
2943 if (tmp < 0) { /* second-class keyword? */
2944 GV *ogv = Nullgv; /* override (winner) */
2945 GV *hgv = Nullgv; /* hidden (loser) */
2946 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
2948 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
2951 if (GvIMPORTED_CV(gv))
2953 else if (! CvMETHOD(cv))
2957 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
2958 (gv = *gvp) != (GV*)&PL_sv_undef &&
2959 GvCVu(gv) && GvIMPORTED_CV(gv))
2965 tmp = 0; /* overridden by import or by GLOBAL */
2968 && -tmp==KEY_lock /* XXX generalizable kludge */
2969 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
2971 tmp = 0; /* any sub overrides "weak" keyword */
2973 else { /* no override */
2977 if (ckWARN(WARN_AMBIGUOUS) && hgv)
2978 warner(WARN_AMBIGUOUS,
2979 "Ambiguous call resolved as CORE::%s(), %s",
2980 GvENAME(hgv), "qualify as such or use &");
2987 default: /* not a keyword */
2990 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
2992 /* Get the rest if it looks like a package qualifier */
2994 if (*s == '\'' || *s == ':' && s[1] == ':') {
2996 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
2999 croak("Bad name after %s%s", PL_tokenbuf,
3000 *s == '\'' ? "'" : "::");
3004 if (PL_expect == XOPERATOR) {
3005 if (PL_bufptr == PL_linestart) {
3006 PL_curcop->cop_line--;
3007 warner(WARN_SEMICOLON, warn_nosemi);
3008 PL_curcop->cop_line++;
3011 no_op("Bareword",s);
3014 /* Look for a subroutine with this name in current package,
3015 unless name is "Foo::", in which case Foo is a bearword
3016 (and a package name). */
3019 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3021 if (ckWARN(WARN_UNSAFE) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3023 "Bareword \"%s\" refers to nonexistent package",
3026 PL_tokenbuf[len] = '\0';
3033 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3036 /* if we saw a global override before, get the right name */
3039 sv = newSVpv("CORE::GLOBAL::",14);
3040 sv_catpv(sv,PL_tokenbuf);
3043 sv = newSVpv(PL_tokenbuf,0);
3045 /* Presume this is going to be a bareword of some sort. */
3048 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3049 yylval.opval->op_private = OPpCONST_BARE;
3051 /* And if "Foo::", then that's what it certainly is. */
3056 /* See if it's the indirect object for a list operator. */
3058 if (PL_oldoldbufptr &&
3059 PL_oldoldbufptr < PL_bufptr &&
3060 (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
3061 /* NO SKIPSPACE BEFORE HERE! */
3063 || ((opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF
3064 || (PL_last_lop_op == OP_ENTERSUB
3066 && PL_last_proto[PL_last_proto[0] == ';' ? 1 : 0] == '*')) )
3068 bool immediate_paren = *s == '(';
3070 /* (Now we can afford to cross potential line boundary.) */
3073 /* Two barewords in a row may indicate method call. */
3075 if ((isALPHA(*s) || *s == '$') && (tmp=intuit_method(s,gv)))
3078 /* If not a declared subroutine, it's an indirect object. */
3079 /* (But it's an indir obj regardless for sort.) */
3081 if ((PL_last_lop_op == OP_SORT ||
3082 (!immediate_paren && (!gv || !GvCVu(gv))) ) &&
3083 (PL_last_lop_op != OP_MAPSTART && PL_last_lop_op != OP_GREPSTART)){
3084 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3089 /* If followed by a paren, it's certainly a subroutine. */
3091 PL_expect = XOPERATOR;
3095 if (gv && GvCVu(gv)) {
3096 for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
3097 if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
3102 PL_nextval[PL_nexttoke].opval = yylval.opval;
3103 PL_expect = XOPERATOR;
3109 /* If followed by var or block, call it a method (unless sub) */
3111 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3112 PL_last_lop = PL_oldbufptr;
3113 PL_last_lop_op = OP_METHOD;
3117 /* If followed by a bareword, see if it looks like indir obj. */
3119 if ((isALPHA(*s) || *s == '$') && (tmp = intuit_method(s,gv)))
3122 /* Not a method, so call it a subroutine (if defined) */
3124 if (gv && GvCVu(gv)) {
3126 if (lastchar == '-')
3127 warn("Ambiguous use of -%s resolved as -&%s()",
3128 PL_tokenbuf, PL_tokenbuf);
3129 PL_last_lop = PL_oldbufptr;
3130 PL_last_lop_op = OP_ENTERSUB;
3131 /* Check for a constant sub */
3133 if ((sv = cv_const_sv(cv))) {
3135 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3136 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3137 yylval.opval->op_private = 0;
3141 /* Resolve to GV now. */
3142 op_free(yylval.opval);
3143 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
3144 /* Is there a prototype? */
3147 PL_last_proto = SvPV((SV*)cv, len);
3150 if (strEQ(PL_last_proto, "$"))
3152 if (*PL_last_proto == '&' && *s == '{') {
3153 sv_setpv(PL_subname,"__ANON__");
3157 PL_last_proto = NULL;
3158 PL_nextval[PL_nexttoke].opval = yylval.opval;
3164 if (PL_hints & HINT_STRICT_SUBS &&
3167 PL_last_lop_op != OP_TRUNCATE && /* S/F prototype in opcode.pl */
3168 PL_last_lop_op != OP_ACCEPT &&
3169 PL_last_lop_op != OP_PIPE_OP &&
3170 PL_last_lop_op != OP_SOCKPAIR)
3173 "Bareword \"%s\" not allowed while \"strict subs\" in use",
3178 /* Call it a bare word */
3181 if (ckWARN(WARN_RESERVED)) {
3182 if (lastchar != '-') {
3183 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3185 warner(WARN_RESERVED, warn_reserved, PL_tokenbuf);
3190 if (lastchar && strchr("*%&", lastchar)) {
3191 warn("Operator or semicolon missing before %c%s",
3192 lastchar, PL_tokenbuf);
3193 warn("Ambiguous use of %c resolved as operator %c",
3194 lastchar, lastchar);
3200 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3201 newSVsv(GvSV(PL_curcop->cop_filegv)));
3205 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3206 newSVpvf("%ld", (long)PL_curcop->cop_line));
3209 case KEY___PACKAGE__:
3210 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3212 ? newSVsv(PL_curstname)
3221 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
3222 char *pname = "main";
3223 if (PL_tokenbuf[2] == 'D')
3224 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
3225 gv = gv_fetchpv(form("%s::DATA", pname), TRUE, SVt_PVIO);
3228 GvIOp(gv) = newIO();
3229 IoIFP(GvIOp(gv)) = PL_rsfp;
3230 #if defined(HAS_FCNTL) && defined(F_SETFD)
3232 int fd = PerlIO_fileno(PL_rsfp);
3233 fcntl(fd,F_SETFD,fd >= 3);
3236 /* Mark this internal pseudo-handle as clean */
3237 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3239 IoTYPE(GvIOp(gv)) = '|';
3240 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
3241 IoTYPE(GvIOp(gv)) = '-';
3243 IoTYPE(GvIOp(gv)) = '<';
3254 if (PL_expect == XSTATE) {
3261 if (*s == ':' && s[1] == ':') {
3264 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3265 tmp = keyword(PL_tokenbuf, len);
3279 LOP(OP_ACCEPT,XTERM);
3285 LOP(OP_ATAN2,XTERM);
3294 LOP(OP_BLESS,XTERM);
3303 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
3320 if (!PL_cryptseen++)
3323 LOP(OP_CRYPT,XTERM);
3326 if (ckWARN(WARN_OCTAL)) {
3327 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
3328 if (*d != '0' && isDIGIT(*d))
3329 yywarn("chmod: mode argument is missing initial 0");
3331 LOP(OP_CHMOD,XTERM);
3334 LOP(OP_CHOWN,XTERM);
3337 LOP(OP_CONNECT,XTERM);
3353 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3357 PL_hints |= HINT_BLOCK_SCOPE;
3367 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3368 LOP(OP_DBMOPEN,XTERM);
3374 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3381 yylval.ival = PL_curcop->cop_line;
3395 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
3396 UNIBRACK(OP_ENTEREVAL);
3411 case KEY_endhostent:
3417 case KEY_endservent:
3420 case KEY_endprotoent:
3431 yylval.ival = PL_curcop->cop_line;
3433 if (PL_expect == XSTATE && isIDFIRST(*s)) {
3435 if ((PL_bufend - p) >= 3 &&
3436 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3440 croak("Missing $ on loop variable");
3445 LOP(OP_FORMLINE,XTERM);
3451 LOP(OP_FCNTL,XTERM);
3457 LOP(OP_FLOCK,XTERM);
3466 LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
3469 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3484 case KEY_getpriority:
3485 LOP(OP_GETPRIORITY,XTERM);
3487 case KEY_getprotobyname:
3490 case KEY_getprotobynumber:
3491 LOP(OP_GPBYNUMBER,XTERM);
3493 case KEY_getprotoent:
3505 case KEY_getpeername:
3506 UNI(OP_GETPEERNAME);
3508 case KEY_gethostbyname:
3511 case KEY_gethostbyaddr:
3512 LOP(OP_GHBYADDR,XTERM);
3514 case KEY_gethostent:
3517 case KEY_getnetbyname:
3520 case KEY_getnetbyaddr:
3521 LOP(OP_GNBYADDR,XTERM);
3526 case KEY_getservbyname:
3527 LOP(OP_GSBYNAME,XTERM);
3529 case KEY_getservbyport:
3530 LOP(OP_GSBYPORT,XTERM);
3532 case KEY_getservent:
3535 case KEY_getsockname:
3536 UNI(OP_GETSOCKNAME);
3538 case KEY_getsockopt:
3539 LOP(OP_GSOCKOPT,XTERM);
3561 yylval.ival = PL_curcop->cop_line;
3565 LOP(OP_INDEX,XTERM);
3571 LOP(OP_IOCTL,XTERM);
3583 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3614 LOP(OP_LISTEN,XTERM);
3623 s = scan_pat(s,OP_MATCH);
3624 TERM(sublex_start());
3627 LOP(OP_MAPSTART,XREF);
3630 LOP(OP_MKDIR,XTERM);
3633 LOP(OP_MSGCTL,XTERM);
3636 LOP(OP_MSGGET,XTERM);
3639 LOP(OP_MSGRCV,XTERM);
3642 LOP(OP_MSGSND,XTERM);
3647 if (isIDFIRST(*s)) {
3648 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
3649 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
3650 if (!PL_in_my_stash) {
3653 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
3660 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3667 if (PL_expect != XSTATE)
3668 yyerror("\"no\" not allowed in expression");
3669 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3670 s = force_version(s);
3679 if (isIDFIRST(*s)) {
3681 for (d = s; isALNUM(*d); d++) ;
3683 if (strchr("|&*+-=!?:.", *t))
3684 warn("Precedence problem: open %.*s should be open(%.*s)",
3690 yylval.ival = OP_OR;
3700 LOP(OP_OPEN_DIR,XTERM);
3703 checkcomma(s,PL_tokenbuf,"filehandle");
3707 checkcomma(s,PL_tokenbuf,"filehandle");
3726 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3730 LOP(OP_PIPE_OP,XTERM);
3735 missingterm((char*)0);
3736 yylval.ival = OP_CONST;
3737 TERM(sublex_start());
3745 missingterm((char*)0);
3746 if (ckWARN(WARN_SYNTAX) && SvLEN(PL_lex_stuff)) {
3747 d = SvPV_force(PL_lex_stuff, len);
3748 for (; len; --len, ++d) {
3751 "Possible attempt to separate words with commas");
3756 "Possible attempt to put comments in qw() list");
3762 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, tokeq(PL_lex_stuff));
3763 PL_lex_stuff = Nullsv;
3766 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(" ",1));
3769 yylval.ival = OP_SPLIT;
3773 PL_last_lop = PL_oldbufptr;
3774 PL_last_lop_op = OP_SPLIT;
3780 missingterm((char*)0);
3781 yylval.ival = OP_STRINGIFY;
3782 if (SvIVX(PL_lex_stuff) == '\'')
3783 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
3784 TERM(sublex_start());
3787 s = scan_pat(s,OP_QR);
3788 TERM(sublex_start());
3793 missingterm((char*)0);
3794 yylval.ival = OP_BACKTICK;
3796 TERM(sublex_start());
3802 *PL_tokenbuf = '\0';
3803 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3804 if (isIDFIRST(*PL_tokenbuf))
3805 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
3807 yyerror("<> should be quotes");
3814 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3818 LOP(OP_RENAME,XTERM);
3827 LOP(OP_RINDEX,XTERM);
3850 LOP(OP_REVERSE,XTERM);
3861 TERM(sublex_start());
3863 TOKEN(1); /* force error */
3872 LOP(OP_SELECT,XTERM);
3878 LOP(OP_SEMCTL,XTERM);
3881 LOP(OP_SEMGET,XTERM);
3884 LOP(OP_SEMOP,XTERM);
3890 LOP(OP_SETPGRP,XTERM);
3892 case KEY_setpriority:
3893 LOP(OP_SETPRIORITY,XTERM);
3895 case KEY_sethostent:
3901 case KEY_setservent:
3904 case KEY_setprotoent:
3914 LOP(OP_SEEKDIR,XTERM);
3916 case KEY_setsockopt:
3917 LOP(OP_SSOCKOPT,XTERM);
3923 LOP(OP_SHMCTL,XTERM);
3926 LOP(OP_SHMGET,XTERM);
3929 LOP(OP_SHMREAD,XTERM);
3932 LOP(OP_SHMWRITE,XTERM);
3935 LOP(OP_SHUTDOWN,XTERM);
3944 LOP(OP_SOCKET,XTERM);
3946 case KEY_socketpair:
3947 LOP(OP_SOCKPAIR,XTERM);
3950 checkcomma(s,PL_tokenbuf,"subroutine name");
3952 if (*s == ';' || *s == ')') /* probably a close */
3953 croak("sort is now a reserved word");
3955 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3959 LOP(OP_SPLIT,XTERM);
3962 LOP(OP_SPRINTF,XTERM);
3965 LOP(OP_SPLICE,XTERM);
3981 LOP(OP_SUBSTR,XTERM);
3988 if (isIDFIRST(*s) || *s == '\'' || *s == ':') {
3989 char tmpbuf[sizeof PL_tokenbuf];
3991 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
3992 if (strchr(tmpbuf, ':'))
3993 sv_setpv(PL_subname, tmpbuf);
3995 sv_setsv(PL_subname,PL_curstname);
3996 sv_catpvn(PL_subname,"::",2);
3997 sv_catpvn(PL_subname,tmpbuf,len);
3999 s = force_word(s,WORD,FALSE,TRUE,TRUE);
4003 PL_expect = XTERMBLOCK;
4004 sv_setpv(PL_subname,"?");
4007 if (tmp == KEY_format) {
4010 PL_lex_formbrack = PL_lex_brackets + 1;
4014 /* Look for a prototype */
4021 SvREFCNT_dec(PL_lex_stuff);
4022 PL_lex_stuff = Nullsv;
4023 croak("Prototype not terminated");
4026 d = SvPVX(PL_lex_stuff);
4028 for (p = d; *p; ++p) {
4033 SvCUR(PL_lex_stuff) = tmp;
4036 PL_nextval[1] = PL_nextval[0];
4037 PL_nexttype[1] = PL_nexttype[0];
4038 PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
4039 PL_nexttype[0] = THING;
4040 if (PL_nexttoke == 1) {
4041 PL_lex_defer = PL_lex_state;
4042 PL_lex_expect = PL_expect;
4043 PL_lex_state = LEX_KNOWNEXT;
4045 PL_lex_stuff = Nullsv;
4048 if (*SvPV(PL_subname,PL_na) == '?') {
4049 sv_setpv(PL_subname,"__ANON__");
4056 LOP(OP_SYSTEM,XREF);
4059 LOP(OP_SYMLINK,XTERM);
4062 LOP(OP_SYSCALL,XTERM);
4065 LOP(OP_SYSOPEN,XTERM);
4068 LOP(OP_SYSSEEK,XTERM);
4071 LOP(OP_SYSREAD,XTERM);
4074 LOP(OP_SYSWRITE,XTERM);
4078 TERM(sublex_start());
4099 LOP(OP_TRUNCATE,XTERM);
4111 yylval.ival = PL_curcop->cop_line;
4115 yylval.ival = PL_curcop->cop_line;
4119 LOP(OP_UNLINK,XTERM);
4125 LOP(OP_UNPACK,XTERM);
4128 LOP(OP_UTIME,XTERM);
4131 if (ckWARN(WARN_OCTAL)) {
4132 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4133 if (*d != '0' && isDIGIT(*d))
4134 yywarn("umask: argument is missing initial 0");
4139 LOP(OP_UNSHIFT,XTERM);
4142 if (PL_expect != XSTATE)
4143 yyerror("\"use\" not allowed in expression");
4146 s = force_version(s);
4147 if(*s == ';' || (s = skipspace(s), *s == ';')) {
4148 PL_nextval[PL_nexttoke].opval = Nullop;
4153 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4154 s = force_version(s);
4167 yylval.ival = PL_curcop->cop_line;
4171 PL_hints |= HINT_BLOCK_SCOPE;
4178 LOP(OP_WAITPID,XTERM);
4186 static char ctl_l[2];
4188 if (ctl_l[0] == '\0')
4189 ctl_l[0] = toCTRL('L');
4190 gv_fetchpv(ctl_l,TRUE, SVt_PV);
4193 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
4198 if (PL_expect == XOPERATOR)
4204 yylval.ival = OP_XOR;
4209 TERM(sublex_start());
4215 keyword(register char *d, I32 len)
4220 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
4221 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
4222 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
4223 if (strEQ(d,"__DATA__")) return KEY___DATA__;
4224 if (strEQ(d,"__END__")) return KEY___END__;
4228 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
4233 if (strEQ(d,"and")) return -KEY_and;
4234 if (strEQ(d,"abs")) return -KEY_abs;
4237 if (strEQ(d,"alarm")) return -KEY_alarm;
4238 if (strEQ(d,"atan2")) return -KEY_atan2;
4241 if (strEQ(d,"accept")) return -KEY_accept;
4246 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
4249 if (strEQ(d,"bless")) return -KEY_bless;
4250 if (strEQ(d,"bind")) return -KEY_bind;
4251 if (strEQ(d,"binmode")) return -KEY_binmode;
4254 if (strEQ(d,"CORE")) return -KEY_CORE;
4259 if (strEQ(d,"cmp")) return -KEY_cmp;
4260 if (strEQ(d,"chr")) return -KEY_chr;
4261 if (strEQ(d,"cos")) return -KEY_cos;
4264 if (strEQ(d,"chop")) return KEY_chop;
4267 if (strEQ(d,"close")) return -KEY_close;
4268 if (strEQ(d,"chdir")) return -KEY_chdir;
4269 if (strEQ(d,"chomp")) return KEY_chomp;
4270 if (strEQ(d,"chmod")) return -KEY_chmod;
4271 if (strEQ(d,"chown")) return -KEY_chown;
4272 if (strEQ(d,"crypt")) return -KEY_crypt;
4275 if (strEQ(d,"chroot")) return -KEY_chroot;
4276 if (strEQ(d,"caller")) return -KEY_caller;
4279 if (strEQ(d,"connect")) return -KEY_connect;
4282 if (strEQ(d,"closedir")) return -KEY_closedir;
4283 if (strEQ(d,"continue")) return -KEY_continue;
4288 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
4293 if (strEQ(d,"do")) return KEY_do;
4296 if (strEQ(d,"die")) return -KEY_die;
4299 if (strEQ(d,"dump")) return -KEY_dump;
4302 if (strEQ(d,"delete")) return KEY_delete;
4305 if (strEQ(d,"defined")) return KEY_defined;
4306 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
4309 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
4314 if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
4315 if (strEQ(d,"END")) return KEY_END;
4320 if (strEQ(d,"eq")) return -KEY_eq;
4323 if (strEQ(d,"eof")) return -KEY_eof;
4324 if (strEQ(d,"exp")) return -KEY_exp;
4327 if (strEQ(d,"else")) return KEY_else;
4328 if (strEQ(d,"exit")) return -KEY_exit;
4329 if (strEQ(d,"eval")) return KEY_eval;
4330 if (strEQ(d,"exec")) return -KEY_exec;
4331 if (strEQ(d,"each")) return KEY_each;
4334 if (strEQ(d,"elsif")) return KEY_elsif;
4337 if (strEQ(d,"exists")) return KEY_exists;
4338 if (strEQ(d,"elseif")) warn("elseif should be elsif");
4341 if (strEQ(d,"endgrent")) return -KEY_endgrent;
4342 if (strEQ(d,"endpwent")) return -KEY_endpwent;
4345 if (strEQ(d,"endnetent")) return -KEY_endnetent;
4348 if (strEQ(d,"endhostent")) return -KEY_endhostent;
4349 if (strEQ(d,"endservent")) return -KEY_endservent;
4352 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
4359 if (strEQ(d,"for")) return KEY_for;
4362 if (strEQ(d,"fork")) return -KEY_fork;
4365 if (strEQ(d,"fcntl")) return -KEY_fcntl;
4366 if (strEQ(d,"flock")) return -KEY_flock;
4369 if (strEQ(d,"format")) return KEY_format;
4370 if (strEQ(d,"fileno")) return -KEY_fileno;
4373 if (strEQ(d,"foreach")) return KEY_foreach;
4376 if (strEQ(d,"formline")) return -KEY_formline;
4382 if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
4383 if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
4387 if (strnEQ(d,"get",3)) {
4392 if (strEQ(d,"ppid")) return -KEY_getppid;
4393 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
4396 if (strEQ(d,"pwent")) return -KEY_getpwent;
4397 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
4398 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
4401 if (strEQ(d,"peername")) return -KEY_getpeername;
4402 if (strEQ(d,"protoent")) return -KEY_getprotoent;
4403 if (strEQ(d,"priority")) return -KEY_getpriority;
4406 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
4409 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
4413 else if (*d == 'h') {
4414 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
4415 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
4416 if (strEQ(d,"hostent")) return -KEY_gethostent;
4418 else if (*d == 'n') {
4419 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
4420 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
4421 if (strEQ(d,"netent")) return -KEY_getnetent;
4423 else if (*d == 's') {
4424 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
4425 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
4426 if (strEQ(d,"servent")) return -KEY_getservent;
4427 if (strEQ(d,"sockname")) return -KEY_getsockname;
4428 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
4430 else if (*d == 'g') {
4431 if (strEQ(d,"grent")) return -KEY_getgrent;
4432 if (strEQ(d,"grnam")) return -KEY_getgrnam;
4433 if (strEQ(d,"grgid")) return -KEY_getgrgid;
4435 else if (*d == 'l') {
4436 if (strEQ(d,"login")) return -KEY_getlogin;
4438 else if (strEQ(d,"c")) return -KEY_getc;
4443 if (strEQ(d,"gt")) return -KEY_gt;
4444 if (strEQ(d,"ge")) return -KEY_ge;
4447 if (strEQ(d,"grep")) return KEY_grep;
4448 if (strEQ(d,"goto")) return KEY_goto;
4449 if (strEQ(d,"glob")) return KEY_glob;
4452 if (strEQ(d,"gmtime")) return -KEY_gmtime;
4457 if (strEQ(d,"hex")) return -KEY_hex;
4460 if (strEQ(d,"INIT")) return KEY_INIT;
4465 if (strEQ(d,"if")) return KEY_if;
4468 if (strEQ(d,"int")) return -KEY_int;
4471 if (strEQ(d,"index")) return -KEY_index;
4472 if (strEQ(d,"ioctl")) return -KEY_ioctl;
4477 if (strEQ(d,"join")) return -KEY_join;
4481 if (strEQ(d,"keys")) return KEY_keys;
4482 if (strEQ(d,"kill")) return -KEY_kill;
4487 if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
4488 if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
4494 if (strEQ(d,"lt")) return -KEY_lt;
4495 if (strEQ(d,"le")) return -KEY_le;
4496 if (strEQ(d,"lc")) return -KEY_lc;
4499 if (strEQ(d,"log")) return -KEY_log;
4502 if (strEQ(d,"last")) return KEY_last;
4503 if (strEQ(d,"link")) return -KEY_link;
4504 if (strEQ(d,"lock")) return -KEY_lock;
4507 if (strEQ(d,"local")) return KEY_local;
4508 if (strEQ(d,"lstat")) return -KEY_lstat;
4511 if (strEQ(d,"length")) return -KEY_length;
4512 if (strEQ(d,"listen")) return -KEY_listen;
4515 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
4518 if (strEQ(d,"localtime")) return -KEY_localtime;
4524 case 1: return KEY_m;
4526 if (strEQ(d,"my")) return KEY_my;
4529 if (strEQ(d,"map")) return KEY_map;
4532 if (strEQ(d,"mkdir")) return -KEY_mkdir;
4535 if (strEQ(d,"msgctl")) return -KEY_msgctl;
4536 if (strEQ(d,"msgget")) return -KEY_msgget;
4537 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
4538 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
4543 if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
4546 if (strEQ(d,"next")) return KEY_next;
4547 if (strEQ(d,"ne")) return -KEY_ne;
4548 if (strEQ(d,"not")) return -KEY_not;
4549 if (strEQ(d,"no")) return KEY_no;
4554 if (strEQ(d,"or")) return -KEY_or;
4557 if (strEQ(d,"ord")) return -KEY_ord;
4558 if (strEQ(d,"oct")) return -KEY_oct;
4559 if (strEQ(d,"our")) { deprecate("reserved word \"our\"");
4563 if (strEQ(d,"open")) return -KEY_open;
4566 if (strEQ(d,"opendir")) return -KEY_opendir;
4573 if (strEQ(d,"pop")) return KEY_pop;
4574 if (strEQ(d,"pos")) return KEY_pos;
4577 if (strEQ(d,"push")) return KEY_push;
4578 if (strEQ(d,"pack")) return -KEY_pack;
4579 if (strEQ(d,"pipe")) return -KEY_pipe;
4582 if (strEQ(d,"print")) return KEY_print;
4585 if (strEQ(d,"printf")) return KEY_printf;
4588 if (strEQ(d,"package")) return KEY_package;
4591 if (strEQ(d,"prototype")) return KEY_prototype;
4596 if (strEQ(d,"q")) return KEY_q;
4597 if (strEQ(d,"qr")) return KEY_qr;
4598 if (strEQ(d,"qq")) return KEY_qq;
4599 if (strEQ(d,"qw")) return KEY_qw;
4600 if (strEQ(d,"qx")) return KEY_qx;
4602 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
4607 if (strEQ(d,"ref")) return -KEY_ref;
4610 if (strEQ(d,"read")) return -KEY_read;
4611 if (strEQ(d,"rand")) return -KEY_rand;
4612 if (strEQ(d,"recv")) return -KEY_recv;
4613 if (strEQ(d,"redo")) return KEY_redo;
4616 if (strEQ(d,"rmdir")) return -KEY_rmdir;
4617 if (strEQ(d,"reset")) return -KEY_reset;
4620 if (strEQ(d,"return")) return KEY_return;
4621 if (strEQ(d,"rename")) return -KEY_rename;
4622 if (strEQ(d,"rindex")) return -KEY_rindex;
4625 if (strEQ(d,"require")) return -KEY_require;
4626 if (strEQ(d,"reverse")) return -KEY_reverse;
4627 if (strEQ(d,"readdir")) return -KEY_readdir;
4630 if (strEQ(d,"readlink")) return -KEY_readlink;
4631 if (strEQ(d,"readline")) return -KEY_readline;
4632 if (strEQ(d,"readpipe")) return -KEY_readpipe;
4635 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
4641 case 0: return KEY_s;
4643 if (strEQ(d,"scalar")) return KEY_scalar;
4648 if (strEQ(d,"seek")) return -KEY_seek;
4649 if (strEQ(d,"send")) return -KEY_send;
4652 if (strEQ(d,"semop")) return -KEY_semop;
4655 if (strEQ(d,"select")) return -KEY_select;
4656 if (strEQ(d,"semctl")) return -KEY_semctl;
4657 if (strEQ(d,"semget")) return -KEY_semget;
4660 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
4661 if (strEQ(d,"seekdir")) return -KEY_seekdir;
4664 if (strEQ(d,"setpwent")) return -KEY_setpwent;
4665 if (strEQ(d,"setgrent")) return -KEY_setgrent;
4668 if (strEQ(d,"setnetent")) return -KEY_setnetent;
4671 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
4672 if (strEQ(d,"sethostent")) return -KEY_sethostent;
4673 if (strEQ(d,"setservent")) return -KEY_setservent;
4676 if (strEQ(d,"setpriority")) return -KEY_setpriority;
4677 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
4684 if (strEQ(d,"shift")) return KEY_shift;
4687 if (strEQ(d,"shmctl")) return -KEY_shmctl;
4688 if (strEQ(d,"shmget")) return -KEY_shmget;
4691 if (strEQ(d,"shmread")) return -KEY_shmread;
4694 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
4695 if (strEQ(d,"shutdown")) return -KEY_shutdown;
4700 if (strEQ(d,"sin")) return -KEY_sin;
4703 if (strEQ(d,"sleep")) return -KEY_sleep;
4706 if (strEQ(d,"sort")) return KEY_sort;
4707 if (strEQ(d,"socket")) return -KEY_socket;
4708 if (strEQ(d,"socketpair")) return -KEY_socketpair;
4711 if (strEQ(d,"split")) return KEY_split;
4712 if (strEQ(d,"sprintf")) return -KEY_sprintf;
4713 if (strEQ(d,"splice")) return KEY_splice;
4716 if (strEQ(d,"sqrt")) return -KEY_sqrt;
4719 if (strEQ(d,"srand")) return -KEY_srand;
4722 if (strEQ(d,"stat")) return -KEY_stat;
4723 if (strEQ(d,"study")) return KEY_study;
4726 if (strEQ(d,"substr")) return -KEY_substr;
4727 if (strEQ(d,"sub")) return KEY_sub;
4732 if (strEQ(d,"system")) return -KEY_system;
4735 if (strEQ(d,"symlink")) return -KEY_symlink;
4736 if (strEQ(d,"syscall")) return -KEY_syscall;
4737 if (strEQ(d,"sysopen")) return -KEY_sysopen;
4738 if (strEQ(d,"sysread")) return -KEY_sysread;
4739 if (strEQ(d,"sysseek")) return -KEY_sysseek;
4742 if (strEQ(d,"syswrite")) return -KEY_syswrite;
4751 if (strEQ(d,"tr")) return KEY_tr;
4754 if (strEQ(d,"tie")) return KEY_tie;
4757 if (strEQ(d,"tell")) return -KEY_tell;
4758 if (strEQ(d,"tied")) return KEY_tied;
4759 if (strEQ(d,"time")) return -KEY_time;
4762 if (strEQ(d,"times")) return -KEY_times;
4765 if (strEQ(d,"telldir")) return -KEY_telldir;
4768 if (strEQ(d,"truncate")) return -KEY_truncate;
4775 if (strEQ(d,"uc")) return -KEY_uc;
4778 if (strEQ(d,"use")) return KEY_use;
4781 if (strEQ(d,"undef")) return KEY_undef;
4782 if (strEQ(d,"until")) return KEY_until;
4783 if (strEQ(d,"untie")) return KEY_untie;
4784 if (strEQ(d,"utime")) return -KEY_utime;
4785 if (strEQ(d,"umask")) return -KEY_umask;
4788 if (strEQ(d,"unless")) return KEY_unless;
4789 if (strEQ(d,"unpack")) return -KEY_unpack;
4790 if (strEQ(d,"unlink")) return -KEY_unlink;
4793 if (strEQ(d,"unshift")) return KEY_unshift;
4794 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
4799 if (strEQ(d,"values")) return -KEY_values;
4800 if (strEQ(d,"vec")) return -KEY_vec;
4805 if (strEQ(d,"warn")) return -KEY_warn;
4806 if (strEQ(d,"wait")) return -KEY_wait;
4809 if (strEQ(d,"while")) return KEY_while;
4810 if (strEQ(d,"write")) return -KEY_write;
4813 if (strEQ(d,"waitpid")) return -KEY_waitpid;
4816 if (strEQ(d,"wantarray")) return -KEY_wantarray;
4821 if (len == 1) return -KEY_x;
4822 if (strEQ(d,"xor")) return -KEY_xor;
4825 if (len == 1) return KEY_y;
4834 checkcomma(register char *s, char *name, char *what)
4838 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
4839 dTHR; /* only for ckWARN */
4840 if (ckWARN(WARN_SYNTAX)) {
4842 for (w = s+2; *w && level; w++) {
4849 for (; *w && isSPACE(*w); w++) ;
4850 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
4851 warner(WARN_SYNTAX, "%s (...) interpreted as function",name);
4854 while (s < PL_bufend && isSPACE(*s))
4858 while (s < PL_bufend && isSPACE(*s))
4860 if (isIDFIRST(*s)) {
4864 while (s < PL_bufend && isSPACE(*s))
4869 kw = keyword(w, s - w) || perl_get_cv(w, FALSE) != 0;
4873 croak("No comma allowed after %s", what);
4879 new_constant(char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
4882 HV *table = GvHV(PL_hintgv); /* ^H */
4885 bool oldcatch = CATCH_GET;
4891 yyerror("%^H is not defined");
4894 cvp = hv_fetch(table, key, strlen(key), FALSE);
4895 if (!cvp || !SvOK(*cvp)) {
4896 sprintf(buf,"$^H{%s} is not defined", key);
4900 sv_2mortal(sv); /* Parent created it permanently */
4903 pv = sv_2mortal(newSVpv(s, len));
4905 typesv = sv_2mortal(newSVpv(type, 0));
4907 typesv = &PL_sv_undef;
4909 Zero(&myop, 1, BINOP);
4910 myop.op_last = (OP *) &myop;
4911 myop.op_next = Nullop;
4912 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
4914 PUSHSTACKi(PERLSI_OVERLOAD);
4917 PL_op = (OP *) &myop;
4918 if (PERLDB_SUB && PL_curstash != PL_debstash)
4919 PL_op->op_private |= OPpENTERSUB_DB;
4930 if (PL_op = pp_entersub(ARGS))
4937 CATCH_SET(oldcatch);
4941 sprintf(buf,"Call to &{$^H{%s}} did not return a defined value", key);
4944 return SvREFCNT_inc(res);
4948 scan_word(register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
4950 register char *d = dest;
4951 register char *e = d + destlen - 3; /* two-character token, ending NUL */
4954 croak(ident_too_long);
4957 else if (*s == '\'' && allow_package && isIDFIRST(s[1])) {
4962 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
4966 else if (UTF && (*s & 0xc0) == 0x80 && isALNUM_utf8(s)) {
4967 char *t = s + UTF8SKIP(s);
4968 while (*t & 0x80 && is_utf8_mark(t))
4970 if (d + (t - s) > e)
4971 croak(ident_too_long);
4972 Copy(s, d, t - s, char);
4985 scan_ident(register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
4992 if (PL_lex_brackets == 0)
4993 PL_lex_fakebrack = 0;
4997 e = d + destlen - 3; /* two-character token, ending NUL */
4999 while (isDIGIT(*s)) {
5001 croak(ident_too_long);
5008 croak(ident_too_long);
5011 else if (*s == '\'' && isIDFIRST(s[1])) {
5016 else if (*s == ':' && s[1] == ':') {
5020 else if (UTF && (*s & 0xc0) == 0x80 && isALNUM_utf8(s)) {
5021 char *t = s + UTF8SKIP(s);
5022 while (*t & 0x80 && is_utf8_mark(t))
5024 if (d + (t - s) > e)
5025 croak(ident_too_long);
5026 Copy(s, d, t - s, char);
5037 if (PL_lex_state != LEX_NORMAL)
5038 PL_lex_state = LEX_INTERPENDMAYBE;
5041 if (*s == '$' && s[1] &&
5042 (isALNUM(s[1]) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
5044 if (isDIGIT(s[1]) && PL_lex_state == LEX_INTERPNORMAL)
5045 deprecate("\"$$<digit>\" to mean \"${$}<digit>\"");
5058 if (*d == '^' && *s && (isUPPER(*s) || strchr("[\\]^_?", *s))) {
5063 if (isSPACE(s[-1])) {
5066 if (ch != ' ' && ch != '\t') {
5072 if (isIDFIRST(*d) || (UTF && (*d & 0xc0) == 0x80 && isIDFIRST_utf8(d))) {
5076 while (e < send && (isALNUM(*e) || ((*e & 0xc0) == 0x80 && isALNUM_utf8((U8*)e)) || *e == ':')) {
5078 while (e < send && *e & 0x80 && is_utf8_mark(e))
5081 Copy(s, d, e - s, char);
5086 while (isALNUM(*s) || *s == ':')
5090 while (s < send && (*s == ' ' || *s == '\t')) s++;
5091 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
5092 dTHR; /* only for ckWARN */
5093 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
5094 char *brack = *s == '[' ? "[...]" : "{...}";
5095 warner(WARN_AMBIGUOUS,
5096 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
5097 funny, dest, brack, funny, dest, brack);
5099 PL_lex_fakebrack = PL_lex_brackets+1;
5101 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5107 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
5108 PL_lex_state = LEX_INTERPEND;
5111 if (PL_lex_state == LEX_NORMAL) {
5112 dTHR; /* only for ckWARN */
5113 if (ckWARN(WARN_AMBIGUOUS) &&
5114 (keyword(dest, d - dest) || perl_get_cv(dest, FALSE)))
5116 warner(WARN_AMBIGUOUS,
5117 "Ambiguous use of %c{%s} resolved to %c%s",
5118 funny, dest, funny, dest);
5123 s = bracket; /* let the parser handle it */
5127 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
5128 PL_lex_state = LEX_INTERPEND;
5132 void pmflag(U16 *pmfl, int ch)
5137 *pmfl |= PMf_GLOBAL;
5139 *pmfl |= PMf_CONTINUE;
5143 *pmfl |= PMf_MULTILINE;
5145 *pmfl |= PMf_SINGLELINE;
5147 *pmfl |= PMf_EXTENDED;
5151 scan_pat(char *start, I32 type)
5156 s = scan_str(start);
5159 SvREFCNT_dec(PL_lex_stuff);
5160 PL_lex_stuff = Nullsv;
5161 croak("Search pattern not terminated");
5164 pm = (PMOP*)newPMOP(type, 0);
5165 if (PL_multi_open == '?')
5166 pm->op_pmflags |= PMf_ONCE;
5168 while (*s && strchr("iomsx", *s))
5169 pmflag(&pm->op_pmflags,*s++);
5172 while (*s && strchr("iogcmsx", *s))
5173 pmflag(&pm->op_pmflags,*s++);
5175 pm->op_pmpermflags = pm->op_pmflags;
5177 PL_lex_op = (OP*)pm;
5178 yylval.ival = OP_MATCH;
5183 scan_subst(char *start)
5190 yylval.ival = OP_NULL;
5192 s = scan_str(start);
5196 SvREFCNT_dec(PL_lex_stuff);
5197 PL_lex_stuff = Nullsv;
5198 croak("Substitution pattern not terminated");
5201 if (s[-1] == PL_multi_open)
5204 first_start = PL_multi_start;
5208 SvREFCNT_dec(PL_lex_stuff);
5209 PL_lex_stuff = Nullsv;
5211 SvREFCNT_dec(PL_lex_repl);
5212 PL_lex_repl = Nullsv;
5213 croak("Substitution replacement not terminated");
5215 PL_multi_start = first_start; /* so whole substitution is taken together */
5217 pm = (PMOP*)newPMOP(OP_SUBST, 0);
5223 else if (strchr("iogcmsx", *s))
5224 pmflag(&pm->op_pmflags,*s++);
5231 pm->op_pmflags |= PMf_EVAL;
5232 repl = newSVpv("",0);
5234 sv_catpv(repl, es ? "eval " : "do ");
5235 sv_catpvn(repl, "{ ", 2);
5236 sv_catsv(repl, PL_lex_repl);
5237 sv_catpvn(repl, " };", 2);
5238 SvCOMPILED_on(repl);
5239 SvREFCNT_dec(PL_lex_repl);
5243 pm->op_pmpermflags = pm->op_pmflags;
5244 PL_lex_op = (OP*)pm;
5245 yylval.ival = OP_SUBST;
5250 scan_trans(char *start)
5261 yylval.ival = OP_NULL;
5263 s = scan_str(start);
5266 SvREFCNT_dec(PL_lex_stuff);
5267 PL_lex_stuff = Nullsv;
5268 croak("Transliteration pattern not terminated");
5270 if (s[-1] == PL_multi_open)
5276 SvREFCNT_dec(PL_lex_stuff);
5277 PL_lex_stuff = Nullsv;
5279 SvREFCNT_dec(PL_lex_repl);
5280 PL_lex_repl = Nullsv;
5281 croak("Transliteration replacement not terminated");
5285 o = newSVOP(OP_TRANS, 0, 0);
5286 utf8 = OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF;
5289 New(803,tbl,256,short);
5290 o = newPVOP(OP_TRANS, 0, (char*)tbl);
5294 complement = del = squash = 0;
5295 while (strchr("cdsCU", *s)) {
5297 complement = OPpTRANS_COMPLEMENT;
5299 del = OPpTRANS_DELETE;
5301 squash = OPpTRANS_SQUASH;
5306 utf8 &= ~OPpTRANS_FROM_UTF;
5308 utf8 |= OPpTRANS_FROM_UTF;
5312 utf8 &= ~OPpTRANS_TO_UTF;
5314 utf8 |= OPpTRANS_TO_UTF;
5317 croak("Too many /C and /U options");
5322 o->op_private = del|squash|complement|utf8;
5325 yylval.ival = OP_TRANS;
5330 scan_heredoc(register char *s)
5334 I32 op_type = OP_SCALAR;
5341 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
5345 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
5348 for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
5349 if (*peek && strchr("`'\"",*peek)) {
5352 s = delimcpy(d, e, s, PL_bufend, term, &len);
5363 deprecate("bare << to mean <<\"\"");
5364 for (; isALNUM(*s); s++) {
5369 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
5370 croak("Delimiter for here document is too long");
5373 len = d - PL_tokenbuf;
5374 #ifndef PERL_STRICT_CR
5375 d = strchr(s, '\r');
5379 while (s < PL_bufend) {
5385 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
5394 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5399 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
5400 herewas = newSVpv(s,PL_bufend-s);
5402 s--, herewas = newSVpv(s,d-s);
5403 s += SvCUR(herewas);
5405 tmpstr = NEWSV(87,79);
5406 sv_upgrade(tmpstr, SVt_PVIV);
5411 else if (term == '`') {
5412 op_type = OP_BACKTICK;
5413 SvIVX(tmpstr) = '\\';
5417 PL_multi_start = PL_curcop->cop_line;
5418 PL_multi_open = PL_multi_close = '<';
5419 term = *PL_tokenbuf;
5422 while (s < PL_bufend &&
5423 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5425 PL_curcop->cop_line++;
5427 if (s >= PL_bufend) {
5428 PL_curcop->cop_line = PL_multi_start;
5429 missingterm(PL_tokenbuf);
5431 sv_setpvn(tmpstr,d+1,s-d);
5433 PL_curcop->cop_line++; /* the preceding stmt passes a newline */
5435 sv_catpvn(herewas,s,PL_bufend-s);
5436 sv_setsv(PL_linestr,herewas);
5437 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
5438 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5441 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
5442 while (s >= PL_bufend) { /* multiple line string? */
5444 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5445 PL_curcop->cop_line = PL_multi_start;
5446 missingterm(PL_tokenbuf);
5448 PL_curcop->cop_line++;
5449 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5450 #ifndef PERL_STRICT_CR
5451 if (PL_bufend - PL_linestart >= 2) {
5452 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
5453 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
5455 PL_bufend[-2] = '\n';
5457 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5459 else if (PL_bufend[-1] == '\r')
5460 PL_bufend[-1] = '\n';
5462 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
5463 PL_bufend[-1] = '\n';
5465 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5466 SV *sv = NEWSV(88,0);
5468 sv_upgrade(sv, SVt_PVMG);
5469 sv_setsv(sv,PL_linestr);
5470 av_store(GvAV(PL_curcop->cop_filegv),
5471 (I32)PL_curcop->cop_line,sv);
5473 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
5476 sv_catsv(PL_linestr,herewas);
5477 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5481 sv_catsv(tmpstr,PL_linestr);
5484 PL_multi_end = PL_curcop->cop_line;
5486 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
5487 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
5488 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
5490 SvREFCNT_dec(herewas);
5491 PL_lex_stuff = tmpstr;
5492 yylval.ival = op_type;
5497 takes: current position in input buffer
5498 returns: new position in input buffer
5499 side-effects: yylval and lex_op are set.
5504 <FH> read from filehandle
5505 <pkg::FH> read from package qualified filehandle
5506 <pkg'FH> read from package qualified filehandle
5507 <$fh> read from filehandle in $fh
5513 scan_inputsymbol(char *start)
5515 register char *s = start; /* current position in buffer */
5520 d = PL_tokenbuf; /* start of temp holding space */
5521 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
5522 s = delimcpy(d, e, s + 1, PL_bufend, '>', &len); /* extract until > */
5524 /* die if we didn't have space for the contents of the <>,
5528 if (len >= sizeof PL_tokenbuf)
5529 croak("Excessively long <> operator");
5531 croak("Unterminated <> operator");
5536 Remember, only scalar variables are interpreted as filehandles by
5537 this code. Anything more complex (e.g., <$fh{$num}>) will be
5538 treated as a glob() call.
5539 This code makes use of the fact that except for the $ at the front,
5540 a scalar variable and a filehandle look the same.
5542 if (*d == '$' && d[1]) d++;
5544 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
5545 while (*d && (isALNUM(*d) || *d == '\'' || *d == ':'))
5548 /* If we've tried to read what we allow filehandles to look like, and
5549 there's still text left, then it must be a glob() and not a getline.
5550 Use scan_str to pull out the stuff between the <> and treat it
5551 as nothing more than a string.
5554 if (d - PL_tokenbuf != len) {
5555 yylval.ival = OP_GLOB;
5557 s = scan_str(start);
5559 croak("Glob not terminated");
5563 /* we're in a filehandle read situation */
5566 /* turn <> into <ARGV> */
5568 (void)strcpy(d,"ARGV");
5570 /* if <$fh>, create the ops to turn the variable into a
5576 /* try to find it in the pad for this block, otherwise find
5577 add symbol table ops
5579 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
5580 OP *o = newOP(OP_PADSV, 0);
5582 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newUNOP(OP_RV2GV, 0, o));
5585 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
5586 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
5587 newUNOP(OP_RV2GV, 0,
5588 newUNOP(OP_RV2SV, 0,
5589 newGVOP(OP_GV, 0, gv))));
5591 /* we created the ops in lex_op, so make yylval.ival a null op */
5592 yylval.ival = OP_NULL;
5595 /* If it's none of the above, it must be a literal filehandle
5596 (<Foo::BAR> or <FOO>) so build a simple readline OP */
5598 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
5599 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
5600 yylval.ival = OP_NULL;
5609 takes: start position in buffer
5610 returns: position to continue reading from buffer
5611 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
5612 updates the read buffer.
5614 This subroutine pulls a string out of the input. It is called for:
5615 q single quotes q(literal text)
5616 ' single quotes 'literal text'
5617 qq double quotes qq(interpolate $here please)
5618 " double quotes "interpolate $here please"
5619 qx backticks qx(/bin/ls -l)
5620 ` backticks `/bin/ls -l`
5621 qw quote words @EXPORT_OK = qw( func() $spam )
5622 m// regexp match m/this/
5623 s/// regexp substitute s/this/that/
5624 tr/// string transliterate tr/this/that/
5625 y/// string transliterate y/this/that/
5626 ($*@) sub prototypes sub foo ($)
5627 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
5629 In most of these cases (all but <>, patterns and transliterate)
5630 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
5631 calls scan_str(). s/// makes yylex() call scan_subst() which calls
5632 scan_str(). tr/// and y/// make yylex() call scan_trans() which
5635 It skips whitespace before the string starts, and treats the first
5636 character as the delimiter. If the delimiter is one of ([{< then
5637 the corresponding "close" character )]}> is used as the closing
5638 delimiter. It allows quoting of delimiters, and if the string has
5639 balanced delimiters ([{<>}]) it allows nesting.
5641 The lexer always reads these strings into lex_stuff, except in the
5642 case of the operators which take *two* arguments (s/// and tr///)
5643 when it checks to see if lex_stuff is full (presumably with the 1st
5644 arg to s or tr) and if so puts the string into lex_repl.
5649 scan_str(char *start)
5652 SV *sv; /* scalar value: string */
5653 char *tmps; /* temp string, used for delimiter matching */
5654 register char *s = start; /* current position in the buffer */
5655 register char term; /* terminating character */
5656 register char *to; /* current position in the sv's data */
5657 I32 brackets = 1; /* bracket nesting level */
5659 /* skip space before the delimiter */
5663 /* mark where we are, in case we need to report errors */
5666 /* after skipping whitespace, the next character is the terminator */
5668 /* mark where we are */
5669 PL_multi_start = PL_curcop->cop_line;
5670 PL_multi_open = term;
5672 /* find corresponding closing delimiter */
5673 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
5675 PL_multi_close = term;
5677 /* create a new SV to hold the contents. 87 is leak category, I'm
5678 assuming. 79 is the SV's initial length. What a random number. */
5680 sv_upgrade(sv, SVt_PVIV);
5682 (void)SvPOK_only(sv); /* validate pointer */
5684 /* move past delimiter and try to read a complete string */
5687 /* extend sv if need be */
5688 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
5689 /* set 'to' to the next character in the sv's string */
5690 to = SvPVX(sv)+SvCUR(sv);
5692 /* if open delimiter is the close delimiter read unbridle */
5693 if (PL_multi_open == PL_multi_close) {
5694 for (; s < PL_bufend; s++,to++) {
5695 /* embedded newlines increment the current line number */
5696 if (*s == '\n' && !PL_rsfp)
5697 PL_curcop->cop_line++;
5698 /* handle quoted delimiters */
5699 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
5702 /* any other quotes are simply copied straight through */
5706 /* terminate when run out of buffer (the for() condition), or
5707 have found the terminator */
5708 else if (*s == term)
5714 /* if the terminator isn't the same as the start character (e.g.,
5715 matched brackets), we have to allow more in the quoting, and
5716 be prepared for nested brackets.
5719 /* read until we run out of string, or we find the terminator */
5720 for (; s < PL_bufend; s++,to++) {
5721 /* embedded newlines increment the line count */
5722 if (*s == '\n' && !PL_rsfp)
5723 PL_curcop->cop_line++;
5724 /* backslashes can escape the open or closing characters */
5725 if (*s == '\\' && s+1 < PL_bufend) {
5726 if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))
5731 /* allow nested opens and closes */
5732 else if (*s == PL_multi_close && --brackets <= 0)
5734 else if (*s == PL_multi_open)
5739 /* terminate the copied string and update the sv's end-of-string */
5741 SvCUR_set(sv, to - SvPVX(sv));
5744 * this next chunk reads more into the buffer if we're not done yet
5747 if (s < PL_bufend) break; /* handle case where we are done yet :-) */
5749 #ifndef PERL_STRICT_CR
5750 if (to - SvPVX(sv) >= 2) {
5751 if ((to[-2] == '\r' && to[-1] == '\n') ||
5752 (to[-2] == '\n' && to[-1] == '\r'))
5756 SvCUR_set(sv, to - SvPVX(sv));
5758 else if (to[-1] == '\r')
5761 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
5765 /* if we're out of file, or a read fails, bail and reset the current
5766 line marker so we can report where the unterminated string began
5769 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5771 PL_curcop->cop_line = PL_multi_start;
5774 /* we read a line, so increment our line counter */
5775 PL_curcop->cop_line++;
5777 /* update debugger info */
5778 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5779 SV *sv = NEWSV(88,0);
5781 sv_upgrade(sv, SVt_PVMG);
5782 sv_setsv(sv,PL_linestr);
5783 av_store(GvAV(PL_curcop->cop_filegv),
5784 (I32)PL_curcop->cop_line, sv);
5787 /* having changed the buffer, we must update PL_bufend */
5788 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5791 /* at this point, we have successfully read the delimited string */
5793 PL_multi_end = PL_curcop->cop_line;
5796 /* if we allocated too much space, give some back */
5797 if (SvCUR(sv) + 5 < SvLEN(sv)) {
5798 SvLEN_set(sv, SvCUR(sv) + 1);
5799 Renew(SvPVX(sv), SvLEN(sv), char);
5802 /* decide whether this is the first or second quoted string we've read
5815 takes: pointer to position in buffer
5816 returns: pointer to new position in buffer
5817 side-effects: builds ops for the constant in yylval.op
5819 Read a number in any of the formats that Perl accepts:
5821 0(x[0-7A-F]+)|([0-7]+)
5822 [\d_]+(\.[\d_]*)?[Ee](\d+)
5824 Underbars (_) are allowed in decimal numbers. If -w is on,
5825 underbars before a decimal point must be at three digit intervals.
5827 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
5830 If it reads a number without a decimal point or an exponent, it will
5831 try converting the number to an integer and see if it can do so
5832 without loss of precision.
5836 scan_num(char *start)
5838 register char *s = start; /* current position in buffer */
5839 register char *d; /* destination in temp buffer */
5840 register char *e; /* end of temp buffer */
5841 I32 tryiv; /* used to see if it can be an int */
5842 double value; /* number read, as a double */
5843 SV *sv; /* place to put the converted number */
5844 I32 floatit; /* boolean: int or float? */
5845 char *lastub = 0; /* position of last underbar */
5846 static char number_too_long[] = "Number too long";
5848 /* We use the first character to decide what type of number this is */
5852 croak("panic: scan_num");
5854 /* if it starts with a 0, it could be an octal number, a decimal in
5855 0.13 disguise, or a hexadecimal number.
5860 u holds the "number so far"
5861 shift the power of 2 of the base (hex == 4, octal == 3)
5862 overflowed was the number more than we can hold?
5864 Shift is used when we add a digit. It also serves as an "are
5865 we in octal or hex?" indicator to disallow hex characters when
5870 bool overflowed = FALSE;
5877 /* check for a decimal in disguise */
5878 else if (s[1] == '.')
5880 /* so it must be octal */
5885 /* read the rest of the octal number */
5887 UV n, b; /* n is used in the overflow test, b is the digit we're adding on */
5891 /* if we don't mention it, we're done */
5900 /* 8 and 9 are not octal */
5903 yyerror("Illegal octal digit");
5907 case '0': case '1': case '2': case '3': case '4':
5908 case '5': case '6': case '7':
5909 b = *s++ & 15; /* ASCII digit -> value of digit */
5913 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
5914 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
5915 /* make sure they said 0x */
5920 /* Prepare to put the digit we have onto the end
5921 of the number so far. We check for overflows.
5925 n = u << shift; /* make room for the digit */
5926 if (!overflowed && (n >> shift) != u
5927 && !(PL_hints & HINT_NEW_BINARY)) {
5928 warn("Integer overflow in %s number",
5929 (shift == 4) ? "hex" : "octal");
5932 u = n | b; /* add the digit to the end */
5937 /* if we get here, we had success: make a scalar value from
5943 if ( PL_hints & HINT_NEW_BINARY)
5944 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
5949 handle decimal numbers.
5950 we're also sent here when we read a 0 as the first digit
5952 case '1': case '2': case '3': case '4': case '5':
5953 case '6': case '7': case '8': case '9': case '.':
5956 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
5959 /* read next group of digits and _ and copy into d */
5960 while (isDIGIT(*s) || *s == '_') {
5961 /* skip underscores, checking for misplaced ones
5965 dTHR; /* only for ckWARN */
5966 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
5967 warner(WARN_SYNTAX, "Misplaced _ in number");
5971 /* check for end of fixed-length buffer */
5973 croak(number_too_long);
5974 /* if we're ok, copy the character */
5979 /* final misplaced underbar check */
5980 if (lastub && s - lastub != 3) {
5982 if (ckWARN(WARN_SYNTAX))
5983 warner(WARN_SYNTAX, "Misplaced _ in number");
5986 /* read a decimal portion if there is one. avoid
5987 3..5 being interpreted as the number 3. followed
5990 if (*s == '.' && s[1] != '.') {
5994 /* copy, ignoring underbars, until we run out of
5995 digits. Note: no misplaced underbar checks!
5997 for (; isDIGIT(*s) || *s == '_'; s++) {
5998 /* fixed length buffer check */
6000 croak(number_too_long);
6006 /* read exponent part, if present */
6007 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
6011 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
6012 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
6014 /* allow positive or negative exponent */
6015 if (*s == '+' || *s == '-')
6018 /* read digits of exponent (no underbars :-) */
6019 while (isDIGIT(*s)) {
6021 croak(number_too_long);
6026 /* terminate the string */
6029 /* make an sv from the string */
6031 /* reset numeric locale in case we were earlier left in Swaziland */
6032 SET_NUMERIC_STANDARD();
6033 value = atof(PL_tokenbuf);
6036 See if we can make do with an integer value without loss of
6037 precision. We use I_V to cast to an int, because some
6038 compilers have issues. Then we try casting it back and see
6039 if it was the same. We only do this if we know we
6040 specifically read an integer.
6042 Note: if floatit is true, then we don't need to do the
6046 if (!floatit && (double)tryiv == value)
6047 sv_setiv(sv, tryiv);
6049 sv_setnv(sv, value);
6050 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) )
6051 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
6052 (floatit ? "float" : "integer"), sv, Nullsv, NULL);
6056 /* make the op for the constant and return */
6058 yylval.opval = newSVOP(OP_CONST, 0, sv);
6064 scan_formline(register char *s)
6069 SV *stuff = newSVpv("",0);
6070 bool needargs = FALSE;
6073 if (*s == '.' || *s == '}') {
6075 for (t = s+1; *t == ' ' || *t == '\t'; t++) ;
6079 if (PL_in_eval && !PL_rsfp) {
6080 eol = strchr(s,'\n');
6085 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6087 for (t = s; t < eol; t++) {
6088 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
6090 goto enough; /* ~~ must be first line in formline */
6092 if (*t == '@' || *t == '^')
6095 sv_catpvn(stuff, s, eol-s);
6099 s = filter_gets(PL_linestr, PL_rsfp, 0);
6100 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
6101 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
6104 yyerror("Format not terminated");
6114 PL_lex_state = LEX_NORMAL;
6115 PL_nextval[PL_nexttoke].ival = 0;
6119 PL_lex_state = LEX_FORMLINE;
6120 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
6122 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
6126 SvREFCNT_dec(stuff);
6127 PL_lex_formbrack = 0;
6138 PL_cshlen = strlen(PL_cshname);
6143 start_subparse(I32 is_format, U32 flags)
6146 I32 oldsavestack_ix = PL_savestack_ix;
6147 CV* outsidecv = PL_compcv;
6151 assert(SvTYPE(PL_compcv) == SVt_PVCV);
6153 save_I32(&PL_subline);
6154 save_item(PL_subname);
6156 SAVESPTR(PL_curpad);
6157 SAVESPTR(PL_comppad);
6158 SAVESPTR(PL_comppad_name);
6159 SAVESPTR(PL_compcv);
6160 SAVEI32(PL_comppad_name_fill);
6161 SAVEI32(PL_min_intro_pending);
6162 SAVEI32(PL_max_intro_pending);
6163 SAVEI32(PL_pad_reset_pending);
6165 PL_compcv = (CV*)NEWSV(1104,0);
6166 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
6167 CvFLAGS(PL_compcv) |= flags;
6169 PL_comppad = newAV();
6170 av_push(PL_comppad, Nullsv);
6171 PL_curpad = AvARRAY(PL_comppad);
6172 PL_comppad_name = newAV();
6173 PL_comppad_name_fill = 0;
6174 PL_min_intro_pending = 0;
6176 PL_subline = PL_curcop->cop_line;
6178 av_store(PL_comppad_name, 0, newSVpv("@_", 2));
6179 PL_curpad[0] = (SV*)newAV();
6180 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
6181 #endif /* USE_THREADS */
6183 comppadlist = newAV();
6184 AvREAL_off(comppadlist);
6185 av_store(comppadlist, 0, (SV*)PL_comppad_name);
6186 av_store(comppadlist, 1, (SV*)PL_comppad);
6188 CvPADLIST(PL_compcv) = comppadlist;
6189 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
6191 CvOWNER(PL_compcv) = 0;
6192 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
6193 MUTEX_INIT(CvMUTEXP(PL_compcv));
6194 #endif /* USE_THREADS */
6196 return oldsavestack_ix;
6215 char *context = NULL;
6219 if (!yychar || (yychar == ';' && !PL_rsfp))
6221 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
6222 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
6223 while (isSPACE(*PL_oldoldbufptr))
6225 context = PL_oldoldbufptr;
6226 contlen = PL_bufptr - PL_oldoldbufptr;
6228 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
6229 PL_oldbufptr != PL_bufptr) {
6230 while (isSPACE(*PL_oldbufptr))
6232 context = PL_oldbufptr;
6233 contlen = PL_bufptr - PL_oldbufptr;
6235 else if (yychar > 255)
6236 where = "next token ???";
6237 else if ((yychar & 127) == 127) {
6238 if (PL_lex_state == LEX_NORMAL ||
6239 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
6240 where = "at end of line";
6241 else if (PL_lex_inpat)
6242 where = "within pattern";
6244 where = "within string";
6247 SV *where_sv = sv_2mortal(newSVpv("next char ", 0));
6249 sv_catpvf(where_sv, "^%c", toCTRL(yychar));
6250 else if (isPRINT_LC(yychar))
6251 sv_catpvf(where_sv, "%c", yychar);
6253 sv_catpvf(where_sv, "\\%03o", yychar & 255);
6254 where = SvPVX(where_sv);
6256 msg = sv_2mortal(newSVpv(s, 0));
6257 sv_catpvf(msg, " at %_ line %ld, ",
6258 GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
6260 sv_catpvf(msg, "near \"%.*s\"\n", contlen, context);
6262 sv_catpvf(msg, "%s\n", where);
6263 if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
6265 " (Might be a runaway multi-line %c%c string starting on line %ld)\n",
6266 (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
6271 else if (PL_in_eval)
6272 sv_catsv(ERRSV, msg);
6274 PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
6275 if (++PL_error_count >= 10)
6276 croak("%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
6278 PL_in_my_stash = Nullhv;