3 * Copyright (c) 1991-1999, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "It all comes from here, the stench and the peril." --Frodo
15 #define PERL_IN_TOKE_C
18 #define yychar PL_yychar
19 #define yylval PL_yylval
21 static char ident_too_long[] = "Identifier too long";
23 static void restore_rsfp(pTHXo_ void *f);
24 static void restore_expect(pTHXo_ void *e);
25 static void restore_lex_expect(pTHXo_ void *e);
27 #define UTF (PL_hints & HINT_UTF8)
29 * Note: we try to be careful never to call the isXXX_utf8() functions
30 * unless we're pretty sure we've seen the beginning of a UTF-8 character
31 * (that is, the two high bits are set). Otherwise we risk loading in the
32 * heavy-duty SWASHINIT and SWASHGET routines unnecessarily.
34 #define isIDFIRST_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
36 : isIDFIRST_utf8((U8*)p))
37 #define isALNUM_lazy(p) ((!UTF || (*((U8*)p) < 0xc0)) \
39 : isALNUM_utf8((U8*)p))
41 /* In variables name $^X, these are the legal values for X.
42 * 1999-02-27 mjd-perl-patch@plover.com */
43 #define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
45 /* The following are arranged oddly so that the guard on the switch statement
46 * can get by with a single comparison (if the compiler is smart enough).
49 /* #define LEX_NOTPARSING 11 is done in perl.h. */
52 #define LEX_INTERPNORMAL 9
53 #define LEX_INTERPCASEMOD 8
54 #define LEX_INTERPPUSH 7
55 #define LEX_INTERPSTART 6
56 #define LEX_INTERPEND 5
57 #define LEX_INTERPENDMAYBE 4
58 #define LEX_INTERPCONCAT 3
59 #define LEX_INTERPCONST 2
60 #define LEX_FORMLINE 1
61 #define LEX_KNOWNEXT 0
70 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
72 # include <unistd.h> /* Needed for execv() */
81 YYSTYPE* yylval_pointer = NULL;
82 int* yychar_pointer = NULL;
85 # define yylval (*yylval_pointer)
86 # define yychar (*yychar_pointer)
87 # define PERL_YYLEX_PARAM yylval_pointer,yychar_pointer
89 # define yylex() Perl_yylex(aTHX_ yylval_pointer, yychar_pointer)
97 #define CLINE (PL_copline = (PL_curcop->cop_line < PL_copline ? PL_curcop->cop_line : PL_copline))
99 #define TOKEN(retval) return (PL_bufptr = s,(int)retval)
100 #define OPERATOR(retval) return (PL_expect = XTERM,PL_bufptr = s,(int)retval)
101 #define AOPERATOR(retval) return ao((PL_expect = XTERM,PL_bufptr = s,(int)retval))
102 #define PREBLOCK(retval) return (PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
103 #define PRETERMBLOCK(retval) return (PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
104 #define PREREF(retval) return (PL_expect = XREF,PL_bufptr = s,(int)retval)
105 #define TERM(retval) return (CLINE, PL_expect = XOPERATOR,PL_bufptr = s,(int)retval)
106 #define LOOPX(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
107 #define FTST(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
108 #define FUN0(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
109 #define FUN1(f) return(yylval.ival = f,PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
110 #define BOop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
111 #define BAop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
112 #define SHop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
113 #define PWop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
114 #define PMop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
115 #define Aop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
116 #define Mop(f) return ao((yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
117 #define Eop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
118 #define Rop(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
120 /* This bit of chicanery makes a unary function followed by
121 * a parenthesis into a function with one argument, highest precedence.
123 #define UNI(f) return(yylval.ival = f, \
126 PL_last_uni = PL_oldbufptr, \
127 PL_last_lop_op = f, \
128 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
130 #define UNIBRACK(f) return(yylval.ival = f, \
132 PL_last_uni = PL_oldbufptr, \
133 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
135 /* grandfather return to old style */
136 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
139 S_ao(pTHX_ int toketype)
141 if (*PL_bufptr == '=') {
143 if (toketype == ANDAND)
144 yylval.ival = OP_ANDASSIGN;
145 else if (toketype == OROR)
146 yylval.ival = OP_ORASSIGN;
153 S_no_op(pTHX_ char *what, char *s)
155 char *oldbp = PL_bufptr;
156 bool is_first = (PL_oldbufptr == PL_linestart);
160 yywarn(Perl_form(aTHX_ "%s found where operator expected", what));
162 Perl_warn(aTHX_ "\t(Missing semicolon on previous line?)\n");
163 else if (PL_oldoldbufptr && isIDFIRST_lazy(PL_oldoldbufptr)) {
165 for (t = PL_oldoldbufptr; *t && (isALNUM_lazy(t) || *t == ':'); t++) ;
166 if (t < PL_bufptr && isSPACE(*t))
167 Perl_warn(aTHX_ "\t(Do you need to predeclare %.*s?)\n",
168 t - PL_oldoldbufptr, PL_oldoldbufptr);
171 Perl_warn(aTHX_ "\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
176 S_missingterm(pTHX_ char *s)
181 char *nl = strrchr(s,'\n');
187 iscntrl(PL_multi_close)
189 PL_multi_close < 32 || PL_multi_close == 127
193 tmpbuf[1] = toCTRL(PL_multi_close);
199 *tmpbuf = PL_multi_close;
203 q = strchr(s,'"') ? '\'' : '"';
204 Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
208 Perl_deprecate(pTHX_ char *s)
211 if (ckWARN(WARN_DEPRECATED))
212 Perl_warner(aTHX_ WARN_DEPRECATED, "Use of %s is deprecated", s);
218 deprecate("comma-less variable list");
224 S_win32_textfilter(pTHX_ int idx, SV *sv, int maxlen)
226 I32 count = FILTER_READ(idx+1, sv, maxlen);
227 if (count > 0 && !maxlen)
228 win32_strip_return(sv);
234 S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
236 I32 count = FILTER_READ(idx+1, sv, maxlen);
240 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
241 tend = utf16_to_utf8((U16*)SvPVX(sv), tmps, SvCUR(sv));
242 sv_usepvn(sv, (char*)tmps, tend - tmps);
249 S_utf16rev_textfilter(pTHX_ int idx, SV *sv, int maxlen)
251 I32 count = FILTER_READ(idx+1, sv, maxlen);
255 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
256 tend = utf16_to_utf8_reversed((U16*)SvPVX(sv), tmps, SvCUR(sv));
257 sv_usepvn(sv, (char*)tmps, tend - tmps);
264 Perl_lex_start(pTHX_ SV *line)
270 SAVEI32(PL_lex_dojoin);
271 SAVEI32(PL_lex_brackets);
272 SAVEI32(PL_lex_fakebrack);
273 SAVEI32(PL_lex_casemods);
274 SAVEI32(PL_lex_starts);
275 SAVEI32(PL_lex_state);
276 SAVESPTR(PL_lex_inpat);
277 SAVEI32(PL_lex_inwhat);
278 SAVEI16(PL_curcop->cop_line);
281 SAVEPPTR(PL_oldbufptr);
282 SAVEPPTR(PL_oldoldbufptr);
283 SAVEPPTR(PL_linestart);
284 SAVESPTR(PL_linestr);
285 SAVEPPTR(PL_lex_brackstack);
286 SAVEPPTR(PL_lex_casestack);
287 SAVEDESTRUCTOR(restore_rsfp, PL_rsfp);
288 SAVESPTR(PL_lex_stuff);
289 SAVEI32(PL_lex_defer);
290 SAVESPTR(PL_lex_repl);
291 SAVEDESTRUCTOR(restore_expect, PL_tokenbuf + PL_expect); /* encode as pointer */
292 SAVEDESTRUCTOR(restore_lex_expect, PL_tokenbuf + PL_expect);
294 PL_lex_state = LEX_NORMAL;
298 PL_lex_fakebrack = 0;
299 New(899, PL_lex_brackstack, 120, char);
300 New(899, PL_lex_casestack, 12, char);
301 SAVEFREEPV(PL_lex_brackstack);
302 SAVEFREEPV(PL_lex_casestack);
304 *PL_lex_casestack = '\0';
307 PL_lex_stuff = Nullsv;
308 PL_lex_repl = Nullsv;
312 if (SvREADONLY(PL_linestr))
313 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
314 s = SvPV(PL_linestr, len);
315 if (len && s[len-1] != ';') {
316 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
317 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
318 sv_catpvn(PL_linestr, "\n;", 2);
320 SvTEMP_off(PL_linestr);
321 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
322 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
324 PL_rs = newSVpvn("\n", 1);
331 PL_doextract = FALSE;
335 S_incline(pTHX_ char *s)
343 PL_curcop->cop_line++;
346 while (*s == ' ' || *s == '\t') s++;
347 if (strnEQ(s, "line ", 5)) {
356 while (*s == ' ' || *s == '\t')
358 if (*s == '"' && (t = strchr(s+1, '"')))
362 return; /* false alarm */
363 for (t = s; !isSPACE(*t); t++) ;
368 PL_curcop->cop_filegv = gv_fetchfile(s);
370 PL_curcop->cop_filegv = gv_fetchfile(PL_origfilename);
372 PL_curcop->cop_line = atoi(n)-1;
376 S_skipspace(pTHX_ register char *s)
379 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
380 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
386 while (s < PL_bufend && isSPACE(*s)) {
387 if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
390 if (s < PL_bufend && *s == '#') {
391 while (s < PL_bufend && *s != '\n')
395 if (PL_in_eval && !PL_rsfp) {
401 if (s < PL_bufend || !PL_rsfp || PL_lex_state != LEX_NORMAL)
403 if ((s = filter_gets(PL_linestr, PL_rsfp, (prevlen = SvCUR(PL_linestr)))) == Nullch) {
404 if (PL_minus_n || PL_minus_p) {
405 sv_setpv(PL_linestr,PL_minus_p ?
406 ";}continue{print or die qq(-p destination: $!\\n)" :
408 sv_catpv(PL_linestr,";}");
409 PL_minus_n = PL_minus_p = 0;
412 sv_setpv(PL_linestr,";");
413 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
414 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
415 if (PL_preprocess && !PL_in_eval)
416 (void)PerlProc_pclose(PL_rsfp);
417 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
418 PerlIO_clearerr(PL_rsfp);
420 (void)PerlIO_close(PL_rsfp);
424 PL_linestart = PL_bufptr = s + prevlen;
425 PL_bufend = s + SvCUR(PL_linestr);
428 if (PERLDB_LINE && PL_curstash != PL_debstash) {
429 SV *sv = NEWSV(85,0);
431 sv_upgrade(sv, SVt_PVMG);
432 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
433 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
445 if (PL_oldoldbufptr != PL_last_uni)
447 while (isSPACE(*PL_last_uni))
449 for (s = PL_last_uni; isALNUM_lazy(s) || *s == '-'; s++) ;
450 if ((t = strchr(s, '(')) && t < PL_bufptr)
452 if (ckWARN_d(WARN_AMBIGUOUS)){
455 Perl_warner(aTHX_ WARN_AMBIGUOUS,
456 "Warning: Use of \"%s\" without parens is ambiguous",
465 #define UNI(f) return uni(f,s)
468 S_uni(pTHX_ I32 f, char *s)
473 PL_last_uni = PL_oldbufptr;
484 #endif /* CRIPPLED_CC */
486 #define LOP(f,x) return lop(f,x,s)
489 S_lop(pTHX_ I32 f, expectation x, char *s)
496 PL_last_lop = PL_oldbufptr;
510 S_force_next(pTHX_ I32 type)
512 PL_nexttype[PL_nexttoke] = type;
514 if (PL_lex_state != LEX_KNOWNEXT) {
515 PL_lex_defer = PL_lex_state;
516 PL_lex_expect = PL_expect;
517 PL_lex_state = LEX_KNOWNEXT;
522 S_force_word(pTHX_ register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
527 start = skipspace(start);
529 if (isIDFIRST_lazy(s) ||
530 (allow_pack && *s == ':') ||
531 (allow_initial_tick && *s == '\'') )
533 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
534 if (check_keyword && keyword(PL_tokenbuf, len))
536 if (token == METHOD) {
541 PL_expect = XOPERATOR;
544 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
545 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
552 S_force_ident(pTHX_ register char *s, int kind)
555 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
556 PL_nextval[PL_nexttoke].opval = o;
559 dTHR; /* just for in_eval */
560 o->op_private = OPpCONST_ENTERED;
561 /* XXX see note in pp_entereval() for why we forgo typo
562 warnings if the symbol must be introduced in an eval.
564 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
565 kind == '$' ? SVt_PV :
566 kind == '@' ? SVt_PVAV :
567 kind == '%' ? SVt_PVHV :
575 S_force_version(pTHX_ char *s)
577 OP *version = Nullop;
581 /* default VERSION number -- GBARR */
586 for( d=s, c = 1; isDIGIT(*d) || *d == '_' || (*d == '.' && c--); d++);
587 if((*d == ';' || isSPACE(*d)) && *(skipspace(d)) != ',') {
589 /* real VERSION number -- GBARR */
590 version = yylval.opval;
594 /* NOTE: The parser sees the package name and the VERSION swapped */
595 PL_nextval[PL_nexttoke].opval = version;
602 S_tokeq(pTHX_ SV *sv)
613 s = SvPV_force(sv, len);
617 while (s < send && *s != '\\')
622 if ( PL_hints & HINT_NEW_STRING )
623 pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
626 if (s + 1 < send && (s[1] == '\\'))
627 s++; /* all that, just for this */
632 SvCUR_set(sv, d - SvPVX(sv));
634 if ( PL_hints & HINT_NEW_STRING )
635 return new_constant(NULL, 0, "q", sv, pv, "q");
642 register I32 op_type = yylval.ival;
644 if (op_type == OP_NULL) {
645 yylval.opval = PL_lex_op;
649 if (op_type == OP_CONST || op_type == OP_READLINE) {
650 SV *sv = tokeq(PL_lex_stuff);
652 if (SvTYPE(sv) == SVt_PVIV) {
653 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
659 nsv = newSVpvn(p, len);
663 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
664 PL_lex_stuff = Nullsv;
668 PL_sublex_info.super_state = PL_lex_state;
669 PL_sublex_info.sub_inwhat = op_type;
670 PL_sublex_info.sub_op = PL_lex_op;
671 PL_lex_state = LEX_INTERPPUSH;
675 yylval.opval = PL_lex_op;
689 PL_lex_state = PL_sublex_info.super_state;
690 SAVEI32(PL_lex_dojoin);
691 SAVEI32(PL_lex_brackets);
692 SAVEI32(PL_lex_fakebrack);
693 SAVEI32(PL_lex_casemods);
694 SAVEI32(PL_lex_starts);
695 SAVEI32(PL_lex_state);
696 SAVESPTR(PL_lex_inpat);
697 SAVEI32(PL_lex_inwhat);
698 SAVEI16(PL_curcop->cop_line);
700 SAVEPPTR(PL_oldbufptr);
701 SAVEPPTR(PL_oldoldbufptr);
702 SAVEPPTR(PL_linestart);
703 SAVESPTR(PL_linestr);
704 SAVEPPTR(PL_lex_brackstack);
705 SAVEPPTR(PL_lex_casestack);
707 PL_linestr = PL_lex_stuff;
708 PL_lex_stuff = Nullsv;
710 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
711 PL_bufend += SvCUR(PL_linestr);
712 SAVEFREESV(PL_linestr);
714 PL_lex_dojoin = FALSE;
716 PL_lex_fakebrack = 0;
717 New(899, PL_lex_brackstack, 120, char);
718 New(899, PL_lex_casestack, 12, char);
719 SAVEFREEPV(PL_lex_brackstack);
720 SAVEFREEPV(PL_lex_casestack);
722 *PL_lex_casestack = '\0';
724 PL_lex_state = LEX_INTERPCONCAT;
725 PL_curcop->cop_line = PL_multi_start;
727 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
728 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
729 PL_lex_inpat = PL_sublex_info.sub_op;
731 PL_lex_inpat = Nullop;
739 if (!PL_lex_starts++) {
740 PL_expect = XOPERATOR;
741 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpvn("",0));
745 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
746 PL_lex_state = LEX_INTERPCASEMOD;
750 /* Is there a right-hand side to take care of? */
751 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
752 PL_linestr = PL_lex_repl;
754 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
755 PL_bufend += SvCUR(PL_linestr);
756 SAVEFREESV(PL_linestr);
757 PL_lex_dojoin = FALSE;
759 PL_lex_fakebrack = 0;
761 *PL_lex_casestack = '\0';
763 if (SvEVALED(PL_lex_repl)) {
764 PL_lex_state = LEX_INTERPNORMAL;
766 /* we don't clear PL_lex_repl here, so that we can check later
767 whether this is an evalled subst; that means we rely on the
768 logic to ensure sublex_done() is called again only via the
769 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
772 PL_lex_state = LEX_INTERPCONCAT;
773 PL_lex_repl = Nullsv;
779 PL_bufend = SvPVX(PL_linestr);
780 PL_bufend += SvCUR(PL_linestr);
781 PL_expect = XOPERATOR;
789 Extracts a pattern, double-quoted string, or transliteration. This
792 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
793 processing a pattern (PL_lex_inpat is true), a transliteration
794 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
796 Returns a pointer to the character scanned up to. Iff this is
797 advanced from the start pointer supplied (ie if anything was
798 successfully parsed), will leave an OP for the substring scanned
799 in yylval. Caller must intuit reason for not parsing further
800 by looking at the next characters herself.
804 double-quoted style: \r and \n
805 regexp special ones: \D \s
807 backrefs: \1 (deprecated in substitution replacements)
808 case and quoting: \U \Q \E
809 stops on @ and $, but not for $ as tail anchor
812 characters are VERY literal, except for - not at the start or end
813 of the string, which indicates a range. scan_const expands the
814 range to the full set of intermediate characters.
816 In double-quoted strings:
818 double-quoted style: \r and \n
820 backrefs: \1 (deprecated)
821 case and quoting: \U \Q \E
824 scan_const does *not* construct ops to handle interpolated strings.
825 It stops processing as soon as it finds an embedded $ or @ variable
826 and leaves it to the caller to work out what's going on.
828 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
830 $ in pattern could be $foo or could be tail anchor. Assumption:
831 it's a tail anchor if $ is the last thing in the string, or if it's
832 followed by one of ")| \n\t"
834 \1 (backreferences) are turned into $1
836 The structure of the code is
837 while (there's a character to process) {
838 handle transliteration ranges
840 skip # initiated comments in //x patterns
841 check for embedded @foo
842 check for embedded scalars
844 leave intact backslashes from leave (below)
845 deprecate \1 in strings and sub replacements
846 handle string-changing backslashes \l \U \Q \E, etc.
847 switch (what was escaped) {
848 handle - in a transliteration (becomes a literal -)
849 handle \132 octal characters
850 handle 0x15 hex characters
851 handle \cV (control V)
852 handle printf backslashes (\f, \r, \n, etc)
855 } (end while character to read)
860 S_scan_const(pTHX_ char *start)
862 register char *send = PL_bufend; /* end of the constant */
863 SV *sv = NEWSV(93, send - start); /* sv for the constant */
864 register char *s = start; /* start of the constant */
865 register char *d = SvPVX(sv); /* destination for copies */
866 bool dorange = FALSE; /* are we in a translit range? */
868 I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
869 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
871 I32 thisutf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
872 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
874 /* leaveit is the set of acceptably-backslashed characters */
877 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
880 while (s < send || dorange) {
881 /* get transliterations out of the way (they're most literal) */
882 if (PL_lex_inwhat == OP_TRANS) {
883 /* expand a range A-Z to the full set of characters. AIE! */
885 I32 i; /* current expanded character */
886 I32 min; /* first character in range */
887 I32 max; /* last character in range */
889 i = d - SvPVX(sv); /* remember current offset */
890 SvGROW(sv, SvLEN(sv) + 256); /* expand the sv -- there'll never be more'n 256 chars in a range for it to grow by */
891 d = SvPVX(sv) + i; /* restore d after the grow potentially has changed the ptr */
892 d -= 2; /* eat the first char and the - */
894 min = (U8)*d; /* first char in range */
895 max = (U8)d[1]; /* last char in range */
898 if ((isLOWER(min) && isLOWER(max)) ||
899 (isUPPER(min) && isUPPER(max))) {
901 for (i = min; i <= max; i++)
905 for (i = min; i <= max; i++)
912 for (i = min; 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)/ and code /(?{code})/,
935 except for the last char, which will be done separately. */
936 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
938 while (s < send && *s != ')')
940 } else if (s[2] == '{'
941 || s[2] == 'p' && s[3] == '{') { /* This should march regcomp.c */
943 char *regparse = s + (s[2] == '{' ? 3 : 4);
946 while (count && (c = *regparse)) {
947 if (c == '\\' && regparse[1])
955 if (*regparse != ')') {
956 regparse--; /* Leave one char for continuation. */
957 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
964 /* likewise skip #-initiated comments in //x patterns */
965 else if (*s == '#' && PL_lex_inpat &&
966 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
967 while (s+1 < send && *s != '\n')
971 /* check for embedded arrays (@foo, @:foo, @'foo, @{foo}, @$foo) */
972 else if (*s == '@' && s[1] && (isALNUM_lazy(s+1) || strchr(":'{$", s[1])))
975 /* check for embedded scalars. only stop if we're sure it's a
978 else if (*s == '$') {
979 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
981 if (s + 1 < send && !strchr("()| \n\t", s[1]))
982 break; /* in regexp, $ might be tail anchor */
985 /* (now in tr/// code again) */
987 if (*s & 0x80 && thisutf) {
988 dTHR; /* only for ckWARN */
989 if (ckWARN(WARN_UTF8)) {
990 (void)utf8_to_uv((U8*)s, &len); /* could cvt latin-1 to utf8 here... */
1000 if (*s == '\\' && s+1 < send) {
1003 /* some backslashes we leave behind */
1004 if (*leaveit && *s && strchr(leaveit, *s)) {
1010 /* deprecate \1 in strings and substitution replacements */
1011 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1012 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1014 dTHR; /* only for ckWARN */
1015 if (ckWARN(WARN_SYNTAX))
1016 Perl_warner(aTHX_ WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1021 /* string-change backslash escapes */
1022 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1027 /* if we get here, it's either a quoted -, or a digit */
1030 /* quoted - in transliterations */
1032 if (PL_lex_inwhat == OP_TRANS) {
1040 if (ckWARN(WARN_UNSAFE) && isALPHA(*s))
1041 Perl_warner(aTHX_ WARN_UNSAFE,
1042 "Unrecognized escape \\%c passed through",
1044 /* default action is to copy the quoted character */
1049 /* \132 indicates an octal constant */
1050 case '0': case '1': case '2': case '3':
1051 case '4': case '5': case '6': case '7':
1052 *d++ = scan_oct(s, 3, &len);
1056 /* \x24 indicates a hex constant */
1060 char* e = strchr(s, '}');
1063 yyerror("Missing right brace on \\x{}");
1068 if (ckWARN(WARN_UTF8))
1069 Perl_warner(aTHX_ WARN_UTF8,
1070 "Use of \\x{} without utf8 declaration");
1072 /* note: utf always shorter than hex */
1073 d = (char*)uv_to_utf8((U8*)d,
1074 scan_hex(s + 1, e - s - 1, &len));
1078 UV uv = (UV)scan_hex(s, 2, &len);
1079 if (utf && PL_lex_inwhat == OP_TRANS &&
1080 utf != (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1082 d = (char*)uv_to_utf8((U8*)d, uv); /* doing a CU or UC */
1085 if (uv >= 127 && UTF) {
1087 if (ckWARN(WARN_UTF8))
1088 Perl_warner(aTHX_ WARN_UTF8,
1089 "\\x%.*s will produce malformed UTF-8 character; use \\x{%.*s} for that",
1098 /* \c is a control character */
1112 /* printf-style backslashes, formfeeds, newlines, etc */
1130 *d++ = '\047'; /* CP 1047 */
1133 *d++ = '\057'; /* CP 1047 */
1147 } /* end if (backslash) */
1150 } /* while loop to process each character */
1152 /* terminate the string and set up the sv */
1154 SvCUR_set(sv, d - SvPVX(sv));
1157 /* shrink the sv if we allocated more than we used */
1158 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1159 SvLEN_set(sv, SvCUR(sv) + 1);
1160 Renew(SvPVX(sv), SvLEN(sv), char);
1163 /* return the substring (via yylval) only if we parsed anything */
1164 if (s > PL_bufptr) {
1165 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1166 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1168 ( PL_lex_inwhat == OP_TRANS
1170 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1173 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1179 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1181 S_intuit_more(pTHX_ register char *s)
1183 if (PL_lex_brackets)
1185 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1187 if (*s != '{' && *s != '[')
1192 /* In a pattern, so maybe we have {n,m}. */
1209 /* On the other hand, maybe we have a character class */
1212 if (*s == ']' || *s == '^')
1215 int weight = 2; /* let's weigh the evidence */
1217 unsigned char un_char = 255, last_un_char;
1218 char *send = strchr(s,']');
1219 char tmpbuf[sizeof PL_tokenbuf * 4];
1221 if (!send) /* has to be an expression */
1224 Zero(seen,256,char);
1227 else if (isDIGIT(*s)) {
1229 if (isDIGIT(s[1]) && s[2] == ']')
1235 for (; s < send; s++) {
1236 last_un_char = un_char;
1237 un_char = (unsigned char)*s;
1242 weight -= seen[un_char] * 10;
1243 if (isALNUM_lazy(s+1)) {
1244 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1245 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1250 else if (*s == '$' && s[1] &&
1251 strchr("[#!%*<>()-=",s[1])) {
1252 if (/*{*/ strchr("])} =",s[2]))
1261 if (strchr("wds]",s[1]))
1263 else if (seen['\''] || seen['"'])
1265 else if (strchr("rnftbxcav",s[1]))
1267 else if (isDIGIT(s[1])) {
1269 while (s[1] && isDIGIT(s[1]))
1279 if (strchr("aA01! ",last_un_char))
1281 if (strchr("zZ79~",s[1]))
1283 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1284 weight -= 5; /* cope with negative subscript */
1287 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1288 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1293 if (keyword(tmpbuf, d - tmpbuf))
1296 if (un_char == last_un_char + 1)
1298 weight -= seen[un_char];
1303 if (weight >= 0) /* probably a character class */
1311 S_intuit_method(pTHX_ char *start, GV *gv)
1313 char *s = start + (*start == '$');
1314 char tmpbuf[sizeof PL_tokenbuf];
1322 if ((cv = GvCVu(gv))) {
1323 char *proto = SvPVX(cv);
1333 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1334 if (*start == '$') {
1335 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1340 return *s == '(' ? FUNCMETH : METHOD;
1342 if (!keyword(tmpbuf, len)) {
1343 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1348 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1349 if (indirgv && GvCVu(indirgv))
1351 /* filehandle or package name makes it a method */
1352 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1354 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1355 return 0; /* no assumptions -- "=>" quotes bearword */
1357 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1358 newSVpvn(tmpbuf,len));
1359 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1363 return *s == '(' ? FUNCMETH : METHOD;
1373 char *pdb = PerlEnv_getenv("PERL5DB");
1377 SETERRNO(0,SS$_NORMAL);
1378 return "BEGIN { require 'perl5db.pl' }";
1384 /* Encoded script support. filter_add() effectively inserts a
1385 * 'pre-processing' function into the current source input stream.
1386 * Note that the filter function only applies to the current source file
1387 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1389 * The datasv parameter (which may be NULL) can be used to pass
1390 * private data to this instance of the filter. The filter function
1391 * can recover the SV using the FILTER_DATA macro and use it to
1392 * store private buffers and state information.
1394 * The supplied datasv parameter is upgraded to a PVIO type
1395 * and the IoDIRP field is used to store the function pointer.
1396 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1397 * private use must be set using malloc'd pointers.
1401 Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
1403 if (!funcp){ /* temporary handy debugging hack to be deleted */
1404 PL_filter_debug = atoi((char*)datasv);
1407 if (!PL_rsfp_filters)
1408 PL_rsfp_filters = newAV();
1410 datasv = NEWSV(255,0);
1411 if (!SvUPGRADE(datasv, SVt_PVIO))
1412 Perl_die(aTHX_ "Can't upgrade filter_add data to SVt_PVIO");
1413 IoDIRP(datasv) = (DIR*)funcp; /* stash funcp into spare field */
1415 if (PL_filter_debug) {
1417 Perl_warn(aTHX_ "filter_add func %p (%s)", funcp, SvPV(datasv, n_a));
1419 #endif /* DEBUGGING */
1420 av_unshift(PL_rsfp_filters, 1);
1421 av_store(PL_rsfp_filters, 0, datasv) ;
1426 /* Delete most recently added instance of this filter function. */
1428 Perl_filter_del(pTHX_ filter_t funcp)
1431 if (PL_filter_debug)
1432 Perl_warn(aTHX_ "filter_del func %p", funcp);
1433 #endif /* DEBUGGING */
1434 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1436 /* if filter is on top of stack (usual case) just pop it off */
1437 if (IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) == (DIR*)funcp){
1438 IoDIRP(FILTER_DATA(AvFILLp(PL_rsfp_filters))) = NULL;
1439 sv_free(av_pop(PL_rsfp_filters));
1443 /* we need to search for the correct entry and clear it */
1444 Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
1448 /* Invoke the n'th filter function for the current rsfp. */
1450 Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
1453 /* 0 = read one text line */
1458 if (!PL_rsfp_filters)
1460 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
1461 /* Provide a default input filter to make life easy. */
1462 /* Note that we append to the line. This is handy. */
1464 if (PL_filter_debug)
1465 Perl_warn(aTHX_ "filter_read %d: from rsfp\n", idx);
1466 #endif /* DEBUGGING */
1470 int old_len = SvCUR(buf_sv) ;
1472 /* ensure buf_sv is large enough */
1473 SvGROW(buf_sv, old_len + maxlen) ;
1474 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1475 if (PerlIO_error(PL_rsfp))
1476 return -1; /* error */
1478 return 0 ; /* end of file */
1480 SvCUR_set(buf_sv, old_len + len) ;
1483 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
1484 if (PerlIO_error(PL_rsfp))
1485 return -1; /* error */
1487 return 0 ; /* end of file */
1490 return SvCUR(buf_sv);
1492 /* Skip this filter slot if filter has been deleted */
1493 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
1495 if (PL_filter_debug)
1496 Perl_warn(aTHX_ "filter_read %d: skipped (filter deleted)\n", idx);
1497 #endif /* DEBUGGING */
1498 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
1500 /* Get function pointer hidden within datasv */
1501 funcp = (filter_t)IoDIRP(datasv);
1503 if (PL_filter_debug) {
1505 Perl_warn(aTHX_ "filter_read %d: via function %p (%s)\n",
1506 idx, funcp, SvPV(datasv,n_a));
1508 #endif /* DEBUGGING */
1509 /* Call function. The function is expected to */
1510 /* call "FILTER_READ(idx+1, buf_sv)" first. */
1511 /* Return: <0:error, =0:eof, >0:not eof */
1512 return (*funcp)(aTHXo_ idx, buf_sv, maxlen);
1516 S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append)
1519 if (!PL_rsfp_filters) {
1520 filter_add(win32_textfilter,NULL);
1523 if (PL_rsfp_filters) {
1526 SvCUR_set(sv, 0); /* start with empty line */
1527 if (FILTER_READ(0, sv, 0) > 0)
1528 return ( SvPVX(sv) ) ;
1533 return (sv_gets(sv, fp, append));
1538 static char* exp_name[] =
1539 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "TERMBLOCK" };
1545 Works out what to call the token just pulled out of the input
1546 stream. The yacc parser takes care of taking the ops we return and
1547 stitching them into a tree.
1553 if read an identifier
1554 if we're in a my declaration
1555 croak if they tried to say my($foo::bar)
1556 build the ops for a my() declaration
1557 if it's an access to a my() variable
1558 are we in a sort block?
1559 croak if my($a); $a <=> $b
1560 build ops for access to a my() variable
1561 if in a dq string, and they've said @foo and we can't find @foo
1563 build ops for a bareword
1564 if we already built the token before, use it.
1568 #ifdef USE_PURE_BISON
1569 Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp)
1582 #ifdef USE_PURE_BISON
1583 yylval_pointer = lvalp;
1584 yychar_pointer = lcharp;
1587 /* check if there's an identifier for us to look at */
1588 if (PL_pending_ident) {
1589 /* pit holds the identifier we read and pending_ident is reset */
1590 char pit = PL_pending_ident;
1591 PL_pending_ident = 0;
1593 /* if we're in a my(), we can't allow dynamics here.
1594 $foo'bar has already been turned into $foo::bar, so
1595 just check for colons.
1597 if it's a legal name, the OP is a PADANY.
1600 if (strchr(PL_tokenbuf,':'))
1601 yyerror(Perl_form(aTHX_ PL_no_myglob,PL_tokenbuf));
1603 yylval.opval = newOP(OP_PADANY, 0);
1604 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
1609 build the ops for accesses to a my() variable.
1611 Deny my($a) or my($b) in a sort block, *if* $a or $b is
1612 then used in a comparison. This catches most, but not
1613 all cases. For instance, it catches
1614 sort { my($a); $a <=> $b }
1616 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
1617 (although why you'd do that is anyone's guess).
1620 if (!strchr(PL_tokenbuf,':')) {
1622 /* Check for single character per-thread SVs */
1623 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
1624 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
1625 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
1627 yylval.opval = newOP(OP_THREADSV, 0);
1628 yylval.opval->op_targ = tmp;
1631 #endif /* USE_THREADS */
1632 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
1633 /* if it's a sort block and they're naming $a or $b */
1634 if (PL_last_lop_op == OP_SORT &&
1635 PL_tokenbuf[0] == '$' &&
1636 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
1639 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
1640 d < PL_bufend && *d != '\n';
1643 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
1644 Perl_croak(aTHX_ "Can't use \"my %s\" in sort comparison",
1650 yylval.opval = newOP(OP_PADANY, 0);
1651 yylval.opval->op_targ = tmp;
1657 Whine if they've said @foo in a doublequoted string,
1658 and @foo isn't a variable we can find in the symbol
1661 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
1662 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
1663 if (!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
1664 yyerror(Perl_form(aTHX_ "In string, %s now must be written as \\%s",
1665 PL_tokenbuf, PL_tokenbuf));
1668 /* build ops for a bareword */
1669 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
1670 yylval.opval->op_private = OPpCONST_ENTERED;
1671 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
1672 ((PL_tokenbuf[0] == '$') ? SVt_PV
1673 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
1678 /* no identifier pending identification */
1680 switch (PL_lex_state) {
1682 case LEX_NORMAL: /* Some compilers will produce faster */
1683 case LEX_INTERPNORMAL: /* code if we comment these out. */
1687 /* when we're already built the next token, just pull it out the queue */
1690 yylval = PL_nextval[PL_nexttoke];
1692 PL_lex_state = PL_lex_defer;
1693 PL_expect = PL_lex_expect;
1694 PL_lex_defer = LEX_NORMAL;
1696 return(PL_nexttype[PL_nexttoke]);
1698 /* interpolated case modifiers like \L \U, including \Q and \E.
1699 when we get here, PL_bufptr is at the \
1701 case LEX_INTERPCASEMOD:
1703 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
1704 Perl_croak(aTHX_ "panic: INTERPCASEMOD");
1706 /* handle \E or end of string */
1707 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
1711 if (PL_lex_casemods) {
1712 oldmod = PL_lex_casestack[--PL_lex_casemods];
1713 PL_lex_casestack[PL_lex_casemods] = '\0';
1715 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
1717 PL_lex_state = LEX_INTERPCONCAT;
1721 if (PL_bufptr != PL_bufend)
1723 PL_lex_state = LEX_INTERPCONCAT;
1728 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
1729 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
1730 if (strchr("LU", *s) &&
1731 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
1733 PL_lex_casestack[--PL_lex_casemods] = '\0';
1736 if (PL_lex_casemods > 10) {
1737 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
1738 if (newlb != PL_lex_casestack) {
1740 PL_lex_casestack = newlb;
1743 PL_lex_casestack[PL_lex_casemods++] = *s;
1744 PL_lex_casestack[PL_lex_casemods] = '\0';
1745 PL_lex_state = LEX_INTERPCONCAT;
1746 PL_nextval[PL_nexttoke].ival = 0;
1749 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
1751 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
1753 PL_nextval[PL_nexttoke].ival = OP_LC;
1755 PL_nextval[PL_nexttoke].ival = OP_UC;
1757 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
1759 Perl_croak(aTHX_ "panic: yylex");
1762 if (PL_lex_starts) {
1771 case LEX_INTERPPUSH:
1772 return sublex_push();
1774 case LEX_INTERPSTART:
1775 if (PL_bufptr == PL_bufend)
1776 return sublex_done();
1778 PL_lex_dojoin = (*PL_bufptr == '@');
1779 PL_lex_state = LEX_INTERPNORMAL;
1780 if (PL_lex_dojoin) {
1781 PL_nextval[PL_nexttoke].ival = 0;
1784 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
1785 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
1786 force_next(PRIVATEREF);
1788 force_ident("\"", '$');
1789 #endif /* USE_THREADS */
1790 PL_nextval[PL_nexttoke].ival = 0;
1792 PL_nextval[PL_nexttoke].ival = 0;
1794 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
1797 if (PL_lex_starts++) {
1803 case LEX_INTERPENDMAYBE:
1804 if (intuit_more(PL_bufptr)) {
1805 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
1811 if (PL_lex_dojoin) {
1812 PL_lex_dojoin = FALSE;
1813 PL_lex_state = LEX_INTERPCONCAT;
1816 if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
1817 && SvEVALED(PL_lex_repl))
1819 if (PL_bufptr != PL_bufend)
1820 Perl_croak(aTHX_ "Bad evalled substitution pattern");
1821 PL_lex_repl = Nullsv;
1824 case LEX_INTERPCONCAT:
1826 if (PL_lex_brackets)
1827 Perl_croak(aTHX_ "panic: INTERPCONCAT");
1829 if (PL_bufptr == PL_bufend)
1830 return sublex_done();
1832 if (SvIVX(PL_linestr) == '\'') {
1833 SV *sv = newSVsv(PL_linestr);
1836 else if ( PL_hints & HINT_NEW_RE )
1837 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
1838 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1842 s = scan_const(PL_bufptr);
1844 PL_lex_state = LEX_INTERPCASEMOD;
1846 PL_lex_state = LEX_INTERPSTART;
1849 if (s != PL_bufptr) {
1850 PL_nextval[PL_nexttoke] = yylval;
1853 if (PL_lex_starts++)
1863 PL_lex_state = LEX_NORMAL;
1864 s = scan_formline(PL_bufptr);
1865 if (!PL_lex_formbrack)
1871 PL_oldoldbufptr = PL_oldbufptr;
1874 PerlIO_printf(PerlIO_stderr(), "### Tokener expecting %s at %s\n", exp_name[PL_expect], s);
1880 if (isIDFIRST_lazy(s))
1882 Perl_croak(aTHX_ "Unrecognized character \\x%02X", *s & 255);
1885 goto fake_eof; /* emulate EOF on ^D or ^Z */
1890 if (PL_lex_brackets)
1891 yyerror("Missing right curly or square bracket");
1894 if (s++ < PL_bufend)
1895 goto retry; /* ignore stray nulls */
1898 if (!PL_in_eval && !PL_preambled) {
1899 PL_preambled = TRUE;
1900 sv_setpv(PL_linestr,incl_perldb());
1901 if (SvCUR(PL_linestr))
1902 sv_catpv(PL_linestr,";");
1904 while(AvFILLp(PL_preambleav) >= 0) {
1905 SV *tmpsv = av_shift(PL_preambleav);
1906 sv_catsv(PL_linestr, tmpsv);
1907 sv_catpv(PL_linestr, ";");
1910 sv_free((SV*)PL_preambleav);
1911 PL_preambleav = NULL;
1913 if (PL_minus_n || PL_minus_p) {
1914 sv_catpv(PL_linestr, "LINE: while (<>) {");
1916 sv_catpv(PL_linestr,"chomp;");
1918 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
1920 GvIMPORTED_AV_on(gv);
1922 if (strchr("/'\"", *PL_splitstr)
1923 && strchr(PL_splitstr + 1, *PL_splitstr))
1924 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s);", PL_splitstr);
1927 s = "'~#\200\1'"; /* surely one char is unused...*/
1928 while (s[1] && strchr(PL_splitstr, *s)) s++;
1930 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s%c",
1931 "q" + (delim == '\''), delim);
1932 for (s = PL_splitstr; *s; s++) {
1934 sv_catpvn(PL_linestr, "\\", 1);
1935 sv_catpvn(PL_linestr, s, 1);
1937 Perl_sv_catpvf(aTHX_ PL_linestr, "%c);", delim);
1941 sv_catpv(PL_linestr,"@F=split(' ');");
1944 sv_catpv(PL_linestr, "\n");
1945 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1946 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1947 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1948 SV *sv = NEWSV(85,0);
1950 sv_upgrade(sv, SVt_PVMG);
1951 sv_setsv(sv,PL_linestr);
1952 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
1957 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
1960 if (PL_preprocess && !PL_in_eval)
1961 (void)PerlProc_pclose(PL_rsfp);
1962 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
1963 PerlIO_clearerr(PL_rsfp);
1965 (void)PerlIO_close(PL_rsfp);
1967 PL_doextract = FALSE;
1969 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
1970 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
1971 sv_catpv(PL_linestr,";}");
1972 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1973 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1974 PL_minus_n = PL_minus_p = 0;
1977 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1978 sv_setpv(PL_linestr,"");
1979 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
1982 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
1983 PL_doextract = FALSE;
1985 /* Incest with pod. */
1986 if (*s == '=' && strnEQ(s, "=cut", 4)) {
1987 sv_setpv(PL_linestr, "");
1988 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
1989 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
1990 PL_doextract = FALSE;
1994 } while (PL_doextract);
1995 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
1996 if (PERLDB_LINE && PL_curstash != PL_debstash) {
1997 SV *sv = NEWSV(85,0);
1999 sv_upgrade(sv, SVt_PVMG);
2000 sv_setsv(sv,PL_linestr);
2001 av_store(GvAV(PL_curcop->cop_filegv),(I32)PL_curcop->cop_line,sv);
2003 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2004 if (PL_curcop->cop_line == 1) {
2005 while (s < PL_bufend && isSPACE(*s))
2007 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
2011 if (*s == '#' && *(s+1) == '!')
2013 #ifdef ALTERNATE_SHEBANG
2015 static char as[] = ALTERNATE_SHEBANG;
2016 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2017 d = s + (sizeof(as) - 1);
2019 #endif /* ALTERNATE_SHEBANG */
2028 while (*d && !isSPACE(*d))
2032 #ifdef ARG_ZERO_IS_SCRIPT
2033 if (ipathend > ipath) {
2035 * HP-UX (at least) sets argv[0] to the script name,
2036 * which makes $^X incorrect. And Digital UNIX and Linux,
2037 * at least, set argv[0] to the basename of the Perl
2038 * interpreter. So, having found "#!", we'll set it right.
2040 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2041 assert(SvPOK(x) || SvGMAGICAL(x));
2042 if (sv_eq(x, GvSV(PL_curcop->cop_filegv))) {
2043 sv_setpvn(x, ipath, ipathend - ipath);
2046 TAINT_NOT; /* $^X is always tainted, but that's OK */
2048 #endif /* ARG_ZERO_IS_SCRIPT */
2053 d = instr(s,"perl -");
2055 d = instr(s,"perl");
2056 #ifdef ALTERNATE_SHEBANG
2058 * If the ALTERNATE_SHEBANG on this system starts with a
2059 * character that can be part of a Perl expression, then if
2060 * we see it but not "perl", we're probably looking at the
2061 * start of Perl code, not a request to hand off to some
2062 * other interpreter. Similarly, if "perl" is there, but
2063 * not in the first 'word' of the line, we assume the line
2064 * contains the start of the Perl program.
2066 if (d && *s != '#') {
2068 while (*c && !strchr("; \t\r\n\f\v#", *c))
2071 d = Nullch; /* "perl" not in first word; ignore */
2073 *s = '#'; /* Don't try to parse shebang line */
2075 #endif /* ALTERNATE_SHEBANG */
2080 !instr(s,"indir") &&
2081 instr(PL_origargv[0],"perl"))
2087 while (s < PL_bufend && isSPACE(*s))
2089 if (s < PL_bufend) {
2090 Newz(899,newargv,PL_origargc+3,char*);
2092 while (s < PL_bufend && !isSPACE(*s))
2095 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2098 newargv = PL_origargv;
2100 PerlProc_execv(ipath, newargv);
2101 Perl_croak(aTHX_ "Can't exec %s", ipath);
2104 U32 oldpdb = PL_perldb;
2105 bool oldn = PL_minus_n;
2106 bool oldp = PL_minus_p;
2108 while (*d && !isSPACE(*d)) d++;
2109 while (*d == ' ' || *d == '\t') d++;
2113 if (*d == 'M' || *d == 'm') {
2115 while (*d && !isSPACE(*d)) d++;
2116 Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
2119 d = moreswitches(d);
2121 if (PERLDB_LINE && !oldpdb ||
2122 ( PL_minus_n || PL_minus_p ) && !(oldn || oldp) )
2123 /* if we have already added "LINE: while (<>) {",
2124 we must not do it again */
2126 sv_setpv(PL_linestr, "");
2127 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2128 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2129 PL_preambled = FALSE;
2131 (void)gv_fetchfile(PL_origfilename);
2138 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2140 PL_lex_state = LEX_FORMLINE;
2145 #ifdef PERL_STRICT_CR
2146 Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
2148 "(Maybe you didn't strip carriage returns after a network transfer?)\n");
2150 case ' ': case '\t': case '\f': case 013:
2155 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2157 while (s < d && *s != '\n')
2162 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2164 PL_lex_state = LEX_FORMLINE;
2174 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2179 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2182 if (strnEQ(s,"=>",2)) {
2183 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2184 OPERATOR('-'); /* unary minus */
2186 PL_last_uni = PL_oldbufptr;
2187 PL_last_lop_op = OP_FTEREAD; /* good enough */
2189 case 'r': FTST(OP_FTEREAD);
2190 case 'w': FTST(OP_FTEWRITE);
2191 case 'x': FTST(OP_FTEEXEC);
2192 case 'o': FTST(OP_FTEOWNED);
2193 case 'R': FTST(OP_FTRREAD);
2194 case 'W': FTST(OP_FTRWRITE);
2195 case 'X': FTST(OP_FTREXEC);
2196 case 'O': FTST(OP_FTROWNED);
2197 case 'e': FTST(OP_FTIS);
2198 case 'z': FTST(OP_FTZERO);
2199 case 's': FTST(OP_FTSIZE);
2200 case 'f': FTST(OP_FTFILE);
2201 case 'd': FTST(OP_FTDIR);
2202 case 'l': FTST(OP_FTLINK);
2203 case 'p': FTST(OP_FTPIPE);
2204 case 'S': FTST(OP_FTSOCK);
2205 case 'u': FTST(OP_FTSUID);
2206 case 'g': FTST(OP_FTSGID);
2207 case 'k': FTST(OP_FTSVTX);
2208 case 'b': FTST(OP_FTBLK);
2209 case 'c': FTST(OP_FTCHR);
2210 case 't': FTST(OP_FTTTY);
2211 case 'T': FTST(OP_FTTEXT);
2212 case 'B': FTST(OP_FTBINARY);
2213 case 'M': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTMTIME);
2214 case 'A': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTATIME);
2215 case 'C': gv_fetchpv("\024",TRUE, SVt_PV); FTST(OP_FTCTIME);
2217 Perl_croak(aTHX_ "Unrecognized file test: -%c", (int)tmp);
2224 if (PL_expect == XOPERATOR)
2229 else if (*s == '>') {
2232 if (isIDFIRST_lazy(s)) {
2233 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2241 if (PL_expect == XOPERATOR)
2244 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2246 OPERATOR('-'); /* unary minus */
2253 if (PL_expect == XOPERATOR)
2258 if (PL_expect == XOPERATOR)
2261 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2267 if (PL_expect != XOPERATOR) {
2268 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2269 PL_expect = XOPERATOR;
2270 force_ident(PL_tokenbuf, '*');
2283 if (PL_expect == XOPERATOR) {
2287 PL_tokenbuf[0] = '%';
2288 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2289 if (!PL_tokenbuf[1]) {
2291 yyerror("Final % should be \\% or %name");
2294 PL_pending_ident = '%';
2316 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
2317 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
2322 if (PL_curcop->cop_line < PL_copline)
2323 PL_copline = PL_curcop->cop_line;
2334 if (PL_lex_brackets <= 0)
2335 yyerror("Unmatched right square bracket");
2338 if (PL_lex_state == LEX_INTERPNORMAL) {
2339 if (PL_lex_brackets == 0) {
2340 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
2341 PL_lex_state = LEX_INTERPEND;
2348 if (PL_lex_brackets > 100) {
2349 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
2350 if (newlb != PL_lex_brackstack) {
2352 PL_lex_brackstack = newlb;
2355 switch (PL_expect) {
2357 if (PL_lex_formbrack) {
2361 if (PL_oldoldbufptr == PL_last_lop)
2362 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2364 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2365 OPERATOR(HASHBRACK);
2367 while (s < PL_bufend && (*s == ' ' || *s == '\t'))
2370 PL_tokenbuf[0] = '\0';
2371 if (d < PL_bufend && *d == '-') {
2372 PL_tokenbuf[0] = '-';
2374 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2377 if (d < PL_bufend && isIDFIRST_lazy(d)) {
2378 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
2380 while (d < PL_bufend && (*d == ' ' || *d == '\t'))
2383 char minus = (PL_tokenbuf[0] == '-');
2384 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
2391 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
2395 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2400 if (PL_oldoldbufptr == PL_last_lop)
2401 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
2403 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
2406 OPERATOR(HASHBRACK);
2407 /* This hack serves to disambiguate a pair of curlies
2408 * as being a block or an anon hash. Normally, expectation
2409 * determines that, but in cases where we're not in a
2410 * position to expect anything in particular (like inside
2411 * eval"") we have to resolve the ambiguity. This code
2412 * covers the case where the first term in the curlies is a
2413 * quoted string. Most other cases need to be explicitly
2414 * disambiguated by prepending a `+' before the opening
2415 * curly in order to force resolution as an anon hash.
2417 * XXX should probably propagate the outer expectation
2418 * into eval"" to rely less on this hack, but that could
2419 * potentially break current behavior of eval"".
2423 if (*s == '\'' || *s == '"' || *s == '`') {
2424 /* common case: get past first string, handling escapes */
2425 for (t++; t < PL_bufend && *t != *s;)
2426 if (*t++ == '\\' && (*t == '\\' || *t == *s))
2430 else if (*s == 'q') {
2433 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
2434 && !isALNUM(*t)))) {
2436 char open, close, term;
2439 while (t < PL_bufend && isSPACE(*t))
2443 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
2447 for (t++; t < PL_bufend; t++) {
2448 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
2450 else if (*t == open)
2454 for (t++; t < PL_bufend; t++) {
2455 if (*t == '\\' && t+1 < PL_bufend)
2457 else if (*t == close && --brackets <= 0)
2459 else if (*t == open)
2465 else if (isIDFIRST_lazy(s)) {
2466 for (t++; t < PL_bufend && isALNUM_lazy(t); t++) ;
2468 while (t < PL_bufend && isSPACE(*t))
2470 /* if comma follows first term, call it an anon hash */
2471 /* XXX it could be a comma expression with loop modifiers */
2472 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
2473 || (*t == '=' && t[1] == '>')))
2474 OPERATOR(HASHBRACK);
2475 if (PL_expect == XREF)
2478 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
2484 yylval.ival = PL_curcop->cop_line;
2485 if (isSPACE(*s) || *s == '#')
2486 PL_copline = NOLINE; /* invalidate current command line number */
2491 if (PL_lex_brackets <= 0)
2492 yyerror("Unmatched right curly bracket");
2494 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
2495 if (PL_lex_brackets < PL_lex_formbrack)
2496 PL_lex_formbrack = 0;
2497 if (PL_lex_state == LEX_INTERPNORMAL) {
2498 if (PL_lex_brackets == 0) {
2499 if (PL_lex_fakebrack) {
2500 PL_lex_state = LEX_INTERPEND;
2502 return yylex(); /* ignore fake brackets */
2504 if (*s == '-' && s[1] == '>')
2505 PL_lex_state = LEX_INTERPENDMAYBE;
2506 else if (*s != '[' && *s != '{')
2507 PL_lex_state = LEX_INTERPEND;
2510 if (PL_lex_brackets < PL_lex_fakebrack) {
2512 PL_lex_fakebrack = 0;
2513 return yylex(); /* ignore fake brackets */
2523 if (PL_expect == XOPERATOR) {
2524 if (ckWARN(WARN_SEMICOLON) && isIDFIRST_lazy(s) && PL_bufptr == PL_linestart) {
2525 PL_curcop->cop_line--;
2526 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
2527 PL_curcop->cop_line++;
2532 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2534 PL_expect = XOPERATOR;
2535 force_ident(PL_tokenbuf, '&');
2539 yylval.ival = (OPpENTERSUB_AMPER<<8);
2558 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
2559 Perl_warner(aTHX_ WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
2561 if (PL_expect == XSTATE && isALPHA(tmp) &&
2562 (s == PL_linestart+1 || s[-2] == '\n') )
2564 if (PL_in_eval && !PL_rsfp) {
2569 if (strnEQ(s,"=cut",4)) {
2583 PL_doextract = TRUE;
2586 if (PL_lex_brackets < PL_lex_formbrack) {
2588 #ifdef PERL_STRICT_CR
2589 for (t = s; *t == ' ' || *t == '\t'; t++) ;
2591 for (t = s; *t == ' ' || *t == '\t' || *t == '\r'; t++) ;
2593 if (*t == '\n' || *t == '#') {
2611 if (PL_expect != XOPERATOR) {
2612 if (s[1] != '<' && !strchr(s,'>'))
2615 s = scan_heredoc(s);
2617 s = scan_inputsymbol(s);
2618 TERM(sublex_start());
2623 SHop(OP_LEFT_SHIFT);
2637 SHop(OP_RIGHT_SHIFT);
2646 if (PL_expect == XOPERATOR) {
2647 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2650 return ','; /* grandfather non-comma-format format */
2654 if (s[1] == '#' && (isIDFIRST_lazy(s+2) || strchr("{$:+-", s[2]))) {
2655 PL_tokenbuf[0] = '@';
2656 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1,
2657 sizeof PL_tokenbuf - 1, FALSE);
2658 if (PL_expect == XOPERATOR)
2659 no_op("Array length", s);
2660 if (!PL_tokenbuf[1])
2662 PL_expect = XOPERATOR;
2663 PL_pending_ident = '#';
2667 PL_tokenbuf[0] = '$';
2668 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1,
2669 sizeof PL_tokenbuf - 1, FALSE);
2670 if (PL_expect == XOPERATOR)
2672 if (!PL_tokenbuf[1]) {
2674 yyerror("Final $ should be \\$ or $name");
2678 /* This kludge not intended to be bulletproof. */
2679 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
2680 yylval.opval = newSVOP(OP_CONST, 0,
2681 newSViv((IV)PL_compiling.cop_arybase));
2682 yylval.opval->op_private = OPpCONST_ARYBASE;
2688 if (PL_lex_state == LEX_NORMAL)
2691 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2694 PL_tokenbuf[0] = '@';
2695 if (ckWARN(WARN_SYNTAX)) {
2697 isSPACE(*t) || isALNUM_lazy(t) || *t == '$';
2700 PL_bufptr = skipspace(PL_bufptr);
2701 while (t < PL_bufend && *t != ']')
2703 Perl_warner(aTHX_ WARN_SYNTAX,
2704 "Multidimensional syntax %.*s not supported",
2705 (t - PL_bufptr) + 1, PL_bufptr);
2709 else if (*s == '{') {
2710 PL_tokenbuf[0] = '%';
2711 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
2712 (t = strchr(s, '}')) && (t = strchr(t, '=')))
2714 char tmpbuf[sizeof PL_tokenbuf];
2716 for (t++; isSPACE(*t); t++) ;
2717 if (isIDFIRST_lazy(t)) {
2718 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
2719 for (; isSPACE(*t); t++) ;
2720 if (*t == ';' && get_cv(tmpbuf, FALSE))
2721 Perl_warner(aTHX_ WARN_SYNTAX,
2722 "You need to quote \"%s\"", tmpbuf);
2728 PL_expect = XOPERATOR;
2729 if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
2730 bool islop = (PL_last_lop == PL_oldoldbufptr);
2731 if (!islop || PL_last_lop_op == OP_GREPSTART)
2732 PL_expect = XOPERATOR;
2733 else if (strchr("$@\"'`q", *s))
2734 PL_expect = XTERM; /* e.g. print $fh "foo" */
2735 else if (strchr("&*<%", *s) && isIDFIRST_lazy(s+1))
2736 PL_expect = XTERM; /* e.g. print $fh &sub */
2737 else if (isIDFIRST_lazy(s)) {
2738 char tmpbuf[sizeof PL_tokenbuf];
2739 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
2740 if (tmp = keyword(tmpbuf, len)) {
2741 /* binary operators exclude handle interpretations */
2753 PL_expect = XTERM; /* e.g. print $fh length() */
2758 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
2759 if (gv && GvCVu(gv))
2760 PL_expect = XTERM; /* e.g. print $fh subr() */
2763 else if (isDIGIT(*s))
2764 PL_expect = XTERM; /* e.g. print $fh 3 */
2765 else if (*s == '.' && isDIGIT(s[1]))
2766 PL_expect = XTERM; /* e.g. print $fh .3 */
2767 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
2768 PL_expect = XTERM; /* e.g. print $fh -1 */
2769 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
2770 PL_expect = XTERM; /* print $fh <<"EOF" */
2772 PL_pending_ident = '$';
2776 if (PL_expect == XOPERATOR)
2778 PL_tokenbuf[0] = '@';
2779 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
2780 if (!PL_tokenbuf[1]) {
2782 yyerror("Final @ should be \\@ or @name");
2785 if (PL_lex_state == LEX_NORMAL)
2787 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
2789 PL_tokenbuf[0] = '%';
2791 /* Warn about @ where they meant $. */
2792 if (ckWARN(WARN_SYNTAX)) {
2793 if (*s == '[' || *s == '{') {
2795 while (*t && (isALNUM_lazy(t) || strchr(" \t$#+-'\"", *t)))
2797 if (*t == '}' || *t == ']') {
2799 PL_bufptr = skipspace(PL_bufptr);
2800 Perl_warner(aTHX_ WARN_SYNTAX,
2801 "Scalar value %.*s better written as $%.*s",
2802 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
2807 PL_pending_ident = '@';
2810 case '/': /* may either be division or pattern */
2811 case '?': /* may either be conditional or pattern */
2812 if (PL_expect != XOPERATOR) {
2813 /* Disable warning on "study /blah/" */
2814 if (PL_oldoldbufptr == PL_last_uni
2815 && (*PL_last_uni != 's' || s - PL_last_uni < 5
2816 || memNE(PL_last_uni, "study", 5) || isALNUM_lazy(PL_last_uni+5)))
2818 s = scan_pat(s,OP_MATCH);
2819 TERM(sublex_start());
2827 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
2828 #ifdef PERL_STRICT_CR
2831 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
2833 && (s == PL_linestart || s[-1] == '\n') )
2835 PL_lex_formbrack = 0;
2839 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
2845 yylval.ival = OPf_SPECIAL;
2851 if (PL_expect != XOPERATOR)
2856 case '0': case '1': case '2': case '3': case '4':
2857 case '5': case '6': case '7': case '8': case '9':
2859 if (PL_expect == XOPERATOR)
2865 if (PL_expect == XOPERATOR) {
2866 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2869 return ','; /* grandfather non-comma-format format */
2875 missingterm((char*)0);
2876 yylval.ival = OP_CONST;
2877 TERM(sublex_start());
2881 if (PL_expect == XOPERATOR) {
2882 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
2885 return ','; /* grandfather non-comma-format format */
2891 missingterm((char*)0);
2892 yylval.ival = OP_CONST;
2893 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
2894 if (*d == '$' || *d == '@' || *d == '\\' || *d & 0x80) {
2895 yylval.ival = OP_STRINGIFY;
2899 TERM(sublex_start());
2903 if (PL_expect == XOPERATOR)
2904 no_op("Backticks",s);
2906 missingterm((char*)0);
2907 yylval.ival = OP_BACKTICK;
2909 TERM(sublex_start());
2913 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
2914 Perl_warner(aTHX_ WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
2916 if (PL_expect == XOPERATOR)
2917 no_op("Backslash",s);
2921 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
2961 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
2963 /* Some keywords can be followed by any delimiter, including ':' */
2964 tmp = (len == 1 && strchr("msyq", PL_tokenbuf[0]) ||
2965 len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
2966 (PL_tokenbuf[0] == 'q' &&
2967 strchr("qwxr", PL_tokenbuf[1]))));
2969 /* x::* is just a word, unless x is "CORE" */
2970 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
2974 while (d < PL_bufend && isSPACE(*d))
2975 d++; /* no comments skipped here, or s### is misparsed */
2977 /* Is this a label? */
2978 if (!tmp && PL_expect == XSTATE
2979 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
2981 yylval.pval = savepv(PL_tokenbuf);
2986 /* Check for keywords */
2987 tmp = keyword(PL_tokenbuf, len);
2989 /* Is this a word before a => operator? */
2990 if (strnEQ(d,"=>",2)) {
2992 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
2993 yylval.opval->op_private = OPpCONST_BARE;
2997 if (tmp < 0) { /* second-class keyword? */
2998 GV *ogv = Nullgv; /* override (winner) */
2999 GV *hgv = Nullgv; /* hidden (loser) */
3000 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
3002 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
3005 if (GvIMPORTED_CV(gv))
3007 else if (! CvMETHOD(cv))
3011 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3012 (gv = *gvp) != (GV*)&PL_sv_undef &&
3013 GvCVu(gv) && GvIMPORTED_CV(gv))
3019 tmp = 0; /* overridden by import or by GLOBAL */
3022 && -tmp==KEY_lock /* XXX generalizable kludge */
3023 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
3025 tmp = 0; /* any sub overrides "weak" keyword */
3027 else { /* no override */
3031 if (ckWARN(WARN_AMBIGUOUS) && hgv
3032 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
3033 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3034 "Ambiguous call resolved as CORE::%s(), %s",
3035 GvENAME(hgv), "qualify as such or use &");
3042 default: /* not a keyword */
3045 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
3047 /* Get the rest if it looks like a package qualifier */
3049 if (*s == '\'' || *s == ':' && s[1] == ':') {
3051 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
3054 Perl_croak(aTHX_ "Bad name after %s%s", PL_tokenbuf,
3055 *s == '\'' ? "'" : "::");
3059 if (PL_expect == XOPERATOR) {
3060 if (PL_bufptr == PL_linestart) {
3061 PL_curcop->cop_line--;
3062 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3063 PL_curcop->cop_line++;
3066 no_op("Bareword",s);
3069 /* Look for a subroutine with this name in current package,
3070 unless name is "Foo::", in which case Foo is a bearword
3071 (and a package name). */
3074 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3076 if (ckWARN(WARN_UNSAFE) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3077 Perl_warner(aTHX_ WARN_UNSAFE,
3078 "Bareword \"%s\" refers to nonexistent package",
3081 PL_tokenbuf[len] = '\0';
3088 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3091 /* if we saw a global override before, get the right name */
3094 sv = newSVpvn("CORE::GLOBAL::",14);
3095 sv_catpv(sv,PL_tokenbuf);
3098 sv = newSVpv(PL_tokenbuf,0);
3100 /* Presume this is going to be a bareword of some sort. */
3103 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3104 yylval.opval->op_private = OPpCONST_BARE;
3106 /* And if "Foo::", then that's what it certainly is. */
3111 /* See if it's the indirect object for a list operator. */
3113 if (PL_oldoldbufptr &&
3114 PL_oldoldbufptr < PL_bufptr &&
3115 (PL_oldoldbufptr == PL_last_lop || PL_oldoldbufptr == PL_last_uni) &&
3116 /* NO SKIPSPACE BEFORE HERE! */
3117 (PL_expect == XREF ||
3118 ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
3120 bool immediate_paren = *s == '(';
3122 /* (Now we can afford to cross potential line boundary.) */
3125 /* Two barewords in a row may indicate method call. */
3127 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp=intuit_method(s,gv)))
3130 /* If not a declared subroutine, it's an indirect object. */
3131 /* (But it's an indir obj regardless for sort.) */
3133 if ((PL_last_lop_op == OP_SORT ||
3134 (!immediate_paren && (!gv || !GvCVu(gv)))) &&
3135 (PL_last_lop_op != OP_MAPSTART &&
3136 PL_last_lop_op != OP_GREPSTART))
3138 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3143 /* If followed by a paren, it's certainly a subroutine. */
3145 PL_expect = XOPERATOR;
3149 if (gv && GvCVu(gv)) {
3150 for (d = s + 1; *d == ' ' || *d == '\t'; d++) ;
3151 if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
3156 PL_nextval[PL_nexttoke].opval = yylval.opval;
3157 PL_expect = XOPERATOR;
3163 /* If followed by var or block, call it a method (unless sub) */
3165 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
3166 PL_last_lop = PL_oldbufptr;
3167 PL_last_lop_op = OP_METHOD;
3171 /* If followed by a bareword, see if it looks like indir obj. */
3173 if ((isIDFIRST_lazy(s) || *s == '$') && (tmp = intuit_method(s,gv)))
3176 /* Not a method, so call it a subroutine (if defined) */
3178 if (gv && GvCVu(gv)) {
3180 if (lastchar == '-' && ckWARN_d(WARN_AMBIGUOUS))
3181 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3182 "Ambiguous use of -%s resolved as -&%s()",
3183 PL_tokenbuf, PL_tokenbuf);
3184 /* Check for a constant sub */
3186 if ((sv = cv_const_sv(cv))) {
3188 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
3189 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
3190 yylval.opval->op_private = 0;
3194 /* Resolve to GV now. */
3195 op_free(yylval.opval);
3196 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
3197 yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
3198 PL_last_lop = PL_oldbufptr;
3199 PL_last_lop_op = OP_ENTERSUB;
3200 /* Is there a prototype? */
3203 char *proto = SvPV((SV*)cv, len);
3206 if (strEQ(proto, "$"))
3208 if (*proto == '&' && *s == '{') {
3209 sv_setpv(PL_subname,"__ANON__");
3213 PL_nextval[PL_nexttoke].opval = yylval.opval;
3219 /* Call it a bare word */
3221 if (PL_hints & HINT_STRICT_SUBS)
3222 yylval.opval->op_private |= OPpCONST_STRICT;
3225 if (ckWARN(WARN_RESERVED)) {
3226 if (lastchar != '-') {
3227 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
3229 Perl_warner(aTHX_ WARN_RESERVED, PL_warn_reserved,
3236 if (lastchar && strchr("*%&", lastchar) && ckWARN_d(WARN_AMBIGUOUS)) {
3237 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3238 "Operator or semicolon missing before %c%s",
3239 lastchar, PL_tokenbuf);
3240 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3241 "Ambiguous use of %c resolved as operator %c",
3242 lastchar, lastchar);
3248 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3249 newSVsv(GvSV(PL_curcop->cop_filegv)));
3253 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3254 Perl_newSVpvf(aTHX_ "%ld", (long)PL_curcop->cop_line));
3257 case KEY___PACKAGE__:
3258 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
3260 ? newSVsv(PL_curstname)
3269 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
3270 char *pname = "main";
3271 if (PL_tokenbuf[2] == 'D')
3272 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
3273 gv = gv_fetchpv(Perl_form(aTHX_ "%s::DATA", pname), TRUE, SVt_PVIO);
3276 GvIOp(gv) = newIO();
3277 IoIFP(GvIOp(gv)) = PL_rsfp;
3278 #if defined(HAS_FCNTL) && defined(F_SETFD)
3280 int fd = PerlIO_fileno(PL_rsfp);
3281 fcntl(fd,F_SETFD,fd >= 3);
3284 /* Mark this internal pseudo-handle as clean */
3285 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
3287 IoTYPE(GvIOp(gv)) = '|';
3288 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
3289 IoTYPE(GvIOp(gv)) = '-';
3291 IoTYPE(GvIOp(gv)) = '<';
3302 if (PL_expect == XSTATE) {
3309 if (*s == ':' && s[1] == ':') {
3312 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3313 tmp = keyword(PL_tokenbuf, len);
3327 LOP(OP_ACCEPT,XTERM);
3333 LOP(OP_ATAN2,XTERM);
3342 LOP(OP_BLESS,XTERM);
3351 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
3368 if (!PL_cryptseen++)
3371 LOP(OP_CRYPT,XTERM);
3374 if (ckWARN(WARN_OCTAL)) {
3375 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
3376 if (*d != '0' && isDIGIT(*d))
3377 yywarn("chmod: mode argument is missing initial 0");
3379 LOP(OP_CHMOD,XTERM);
3382 LOP(OP_CHOWN,XTERM);
3385 LOP(OP_CONNECT,XTERM);
3401 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3405 PL_hints |= HINT_BLOCK_SCOPE;
3415 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
3416 LOP(OP_DBMOPEN,XTERM);
3422 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3429 yylval.ival = PL_curcop->cop_line;
3443 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
3444 UNIBRACK(OP_ENTEREVAL);
3459 case KEY_endhostent:
3465 case KEY_endservent:
3468 case KEY_endprotoent:
3479 yylval.ival = PL_curcop->cop_line;
3481 if (PL_expect == XSTATE && isIDFIRST_lazy(s)) {
3483 if ((PL_bufend - p) >= 3 &&
3484 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
3487 if (isIDFIRST_lazy(p))
3488 Perl_croak(aTHX_ "Missing $ on loop variable");
3493 LOP(OP_FORMLINE,XTERM);
3499 LOP(OP_FCNTL,XTERM);
3505 LOP(OP_FLOCK,XTERM);
3514 LOP(OP_GREPSTART, *s == '(' ? XTERM : XREF);
3517 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3532 case KEY_getpriority:
3533 LOP(OP_GETPRIORITY,XTERM);
3535 case KEY_getprotobyname:
3538 case KEY_getprotobynumber:
3539 LOP(OP_GPBYNUMBER,XTERM);
3541 case KEY_getprotoent:
3553 case KEY_getpeername:
3554 UNI(OP_GETPEERNAME);
3556 case KEY_gethostbyname:
3559 case KEY_gethostbyaddr:
3560 LOP(OP_GHBYADDR,XTERM);
3562 case KEY_gethostent:
3565 case KEY_getnetbyname:
3568 case KEY_getnetbyaddr:
3569 LOP(OP_GNBYADDR,XTERM);
3574 case KEY_getservbyname:
3575 LOP(OP_GSBYNAME,XTERM);
3577 case KEY_getservbyport:
3578 LOP(OP_GSBYPORT,XTERM);
3580 case KEY_getservent:
3583 case KEY_getsockname:
3584 UNI(OP_GETSOCKNAME);
3586 case KEY_getsockopt:
3587 LOP(OP_GSOCKOPT,XTERM);
3609 yylval.ival = PL_curcop->cop_line;
3613 LOP(OP_INDEX,XTERM);
3619 LOP(OP_IOCTL,XTERM);
3631 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3662 LOP(OP_LISTEN,XTERM);
3671 s = scan_pat(s,OP_MATCH);
3672 TERM(sublex_start());
3675 LOP(OP_MAPSTART, *s == '(' ? XTERM : XREF);
3678 LOP(OP_MKDIR,XTERM);
3681 LOP(OP_MSGCTL,XTERM);
3684 LOP(OP_MSGGET,XTERM);
3687 LOP(OP_MSGRCV,XTERM);
3690 LOP(OP_MSGSND,XTERM);
3695 if (isIDFIRST_lazy(s)) {
3696 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
3697 PL_in_my_stash = gv_stashpv(PL_tokenbuf, FALSE);
3698 if (!PL_in_my_stash) {
3701 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
3708 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3715 if (PL_expect != XSTATE)
3716 yyerror("\"no\" not allowed in expression");
3717 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3718 s = force_version(s);
3727 if (isIDFIRST_lazy(s)) {
3729 for (d = s; isALNUM_lazy(d); d++) ;
3731 if (strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_AMBIGUOUS))
3732 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3733 "Precedence problem: open %.*s should be open(%.*s)",
3739 yylval.ival = OP_OR;
3749 LOP(OP_OPEN_DIR,XTERM);
3752 checkcomma(s,PL_tokenbuf,"filehandle");
3756 checkcomma(s,PL_tokenbuf,"filehandle");
3775 s = force_word(s,WORD,FALSE,TRUE,FALSE);
3779 LOP(OP_PIPE_OP,XTERM);
3784 missingterm((char*)0);
3785 yylval.ival = OP_CONST;
3786 TERM(sublex_start());
3794 missingterm((char*)0);
3796 if (SvCUR(PL_lex_stuff)) {
3799 d = SvPV_force(PL_lex_stuff, len);
3801 for (; isSPACE(*d) && len; --len, ++d) ;
3804 if (!warned && ckWARN(WARN_SYNTAX)) {
3805 for (; !isSPACE(*d) && len; --len, ++d) {
3807 Perl_warner(aTHX_ WARN_SYNTAX,
3808 "Possible attempt to separate words with commas");
3811 else if (*d == '#') {
3812 Perl_warner(aTHX_ WARN_SYNTAX,
3813 "Possible attempt to put comments in qw() list");
3819 for (; !isSPACE(*d) && len; --len, ++d) ;
3821 words = append_elem(OP_LIST, words,
3822 newSVOP(OP_CONST, 0, newSVpvn(b, d-b)));
3826 PL_nextval[PL_nexttoke].opval = words;
3831 SvREFCNT_dec(PL_lex_stuff);
3832 PL_lex_stuff = Nullsv;
3839 missingterm((char*)0);
3840 yylval.ival = OP_STRINGIFY;
3841 if (SvIVX(PL_lex_stuff) == '\'')
3842 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
3843 TERM(sublex_start());
3846 s = scan_pat(s,OP_QR);
3847 TERM(sublex_start());
3852 missingterm((char*)0);
3853 yylval.ival = OP_BACKTICK;
3855 TERM(sublex_start());
3861 *PL_tokenbuf = '\0';
3862 s = force_word(s,WORD,TRUE,TRUE,FALSE);
3863 if (isIDFIRST_lazy(PL_tokenbuf))
3864 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
3866 yyerror("<> should be quotes");
3873 s = force_word(s,WORD,TRUE,FALSE,FALSE);
3877 LOP(OP_RENAME,XTERM);
3886 LOP(OP_RINDEX,XTERM);
3909 LOP(OP_REVERSE,XTERM);
3920 TERM(sublex_start());
3922 TOKEN(1); /* force error */
3931 LOP(OP_SELECT,XTERM);
3937 LOP(OP_SEMCTL,XTERM);
3940 LOP(OP_SEMGET,XTERM);
3943 LOP(OP_SEMOP,XTERM);
3949 LOP(OP_SETPGRP,XTERM);
3951 case KEY_setpriority:
3952 LOP(OP_SETPRIORITY,XTERM);
3954 case KEY_sethostent:
3960 case KEY_setservent:
3963 case KEY_setprotoent:
3973 LOP(OP_SEEKDIR,XTERM);
3975 case KEY_setsockopt:
3976 LOP(OP_SSOCKOPT,XTERM);
3982 LOP(OP_SHMCTL,XTERM);
3985 LOP(OP_SHMGET,XTERM);
3988 LOP(OP_SHMREAD,XTERM);
3991 LOP(OP_SHMWRITE,XTERM);
3994 LOP(OP_SHUTDOWN,XTERM);
4003 LOP(OP_SOCKET,XTERM);
4005 case KEY_socketpair:
4006 LOP(OP_SOCKPAIR,XTERM);
4009 checkcomma(s,PL_tokenbuf,"subroutine name");
4011 if (*s == ';' || *s == ')') /* probably a close */
4012 Perl_croak(aTHX_ "sort is now a reserved word");
4014 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4018 LOP(OP_SPLIT,XTERM);
4021 LOP(OP_SPRINTF,XTERM);
4024 LOP(OP_SPLICE,XTERM);
4040 LOP(OP_SUBSTR,XTERM);
4047 if (isIDFIRST_lazy(s) || *s == '\'' || *s == ':') {
4048 char tmpbuf[sizeof PL_tokenbuf];
4050 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4051 if (strchr(tmpbuf, ':'))
4052 sv_setpv(PL_subname, tmpbuf);
4054 sv_setsv(PL_subname,PL_curstname);
4055 sv_catpvn(PL_subname,"::",2);
4056 sv_catpvn(PL_subname,tmpbuf,len);
4058 s = force_word(s,WORD,FALSE,TRUE,TRUE);
4062 PL_expect = XTERMBLOCK;
4063 sv_setpv(PL_subname,"?");
4066 if (tmp == KEY_format) {
4069 PL_lex_formbrack = PL_lex_brackets + 1;
4073 /* Look for a prototype */
4080 SvREFCNT_dec(PL_lex_stuff);
4081 PL_lex_stuff = Nullsv;
4082 Perl_croak(aTHX_ "Prototype not terminated");
4085 d = SvPVX(PL_lex_stuff);
4087 for (p = d; *p; ++p) {
4092 SvCUR(PL_lex_stuff) = tmp;
4095 PL_nextval[1] = PL_nextval[0];
4096 PL_nexttype[1] = PL_nexttype[0];
4097 PL_nextval[0].opval = (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
4098 PL_nexttype[0] = THING;
4099 if (PL_nexttoke == 1) {
4100 PL_lex_defer = PL_lex_state;
4101 PL_lex_expect = PL_expect;
4102 PL_lex_state = LEX_KNOWNEXT;
4104 PL_lex_stuff = Nullsv;
4107 if (*SvPV(PL_subname,n_a) == '?') {
4108 sv_setpv(PL_subname,"__ANON__");
4115 LOP(OP_SYSTEM,XREF);
4118 LOP(OP_SYMLINK,XTERM);
4121 LOP(OP_SYSCALL,XTERM);
4124 LOP(OP_SYSOPEN,XTERM);
4127 LOP(OP_SYSSEEK,XTERM);
4130 LOP(OP_SYSREAD,XTERM);
4133 LOP(OP_SYSWRITE,XTERM);
4137 TERM(sublex_start());
4158 LOP(OP_TRUNCATE,XTERM);
4170 yylval.ival = PL_curcop->cop_line;
4174 yylval.ival = PL_curcop->cop_line;
4178 LOP(OP_UNLINK,XTERM);
4184 LOP(OP_UNPACK,XTERM);
4187 LOP(OP_UTIME,XTERM);
4190 if (ckWARN(WARN_OCTAL)) {
4191 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4192 if (*d != '0' && isDIGIT(*d))
4193 yywarn("umask: argument is missing initial 0");
4198 LOP(OP_UNSHIFT,XTERM);
4201 if (PL_expect != XSTATE)
4202 yyerror("\"use\" not allowed in expression");
4205 s = force_version(s);
4206 if(*s == ';' || (s = skipspace(s), *s == ';')) {
4207 PL_nextval[PL_nexttoke].opval = Nullop;
4212 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4213 s = force_version(s);
4226 yylval.ival = PL_curcop->cop_line;
4230 PL_hints |= HINT_BLOCK_SCOPE;
4237 LOP(OP_WAITPID,XTERM);
4245 static char ctl_l[2];
4247 if (ctl_l[0] == '\0')
4248 ctl_l[0] = toCTRL('L');
4249 gv_fetchpv(ctl_l,TRUE, SVt_PV);
4252 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
4257 if (PL_expect == XOPERATOR)
4263 yylval.ival = OP_XOR;
4268 TERM(sublex_start());
4274 Perl_keyword(pTHX_ register char *d, I32 len)
4279 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
4280 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
4281 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
4282 if (strEQ(d,"__DATA__")) return KEY___DATA__;
4283 if (strEQ(d,"__END__")) return KEY___END__;
4287 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
4292 if (strEQ(d,"and")) return -KEY_and;
4293 if (strEQ(d,"abs")) return -KEY_abs;
4296 if (strEQ(d,"alarm")) return -KEY_alarm;
4297 if (strEQ(d,"atan2")) return -KEY_atan2;
4300 if (strEQ(d,"accept")) return -KEY_accept;
4305 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
4308 if (strEQ(d,"bless")) return -KEY_bless;
4309 if (strEQ(d,"bind")) return -KEY_bind;
4310 if (strEQ(d,"binmode")) return -KEY_binmode;
4313 if (strEQ(d,"CORE")) return -KEY_CORE;
4318 if (strEQ(d,"cmp")) return -KEY_cmp;
4319 if (strEQ(d,"chr")) return -KEY_chr;
4320 if (strEQ(d,"cos")) return -KEY_cos;
4323 if (strEQ(d,"chop")) return KEY_chop;
4326 if (strEQ(d,"close")) return -KEY_close;
4327 if (strEQ(d,"chdir")) return -KEY_chdir;
4328 if (strEQ(d,"chomp")) return KEY_chomp;
4329 if (strEQ(d,"chmod")) return -KEY_chmod;
4330 if (strEQ(d,"chown")) return -KEY_chown;
4331 if (strEQ(d,"crypt")) return -KEY_crypt;
4334 if (strEQ(d,"chroot")) return -KEY_chroot;
4335 if (strEQ(d,"caller")) return -KEY_caller;
4338 if (strEQ(d,"connect")) return -KEY_connect;
4341 if (strEQ(d,"closedir")) return -KEY_closedir;
4342 if (strEQ(d,"continue")) return -KEY_continue;
4347 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
4352 if (strEQ(d,"do")) return KEY_do;
4355 if (strEQ(d,"die")) return -KEY_die;
4358 if (strEQ(d,"dump")) return -KEY_dump;
4361 if (strEQ(d,"delete")) return KEY_delete;
4364 if (strEQ(d,"defined")) return KEY_defined;
4365 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
4368 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
4373 if (strEQ(d,"EQ")) { deprecate(d); return -KEY_eq;}
4374 if (strEQ(d,"END")) return KEY_END;
4379 if (strEQ(d,"eq")) return -KEY_eq;
4382 if (strEQ(d,"eof")) return -KEY_eof;
4383 if (strEQ(d,"exp")) return -KEY_exp;
4386 if (strEQ(d,"else")) return KEY_else;
4387 if (strEQ(d,"exit")) return -KEY_exit;
4388 if (strEQ(d,"eval")) return KEY_eval;
4389 if (strEQ(d,"exec")) return -KEY_exec;
4390 if (strEQ(d,"each")) return KEY_each;
4393 if (strEQ(d,"elsif")) return KEY_elsif;
4396 if (strEQ(d,"exists")) return KEY_exists;
4397 if (strEQ(d,"elseif")) Perl_warn(aTHX_ "elseif should be elsif");
4400 if (strEQ(d,"endgrent")) return -KEY_endgrent;
4401 if (strEQ(d,"endpwent")) return -KEY_endpwent;
4404 if (strEQ(d,"endnetent")) return -KEY_endnetent;
4407 if (strEQ(d,"endhostent")) return -KEY_endhostent;
4408 if (strEQ(d,"endservent")) return -KEY_endservent;
4411 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
4418 if (strEQ(d,"for")) return KEY_for;
4421 if (strEQ(d,"fork")) return -KEY_fork;
4424 if (strEQ(d,"fcntl")) return -KEY_fcntl;
4425 if (strEQ(d,"flock")) return -KEY_flock;
4428 if (strEQ(d,"format")) return KEY_format;
4429 if (strEQ(d,"fileno")) return -KEY_fileno;
4432 if (strEQ(d,"foreach")) return KEY_foreach;
4435 if (strEQ(d,"formline")) return -KEY_formline;
4441 if (strEQ(d,"GT")) { deprecate(d); return -KEY_gt;}
4442 if (strEQ(d,"GE")) { deprecate(d); return -KEY_ge;}
4446 if (strnEQ(d,"get",3)) {
4451 if (strEQ(d,"ppid")) return -KEY_getppid;
4452 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
4455 if (strEQ(d,"pwent")) return -KEY_getpwent;
4456 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
4457 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
4460 if (strEQ(d,"peername")) return -KEY_getpeername;
4461 if (strEQ(d,"protoent")) return -KEY_getprotoent;
4462 if (strEQ(d,"priority")) return -KEY_getpriority;
4465 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
4468 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
4472 else if (*d == 'h') {
4473 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
4474 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
4475 if (strEQ(d,"hostent")) return -KEY_gethostent;
4477 else if (*d == 'n') {
4478 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
4479 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
4480 if (strEQ(d,"netent")) return -KEY_getnetent;
4482 else if (*d == 's') {
4483 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
4484 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
4485 if (strEQ(d,"servent")) return -KEY_getservent;
4486 if (strEQ(d,"sockname")) return -KEY_getsockname;
4487 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
4489 else if (*d == 'g') {
4490 if (strEQ(d,"grent")) return -KEY_getgrent;
4491 if (strEQ(d,"grnam")) return -KEY_getgrnam;
4492 if (strEQ(d,"grgid")) return -KEY_getgrgid;
4494 else if (*d == 'l') {
4495 if (strEQ(d,"login")) return -KEY_getlogin;
4497 else if (strEQ(d,"c")) return -KEY_getc;
4502 if (strEQ(d,"gt")) return -KEY_gt;
4503 if (strEQ(d,"ge")) return -KEY_ge;
4506 if (strEQ(d,"grep")) return KEY_grep;
4507 if (strEQ(d,"goto")) return KEY_goto;
4508 if (strEQ(d,"glob")) return KEY_glob;
4511 if (strEQ(d,"gmtime")) return -KEY_gmtime;
4516 if (strEQ(d,"hex")) return -KEY_hex;
4519 if (strEQ(d,"INIT")) return KEY_INIT;
4524 if (strEQ(d,"if")) return KEY_if;
4527 if (strEQ(d,"int")) return -KEY_int;
4530 if (strEQ(d,"index")) return -KEY_index;
4531 if (strEQ(d,"ioctl")) return -KEY_ioctl;
4536 if (strEQ(d,"join")) return -KEY_join;
4540 if (strEQ(d,"keys")) return KEY_keys;
4541 if (strEQ(d,"kill")) return -KEY_kill;
4546 if (strEQ(d,"LT")) { deprecate(d); return -KEY_lt;}
4547 if (strEQ(d,"LE")) { deprecate(d); return -KEY_le;}
4553 if (strEQ(d,"lt")) return -KEY_lt;
4554 if (strEQ(d,"le")) return -KEY_le;
4555 if (strEQ(d,"lc")) return -KEY_lc;
4558 if (strEQ(d,"log")) return -KEY_log;
4561 if (strEQ(d,"last")) return KEY_last;
4562 if (strEQ(d,"link")) return -KEY_link;
4563 if (strEQ(d,"lock")) return -KEY_lock;
4566 if (strEQ(d,"local")) return KEY_local;
4567 if (strEQ(d,"lstat")) return -KEY_lstat;
4570 if (strEQ(d,"length")) return -KEY_length;
4571 if (strEQ(d,"listen")) return -KEY_listen;
4574 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
4577 if (strEQ(d,"localtime")) return -KEY_localtime;
4583 case 1: return KEY_m;
4585 if (strEQ(d,"my")) return KEY_my;
4588 if (strEQ(d,"map")) return KEY_map;
4591 if (strEQ(d,"mkdir")) return -KEY_mkdir;
4594 if (strEQ(d,"msgctl")) return -KEY_msgctl;
4595 if (strEQ(d,"msgget")) return -KEY_msgget;
4596 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
4597 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
4602 if (strEQ(d,"NE")) { deprecate(d); return -KEY_ne;}
4605 if (strEQ(d,"next")) return KEY_next;
4606 if (strEQ(d,"ne")) return -KEY_ne;
4607 if (strEQ(d,"not")) return -KEY_not;
4608 if (strEQ(d,"no")) return KEY_no;
4613 if (strEQ(d,"or")) return -KEY_or;
4616 if (strEQ(d,"ord")) return -KEY_ord;
4617 if (strEQ(d,"oct")) return -KEY_oct;
4618 if (strEQ(d,"our")) { deprecate("reserved word \"our\"");
4622 if (strEQ(d,"open")) return -KEY_open;
4625 if (strEQ(d,"opendir")) return -KEY_opendir;
4632 if (strEQ(d,"pop")) return KEY_pop;
4633 if (strEQ(d,"pos")) return KEY_pos;
4636 if (strEQ(d,"push")) return KEY_push;
4637 if (strEQ(d,"pack")) return -KEY_pack;
4638 if (strEQ(d,"pipe")) return -KEY_pipe;
4641 if (strEQ(d,"print")) return KEY_print;
4644 if (strEQ(d,"printf")) return KEY_printf;
4647 if (strEQ(d,"package")) return KEY_package;
4650 if (strEQ(d,"prototype")) return KEY_prototype;
4655 if (strEQ(d,"q")) return KEY_q;
4656 if (strEQ(d,"qr")) return KEY_qr;
4657 if (strEQ(d,"qq")) return KEY_qq;
4658 if (strEQ(d,"qw")) return KEY_qw;
4659 if (strEQ(d,"qx")) return KEY_qx;
4661 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
4666 if (strEQ(d,"ref")) return -KEY_ref;
4669 if (strEQ(d,"read")) return -KEY_read;
4670 if (strEQ(d,"rand")) return -KEY_rand;
4671 if (strEQ(d,"recv")) return -KEY_recv;
4672 if (strEQ(d,"redo")) return KEY_redo;
4675 if (strEQ(d,"rmdir")) return -KEY_rmdir;
4676 if (strEQ(d,"reset")) return -KEY_reset;
4679 if (strEQ(d,"return")) return KEY_return;
4680 if (strEQ(d,"rename")) return -KEY_rename;
4681 if (strEQ(d,"rindex")) return -KEY_rindex;
4684 if (strEQ(d,"require")) return -KEY_require;
4685 if (strEQ(d,"reverse")) return -KEY_reverse;
4686 if (strEQ(d,"readdir")) return -KEY_readdir;
4689 if (strEQ(d,"readlink")) return -KEY_readlink;
4690 if (strEQ(d,"readline")) return -KEY_readline;
4691 if (strEQ(d,"readpipe")) return -KEY_readpipe;
4694 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
4700 case 0: return KEY_s;
4702 if (strEQ(d,"scalar")) return KEY_scalar;
4707 if (strEQ(d,"seek")) return -KEY_seek;
4708 if (strEQ(d,"send")) return -KEY_send;
4711 if (strEQ(d,"semop")) return -KEY_semop;
4714 if (strEQ(d,"select")) return -KEY_select;
4715 if (strEQ(d,"semctl")) return -KEY_semctl;
4716 if (strEQ(d,"semget")) return -KEY_semget;
4719 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
4720 if (strEQ(d,"seekdir")) return -KEY_seekdir;
4723 if (strEQ(d,"setpwent")) return -KEY_setpwent;
4724 if (strEQ(d,"setgrent")) return -KEY_setgrent;
4727 if (strEQ(d,"setnetent")) return -KEY_setnetent;
4730 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
4731 if (strEQ(d,"sethostent")) return -KEY_sethostent;
4732 if (strEQ(d,"setservent")) return -KEY_setservent;
4735 if (strEQ(d,"setpriority")) return -KEY_setpriority;
4736 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
4743 if (strEQ(d,"shift")) return KEY_shift;
4746 if (strEQ(d,"shmctl")) return -KEY_shmctl;
4747 if (strEQ(d,"shmget")) return -KEY_shmget;
4750 if (strEQ(d,"shmread")) return -KEY_shmread;
4753 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
4754 if (strEQ(d,"shutdown")) return -KEY_shutdown;
4759 if (strEQ(d,"sin")) return -KEY_sin;
4762 if (strEQ(d,"sleep")) return -KEY_sleep;
4765 if (strEQ(d,"sort")) return KEY_sort;
4766 if (strEQ(d,"socket")) return -KEY_socket;
4767 if (strEQ(d,"socketpair")) return -KEY_socketpair;
4770 if (strEQ(d,"split")) return KEY_split;
4771 if (strEQ(d,"sprintf")) return -KEY_sprintf;
4772 if (strEQ(d,"splice")) return KEY_splice;
4775 if (strEQ(d,"sqrt")) return -KEY_sqrt;
4778 if (strEQ(d,"srand")) return -KEY_srand;
4781 if (strEQ(d,"stat")) return -KEY_stat;
4782 if (strEQ(d,"study")) return KEY_study;
4785 if (strEQ(d,"substr")) return -KEY_substr;
4786 if (strEQ(d,"sub")) return KEY_sub;
4791 if (strEQ(d,"system")) return -KEY_system;
4794 if (strEQ(d,"symlink")) return -KEY_symlink;
4795 if (strEQ(d,"syscall")) return -KEY_syscall;
4796 if (strEQ(d,"sysopen")) return -KEY_sysopen;
4797 if (strEQ(d,"sysread")) return -KEY_sysread;
4798 if (strEQ(d,"sysseek")) return -KEY_sysseek;
4801 if (strEQ(d,"syswrite")) return -KEY_syswrite;
4810 if (strEQ(d,"tr")) return KEY_tr;
4813 if (strEQ(d,"tie")) return KEY_tie;
4816 if (strEQ(d,"tell")) return -KEY_tell;
4817 if (strEQ(d,"tied")) return KEY_tied;
4818 if (strEQ(d,"time")) return -KEY_time;
4821 if (strEQ(d,"times")) return -KEY_times;
4824 if (strEQ(d,"telldir")) return -KEY_telldir;
4827 if (strEQ(d,"truncate")) return -KEY_truncate;
4834 if (strEQ(d,"uc")) return -KEY_uc;
4837 if (strEQ(d,"use")) return KEY_use;
4840 if (strEQ(d,"undef")) return KEY_undef;
4841 if (strEQ(d,"until")) return KEY_until;
4842 if (strEQ(d,"untie")) return KEY_untie;
4843 if (strEQ(d,"utime")) return -KEY_utime;
4844 if (strEQ(d,"umask")) return -KEY_umask;
4847 if (strEQ(d,"unless")) return KEY_unless;
4848 if (strEQ(d,"unpack")) return -KEY_unpack;
4849 if (strEQ(d,"unlink")) return -KEY_unlink;
4852 if (strEQ(d,"unshift")) return KEY_unshift;
4853 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
4858 if (strEQ(d,"values")) return -KEY_values;
4859 if (strEQ(d,"vec")) return -KEY_vec;
4864 if (strEQ(d,"warn")) return -KEY_warn;
4865 if (strEQ(d,"wait")) return -KEY_wait;
4868 if (strEQ(d,"while")) return KEY_while;
4869 if (strEQ(d,"write")) return -KEY_write;
4872 if (strEQ(d,"waitpid")) return -KEY_waitpid;
4875 if (strEQ(d,"wantarray")) return -KEY_wantarray;
4880 if (len == 1) return -KEY_x;
4881 if (strEQ(d,"xor")) return -KEY_xor;
4884 if (len == 1) return KEY_y;
4893 S_checkcomma(pTHX_ register char *s, char *name, char *what)
4897 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
4898 dTHR; /* only for ckWARN */
4899 if (ckWARN(WARN_SYNTAX)) {
4901 for (w = s+2; *w && level; w++) {
4908 for (; *w && isSPACE(*w); w++) ;
4909 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
4910 Perl_warner(aTHX_ WARN_SYNTAX, "%s (...) interpreted as function",name);
4913 while (s < PL_bufend && isSPACE(*s))
4917 while (s < PL_bufend && isSPACE(*s))
4919 if (isIDFIRST_lazy(s)) {
4921 while (isALNUM_lazy(s))
4923 while (s < PL_bufend && isSPACE(*s))
4928 kw = keyword(w, s - w) || get_cv(w, FALSE) != 0;
4932 Perl_croak(aTHX_ "No comma allowed after %s", what);
4938 S_new_constant(pTHX_ char *s, STRLEN len, char *key, SV *sv, SV *pv, char *type)
4941 HV *table = GvHV(PL_hintgv); /* ^H */
4944 bool oldcatch = CATCH_GET;
4949 yyerror("%^H is not defined");
4952 cvp = hv_fetch(table, key, strlen(key), FALSE);
4953 if (!cvp || !SvOK(*cvp)) {
4955 sprintf(buf,"$^H{%s} is not defined", key);
4959 sv_2mortal(sv); /* Parent created it permanently */
4962 pv = sv_2mortal(newSVpvn(s, len));
4964 typesv = sv_2mortal(newSVpv(type, 0));
4966 typesv = &PL_sv_undef;
4968 Zero(&myop, 1, BINOP);
4969 myop.op_last = (OP *) &myop;
4970 myop.op_next = Nullop;
4971 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
4973 PUSHSTACKi(PERLSI_OVERLOAD);
4976 PL_op = (OP *) &myop;
4977 if (PERLDB_SUB && PL_curstash != PL_debstash)
4978 PL_op->op_private |= OPpENTERSUB_DB;
4980 Perl_pp_pushmark(aTHX);
4989 if (PL_op = Perl_pp_entersub(aTHX))
4996 CATCH_SET(oldcatch);
5001 sprintf(buf,"Call to &{$^H{%s}} did not return a defined value", key);
5004 return SvREFCNT_inc(res);
5008 S_scan_word(pTHX_ register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
5010 register char *d = dest;
5011 register char *e = d + destlen - 3; /* two-character token, ending NUL */
5014 Perl_croak(aTHX_ ident_too_long);
5015 if (isALNUM(*s)) /* UTF handled below */
5017 else if (*s == '\'' && allow_package && isIDFIRST_lazy(s+1)) {
5022 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
5026 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5027 char *t = s + UTF8SKIP(s);
5028 while (*t & 0x80 && is_utf8_mark((U8*)t))
5030 if (d + (t - s) > e)
5031 Perl_croak(aTHX_ ident_too_long);
5032 Copy(s, d, t - s, char);
5045 S_scan_ident(pTHX_ register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
5052 if (PL_lex_brackets == 0)
5053 PL_lex_fakebrack = 0;
5057 e = d + destlen - 3; /* two-character token, ending NUL */
5059 while (isDIGIT(*s)) {
5061 Perl_croak(aTHX_ ident_too_long);
5068 Perl_croak(aTHX_ ident_too_long);
5069 if (isALNUM(*s)) /* UTF handled below */
5071 else if (*s == '\'' && isIDFIRST_lazy(s+1)) {
5076 else if (*s == ':' && s[1] == ':') {
5080 else if (UTF && *(U8*)s >= 0xc0 && isALNUM_utf8((U8*)s)) {
5081 char *t = s + UTF8SKIP(s);
5082 while (*t & 0x80 && is_utf8_mark((U8*)t))
5084 if (d + (t - s) > e)
5085 Perl_croak(aTHX_ ident_too_long);
5086 Copy(s, d, t - s, char);
5097 if (PL_lex_state != LEX_NORMAL)
5098 PL_lex_state = LEX_INTERPENDMAYBE;
5101 if (*s == '$' && s[1] &&
5102 (isALNUM_lazy(s+1) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
5115 if (*d == '^' && *s && isCONTROLVAR(*s)) {
5120 if (isSPACE(s[-1])) {
5123 if (ch != ' ' && ch != '\t') {
5129 if (isIDFIRST_lazy(d)) {
5133 while (e < send && isALNUM_lazy(e) || *e == ':') {
5135 while (e < send && *e & 0x80 && is_utf8_mark((U8*)e))
5138 Copy(s, d, e - s, char);
5143 while ((isALNUM(*s) || *s == ':') && d < e)
5146 Perl_croak(aTHX_ ident_too_long);
5149 while (s < send && (*s == ' ' || *s == '\t')) s++;
5150 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
5151 dTHR; /* only for ckWARN */
5152 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
5153 char *brack = *s == '[' ? "[...]" : "{...}";
5154 Perl_warner(aTHX_ WARN_AMBIGUOUS,
5155 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
5156 funny, dest, brack, funny, dest, brack);
5158 PL_lex_fakebrack = PL_lex_brackets+1;
5160 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
5164 /* Handle extended ${^Foo} variables
5165 * 1999-02-27 mjd-perl-patch@plover.com */
5166 else if (!isALNUM(*d) && !isPRINT(*d) /* isCTRL(d) */
5170 while (isALNUM(*s) && d < e) {
5174 Perl_croak(aTHX_ ident_too_long);
5179 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
5180 PL_lex_state = LEX_INTERPEND;
5183 if (PL_lex_state == LEX_NORMAL) {
5184 dTHR; /* only for ckWARN */
5185 if (ckWARN(WARN_AMBIGUOUS) &&
5186 (keyword(dest, d - dest) || get_cv(dest, FALSE)))
5188 Perl_warner(aTHX_ WARN_AMBIGUOUS,
5189 "Ambiguous use of %c{%s} resolved to %c%s",
5190 funny, dest, funny, dest);
5195 s = bracket; /* let the parser handle it */
5199 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
5200 PL_lex_state = LEX_INTERPEND;
5205 Perl_pmflag(pTHX_ U16 *pmfl, int ch)
5210 *pmfl |= PMf_GLOBAL;
5212 *pmfl |= PMf_CONTINUE;
5216 *pmfl |= PMf_MULTILINE;
5218 *pmfl |= PMf_SINGLELINE;
5220 *pmfl |= PMf_EXTENDED;
5224 S_scan_pat(pTHX_ char *start, I32 type)
5229 s = scan_str(start);
5232 SvREFCNT_dec(PL_lex_stuff);
5233 PL_lex_stuff = Nullsv;
5234 Perl_croak(aTHX_ "Search pattern not terminated");
5237 pm = (PMOP*)newPMOP(type, 0);
5238 if (PL_multi_open == '?')
5239 pm->op_pmflags |= PMf_ONCE;
5241 while (*s && strchr("iomsx", *s))
5242 pmflag(&pm->op_pmflags,*s++);
5245 while (*s && strchr("iogcmsx", *s))
5246 pmflag(&pm->op_pmflags,*s++);
5248 pm->op_pmpermflags = pm->op_pmflags;
5250 PL_lex_op = (OP*)pm;
5251 yylval.ival = OP_MATCH;
5256 S_scan_subst(pTHX_ char *start)
5263 yylval.ival = OP_NULL;
5265 s = scan_str(start);
5269 SvREFCNT_dec(PL_lex_stuff);
5270 PL_lex_stuff = Nullsv;
5271 Perl_croak(aTHX_ "Substitution pattern not terminated");
5274 if (s[-1] == PL_multi_open)
5277 first_start = PL_multi_start;
5281 SvREFCNT_dec(PL_lex_stuff);
5282 PL_lex_stuff = Nullsv;
5284 SvREFCNT_dec(PL_lex_repl);
5285 PL_lex_repl = Nullsv;
5286 Perl_croak(aTHX_ "Substitution replacement not terminated");
5288 PL_multi_start = first_start; /* so whole substitution is taken together */
5290 pm = (PMOP*)newPMOP(OP_SUBST, 0);
5296 else if (strchr("iogcmsx", *s))
5297 pmflag(&pm->op_pmflags,*s++);
5304 PL_sublex_info.super_bufptr = s;
5305 PL_sublex_info.super_bufend = PL_bufend;
5307 pm->op_pmflags |= PMf_EVAL;
5308 repl = newSVpvn("",0);
5310 sv_catpv(repl, es ? "eval " : "do ");
5311 sv_catpvn(repl, "{ ", 2);
5312 sv_catsv(repl, PL_lex_repl);
5313 sv_catpvn(repl, " };", 2);
5315 SvREFCNT_dec(PL_lex_repl);
5319 pm->op_pmpermflags = pm->op_pmflags;
5320 PL_lex_op = (OP*)pm;
5321 yylval.ival = OP_SUBST;
5326 S_scan_trans(pTHX_ char *start)
5337 yylval.ival = OP_NULL;
5339 s = scan_str(start);
5342 SvREFCNT_dec(PL_lex_stuff);
5343 PL_lex_stuff = Nullsv;
5344 Perl_croak(aTHX_ "Transliteration pattern not terminated");
5346 if (s[-1] == PL_multi_open)
5352 SvREFCNT_dec(PL_lex_stuff);
5353 PL_lex_stuff = Nullsv;
5355 SvREFCNT_dec(PL_lex_repl);
5356 PL_lex_repl = Nullsv;
5357 Perl_croak(aTHX_ "Transliteration replacement not terminated");
5361 o = newSVOP(OP_TRANS, 0, 0);
5362 utf8 = OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF;
5365 New(803,tbl,256,short);
5366 o = newPVOP(OP_TRANS, 0, (char*)tbl);
5370 complement = del = squash = 0;
5371 while (strchr("cdsCU", *s)) {
5373 complement = OPpTRANS_COMPLEMENT;
5375 del = OPpTRANS_DELETE;
5377 squash = OPpTRANS_SQUASH;
5382 utf8 &= ~OPpTRANS_FROM_UTF;
5384 utf8 |= OPpTRANS_FROM_UTF;
5388 utf8 &= ~OPpTRANS_TO_UTF;
5390 utf8 |= OPpTRANS_TO_UTF;
5393 Perl_croak(aTHX_ "Too many /C and /U options");
5398 o->op_private = del|squash|complement|utf8;
5401 yylval.ival = OP_TRANS;
5406 S_scan_heredoc(pTHX_ register char *s)
5410 I32 op_type = OP_SCALAR;
5417 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
5421 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
5424 for (peek = s; *peek == ' ' || *peek == '\t'; peek++) ;
5425 if (*peek && strchr("`'\"",*peek)) {
5428 s = delimcpy(d, e, s, PL_bufend, term, &len);
5438 if (!isALNUM_lazy(s))
5439 deprecate("bare << to mean <<\"\"");
5440 for (; isALNUM_lazy(s); s++) {
5445 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
5446 Perl_croak(aTHX_ "Delimiter for here document is too long");
5449 len = d - PL_tokenbuf;
5450 #ifndef PERL_STRICT_CR
5451 d = strchr(s, '\r');
5455 while (s < PL_bufend) {
5461 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
5470 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5475 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
5476 herewas = newSVpvn(s,PL_bufend-s);
5478 s--, herewas = newSVpvn(s,d-s);
5479 s += SvCUR(herewas);
5481 tmpstr = NEWSV(87,79);
5482 sv_upgrade(tmpstr, SVt_PVIV);
5487 else if (term == '`') {
5488 op_type = OP_BACKTICK;
5489 SvIVX(tmpstr) = '\\';
5493 PL_multi_start = PL_curcop->cop_line;
5494 PL_multi_open = PL_multi_close = '<';
5495 term = *PL_tokenbuf;
5496 if (PL_lex_inwhat == OP_SUBST && PL_in_eval && !PL_rsfp) {
5497 char *bufptr = PL_sublex_info.super_bufptr;
5498 char *bufend = PL_sublex_info.super_bufend;
5499 char *olds = s - SvCUR(herewas);
5500 s = strchr(bufptr, '\n');
5504 while (s < bufend &&
5505 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5507 PL_curcop->cop_line++;
5510 PL_curcop->cop_line = PL_multi_start;
5511 missingterm(PL_tokenbuf);
5513 sv_setpvn(herewas,bufptr,d-bufptr+1);
5514 sv_setpvn(tmpstr,d+1,s-d);
5516 sv_catpvn(herewas,s,bufend-s);
5517 (void)strcpy(bufptr,SvPVX(herewas));
5524 while (s < PL_bufend &&
5525 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
5527 PL_curcop->cop_line++;
5529 if (s >= PL_bufend) {
5530 PL_curcop->cop_line = PL_multi_start;
5531 missingterm(PL_tokenbuf);
5533 sv_setpvn(tmpstr,d+1,s-d);
5535 PL_curcop->cop_line++; /* the preceding stmt passes a newline */
5537 sv_catpvn(herewas,s,PL_bufend-s);
5538 sv_setsv(PL_linestr,herewas);
5539 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
5540 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5543 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
5544 while (s >= PL_bufend) { /* multiple line string? */
5546 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5547 PL_curcop->cop_line = PL_multi_start;
5548 missingterm(PL_tokenbuf);
5550 PL_curcop->cop_line++;
5551 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5552 #ifndef PERL_STRICT_CR
5553 if (PL_bufend - PL_linestart >= 2) {
5554 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
5555 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
5557 PL_bufend[-2] = '\n';
5559 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
5561 else if (PL_bufend[-1] == '\r')
5562 PL_bufend[-1] = '\n';
5564 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
5565 PL_bufend[-1] = '\n';
5567 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5568 SV *sv = NEWSV(88,0);
5570 sv_upgrade(sv, SVt_PVMG);
5571 sv_setsv(sv,PL_linestr);
5572 av_store(GvAV(PL_curcop->cop_filegv),
5573 (I32)PL_curcop->cop_line,sv);
5575 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
5578 sv_catsv(PL_linestr,herewas);
5579 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5583 sv_catsv(tmpstr,PL_linestr);
5588 PL_multi_end = PL_curcop->cop_line;
5589 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
5590 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
5591 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
5593 SvREFCNT_dec(herewas);
5594 PL_lex_stuff = tmpstr;
5595 yylval.ival = op_type;
5600 takes: current position in input buffer
5601 returns: new position in input buffer
5602 side-effects: yylval and lex_op are set.
5607 <FH> read from filehandle
5608 <pkg::FH> read from package qualified filehandle
5609 <pkg'FH> read from package qualified filehandle
5610 <$fh> read from filehandle in $fh
5616 S_scan_inputsymbol(pTHX_ char *start)
5618 register char *s = start; /* current position in buffer */
5624 d = PL_tokenbuf; /* start of temp holding space */
5625 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
5626 end = strchr(s, '\n');
5629 s = delimcpy(d, e, s + 1, end, '>', &len); /* extract until > */
5631 /* die if we didn't have space for the contents of the <>,
5632 or if it didn't end, or if we see a newline
5635 if (len >= sizeof PL_tokenbuf)
5636 Perl_croak(aTHX_ "Excessively long <> operator");
5638 Perl_croak(aTHX_ "Unterminated <> operator");
5643 Remember, only scalar variables are interpreted as filehandles by
5644 this code. Anything more complex (e.g., <$fh{$num}>) will be
5645 treated as a glob() call.
5646 This code makes use of the fact that except for the $ at the front,
5647 a scalar variable and a filehandle look the same.
5649 if (*d == '$' && d[1]) d++;
5651 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
5652 while (*d && (isALNUM_lazy(d) || *d == '\'' || *d == ':'))
5655 /* If we've tried to read what we allow filehandles to look like, and
5656 there's still text left, then it must be a glob() and not a getline.
5657 Use scan_str to pull out the stuff between the <> and treat it
5658 as nothing more than a string.
5661 if (d - PL_tokenbuf != len) {
5662 yylval.ival = OP_GLOB;
5664 s = scan_str(start);
5666 Perl_croak(aTHX_ "Glob not terminated");
5670 /* we're in a filehandle read situation */
5673 /* turn <> into <ARGV> */
5675 (void)strcpy(d,"ARGV");
5677 /* if <$fh>, create the ops to turn the variable into a
5683 /* try to find it in the pad for this block, otherwise find
5684 add symbol table ops
5686 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
5687 OP *o = newOP(OP_PADSV, 0);
5689 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
5692 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
5693 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
5694 newUNOP(OP_RV2SV, 0,
5695 newGVOP(OP_GV, 0, gv)));
5697 PL_lex_op->op_flags |= OPf_SPECIAL;
5698 /* we created the ops in PL_lex_op, so make yylval.ival a null op */
5699 yylval.ival = OP_NULL;
5702 /* If it's none of the above, it must be a literal filehandle
5703 (<Foo::BAR> or <FOO>) so build a simple readline OP */
5705 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
5706 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
5707 yylval.ival = OP_NULL;
5716 takes: start position in buffer
5717 returns: position to continue reading from buffer
5718 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
5719 updates the read buffer.
5721 This subroutine pulls a string out of the input. It is called for:
5722 q single quotes q(literal text)
5723 ' single quotes 'literal text'
5724 qq double quotes qq(interpolate $here please)
5725 " double quotes "interpolate $here please"
5726 qx backticks qx(/bin/ls -l)
5727 ` backticks `/bin/ls -l`
5728 qw quote words @EXPORT_OK = qw( func() $spam )
5729 m// regexp match m/this/
5730 s/// regexp substitute s/this/that/
5731 tr/// string transliterate tr/this/that/
5732 y/// string transliterate y/this/that/
5733 ($*@) sub prototypes sub foo ($)
5734 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
5736 In most of these cases (all but <>, patterns and transliterate)
5737 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
5738 calls scan_str(). s/// makes yylex() call scan_subst() which calls
5739 scan_str(). tr/// and y/// make yylex() call scan_trans() which
5742 It skips whitespace before the string starts, and treats the first
5743 character as the delimiter. If the delimiter is one of ([{< then
5744 the corresponding "close" character )]}> is used as the closing
5745 delimiter. It allows quoting of delimiters, and if the string has
5746 balanced delimiters ([{<>}]) it allows nesting.
5748 The lexer always reads these strings into lex_stuff, except in the
5749 case of the operators which take *two* arguments (s/// and tr///)
5750 when it checks to see if lex_stuff is full (presumably with the 1st
5751 arg to s or tr) and if so puts the string into lex_repl.
5756 S_scan_str(pTHX_ char *start)
5759 SV *sv; /* scalar value: string */
5760 char *tmps; /* temp string, used for delimiter matching */
5761 register char *s = start; /* current position in the buffer */
5762 register char term; /* terminating character */
5763 register char *to; /* current position in the sv's data */
5764 I32 brackets = 1; /* bracket nesting level */
5766 /* skip space before the delimiter */
5770 /* mark where we are, in case we need to report errors */
5773 /* after skipping whitespace, the next character is the terminator */
5775 /* mark where we are */
5776 PL_multi_start = PL_curcop->cop_line;
5777 PL_multi_open = term;
5779 /* find corresponding closing delimiter */
5780 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
5782 PL_multi_close = term;
5784 /* create a new SV to hold the contents. 87 is leak category, I'm
5785 assuming. 79 is the SV's initial length. What a random number. */
5787 sv_upgrade(sv, SVt_PVIV);
5789 (void)SvPOK_only(sv); /* validate pointer */
5791 /* move past delimiter and try to read a complete string */
5794 /* extend sv if need be */
5795 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
5796 /* set 'to' to the next character in the sv's string */
5797 to = SvPVX(sv)+SvCUR(sv);
5799 /* if open delimiter is the close delimiter read unbridle */
5800 if (PL_multi_open == PL_multi_close) {
5801 for (; s < PL_bufend; s++,to++) {
5802 /* embedded newlines increment the current line number */
5803 if (*s == '\n' && !PL_rsfp)
5804 PL_curcop->cop_line++;
5805 /* handle quoted delimiters */
5806 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
5809 /* any other quotes are simply copied straight through */
5813 /* terminate when run out of buffer (the for() condition), or
5814 have found the terminator */
5815 else if (*s == term)
5821 /* if the terminator isn't the same as the start character (e.g.,
5822 matched brackets), we have to allow more in the quoting, and
5823 be prepared for nested brackets.
5826 /* read until we run out of string, or we find the terminator */
5827 for (; s < PL_bufend; s++,to++) {
5828 /* embedded newlines increment the line count */
5829 if (*s == '\n' && !PL_rsfp)
5830 PL_curcop->cop_line++;
5831 /* backslashes can escape the open or closing characters */
5832 if (*s == '\\' && s+1 < PL_bufend) {
5833 if ((s[1] == PL_multi_open) || (s[1] == PL_multi_close))
5838 /* allow nested opens and closes */
5839 else if (*s == PL_multi_close && --brackets <= 0)
5841 else if (*s == PL_multi_open)
5846 /* terminate the copied string and update the sv's end-of-string */
5848 SvCUR_set(sv, to - SvPVX(sv));
5851 * this next chunk reads more into the buffer if we're not done yet
5854 if (s < PL_bufend) break; /* handle case where we are done yet :-) */
5856 #ifndef PERL_STRICT_CR
5857 if (to - SvPVX(sv) >= 2) {
5858 if ((to[-2] == '\r' && to[-1] == '\n') ||
5859 (to[-2] == '\n' && to[-1] == '\r'))
5863 SvCUR_set(sv, to - SvPVX(sv));
5865 else if (to[-1] == '\r')
5868 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
5872 /* if we're out of file, or a read fails, bail and reset the current
5873 line marker so we can report where the unterminated string began
5876 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
5878 PL_curcop->cop_line = PL_multi_start;
5881 /* we read a line, so increment our line counter */
5882 PL_curcop->cop_line++;
5884 /* update debugger info */
5885 if (PERLDB_LINE && PL_curstash != PL_debstash) {
5886 SV *sv = NEWSV(88,0);
5888 sv_upgrade(sv, SVt_PVMG);
5889 sv_setsv(sv,PL_linestr);
5890 av_store(GvAV(PL_curcop->cop_filegv),
5891 (I32)PL_curcop->cop_line, sv);
5894 /* having changed the buffer, we must update PL_bufend */
5895 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
5898 /* at this point, we have successfully read the delimited string */
5900 PL_multi_end = PL_curcop->cop_line;
5903 /* if we allocated too much space, give some back */
5904 if (SvCUR(sv) + 5 < SvLEN(sv)) {
5905 SvLEN_set(sv, SvCUR(sv) + 1);
5906 Renew(SvPVX(sv), SvLEN(sv), char);
5909 /* decide whether this is the first or second quoted string we've read
5922 takes: pointer to position in buffer
5923 returns: pointer to new position in buffer
5924 side-effects: builds ops for the constant in yylval.op
5926 Read a number in any of the formats that Perl accepts:
5928 0(x[0-7A-F]+)|([0-7]+)|(b[01])
5929 [\d_]+(\.[\d_]*)?[Ee](\d+)
5931 Underbars (_) are allowed in decimal numbers. If -w is on,
5932 underbars before a decimal point must be at three digit intervals.
5934 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
5937 If it reads a number without a decimal point or an exponent, it will
5938 try converting the number to an integer and see if it can do so
5939 without loss of precision.
5943 Perl_scan_num(pTHX_ char *start)
5945 register char *s = start; /* current position in buffer */
5946 register char *d; /* destination in temp buffer */
5947 register char *e; /* end of temp buffer */
5948 I32 tryiv; /* used to see if it can be an int */
5949 NV value; /* number read, as a double */
5950 SV *sv; /* place to put the converted number */
5951 I32 floatit; /* boolean: int or float? */
5952 char *lastub = 0; /* position of last underbar */
5953 static char number_too_long[] = "Number too long";
5955 /* We use the first character to decide what type of number this is */
5959 Perl_croak(aTHX_ "panic: scan_num");
5961 /* if it starts with a 0, it could be an octal number, a decimal in
5962 0.13 disguise, or a hexadecimal number, or a binary number.
5967 u holds the "number so far"
5968 shift the power of 2 of the base
5969 (hex == 4, octal == 3, binary == 1)
5970 overflowed was the number more than we can hold?
5972 Shift is used when we add a digit. It also serves as an "are
5973 we in octal/hex/binary?" indicator to disallow hex characters
5984 } else if (s[1] == 'b') {
5988 /* check for a decimal in disguise */
5989 else if (s[1] == '.')
5991 /* so it must be octal */
5996 /* read the rest of the number */
5998 UV n, b; /* n is used in the overflow test, b is the digit we're adding on */
6002 /* if we don't mention it, we're done */
6011 /* 8 and 9 are not octal */
6014 yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s));
6017 yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s));
6021 case '2': case '3': case '4':
6022 case '5': case '6': case '7':
6024 yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s));
6028 b = *s++ & 15; /* ASCII digit -> value of digit */
6032 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
6033 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
6034 /* make sure they said 0x */
6039 /* Prepare to put the digit we have onto the end
6040 of the number so far. We check for overflows.
6044 n = u << shift; /* make room for the digit */
6045 if ((n >> shift) != u
6046 && !(PL_hints & HINT_NEW_BINARY))
6049 "Integer overflow in %s number",
6050 (shift == 4) ? "hexadecimal"
6051 : ((shift == 3) ? "octal" : "binary"));
6053 u = n | b; /* add the digit to the end */
6058 /* if we get here, we had success: make a scalar value from
6064 if ( PL_hints & HINT_NEW_BINARY)
6065 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
6070 handle decimal numbers.
6071 we're also sent here when we read a 0 as the first digit
6073 case '1': case '2': case '3': case '4': case '5':
6074 case '6': case '7': case '8': case '9': case '.':
6077 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
6080 /* read next group of digits and _ and copy into d */
6081 while (isDIGIT(*s) || *s == '_') {
6082 /* skip underscores, checking for misplaced ones
6086 dTHR; /* only for ckWARN */
6087 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
6088 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
6092 /* check for end of fixed-length buffer */
6094 Perl_croak(aTHX_ number_too_long);
6095 /* if we're ok, copy the character */
6100 /* final misplaced underbar check */
6101 if (lastub && s - lastub != 3) {
6103 if (ckWARN(WARN_SYNTAX))
6104 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
6107 /* read a decimal portion if there is one. avoid
6108 3..5 being interpreted as the number 3. followed
6111 if (*s == '.' && s[1] != '.') {
6115 /* copy, ignoring underbars, until we run out of
6116 digits. Note: no misplaced underbar checks!
6118 for (; isDIGIT(*s) || *s == '_'; s++) {
6119 /* fixed length buffer check */
6121 Perl_croak(aTHX_ number_too_long);
6127 /* read exponent part, if present */
6128 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
6132 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
6133 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
6135 /* allow positive or negative exponent */
6136 if (*s == '+' || *s == '-')
6139 /* read digits of exponent (no underbars :-) */
6140 while (isDIGIT(*s)) {
6142 Perl_croak(aTHX_ number_too_long);
6147 /* terminate the string */
6150 /* make an sv from the string */
6153 value = Atof(PL_tokenbuf);
6156 See if we can make do with an integer value without loss of
6157 precision. We use I_V to cast to an int, because some
6158 compilers have issues. Then we try casting it back and see
6159 if it was the same. We only do this if we know we
6160 specifically read an integer.
6162 Note: if floatit is true, then we don't need to do the
6166 if (!floatit && (NV)tryiv == value)
6167 sv_setiv(sv, tryiv);
6169 sv_setnv(sv, value);
6170 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) : (PL_hints & HINT_NEW_INTEGER) )
6171 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
6172 (floatit ? "float" : "integer"), sv, Nullsv, NULL);
6176 /* make the op for the constant and return */
6178 yylval.opval = newSVOP(OP_CONST, 0, sv);
6184 S_scan_formline(pTHX_ register char *s)
6189 SV *stuff = newSVpvn("",0);
6190 bool needargs = FALSE;
6193 if (*s == '.' || *s == '}') {
6195 #ifdef PERL_STRICT_CR
6196 for (t = s+1;*t == ' ' || *t == '\t'; t++) ;
6198 for (t = s+1;*t == ' ' || *t == '\t' || *t == '\r'; t++) ;
6200 if (*t == '\n' || t == PL_bufend)
6203 if (PL_in_eval && !PL_rsfp) {
6204 eol = strchr(s,'\n');
6209 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6211 for (t = s; t < eol; t++) {
6212 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
6214 goto enough; /* ~~ must be first line in formline */
6216 if (*t == '@' || *t == '^')
6219 sv_catpvn(stuff, s, eol-s);
6223 s = filter_gets(PL_linestr, PL_rsfp, 0);
6224 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
6225 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
6228 yyerror("Format not terminated");
6238 PL_lex_state = LEX_NORMAL;
6239 PL_nextval[PL_nexttoke].ival = 0;
6243 PL_lex_state = LEX_FORMLINE;
6244 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
6246 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
6250 SvREFCNT_dec(stuff);
6251 PL_lex_formbrack = 0;
6262 PL_cshlen = strlen(PL_cshname);
6267 Perl_start_subparse(pTHX_ I32 is_format, U32 flags)
6270 I32 oldsavestack_ix = PL_savestack_ix;
6271 CV* outsidecv = PL_compcv;
6275 assert(SvTYPE(PL_compcv) == SVt_PVCV);
6277 save_I32(&PL_subline);
6278 save_item(PL_subname);
6280 SAVESPTR(PL_curpad);
6281 SAVESPTR(PL_comppad);
6282 SAVESPTR(PL_comppad_name);
6283 SAVESPTR(PL_compcv);
6284 SAVEI32(PL_comppad_name_fill);
6285 SAVEI32(PL_min_intro_pending);
6286 SAVEI32(PL_max_intro_pending);
6287 SAVEI32(PL_pad_reset_pending);
6289 PL_compcv = (CV*)NEWSV(1104,0);
6290 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
6291 CvFLAGS(PL_compcv) |= flags;
6293 PL_comppad = newAV();
6294 av_push(PL_comppad, Nullsv);
6295 PL_curpad = AvARRAY(PL_comppad);
6296 PL_comppad_name = newAV();
6297 PL_comppad_name_fill = 0;
6298 PL_min_intro_pending = 0;
6300 PL_subline = PL_curcop->cop_line;
6302 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
6303 PL_curpad[0] = (SV*)newAV();
6304 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
6305 #endif /* USE_THREADS */
6307 comppadlist = newAV();
6308 AvREAL_off(comppadlist);
6309 av_store(comppadlist, 0, (SV*)PL_comppad_name);
6310 av_store(comppadlist, 1, (SV*)PL_comppad);
6312 CvPADLIST(PL_compcv) = comppadlist;
6313 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
6315 CvOWNER(PL_compcv) = 0;
6316 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
6317 MUTEX_INIT(CvMUTEXP(PL_compcv));
6318 #endif /* USE_THREADS */
6320 return oldsavestack_ix;
6324 Perl_yywarn(pTHX_ char *s)
6328 PL_in_eval |= EVAL_WARNONLY;
6330 PL_in_eval &= ~EVAL_WARNONLY;
6335 Perl_yyerror(pTHX_ char *s)
6339 char *context = NULL;
6343 if (!yychar || (yychar == ';' && !PL_rsfp))
6345 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
6346 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
6347 while (isSPACE(*PL_oldoldbufptr))
6349 context = PL_oldoldbufptr;
6350 contlen = PL_bufptr - PL_oldoldbufptr;
6352 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
6353 PL_oldbufptr != PL_bufptr) {
6354 while (isSPACE(*PL_oldbufptr))
6356 context = PL_oldbufptr;
6357 contlen = PL_bufptr - PL_oldbufptr;
6359 else if (yychar > 255)
6360 where = "next token ???";
6361 else if ((yychar & 127) == 127) {
6362 if (PL_lex_state == LEX_NORMAL ||
6363 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
6364 where = "at end of line";
6365 else if (PL_lex_inpat)
6366 where = "within pattern";
6368 where = "within string";
6371 SV *where_sv = sv_2mortal(newSVpvn("next char ", 10));
6373 Perl_sv_catpvf(aTHX_ where_sv, "^%c", toCTRL(yychar));
6374 else if (isPRINT_LC(yychar))
6375 Perl_sv_catpvf(aTHX_ where_sv, "%c", yychar);
6377 Perl_sv_catpvf(aTHX_ where_sv, "\\%03o", yychar & 255);
6378 where = SvPVX(where_sv);
6380 msg = sv_2mortal(newSVpv(s, 0));
6381 Perl_sv_catpvf(aTHX_ msg, " at %_ line %ld, ",
6382 GvSV(PL_curcop->cop_filegv), (long)PL_curcop->cop_line);
6384 Perl_sv_catpvf(aTHX_ msg, "near \"%.*s\"\n", contlen, context);
6386 Perl_sv_catpvf(aTHX_ msg, "%s\n", where);
6387 if (PL_multi_start < PL_multi_end && (U32)(PL_curcop->cop_line - PL_multi_end) <= 1) {
6388 Perl_sv_catpvf(aTHX_ msg,
6389 " (Might be a runaway multi-line %c%c string starting on line %ld)\n",
6390 (int)PL_multi_open,(int)PL_multi_close,(long)PL_multi_start);
6393 if (PL_in_eval & EVAL_WARNONLY)
6394 Perl_warn(aTHX_ "%_", msg);
6395 else if (PL_in_eval)
6396 sv_catsv(ERRSV, msg);
6398 PerlIO_write(PerlIO_stderr(), SvPVX(msg), SvCUR(msg));
6399 if (++PL_error_count >= 10)
6400 Perl_croak(aTHX_ "%_ has too many errors.\n", GvSV(PL_curcop->cop_filegv));
6402 PL_in_my_stash = Nullhv;
6413 restore_rsfp(pTHXo_ void *f)
6415 PerlIO *fp = (PerlIO*)f;
6417 if (PL_rsfp == PerlIO_stdin())
6418 PerlIO_clearerr(PL_rsfp);
6419 else if (PL_rsfp && (PL_rsfp != fp))
6420 PerlIO_close(PL_rsfp);
6425 restore_expect(pTHXo_ void *e)
6427 /* a safe way to store a small integer in a pointer */
6428 PL_expect = (expectation)((char *)e - PL_tokenbuf);
6432 restore_lex_expect(pTHXo_ void *e)
6434 /* a safe way to store a small integer in a pointer */
6435 PL_lex_expect = (expectation)((char *)e - PL_tokenbuf);