3 * Copyright (c) 1991-2001, 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 * This file is the lexer for Perl. It's closely linked to the
18 * The main routine is yylex(), which returns the next token.
22 #define PERL_IN_TOKE_C
25 #define yychar PL_yychar
26 #define yylval PL_yylval
28 static char ident_too_long[] = "Identifier too long";
30 static void restore_rsfp(pTHXo_ void *f);
31 #ifndef PERL_NO_UTF16_FILTER
32 static I32 utf16_textfilter(pTHXo_ int idx, SV *sv, int maxlen);
33 static I32 utf16rev_textfilter(pTHXo_ int idx, SV *sv, int maxlen);
36 #define XFAKEBRACK 128
39 /*#define UTF (SvUTF8(PL_linestr) && !(PL_hints & HINT_BYTE))*/
40 #define UTF (PL_hints & HINT_UTF8)
42 /* In variables name $^X, these are the legal values for X.
43 * 1999-02-27 mjd-perl-patch@plover.com */
44 #define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
46 /* On MacOS, respect nonbreaking spaces */
47 #ifdef MACOS_TRADITIONAL
48 #define SPACE_OR_TAB(c) ((c)==' '||(c)=='\312'||(c)=='\t')
50 #define SPACE_OR_TAB(c) ((c)==' '||(c)=='\t')
53 /* LEX_* are values for PL_lex_state, the state of the lexer.
54 * They are arranged oddly so that the guard on the switch statement
55 * can get by with a single comparison (if the compiler is smart enough).
58 /* #define LEX_NOTPARSING 11 is done in perl.h. */
61 #define LEX_INTERPNORMAL 9
62 #define LEX_INTERPCASEMOD 8
63 #define LEX_INTERPPUSH 7
64 #define LEX_INTERPSTART 6
65 #define LEX_INTERPEND 5
66 #define LEX_INTERPENDMAYBE 4
67 #define LEX_INTERPCONCAT 3
68 #define LEX_INTERPCONST 2
69 #define LEX_FORMLINE 1
70 #define LEX_KNOWNEXT 0
78 # define YYMAXLEVEL 100
80 YYSTYPE* yylval_pointer[YYMAXLEVEL];
81 int* yychar_pointer[YYMAXLEVEL];
85 # define yylval (*yylval_pointer[yyactlevel])
86 # define yychar (*yychar_pointer[yyactlevel])
87 # define PERL_YYLEX_PARAM yylval_pointer[yyactlevel],yychar_pointer[yyactlevel]
89 # define yylex() Perl_yylex_r(aTHX_ yylval_pointer[yyactlevel],yychar_pointer[yyactlevel])
94 /* CLINE is a macro that ensures PL_copline has a sane value */
99 #define CLINE (PL_copline = (CopLINE(PL_curcop) < PL_copline ? CopLINE(PL_curcop) : PL_copline))
102 * Convenience functions to return different tokens and prime the
103 * lexer for the next token. They all take an argument.
105 * TOKEN : generic token (used for '(', DOLSHARP, etc)
106 * OPERATOR : generic operator
107 * AOPERATOR : assignment operator
108 * PREBLOCK : beginning the block after an if, while, foreach, ...
109 * PRETERMBLOCK : beginning a non-code-defining {} block (eg, hash ref)
110 * PREREF : *EXPR where EXPR is not a simple identifier
111 * TERM : expression term
112 * LOOPX : loop exiting command (goto, last, dump, etc)
113 * FTST : file test operator
114 * FUN0 : zero-argument function
115 * FUN1 : not used, except for not, which isn't a UNIOP
116 * BOop : bitwise or or xor
118 * SHop : shift operator
119 * PWop : power operator
120 * PMop : pattern-matching operator
121 * Aop : addition-level operator
122 * Mop : multiplication-level operator
123 * Eop : equality-testing operator
124 * Rop : relational operator <= != gt
126 * Also see LOP and lop() below.
129 /* Note that REPORT() and REPORT2() will be expressions that supply
130 * their own trailing comma, not suitable for statements as such. */
131 #ifdef DEBUGGING /* Serve -DT. */
132 # define REPORT(x,retval) tokereport(x,s,(int)retval),
133 # define REPORT2(x,retval) tokereport(x,s, yylval.ival),
135 # define REPORT(x,retval)
136 # define REPORT2(x,retval)
139 #define TOKEN(retval) return (REPORT2("token",retval) PL_bufptr = s,(int)retval)
140 #define OPERATOR(retval) return (REPORT2("operator",retval) PL_expect = XTERM, PL_bufptr = s,(int)retval)
141 #define AOPERATOR(retval) return ao((REPORT2("aop",retval) PL_expect = XTERM, PL_bufptr = s,(int)retval))
142 #define PREBLOCK(retval) return (REPORT2("preblock",retval) PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
143 #define PRETERMBLOCK(retval) return (REPORT2("pretermblock",retval) PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
144 #define PREREF(retval) return (REPORT2("preref",retval) PL_expect = XREF,PL_bufptr = s,(int)retval)
145 #define TERM(retval) return (CLINE, REPORT2("term",retval) PL_expect = XOPERATOR, PL_bufptr = s,(int)retval)
146 #define LOOPX(f) return(yylval.ival=f, REPORT("loopx",f) PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
147 #define FTST(f) return(yylval.ival=f, REPORT("ftst",f) PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
148 #define FUN0(f) return(yylval.ival = f, REPORT("fun0",f) PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
149 #define FUN1(f) return(yylval.ival = f, REPORT("fun1",f) PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
150 #define BOop(f) return ao((yylval.ival=f, REPORT("bitorop",f) PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
151 #define BAop(f) return ao((yylval.ival=f, REPORT("bitandop",f) PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
152 #define SHop(f) return ao((yylval.ival=f, REPORT("shiftop",f) PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
153 #define PWop(f) return ao((yylval.ival=f, REPORT("powop",f) PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
154 #define PMop(f) return(yylval.ival=f, REPORT("matchop",f) PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
155 #define Aop(f) return ao((yylval.ival=f, REPORT("add",f) PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
156 #define Mop(f) return ao((yylval.ival=f, REPORT("mul",f) PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
157 #define Eop(f) return(yylval.ival=f, REPORT("eq",f) PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
158 #define Rop(f) return(yylval.ival=f, REPORT("rel",f) PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
160 /* This bit of chicanery makes a unary function followed by
161 * a parenthesis into a function with one argument, highest precedence.
163 #define UNI(f) return(yylval.ival = f, \
167 PL_last_uni = PL_oldbufptr, \
168 PL_last_lop_op = f, \
169 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
171 #define UNIBRACK(f) return(yylval.ival = f, \
174 PL_last_uni = PL_oldbufptr, \
175 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
177 /* grandfather return to old style */
178 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
181 S_tokereport(pTHX_ char *thing, char* s, I32 rv)
185 report = newSVpv(thing, 0);
186 Perl_sv_catpvf(aTHX_ report, ":line %i:%i:", CopLINE(PL_curcop), rv);
188 if (s - PL_bufptr > 0)
189 sv_catpvn(report, PL_bufptr, s - PL_bufptr);
191 if (PL_oldbufptr && *PL_oldbufptr)
192 sv_catpv(report, PL_tokenbuf);
194 PerlIO_printf(Perl_debug_log, "### %s\n", SvPV_nolen(report));
201 * This subroutine detects &&= and ||= and turns an ANDAND or OROR
202 * into an OP_ANDASSIGN or OP_ORASSIGN
206 S_ao(pTHX_ int toketype)
208 if (*PL_bufptr == '=') {
210 if (toketype == ANDAND)
211 yylval.ival = OP_ANDASSIGN;
212 else if (toketype == OROR)
213 yylval.ival = OP_ORASSIGN;
221 * When Perl expects an operator and finds something else, no_op
222 * prints the warning. It always prints "<something> found where
223 * operator expected. It prints "Missing semicolon on previous line?"
224 * if the surprise occurs at the start of the line. "do you need to
225 * predeclare ..." is printed out for code like "sub bar; foo bar $x"
226 * where the compiler doesn't know if foo is a method call or a function.
227 * It prints "Missing operator before end of line" if there's nothing
228 * after the missing operator, or "... before <...>" if there is something
229 * after the missing operator.
233 S_no_op(pTHX_ char *what, char *s)
235 char *oldbp = PL_bufptr;
236 bool is_first = (PL_oldbufptr == PL_linestart);
242 yywarn(Perl_form(aTHX_ "%s found where operator expected", what));
244 Perl_warn(aTHX_ "\t(Missing semicolon on previous line?)\n");
245 else if (PL_oldoldbufptr && isIDFIRST_lazy_if(PL_oldoldbufptr,UTF)) {
247 for (t = PL_oldoldbufptr; *t && (isALNUM_lazy_if(t,UTF) || *t == ':'); t++) ;
248 if (t < PL_bufptr && isSPACE(*t))
249 Perl_warn(aTHX_ "\t(Do you need to predeclare %.*s?)\n",
250 t - PL_oldoldbufptr, PL_oldoldbufptr);
254 Perl_warn(aTHX_ "\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
261 * Complain about missing quote/regexp/heredoc terminator.
262 * If it's called with (char *)NULL then it cauterizes the line buffer.
263 * If we're in a delimited string and the delimiter is a control
264 * character, it's reformatted into a two-char sequence like ^C.
269 S_missingterm(pTHX_ char *s)
274 char *nl = strrchr(s,'\n');
280 iscntrl(PL_multi_close)
282 PL_multi_close < 32 || PL_multi_close == 127
286 tmpbuf[1] = toCTRL(PL_multi_close);
292 *tmpbuf = PL_multi_close;
296 q = strchr(s,'"') ? '\'' : '"';
297 Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
305 Perl_deprecate(pTHX_ char *s)
307 if (ckWARN(WARN_DEPRECATED))
308 Perl_warner(aTHX_ WARN_DEPRECATED, "Use of %s is deprecated", s);
313 * Deprecate a comma-less variable list.
319 deprecate("comma-less variable list");
323 * experimental text filters for win32 carriage-returns, utf16-to-utf8 and
324 * utf16-to-utf8-reversed.
327 #ifdef PERL_CR_FILTER
331 register char *s = SvPVX(sv);
332 register char *e = s + SvCUR(sv);
333 /* outer loop optimized to do nothing if there are no CR-LFs */
335 if (*s++ == '\r' && *s == '\n') {
336 /* hit a CR-LF, need to copy the rest */
337 register char *d = s - 1;
340 if (*s == '\r' && s[1] == '\n')
351 S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen)
353 I32 count = FILTER_READ(idx+1, sv, maxlen);
354 if (count > 0 && !maxlen)
362 * Initialize variables. Uses the Perl save_stack to save its state (for
363 * recursive calls to the parser).
367 Perl_lex_start(pTHX_ SV *line)
372 SAVEI32(PL_lex_dojoin);
373 SAVEI32(PL_lex_brackets);
374 SAVEI32(PL_lex_casemods);
375 SAVEI32(PL_lex_starts);
376 SAVEI32(PL_lex_state);
377 SAVEVPTR(PL_lex_inpat);
378 SAVEI32(PL_lex_inwhat);
379 if (PL_lex_state == LEX_KNOWNEXT) {
380 I32 toke = PL_nexttoke;
381 while (--toke >= 0) {
382 SAVEI32(PL_nexttype[toke]);
383 SAVEVPTR(PL_nextval[toke]);
385 SAVEI32(PL_nexttoke);
387 SAVECOPLINE(PL_curcop);
390 SAVEPPTR(PL_oldbufptr);
391 SAVEPPTR(PL_oldoldbufptr);
392 SAVEPPTR(PL_last_lop);
393 SAVEPPTR(PL_last_uni);
394 SAVEPPTR(PL_linestart);
395 SAVESPTR(PL_linestr);
396 SAVEPPTR(PL_lex_brackstack);
397 SAVEPPTR(PL_lex_casestack);
398 SAVEDESTRUCTOR_X(restore_rsfp, PL_rsfp);
399 SAVESPTR(PL_lex_stuff);
400 SAVEI32(PL_lex_defer);
401 SAVEI32(PL_sublex_info.sub_inwhat);
402 SAVESPTR(PL_lex_repl);
404 SAVEINT(PL_lex_expect);
406 PL_lex_state = LEX_NORMAL;
410 New(899, PL_lex_brackstack, 120, char);
411 New(899, PL_lex_casestack, 12, char);
412 SAVEFREEPV(PL_lex_brackstack);
413 SAVEFREEPV(PL_lex_casestack);
415 *PL_lex_casestack = '\0';
418 PL_lex_stuff = Nullsv;
419 PL_lex_repl = Nullsv;
423 PL_sublex_info.sub_inwhat = 0;
425 if (SvREADONLY(PL_linestr))
426 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
427 s = SvPV(PL_linestr, len);
428 if (len && s[len-1] != ';') {
429 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
430 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
431 sv_catpvn(PL_linestr, "\n;", 2);
433 SvTEMP_off(PL_linestr);
434 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
435 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
436 PL_last_lop = PL_last_uni = Nullch;
438 PL_rs = newSVpvn("\n", 1);
444 * Finalizer for lexing operations. Must be called when the parser is
445 * done with the lexer.
451 PL_doextract = FALSE;
456 * This subroutine has nothing to do with tilting, whether at windmills
457 * or pinball tables. Its name is short for "increment line". It
458 * increments the current line number in CopLINE(PL_curcop) and checks
459 * to see whether the line starts with a comment of the form
460 * # line 500 "foo.pm"
461 * If so, it sets the current line number and file to the values in the comment.
465 S_incline(pTHX_ char *s)
472 CopLINE_inc(PL_curcop);
475 while (SPACE_OR_TAB(*s)) s++;
476 if (strnEQ(s, "line", 4))
480 if (SPACE_OR_TAB(*s))
484 while (SPACE_OR_TAB(*s)) s++;
490 while (SPACE_OR_TAB(*s))
492 if (*s == '"' && (t = strchr(s+1, '"'))) {
497 for (t = s; !isSPACE(*t); t++) ;
500 while (SPACE_OR_TAB(*e) || *e == '\r' || *e == '\f')
502 if (*e != '\n' && *e != '\0')
503 return; /* false alarm */
509 Safefree(CopFILE(PL_curcop));
511 SvREFCNT_dec(CopFILEGV(PL_curcop));
513 CopFILE_set(PL_curcop, s);
516 CopLINE_set(PL_curcop, atoi(n)-1);
521 * Called to gobble the appropriate amount and type of whitespace.
522 * Skips comments as well.
526 S_skipspace(pTHX_ register char *s)
528 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
529 while (s < PL_bufend && SPACE_OR_TAB(*s))
535 SSize_t oldprevlen, oldoldprevlen;
536 SSize_t oldloplen, oldunilen;
537 while (s < PL_bufend && isSPACE(*s)) {
538 if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
543 if (s < PL_bufend && *s == '#') {
544 while (s < PL_bufend && *s != '\n')
548 if (PL_in_eval && !PL_rsfp) {
555 /* only continue to recharge the buffer if we're at the end
556 * of the buffer, we're not reading from a source filter, and
557 * we're in normal lexing mode
559 if (s < PL_bufend || !PL_rsfp || PL_sublex_info.sub_inwhat ||
560 PL_lex_state == LEX_FORMLINE)
563 /* try to recharge the buffer */
564 if ((s = filter_gets(PL_linestr, PL_rsfp,
565 (prevlen = SvCUR(PL_linestr)))) == Nullch)
567 /* end of file. Add on the -p or -n magic */
568 if (PL_minus_n || PL_minus_p) {
569 sv_setpv(PL_linestr,PL_minus_p ?
570 ";}continue{print or die qq(-p destination: $!\\n)" :
572 sv_catpv(PL_linestr,";}");
573 PL_minus_n = PL_minus_p = 0;
576 sv_setpv(PL_linestr,";");
578 /* reset variables for next time we lex */
579 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart
581 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
582 PL_last_lop = PL_last_uni = Nullch;
584 /* Close the filehandle. Could be from -P preprocessor,
585 * STDIN, or a regular file. If we were reading code from
586 * STDIN (because the commandline held no -e or filename)
587 * then we don't close it, we reset it so the code can
588 * read from STDIN too.
591 if (PL_preprocess && !PL_in_eval)
592 (void)PerlProc_pclose(PL_rsfp);
593 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
594 PerlIO_clearerr(PL_rsfp);
596 (void)PerlIO_close(PL_rsfp);
601 /* not at end of file, so we only read another line */
602 /* make corresponding updates to old pointers, for yyerror() */
603 oldprevlen = PL_oldbufptr - PL_bufend;
604 oldoldprevlen = PL_oldoldbufptr - PL_bufend;
606 oldunilen = PL_last_uni - PL_bufend;
608 oldloplen = PL_last_lop - PL_bufend;
609 PL_linestart = PL_bufptr = s + prevlen;
610 PL_bufend = s + SvCUR(PL_linestr);
612 PL_oldbufptr = s + oldprevlen;
613 PL_oldoldbufptr = s + oldoldprevlen;
615 PL_last_uni = s + oldunilen;
617 PL_last_lop = s + oldloplen;
620 /* debugger active and we're not compiling the debugger code,
621 * so store the line into the debugger's array of lines
623 if (PERLDB_LINE && PL_curstash != PL_debstash) {
624 SV *sv = NEWSV(85,0);
626 sv_upgrade(sv, SVt_PVMG);
627 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
628 av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
635 * Check the unary operators to ensure there's no ambiguity in how they're
636 * used. An ambiguous piece of code would be:
638 * This doesn't mean rand() + 5. Because rand() is a unary operator,
639 * the +5 is its argument.
648 if (PL_oldoldbufptr != PL_last_uni)
650 while (isSPACE(*PL_last_uni))
652 for (s = PL_last_uni; isALNUM_lazy_if(s,UTF) || *s == '-'; s++) ;
653 if ((t = strchr(s, '(')) && t < PL_bufptr)
655 if (ckWARN_d(WARN_AMBIGUOUS)){
658 Perl_warner(aTHX_ WARN_AMBIGUOUS,
659 "Warning: Use of \"%s\" without parens is ambiguous",
665 /* workaround to replace the UNI() macro with a function. Only the
666 * hints/uts.sh file mentions this. Other comments elsewhere in the
667 * source indicate Microport Unix might need it too.
673 #define UNI(f) return uni(f,s)
676 S_uni(pTHX_ I32 f, char *s)
681 PL_last_uni = PL_oldbufptr;
692 #endif /* CRIPPLED_CC */
695 * LOP : macro to build a list operator. Its behaviour has been replaced
696 * with a subroutine, S_lop() for which LOP is just another name.
699 #define LOP(f,x) return lop(f,x,s)
703 * Build a list operator (or something that might be one). The rules:
704 * - if we have a next token, then it's a list operator [why?]
705 * - if the next thing is an opening paren, then it's a function
706 * - else it's a list operator
710 S_lop(pTHX_ I32 f, int x, char *s)
717 PL_last_lop = PL_oldbufptr;
732 * When the lexer realizes it knows the next token (for instance,
733 * it is reordering tokens for the parser) then it can call S_force_next
734 * to know what token to return the next time the lexer is called. Caller
735 * will need to set PL_nextval[], and possibly PL_expect to ensure the lexer
736 * handles the token correctly.
740 S_force_next(pTHX_ I32 type)
742 PL_nexttype[PL_nexttoke] = type;
744 if (PL_lex_state != LEX_KNOWNEXT) {
745 PL_lex_defer = PL_lex_state;
746 PL_lex_expect = PL_expect;
747 PL_lex_state = LEX_KNOWNEXT;
753 * When the lexer knows the next thing is a word (for instance, it has
754 * just seen -> and it knows that the next char is a word char, then
755 * it calls S_force_word to stick the next word into the PL_next lookahead.
758 * char *start : buffer position (must be within PL_linestr)
759 * int token : PL_next will be this type of bare word (e.g., METHOD,WORD)
760 * int check_keyword : if true, Perl checks to make sure the word isn't
761 * a keyword (do this if the word is a label, e.g. goto FOO)
762 * int allow_pack : if true, : characters will also be allowed (require,
764 * int allow_initial_tick : used by the "sub" lexer only.
768 S_force_word(pTHX_ register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
773 start = skipspace(start);
775 if (isIDFIRST_lazy_if(s,UTF) ||
776 (allow_pack && *s == ':') ||
777 (allow_initial_tick && *s == '\'') )
779 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
780 if (check_keyword && keyword(PL_tokenbuf, len))
782 if (token == METHOD) {
787 PL_expect = XOPERATOR;
790 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
791 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
799 * Called when the lexer wants $foo *foo &foo etc, but the program
800 * text only contains the "foo" portion. The first argument is a pointer
801 * to the "foo", and the second argument is the type symbol to prefix.
802 * Forces the next token to be a "WORD".
803 * Creates the symbol if it didn't already exist (via gv_fetchpv()).
807 S_force_ident(pTHX_ register char *s, int kind)
810 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
811 PL_nextval[PL_nexttoke].opval = o;
814 o->op_private = OPpCONST_ENTERED;
815 /* XXX see note in pp_entereval() for why we forgo typo
816 warnings if the symbol must be introduced in an eval.
818 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
819 kind == '$' ? SVt_PV :
820 kind == '@' ? SVt_PVAV :
821 kind == '%' ? SVt_PVHV :
829 Perl_str_to_version(pTHX_ SV *sv)
834 char *start = SvPVx(sv,len);
835 bool utf = SvUTF8(sv) ? TRUE : FALSE;
836 char *end = start + len;
837 while (start < end) {
841 n = utf8_to_uv((U8*)start, len, &skip, 0);
846 retval += ((NV)n)/nshift;
855 * Forces the next token to be a version number.
859 S_force_version(pTHX_ char *s)
861 OP *version = Nullop;
870 for (; isDIGIT(*d) || *d == '_' || *d == '.'; d++);
871 if (*d == ';' || isSPACE(*d) || *d == '}' || !*d) {
873 s = scan_num(s, &yylval);
874 version = yylval.opval;
875 ver = cSVOPx(version)->op_sv;
876 if (SvPOK(ver) && !SvNIOK(ver)) {
877 (void)SvUPGRADE(ver, SVt_PVNV);
878 SvNVX(ver) = str_to_version(ver);
879 SvNOK_on(ver); /* hint that it is a version */
884 /* NOTE: The parser sees the package name and the VERSION swapped */
885 PL_nextval[PL_nexttoke].opval = version;
893 * Tokenize a quoted string passed in as an SV. It finds the next
894 * chunk, up to end of string or a backslash. It may make a new
895 * SV containing that chunk (if HINT_NEW_STRING is on). It also
900 S_tokeq(pTHX_ SV *sv)
911 s = SvPV_force(sv, len);
912 if (SvTYPE(sv) >= SVt_PVIV && SvIVX(sv) == -1)
915 while (s < send && *s != '\\')
920 if ( PL_hints & HINT_NEW_STRING )
921 pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
924 if (s + 1 < send && (s[1] == '\\'))
925 s++; /* all that, just for this */
930 SvCUR_set(sv, d - SvPVX(sv));
932 if ( PL_hints & HINT_NEW_STRING )
933 return new_constant(NULL, 0, "q", sv, pv, "q");
938 * Now come three functions related to double-quote context,
939 * S_sublex_start, S_sublex_push, and S_sublex_done. They're used when
940 * converting things like "\u\Lgnat" into ucfirst(lc("gnat")). They
941 * interact with PL_lex_state, and create fake ( ... ) argument lists
942 * to handle functions and concatenation.
943 * They assume that whoever calls them will be setting up a fake
944 * join call, because each subthing puts a ',' after it. This lets
947 * join($, , 'lower ', lcfirst( 'uPpEr', ) ,)
949 * (I'm not sure whether the spurious commas at the end of lcfirst's
950 * arguments and join's arguments are created or not).
955 * Assumes that yylval.ival is the op we're creating (e.g. OP_LCFIRST).
957 * Pattern matching will set PL_lex_op to the pattern-matching op to
958 * make (we return THING if yylval.ival is OP_NULL, PMFUNC otherwise).
960 * OP_CONST and OP_READLINE are easy--just make the new op and return.
962 * Everything else becomes a FUNC.
964 * Sets PL_lex_state to LEX_INTERPPUSH unless (ival was OP_NULL or we
965 * had an OP_CONST or OP_READLINE). This just sets us up for a
966 * call to S_sublex_push().
972 register I32 op_type = yylval.ival;
974 if (op_type == OP_NULL) {
975 yylval.opval = PL_lex_op;
979 if (op_type == OP_CONST || op_type == OP_READLINE) {
980 SV *sv = tokeq(PL_lex_stuff);
982 if (SvTYPE(sv) == SVt_PVIV) {
983 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
989 nsv = newSVpvn(p, len);
995 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
996 PL_lex_stuff = Nullsv;
1000 PL_sublex_info.super_state = PL_lex_state;
1001 PL_sublex_info.sub_inwhat = op_type;
1002 PL_sublex_info.sub_op = PL_lex_op;
1003 PL_lex_state = LEX_INTERPPUSH;
1007 yylval.opval = PL_lex_op;
1017 * Create a new scope to save the lexing state. The scope will be
1018 * ended in S_sublex_done. Returns a '(', starting the function arguments
1019 * to the uc, lc, etc. found before.
1020 * Sets PL_lex_state to LEX_INTERPCONCAT.
1028 PL_lex_state = PL_sublex_info.super_state;
1029 SAVEI32(PL_lex_dojoin);
1030 SAVEI32(PL_lex_brackets);
1031 SAVEI32(PL_lex_casemods);
1032 SAVEI32(PL_lex_starts);
1033 SAVEI32(PL_lex_state);
1034 SAVEVPTR(PL_lex_inpat);
1035 SAVEI32(PL_lex_inwhat);
1036 SAVECOPLINE(PL_curcop);
1037 SAVEPPTR(PL_bufptr);
1038 SAVEPPTR(PL_oldbufptr);
1039 SAVEPPTR(PL_oldoldbufptr);
1040 SAVEPPTR(PL_last_lop);
1041 SAVEPPTR(PL_last_uni);
1042 SAVEPPTR(PL_linestart);
1043 SAVESPTR(PL_linestr);
1044 SAVEPPTR(PL_lex_brackstack);
1045 SAVEPPTR(PL_lex_casestack);
1047 PL_linestr = PL_lex_stuff;
1048 PL_lex_stuff = Nullsv;
1050 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart
1051 = SvPVX(PL_linestr);
1052 PL_bufend += SvCUR(PL_linestr);
1053 PL_last_lop = PL_last_uni = Nullch;
1054 SAVEFREESV(PL_linestr);
1056 PL_lex_dojoin = FALSE;
1057 PL_lex_brackets = 0;
1058 New(899, PL_lex_brackstack, 120, char);
1059 New(899, PL_lex_casestack, 12, char);
1060 SAVEFREEPV(PL_lex_brackstack);
1061 SAVEFREEPV(PL_lex_casestack);
1062 PL_lex_casemods = 0;
1063 *PL_lex_casestack = '\0';
1065 PL_lex_state = LEX_INTERPCONCAT;
1066 CopLINE_set(PL_curcop, PL_multi_start);
1068 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
1069 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
1070 PL_lex_inpat = PL_sublex_info.sub_op;
1072 PL_lex_inpat = Nullop;
1079 * Restores lexer state after a S_sublex_push.
1085 if (!PL_lex_starts++) {
1086 SV *sv = newSVpvn("",0);
1087 if (SvUTF8(PL_linestr))
1089 PL_expect = XOPERATOR;
1090 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1094 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
1095 PL_lex_state = LEX_INTERPCASEMOD;
1099 /* Is there a right-hand side to take care of? (s//RHS/ or tr//RHS/) */
1100 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
1101 PL_linestr = PL_lex_repl;
1103 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
1104 PL_bufend += SvCUR(PL_linestr);
1105 PL_last_lop = PL_last_uni = Nullch;
1106 SAVEFREESV(PL_linestr);
1107 PL_lex_dojoin = FALSE;
1108 PL_lex_brackets = 0;
1109 PL_lex_casemods = 0;
1110 *PL_lex_casestack = '\0';
1112 if (SvEVALED(PL_lex_repl)) {
1113 PL_lex_state = LEX_INTERPNORMAL;
1115 /* we don't clear PL_lex_repl here, so that we can check later
1116 whether this is an evalled subst; that means we rely on the
1117 logic to ensure sublex_done() is called again only via the
1118 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
1121 PL_lex_state = LEX_INTERPCONCAT;
1122 PL_lex_repl = Nullsv;
1128 PL_bufend = SvPVX(PL_linestr);
1129 PL_bufend += SvCUR(PL_linestr);
1130 PL_expect = XOPERATOR;
1131 PL_sublex_info.sub_inwhat = 0;
1139 Extracts a pattern, double-quoted string, or transliteration. This
1142 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
1143 processing a pattern (PL_lex_inpat is true), a transliteration
1144 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
1146 Returns a pointer to the character scanned up to. Iff this is
1147 advanced from the start pointer supplied (ie if anything was
1148 successfully parsed), will leave an OP for the substring scanned
1149 in yylval. Caller must intuit reason for not parsing further
1150 by looking at the next characters herself.
1154 double-quoted style: \r and \n
1155 regexp special ones: \D \s
1157 backrefs: \1 (deprecated in substitution replacements)
1158 case and quoting: \U \Q \E
1159 stops on @ and $, but not for $ as tail anchor
1161 In transliterations:
1162 characters are VERY literal, except for - not at the start or end
1163 of the string, which indicates a range. scan_const expands the
1164 range to the full set of intermediate characters.
1166 In double-quoted strings:
1168 double-quoted style: \r and \n
1170 backrefs: \1 (deprecated)
1171 case and quoting: \U \Q \E
1174 scan_const does *not* construct ops to handle interpolated strings.
1175 It stops processing as soon as it finds an embedded $ or @ variable
1176 and leaves it to the caller to work out what's going on.
1178 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
1180 $ in pattern could be $foo or could be tail anchor. Assumption:
1181 it's a tail anchor if $ is the last thing in the string, or if it's
1182 followed by one of ")| \n\t"
1184 \1 (backreferences) are turned into $1
1186 The structure of the code is
1187 while (there's a character to process) {
1188 handle transliteration ranges
1189 skip regexp comments
1190 skip # initiated comments in //x patterns
1191 check for embedded @foo
1192 check for embedded scalars
1194 leave intact backslashes from leave (below)
1195 deprecate \1 in strings and sub replacements
1196 handle string-changing backslashes \l \U \Q \E, etc.
1197 switch (what was escaped) {
1198 handle - in a transliteration (becomes a literal -)
1199 handle \132 octal characters
1200 handle 0x15 hex characters
1201 handle \cV (control V)
1202 handle printf backslashes (\f, \r, \n, etc)
1204 } (end if backslash)
1205 } (end while character to read)
1210 S_scan_const(pTHX_ char *start)
1212 register char *send = PL_bufend; /* end of the constant */
1213 SV *sv = NEWSV(93, send - start); /* sv for the constant */
1214 register char *s = start; /* start of the constant */
1215 register char *d = SvPVX(sv); /* destination for copies */
1216 bool dorange = FALSE; /* are we in a translit range? */
1217 bool didrange = FALSE; /* did we just finish a range? */
1218 bool has_utf8 = (PL_linestr && SvUTF8(PL_linestr));
1219 /* the constant is UTF8 */
1222 I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
1223 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1225 I32 this_utf8 = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
1226 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ?
1227 OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
1229 const char *leaveit = /* set of acceptably-backslashed characters */
1231 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
1234 while (s < send || dorange) {
1235 /* get transliterations out of the way (they're most literal) */
1236 if (PL_lex_inwhat == OP_TRANS) {
1237 /* expand a range A-Z to the full set of characters. AIE! */
1239 I32 i; /* current expanded character */
1240 I32 min; /* first character in range */
1241 I32 max; /* last character in range */
1243 i = d - SvPVX(sv); /* remember current offset */
1244 SvGROW(sv, SvLEN(sv) + 256); /* never more than 256 chars in a range */
1245 d = SvPVX(sv) + i; /* refresh d after realloc */
1246 d -= 2; /* eat the first char and the - */
1248 min = (U8)*d; /* first char in range */
1249 max = (U8)d[1]; /* last char in range */
1253 "Invalid [] range \"%c-%c\" in transliteration operator",
1254 (char)min, (char)max);
1258 if ((isLOWER(min) && isLOWER(max)) ||
1259 (isUPPER(min) && isUPPER(max))) {
1261 for (i = min; i <= max; i++)
1265 for (i = min; i <= max; i++)
1272 for (i = min; i <= max; i++)
1275 /* mark the range as done, and continue */
1281 /* range begins (ignore - as first or last char) */
1282 else if (*s == '-' && s+1 < send && s != start) {
1284 Perl_croak(aTHX_ "Ambiguous range in transliteration operator");
1287 *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
1299 /* if we get here, we're not doing a transliteration */
1301 /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
1302 except for the last char, which will be done separately. */
1303 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
1305 while (s < send && *s != ')')
1308 else if (s[2] == '{' /* This should match regcomp.c */
1309 || ((s[2] == 'p' || s[2] == '?') && s[3] == '{'))
1312 char *regparse = s + (s[2] == '{' ? 3 : 4);
1315 while (count && (c = *regparse)) {
1316 if (c == '\\' && regparse[1])
1324 if (*regparse != ')') {
1325 regparse--; /* Leave one char for continuation. */
1326 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
1328 while (s < regparse)
1333 /* likewise skip #-initiated comments in //x patterns */
1334 else if (*s == '#' && PL_lex_inpat &&
1335 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
1336 while (s+1 < send && *s != '\n')
1340 /* check for embedded arrays
1341 (@foo, @:foo, @'foo, @{foo}, @$foo, @+, @-)
1343 else if (*s == '@' && s[1]
1344 && (isALNUM_lazy_if(s+1,UTF) || strchr(":'{$+-", s[1])))
1347 /* check for embedded scalars. only stop if we're sure it's a
1350 else if (*s == '$') {
1351 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
1353 if (s + 1 < send && !strchr("()| \n\t", s[1]))
1354 break; /* in regexp, $ might be tail anchor */
1358 if (*s == '\\' && s+1 < send) {
1361 /* some backslashes we leave behind */
1362 if (*leaveit && *s && strchr(leaveit, *s)) {
1368 /* deprecate \1 in strings and substitution replacements */
1369 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1370 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1372 if (ckWARN(WARN_SYNTAX))
1373 Perl_warner(aTHX_ WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1378 /* string-change backslash escapes */
1379 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1384 /* if we get here, it's either a quoted -, or a digit */
1387 /* quoted - in transliterations */
1389 if (PL_lex_inwhat == OP_TRANS) {
1396 if (ckWARN(WARN_MISC) && isALNUM(*s))
1397 Perl_warner(aTHX_ WARN_MISC,
1398 "Unrecognized escape \\%c passed through",
1400 /* default action is to copy the quoted character */
1401 goto default_action;
1404 /* \132 indicates an octal constant */
1405 case '0': case '1': case '2': case '3':
1406 case '4': case '5': case '6': case '7':
1408 STRLEN len = 0; /* disallow underscores */
1409 uv = (UV)scan_oct(s, 3, &len);
1412 goto NUM_ESCAPE_INSERT;
1414 /* \x24 indicates a hex constant */
1418 char* e = strchr(s, '}');
1420 yyerror("Missing right brace on \\x{}");
1424 STRLEN len = 1; /* allow underscores */
1425 uv = (UV)scan_hex(s + 1, e - s - 1, &len);
1431 STRLEN len = 0; /* disallow underscores */
1432 uv = (UV)scan_hex(s, 2, &len);
1438 /* Insert oct or hex escaped character.
1439 * There will always enough room in sv since such
1440 * escapes will be longer than any UT-F8 sequence
1441 * they can end up as. */
1443 /* This spot is wrong for EBCDIC. Characters like
1444 * the lowercase letters and digits are >127 in EBCDIC,
1445 * so here they would need to be mapped to the Unicode
1446 * repertoire. --jhi */
1449 if (!has_utf8 && uv > 255) {
1450 /* Might need to recode whatever we have
1451 * accumulated so far if it contains any
1454 * (Can't we keep track of that and avoid
1455 * this rescan? --jhi)
1460 for (c = SvPVX(sv); c < d; c++) {
1461 if (UTF8_IS_CONTINUED(*c))
1465 char *old_pvx = SvPVX(sv);
1469 SvCUR(sv) + hicount + 1) +
1477 if (UTF8_IS_CONTINUED(*src)) {
1478 *dst-- = UTF8_EIGHT_BIT_LO(*src);
1479 *dst-- = UTF8_EIGHT_BIT_HI(*src--);
1488 if (has_utf8 || uv > 255) {
1489 d = (char*)uv_to_utf8((U8*)d, uv);
1491 if (PL_lex_inwhat == OP_TRANS &&
1492 PL_sublex_info.sub_op) {
1493 PL_sublex_info.sub_op->op_private |=
1494 (PL_lex_repl ? OPpTRANS_FROM_UTF
1508 /* \N{latin small letter a} is a named character */
1512 char* e = strchr(s, '}');
1518 yyerror("Missing right brace on \\N{}");
1522 res = newSVpvn(s + 1, e - s - 1);
1523 res = new_constant( Nullch, 0, "charnames",
1524 res, Nullsv, "\\N{...}" );
1526 sv_utf8_upgrade(res);
1527 str = SvPV(res,len);
1528 if (!has_utf8 && SvUTF8(res)) {
1529 char *ostart = SvPVX(sv);
1530 SvCUR_set(sv, d - ostart);
1533 sv_utf8_upgrade(sv);
1534 /* this just broke our allocation above... */
1535 SvGROW(sv, send - start);
1536 d = SvPVX(sv) + SvCUR(sv);
1539 if (len > e - s + 4) {
1540 char *odest = SvPVX(sv);
1542 SvGROW(sv, (SvCUR(sv) + len - (e - s + 4)));
1543 d = SvPVX(sv) + (d - odest);
1545 Copy(str, d, len, char);
1552 yyerror("Missing braces on \\N{}");
1555 /* \c is a control character */
1572 /* printf-style backslashes, formfeeds, newlines, etc */
1590 *d++ = '\047'; /* CP 1047 */
1593 *d++ = '\057'; /* CP 1047 */
1607 } /* end if (backslash) */
1610 if (UTF8_IS_CONTINUED(*s) && (this_utf8 || has_utf8)) {
1611 STRLEN len = (STRLEN) -1;
1614 uv = utf8_to_uv((U8*)s, send - s, &len, 0);
1616 if (len == (STRLEN)-1) {
1617 /* Illegal UTF8 (a high-bit byte), make it valid. */
1618 char *old_pvx = SvPVX(sv);
1619 /* need space for one extra char (NOTE: SvCUR() not set here) */
1620 d = SvGROW(sv, SvLEN(sv) + 1) + (d - old_pvx);
1621 d = (char*)uv_to_utf8((U8*)d, (U8)*s++);
1628 if (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op) {
1629 PL_sublex_info.sub_op->op_private |=
1630 (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
1637 } /* while loop to process each character */
1639 /* terminate the string and set up the sv */
1641 SvCUR_set(sv, d - SvPVX(sv));
1646 /* shrink the sv if we allocated more than we used */
1647 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1648 SvLEN_set(sv, SvCUR(sv) + 1);
1649 Renew(SvPVX(sv), SvLEN(sv), char);
1652 /* return the substring (via yylval) only if we parsed anything */
1653 if (s > PL_bufptr) {
1654 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1655 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1657 ( PL_lex_inwhat == OP_TRANS
1659 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1662 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1669 * Returns TRUE if there's more to the expression (e.g., a subscript),
1672 * It deals with "$foo[3]" and /$foo[3]/ and /$foo[0123456789$]+/
1674 * ->[ and ->{ return TRUE
1675 * { and [ outside a pattern are always subscripts, so return TRUE
1676 * if we're outside a pattern and it's not { or [, then return FALSE
1677 * if we're in a pattern and the first char is a {
1678 * {4,5} (any digits around the comma) returns FALSE
1679 * if we're in a pattern and the first char is a [
1681 * [SOMETHING] has a funky algorithm to decide whether it's a
1682 * character class or not. It has to deal with things like
1683 * /$foo[-3]/ and /$foo[$bar]/ as well as /$foo[$\d]+/
1684 * anything else returns TRUE
1687 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1690 S_intuit_more(pTHX_ register char *s)
1692 if (PL_lex_brackets)
1694 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1696 if (*s != '{' && *s != '[')
1701 /* In a pattern, so maybe we have {n,m}. */
1718 /* On the other hand, maybe we have a character class */
1721 if (*s == ']' || *s == '^')
1724 /* this is terrifying, and it works */
1725 int weight = 2; /* let's weigh the evidence */
1727 unsigned char un_char = 255, last_un_char;
1728 char *send = strchr(s,']');
1729 char tmpbuf[sizeof PL_tokenbuf * 4];
1731 if (!send) /* has to be an expression */
1734 Zero(seen,256,char);
1737 else if (isDIGIT(*s)) {
1739 if (isDIGIT(s[1]) && s[2] == ']')
1745 for (; s < send; s++) {
1746 last_un_char = un_char;
1747 un_char = (unsigned char)*s;
1752 weight -= seen[un_char] * 10;
1753 if (isALNUM_lazy_if(s+1,UTF)) {
1754 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1755 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1760 else if (*s == '$' && s[1] &&
1761 strchr("[#!%*<>()-=",s[1])) {
1762 if (/*{*/ strchr("])} =",s[2]))
1771 if (strchr("wds]",s[1]))
1773 else if (seen['\''] || seen['"'])
1775 else if (strchr("rnftbxcav",s[1]))
1777 else if (isDIGIT(s[1])) {
1779 while (s[1] && isDIGIT(s[1]))
1789 if (strchr("aA01! ",last_un_char))
1791 if (strchr("zZ79~",s[1]))
1793 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1794 weight -= 5; /* cope with negative subscript */
1797 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1798 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1803 if (keyword(tmpbuf, d - tmpbuf))
1806 if (un_char == last_un_char + 1)
1808 weight -= seen[un_char];
1813 if (weight >= 0) /* probably a character class */
1823 * Does all the checking to disambiguate
1825 * between foo(bar) and bar->foo. Returns 0 if not a method, otherwise
1826 * FUNCMETH (bar->foo(args)) or METHOD (bar->foo args).
1828 * First argument is the stuff after the first token, e.g. "bar".
1830 * Not a method if bar is a filehandle.
1831 * Not a method if foo is a subroutine prototyped to take a filehandle.
1832 * Not a method if it's really "Foo $bar"
1833 * Method if it's "foo $bar"
1834 * Not a method if it's really "print foo $bar"
1835 * Method if it's really "foo package::" (interpreted as package->foo)
1836 * Not a method if bar is known to be a subroutne ("sub bar; foo bar")
1837 * Not a method if bar is a filehandle or package, but is quoted with
1842 S_intuit_method(pTHX_ char *start, GV *gv)
1844 char *s = start + (*start == '$');
1845 char tmpbuf[sizeof PL_tokenbuf];
1853 if ((cv = GvCVu(gv))) {
1854 char *proto = SvPVX(cv);
1864 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1865 /* start is the beginning of the possible filehandle/object,
1866 * and s is the end of it
1867 * tmpbuf is a copy of it
1870 if (*start == '$') {
1871 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1876 return *s == '(' ? FUNCMETH : METHOD;
1878 if (!keyword(tmpbuf, len)) {
1879 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1884 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1885 if (indirgv && GvCVu(indirgv))
1887 /* filehandle or package name makes it a method */
1888 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1890 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1891 return 0; /* no assumptions -- "=>" quotes bearword */
1893 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1894 newSVpvn(tmpbuf,len));
1895 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1899 return *s == '(' ? FUNCMETH : METHOD;
1907 * Return a string of Perl code to load the debugger. If PERL5DB
1908 * is set, it will return the contents of that, otherwise a
1909 * compile-time require of perl5db.pl.
1916 char *pdb = PerlEnv_getenv("PERL5DB");
1920 SETERRNO(0,SS$_NORMAL);
1921 return "BEGIN { require 'perl5db.pl' }";
1927 /* Encoded script support. filter_add() effectively inserts a
1928 * 'pre-processing' function into the current source input stream.
1929 * Note that the filter function only applies to the current source file
1930 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1932 * The datasv parameter (which may be NULL) can be used to pass
1933 * private data to this instance of the filter. The filter function
1934 * can recover the SV using the FILTER_DATA macro and use it to
1935 * store private buffers and state information.
1937 * The supplied datasv parameter is upgraded to a PVIO type
1938 * and the IoDIRP/IoANY field is used to store the function pointer,
1939 * and IOf_FAKE_DIRP is enabled on datasv to mark this as such.
1940 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1941 * private use must be set using malloc'd pointers.
1945 Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
1950 if (!PL_rsfp_filters)
1951 PL_rsfp_filters = newAV();
1953 datasv = NEWSV(255,0);
1954 if (!SvUPGRADE(datasv, SVt_PVIO))
1955 Perl_die(aTHX_ "Can't upgrade filter_add data to SVt_PVIO");
1956 IoANY(datasv) = (void *)funcp; /* stash funcp into spare field */
1957 IoFLAGS(datasv) |= IOf_FAKE_DIRP;
1958 DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_add func %p (%s)\n",
1959 funcp, SvPV_nolen(datasv)));
1960 av_unshift(PL_rsfp_filters, 1);
1961 av_store(PL_rsfp_filters, 0, datasv) ;
1966 /* Delete most recently added instance of this filter function. */
1968 Perl_filter_del(pTHX_ filter_t funcp)
1971 DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_del func %p", funcp));
1972 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1974 /* if filter is on top of stack (usual case) just pop it off */
1975 datasv = FILTER_DATA(AvFILLp(PL_rsfp_filters));
1976 if (IoANY(datasv) == (void *)funcp) {
1977 IoFLAGS(datasv) &= ~IOf_FAKE_DIRP;
1978 IoANY(datasv) = (void *)NULL;
1979 sv_free(av_pop(PL_rsfp_filters));
1983 /* we need to search for the correct entry and clear it */
1984 Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
1988 /* Invoke the n'th filter function for the current rsfp. */
1990 Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
1993 /* 0 = read one text line */
1998 if (!PL_rsfp_filters)
2000 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
2001 /* Provide a default input filter to make life easy. */
2002 /* Note that we append to the line. This is handy. */
2003 DEBUG_P(PerlIO_printf(Perl_debug_log,
2004 "filter_read %d: from rsfp\n", idx));
2008 int old_len = SvCUR(buf_sv) ;
2010 /* ensure buf_sv is large enough */
2011 SvGROW(buf_sv, old_len + maxlen) ;
2012 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
2013 if (PerlIO_error(PL_rsfp))
2014 return -1; /* error */
2016 return 0 ; /* end of file */
2018 SvCUR_set(buf_sv, old_len + len) ;
2021 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
2022 if (PerlIO_error(PL_rsfp))
2023 return -1; /* error */
2025 return 0 ; /* end of file */
2028 return SvCUR(buf_sv);
2030 /* Skip this filter slot if filter has been deleted */
2031 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
2032 DEBUG_P(PerlIO_printf(Perl_debug_log,
2033 "filter_read %d: skipped (filter deleted)\n",
2035 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
2037 /* Get function pointer hidden within datasv */
2038 funcp = (filter_t)IoANY(datasv);
2039 DEBUG_P(PerlIO_printf(Perl_debug_log,
2040 "filter_read %d: via function %p (%s)\n",
2041 idx, funcp, SvPV_nolen(datasv)));
2042 /* Call function. The function is expected to */
2043 /* call "FILTER_READ(idx+1, buf_sv)" first. */
2044 /* Return: <0:error, =0:eof, >0:not eof */
2045 return (*funcp)(aTHXo_ idx, buf_sv, maxlen);
2049 S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append)
2051 #ifdef PERL_CR_FILTER
2052 if (!PL_rsfp_filters) {
2053 filter_add(S_cr_textfilter,NULL);
2056 if (PL_rsfp_filters) {
2059 SvCUR_set(sv, 0); /* start with empty line */
2060 if (FILTER_READ(0, sv, 0) > 0)
2061 return ( SvPVX(sv) ) ;
2066 return (sv_gets(sv, fp, append));
2070 S_find_in_my_stash(pTHX_ char *pkgname, I32 len)
2074 if (len == 11 && *pkgname == '_' && strEQ(pkgname, "__PACKAGE__"))
2078 (pkgname[len - 2] == ':' && pkgname[len - 1] == ':') &&
2079 (gv = gv_fetchpv(pkgname, FALSE, SVt_PVHV)))
2081 return GvHV(gv); /* Foo:: */
2084 /* use constant CLASS => 'MyClass' */
2085 if ((gv = gv_fetchpv(pkgname, FALSE, SVt_PVCV))) {
2087 if (GvCV(gv) && (sv = cv_const_sv(GvCV(gv)))) {
2088 pkgname = SvPV_nolen(sv);
2092 return gv_stashpv(pkgname, FALSE);
2096 static char* exp_name[] =
2097 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK",
2098 "ATTRTERM", "TERMBLOCK"
2105 Works out what to call the token just pulled out of the input
2106 stream. The yacc parser takes care of taking the ops we return and
2107 stitching them into a tree.
2113 if read an identifier
2114 if we're in a my declaration
2115 croak if they tried to say my($foo::bar)
2116 build the ops for a my() declaration
2117 if it's an access to a my() variable
2118 are we in a sort block?
2119 croak if my($a); $a <=> $b
2120 build ops for access to a my() variable
2121 if in a dq string, and they've said @foo and we can't find @foo
2123 build ops for a bareword
2124 if we already built the token before, use it.
2127 #ifdef USE_PURE_BISON
2129 Perl_yylex_r(pTHX_ YYSTYPE *lvalp, int *lcharp)
2134 yylval_pointer[yyactlevel] = lvalp;
2135 yychar_pointer[yyactlevel] = lcharp;
2136 if (yyactlevel >= YYMAXLEVEL)
2137 Perl_croak(aTHX_ "panic: YYMAXLEVEL");
2139 r = Perl_yylex(aTHX);
2149 #pragma segment Perl_yylex
2162 /* check if there's an identifier for us to look at */
2163 if (PL_pending_ident) {
2164 /* pit holds the identifier we read and pending_ident is reset */
2165 char pit = PL_pending_ident;
2166 PL_pending_ident = 0;
2168 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2169 "### Tokener saw identifier '%s'\n", PL_tokenbuf); })
2171 /* if we're in a my(), we can't allow dynamics here.
2172 $foo'bar has already been turned into $foo::bar, so
2173 just check for colons.
2175 if it's a legal name, the OP is a PADANY.
2178 if (PL_in_my == KEY_our) { /* "our" is merely analogous to "my" */
2179 if (strchr(PL_tokenbuf,':'))
2180 yyerror(Perl_form(aTHX_ "No package name allowed for "
2181 "variable %s in \"our\"",
2183 tmp = pad_allocmy(PL_tokenbuf);
2186 if (strchr(PL_tokenbuf,':'))
2187 yyerror(Perl_form(aTHX_ PL_no_myglob,PL_tokenbuf));
2189 yylval.opval = newOP(OP_PADANY, 0);
2190 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
2196 build the ops for accesses to a my() variable.
2198 Deny my($a) or my($b) in a sort block, *if* $a or $b is
2199 then used in a comparison. This catches most, but not
2200 all cases. For instance, it catches
2201 sort { my($a); $a <=> $b }
2203 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
2204 (although why you'd do that is anyone's guess).
2207 if (!strchr(PL_tokenbuf,':')) {
2209 /* Check for single character per-thread SVs */
2210 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
2211 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
2212 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
2214 yylval.opval = newOP(OP_THREADSV, 0);
2215 yylval.opval->op_targ = tmp;
2218 #endif /* USE_THREADS */
2219 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
2220 SV *namesv = AvARRAY(PL_comppad_name)[tmp];
2221 /* might be an "our" variable" */
2222 if (SvFLAGS(namesv) & SVpad_OUR) {
2223 /* build ops for a bareword */
2224 SV *sym = newSVpv(HvNAME(GvSTASH(namesv)),0);
2225 sv_catpvn(sym, "::", 2);
2226 sv_catpv(sym, PL_tokenbuf+1);
2227 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sym);
2228 yylval.opval->op_private = OPpCONST_ENTERED;
2229 gv_fetchpv(SvPVX(sym),
2231 ? (GV_ADDMULTI | GV_ADDINEVAL)
2234 ((PL_tokenbuf[0] == '$') ? SVt_PV
2235 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
2240 /* if it's a sort block and they're naming $a or $b */
2241 if (PL_last_lop_op == OP_SORT &&
2242 PL_tokenbuf[0] == '$' &&
2243 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
2246 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
2247 d < PL_bufend && *d != '\n';
2250 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
2251 Perl_croak(aTHX_ "Can't use \"my %s\" in sort comparison",
2257 yylval.opval = newOP(OP_PADANY, 0);
2258 yylval.opval->op_targ = tmp;
2264 Whine if they've said @foo in a doublequoted string,
2265 and @foo isn't a variable we can find in the symbol
2268 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
2269 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
2270 if ((!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
2271 && ckWARN(WARN_AMBIGUOUS))
2273 /* Downgraded from fatal to warning 20000522 mjd */
2274 Perl_warner(aTHX_ WARN_AMBIGUOUS,
2275 "Possible unintended interpolation of %s in string",
2280 /* build ops for a bareword */
2281 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
2282 yylval.opval->op_private = OPpCONST_ENTERED;
2283 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
2284 ((PL_tokenbuf[0] == '$') ? SVt_PV
2285 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
2290 /* no identifier pending identification */
2292 switch (PL_lex_state) {
2294 case LEX_NORMAL: /* Some compilers will produce faster */
2295 case LEX_INTERPNORMAL: /* code if we comment these out. */
2299 /* when we've already built the next token, just pull it out of the queue */
2302 yylval = PL_nextval[PL_nexttoke];
2304 PL_lex_state = PL_lex_defer;
2305 PL_expect = PL_lex_expect;
2306 PL_lex_defer = LEX_NORMAL;
2308 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2309 "### Next token after '%s' was known, type %"IVdf"\n", PL_bufptr,
2310 (IV)PL_nexttype[PL_nexttoke]); })
2312 return(PL_nexttype[PL_nexttoke]);
2314 /* interpolated case modifiers like \L \U, including \Q and \E.
2315 when we get here, PL_bufptr is at the \
2317 case LEX_INTERPCASEMOD:
2319 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
2320 Perl_croak(aTHX_ "panic: INTERPCASEMOD");
2322 /* handle \E or end of string */
2323 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
2327 if (PL_lex_casemods) {
2328 oldmod = PL_lex_casestack[--PL_lex_casemods];
2329 PL_lex_casestack[PL_lex_casemods] = '\0';
2331 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
2333 PL_lex_state = LEX_INTERPCONCAT;
2337 if (PL_bufptr != PL_bufend)
2339 PL_lex_state = LEX_INTERPCONCAT;
2343 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2344 "### Saw case modifier at '%s'\n", PL_bufptr); })
2346 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
2347 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
2348 if (strchr("LU", *s) &&
2349 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
2351 PL_lex_casestack[--PL_lex_casemods] = '\0';
2354 if (PL_lex_casemods > 10) {
2355 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
2356 if (newlb != PL_lex_casestack) {
2358 PL_lex_casestack = newlb;
2361 PL_lex_casestack[PL_lex_casemods++] = *s;
2362 PL_lex_casestack[PL_lex_casemods] = '\0';
2363 PL_lex_state = LEX_INTERPCONCAT;
2364 PL_nextval[PL_nexttoke].ival = 0;
2367 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
2369 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
2371 PL_nextval[PL_nexttoke].ival = OP_LC;
2373 PL_nextval[PL_nexttoke].ival = OP_UC;
2375 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
2377 Perl_croak(aTHX_ "panic: yylex");
2380 if (PL_lex_starts) {
2389 case LEX_INTERPPUSH:
2390 return sublex_push();
2392 case LEX_INTERPSTART:
2393 if (PL_bufptr == PL_bufend)
2394 return sublex_done();
2395 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2396 "### Interpolated variable at '%s'\n", PL_bufptr); })
2398 PL_lex_dojoin = (*PL_bufptr == '@');
2399 PL_lex_state = LEX_INTERPNORMAL;
2400 if (PL_lex_dojoin) {
2401 PL_nextval[PL_nexttoke].ival = 0;
2404 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
2405 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
2406 force_next(PRIVATEREF);
2408 force_ident("\"", '$');
2409 #endif /* USE_THREADS */
2410 PL_nextval[PL_nexttoke].ival = 0;
2412 PL_nextval[PL_nexttoke].ival = 0;
2414 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
2417 if (PL_lex_starts++) {
2423 case LEX_INTERPENDMAYBE:
2424 if (intuit_more(PL_bufptr)) {
2425 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
2431 if (PL_lex_dojoin) {
2432 PL_lex_dojoin = FALSE;
2433 PL_lex_state = LEX_INTERPCONCAT;
2436 if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
2437 && SvEVALED(PL_lex_repl))
2439 if (PL_bufptr != PL_bufend)
2440 Perl_croak(aTHX_ "Bad evalled substitution pattern");
2441 PL_lex_repl = Nullsv;
2444 case LEX_INTERPCONCAT:
2446 if (PL_lex_brackets)
2447 Perl_croak(aTHX_ "panic: INTERPCONCAT");
2449 if (PL_bufptr == PL_bufend)
2450 return sublex_done();
2452 if (SvIVX(PL_linestr) == '\'') {
2453 SV *sv = newSVsv(PL_linestr);
2456 else if ( PL_hints & HINT_NEW_RE )
2457 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
2458 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
2462 s = scan_const(PL_bufptr);
2464 PL_lex_state = LEX_INTERPCASEMOD;
2466 PL_lex_state = LEX_INTERPSTART;
2469 if (s != PL_bufptr) {
2470 PL_nextval[PL_nexttoke] = yylval;
2473 if (PL_lex_starts++)
2483 PL_lex_state = LEX_NORMAL;
2484 s = scan_formline(PL_bufptr);
2485 if (!PL_lex_formbrack)
2491 PL_oldoldbufptr = PL_oldbufptr;
2494 PerlIO_printf(Perl_debug_log, "### Tokener expecting %s at %s\n",
2495 exp_name[PL_expect], s);
2501 if (isIDFIRST_lazy_if(s,UTF))
2503 Perl_croak(aTHX_ "Unrecognized character \\x%02X", *s & 255);
2506 goto fake_eof; /* emulate EOF on ^D or ^Z */
2511 if (PL_lex_brackets)
2512 yyerror("Missing right curly or square bracket");
2513 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2514 "### Tokener got EOF\n");
2518 if (s++ < PL_bufend)
2519 goto retry; /* ignore stray nulls */
2522 if (!PL_in_eval && !PL_preambled) {
2523 PL_preambled = TRUE;
2524 sv_setpv(PL_linestr,incl_perldb());
2525 if (SvCUR(PL_linestr))
2526 sv_catpv(PL_linestr,";");
2528 while(AvFILLp(PL_preambleav) >= 0) {
2529 SV *tmpsv = av_shift(PL_preambleav);
2530 sv_catsv(PL_linestr, tmpsv);
2531 sv_catpv(PL_linestr, ";");
2534 sv_free((SV*)PL_preambleav);
2535 PL_preambleav = NULL;
2537 if (PL_minus_n || PL_minus_p) {
2538 sv_catpv(PL_linestr, "LINE: while (<>) {");
2540 sv_catpv(PL_linestr,"chomp;");
2542 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
2544 GvIMPORTED_AV_on(gv);
2546 if (strchr("/'\"", *PL_splitstr)
2547 && strchr(PL_splitstr + 1, *PL_splitstr))
2548 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s);", PL_splitstr);
2551 s = "'~#\200\1'"; /* surely one char is unused...*/
2552 while (s[1] && strchr(PL_splitstr, *s)) s++;
2554 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s%c",
2555 "q" + (delim == '\''), delim);
2556 for (s = PL_splitstr; *s; s++) {
2558 sv_catpvn(PL_linestr, "\\", 1);
2559 sv_catpvn(PL_linestr, s, 1);
2561 Perl_sv_catpvf(aTHX_ PL_linestr, "%c);", delim);
2565 sv_catpv(PL_linestr,"@F=split(' ');");
2568 sv_catpv(PL_linestr, "\n");
2569 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2570 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2571 PL_last_lop = PL_last_uni = Nullch;
2572 if (PERLDB_LINE && PL_curstash != PL_debstash) {
2573 SV *sv = NEWSV(85,0);
2575 sv_upgrade(sv, SVt_PVMG);
2576 sv_setsv(sv,PL_linestr);
2577 av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
2582 bof = PL_rsfp ? TRUE : FALSE;
2583 if ((s = filter_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
2586 if (PL_preprocess && !PL_in_eval)
2587 (void)PerlProc_pclose(PL_rsfp);
2588 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
2589 PerlIO_clearerr(PL_rsfp);
2591 (void)PerlIO_close(PL_rsfp);
2593 PL_doextract = FALSE;
2595 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
2596 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
2597 sv_catpv(PL_linestr,";}");
2598 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2599 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2600 PL_last_lop = PL_last_uni = Nullch;
2601 PL_minus_n = PL_minus_p = 0;
2604 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2605 PL_last_lop = PL_last_uni = Nullch;
2606 sv_setpv(PL_linestr,"");
2607 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
2609 /* if it looks like the start of a BOM, check if it in fact is */
2610 else if (bof && (!*s || *(U8*)s == 0xEF || *(U8*)s >= 0xFE)) {
2611 #ifdef PERLIO_IS_STDIO
2612 # ifdef __GNU_LIBRARY__
2613 # if __GNU_LIBRARY__ == 1 /* Linux glibc5 */
2614 # define FTELL_FOR_PIPE_IS_BROKEN
2618 # if __GLIBC__ == 1 /* maybe some glibc5 release had it like this? */
2619 # define FTELL_FOR_PIPE_IS_BROKEN
2624 #ifdef FTELL_FOR_PIPE_IS_BROKEN
2625 /* This loses the possibility to detect the bof
2626 * situation on perl -P when the libc5 is being used.
2627 * Workaround? Maybe attach some extra state to PL_rsfp?
2630 bof = PerlIO_tell(PL_rsfp) == SvCUR(PL_linestr);
2632 bof = PerlIO_tell(PL_rsfp) == SvCUR(PL_linestr);
2635 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2636 s = swallow_bom((U8*)s);
2640 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
2641 PL_doextract = FALSE;
2643 /* Incest with pod. */
2644 if (*s == '=' && strnEQ(s, "=cut", 4)) {
2645 sv_setpv(PL_linestr, "");
2646 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2647 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2648 PL_last_lop = PL_last_uni = Nullch;
2649 PL_doextract = FALSE;
2653 } while (PL_doextract);
2654 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
2655 if (PERLDB_LINE && PL_curstash != PL_debstash) {
2656 SV *sv = NEWSV(85,0);
2658 sv_upgrade(sv, SVt_PVMG);
2659 sv_setsv(sv,PL_linestr);
2660 av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
2662 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2663 PL_last_lop = PL_last_uni = Nullch;
2664 if (CopLINE(PL_curcop) == 1) {
2665 while (s < PL_bufend && isSPACE(*s))
2667 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
2671 if (*s == '#' && *(s+1) == '!')
2673 #ifdef ALTERNATE_SHEBANG
2675 static char as[] = ALTERNATE_SHEBANG;
2676 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2677 d = s + (sizeof(as) - 1);
2679 #endif /* ALTERNATE_SHEBANG */
2688 while (*d && !isSPACE(*d))
2692 #ifdef ARG_ZERO_IS_SCRIPT
2693 if (ipathend > ipath) {
2695 * HP-UX (at least) sets argv[0] to the script name,
2696 * which makes $^X incorrect. And Digital UNIX and Linux,
2697 * at least, set argv[0] to the basename of the Perl
2698 * interpreter. So, having found "#!", we'll set it right.
2700 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2701 assert(SvPOK(x) || SvGMAGICAL(x));
2702 if (sv_eq(x, CopFILESV(PL_curcop))) {
2703 sv_setpvn(x, ipath, ipathend - ipath);
2706 TAINT_NOT; /* $^X is always tainted, but that's OK */
2708 #endif /* ARG_ZERO_IS_SCRIPT */
2713 d = instr(s,"perl -");
2715 d = instr(s,"perl");
2717 /* avoid getting into infinite loops when shebang
2718 * line contains "Perl" rather than "perl" */
2720 for (d = ipathend-4; d >= ipath; --d) {
2721 if ((*d == 'p' || *d == 'P')
2722 && !ibcmp(d, "perl", 4))
2732 #ifdef ALTERNATE_SHEBANG
2734 * If the ALTERNATE_SHEBANG on this system starts with a
2735 * character that can be part of a Perl expression, then if
2736 * we see it but not "perl", we're probably looking at the
2737 * start of Perl code, not a request to hand off to some
2738 * other interpreter. Similarly, if "perl" is there, but
2739 * not in the first 'word' of the line, we assume the line
2740 * contains the start of the Perl program.
2742 if (d && *s != '#') {
2744 while (*c && !strchr("; \t\r\n\f\v#", *c))
2747 d = Nullch; /* "perl" not in first word; ignore */
2749 *s = '#'; /* Don't try to parse shebang line */
2751 #endif /* ALTERNATE_SHEBANG */
2752 #ifndef MACOS_TRADITIONAL
2757 !instr(s,"indir") &&
2758 instr(PL_origargv[0],"perl"))
2764 while (s < PL_bufend && isSPACE(*s))
2766 if (s < PL_bufend) {
2767 Newz(899,newargv,PL_origargc+3,char*);
2769 while (s < PL_bufend && !isSPACE(*s))
2772 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2775 newargv = PL_origargv;
2777 PerlProc_execv(ipath, EXEC_ARGV_CAST(newargv));
2778 Perl_croak(aTHX_ "Can't exec %s", ipath);
2782 U32 oldpdb = PL_perldb;
2783 bool oldn = PL_minus_n;
2784 bool oldp = PL_minus_p;
2786 while (*d && !isSPACE(*d)) d++;
2787 while (SPACE_OR_TAB(*d)) d++;
2791 if (*d == 'M' || *d == 'm') {
2793 while (*d && !isSPACE(*d)) d++;
2794 Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
2797 d = moreswitches(d);
2799 if ((PERLDB_LINE && !oldpdb) ||
2800 ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
2801 /* if we have already added "LINE: while (<>) {",
2802 we must not do it again */
2804 sv_setpv(PL_linestr, "");
2805 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2806 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2807 PL_last_lop = PL_last_uni = Nullch;
2808 PL_preambled = FALSE;
2810 (void)gv_fetchfile(PL_origfilename);
2817 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2819 PL_lex_state = LEX_FORMLINE;
2824 #ifdef PERL_STRICT_CR
2825 Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
2827 "\t(Maybe you didn't strip carriage returns after a network transfer?)\n");
2829 case ' ': case '\t': case '\f': case 013:
2830 #ifdef MACOS_TRADITIONAL
2837 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2838 if (*s == '#' && s == PL_linestart && PL_in_eval && !PL_rsfp) {
2839 /* handle eval qq[#line 1 "foo"\n ...] */
2840 CopLINE_dec(PL_curcop);
2844 while (s < d && *s != '\n')
2849 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2851 PL_lex_state = LEX_FORMLINE;
2861 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2868 while (s < PL_bufend && SPACE_OR_TAB(*s))
2871 if (strnEQ(s,"=>",2)) {
2872 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2873 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2874 "### Saw unary minus before =>, forcing word '%s'\n", s);
2876 OPERATOR('-'); /* unary minus */
2878 PL_last_uni = PL_oldbufptr;
2880 case 'r': ftst = OP_FTEREAD; break;
2881 case 'w': ftst = OP_FTEWRITE; break;
2882 case 'x': ftst = OP_FTEEXEC; break;
2883 case 'o': ftst = OP_FTEOWNED; break;
2884 case 'R': ftst = OP_FTRREAD; break;
2885 case 'W': ftst = OP_FTRWRITE; break;
2886 case 'X': ftst = OP_FTREXEC; break;
2887 case 'O': ftst = OP_FTROWNED; break;
2888 case 'e': ftst = OP_FTIS; break;
2889 case 'z': ftst = OP_FTZERO; break;
2890 case 's': ftst = OP_FTSIZE; break;
2891 case 'f': ftst = OP_FTFILE; break;
2892 case 'd': ftst = OP_FTDIR; break;
2893 case 'l': ftst = OP_FTLINK; break;
2894 case 'p': ftst = OP_FTPIPE; break;
2895 case 'S': ftst = OP_FTSOCK; break;
2896 case 'u': ftst = OP_FTSUID; break;
2897 case 'g': ftst = OP_FTSGID; break;
2898 case 'k': ftst = OP_FTSVTX; break;
2899 case 'b': ftst = OP_FTBLK; break;
2900 case 'c': ftst = OP_FTCHR; break;
2901 case 't': ftst = OP_FTTTY; break;
2902 case 'T': ftst = OP_FTTEXT; break;
2903 case 'B': ftst = OP_FTBINARY; break;
2904 case 'M': case 'A': case 'C':
2905 gv_fetchpv("\024",TRUE, SVt_PV);
2907 case 'M': ftst = OP_FTMTIME; break;
2908 case 'A': ftst = OP_FTATIME; break;
2909 case 'C': ftst = OP_FTCTIME; break;
2917 PL_last_lop_op = ftst;
2918 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2919 "### Saw file test %c\n", (int)ftst);
2924 /* Assume it was a minus followed by a one-letter named
2925 * subroutine call (or a -bareword), then. */
2926 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2927 "### %c looked like a file test but was not\n",
2936 if (PL_expect == XOPERATOR)
2941 else if (*s == '>') {
2944 if (isIDFIRST_lazy_if(s,UTF)) {
2945 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2953 if (PL_expect == XOPERATOR)
2956 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2958 OPERATOR('-'); /* unary minus */
2965 if (PL_expect == XOPERATOR)
2970 if (PL_expect == XOPERATOR)
2973 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2979 if (PL_expect != XOPERATOR) {
2980 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2981 PL_expect = XOPERATOR;
2982 force_ident(PL_tokenbuf, '*');
2995 if (PL_expect == XOPERATOR) {
2999 PL_tokenbuf[0] = '%';
3000 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
3001 if (!PL_tokenbuf[1]) {
3003 yyerror("Final % should be \\% or %name");
3006 PL_pending_ident = '%';
3025 switch (PL_expect) {
3028 if (!PL_in_my || PL_lex_state != LEX_NORMAL)
3030 PL_bufptr = s; /* update in case we back off */
3036 PL_expect = XTERMBLOCK;
3040 while (isIDFIRST_lazy_if(s,UTF)) {
3041 d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3042 if (isLOWER(*s) && (tmp = keyword(PL_tokenbuf, len))) {
3043 if (tmp < 0) tmp = -tmp;
3058 d = scan_str(d,TRUE,TRUE);
3060 /* MUST advance bufptr here to avoid bogus
3061 "at end of line" context messages from yyerror().
3063 PL_bufptr = s + len;
3064 yyerror("Unterminated attribute parameter in attribute list");
3067 return 0; /* EOF indicator */
3071 SV *sv = newSVpvn(s, len);
3072 sv_catsv(sv, PL_lex_stuff);
3073 attrs = append_elem(OP_LIST, attrs,
3074 newSVOP(OP_CONST, 0, sv));
3075 SvREFCNT_dec(PL_lex_stuff);
3076 PL_lex_stuff = Nullsv;
3079 if (!PL_in_my && len == 6 && strnEQ(s, "lvalue", len))
3080 CvLVALUE_on(PL_compcv);
3081 else if (!PL_in_my && len == 6 && strnEQ(s, "locked", len))
3082 CvLOCKED_on(PL_compcv);
3083 else if (!PL_in_my && len == 6 && strnEQ(s, "method", len))
3084 CvMETHOD_on(PL_compcv);
3086 else if (PL_in_my == KEY_our && len == 6 && strnEQ(s, "shared", len))
3087 GvSHARED_on(cGVOPx_gv(yylval.opval));
3089 /* After we've set the flags, it could be argued that
3090 we don't need to do the attributes.pm-based setting
3091 process, and shouldn't bother appending recognized
3092 flags. To experiment with that, uncomment the
3093 following "else": */
3095 attrs = append_elem(OP_LIST, attrs,
3096 newSVOP(OP_CONST, 0,
3100 if (*s == ':' && s[1] != ':')
3103 break; /* require real whitespace or :'s */
3105 tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}(' for vi */
3106 if (*s != ';' && *s != tmp && (tmp != '=' || *s != ')')) {
3107 char q = ((*s == '\'') ? '"' : '\'');
3108 /* If here for an expression, and parsed no attrs, back off. */
3109 if (tmp == '=' && !attrs) {
3113 /* MUST advance bufptr here to avoid bogus "at end of line"
3114 context messages from yyerror().
3118 yyerror("Unterminated attribute list");
3120 yyerror(Perl_form(aTHX_ "Invalid separator character %c%c%c in attribute list",
3128 PL_nextval[PL_nexttoke].opval = attrs;
3136 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
3137 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
3153 if (PL_lex_brackets <= 0)
3154 yyerror("Unmatched right square bracket");
3157 if (PL_lex_state == LEX_INTERPNORMAL) {
3158 if (PL_lex_brackets == 0) {
3159 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
3160 PL_lex_state = LEX_INTERPEND;
3167 if (PL_lex_brackets > 100) {
3168 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
3169 if (newlb != PL_lex_brackstack) {
3171 PL_lex_brackstack = newlb;
3174 switch (PL_expect) {
3176 if (PL_lex_formbrack) {
3180 if (PL_oldoldbufptr == PL_last_lop)
3181 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
3183 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
3184 OPERATOR(HASHBRACK);
3186 while (s < PL_bufend && SPACE_OR_TAB(*s))
3189 PL_tokenbuf[0] = '\0';
3190 if (d < PL_bufend && *d == '-') {
3191 PL_tokenbuf[0] = '-';
3193 while (d < PL_bufend && SPACE_OR_TAB(*d))
3196 if (d < PL_bufend && isIDFIRST_lazy_if(d,UTF)) {
3197 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
3199 while (d < PL_bufend && SPACE_OR_TAB(*d))
3202 char minus = (PL_tokenbuf[0] == '-');
3203 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
3211 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
3216 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
3221 if (PL_oldoldbufptr == PL_last_lop)
3222 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
3224 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
3227 OPERATOR(HASHBRACK);
3228 /* This hack serves to disambiguate a pair of curlies
3229 * as being a block or an anon hash. Normally, expectation
3230 * determines that, but in cases where we're not in a
3231 * position to expect anything in particular (like inside
3232 * eval"") we have to resolve the ambiguity. This code
3233 * covers the case where the first term in the curlies is a
3234 * quoted string. Most other cases need to be explicitly
3235 * disambiguated by prepending a `+' before the opening
3236 * curly in order to force resolution as an anon hash.
3238 * XXX should probably propagate the outer expectation
3239 * into eval"" to rely less on this hack, but that could
3240 * potentially break current behavior of eval"".
3244 if (*s == '\'' || *s == '"' || *s == '`') {
3245 /* common case: get past first string, handling escapes */
3246 for (t++; t < PL_bufend && *t != *s;)
3247 if (*t++ == '\\' && (*t == '\\' || *t == *s))
3251 else if (*s == 'q') {
3254 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
3258 char open, close, term;
3261 while (t < PL_bufend && isSPACE(*t))
3265 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
3269 for (t++; t < PL_bufend; t++) {
3270 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
3272 else if (*t == open)
3276 for (t++; t < PL_bufend; t++) {
3277 if (*t == '\\' && t+1 < PL_bufend)
3279 else if (*t == close && --brackets <= 0)
3281 else if (*t == open)
3287 else if (isALNUM_lazy_if(t,UTF)) {
3289 while (t < PL_bufend && isALNUM_lazy_if(t,UTF))
3292 while (t < PL_bufend && isSPACE(*t))
3294 /* if comma follows first term, call it an anon hash */
3295 /* XXX it could be a comma expression with loop modifiers */
3296 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
3297 || (*t == '=' && t[1] == '>')))
3298 OPERATOR(HASHBRACK);
3299 if (PL_expect == XREF)
3302 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
3308 yylval.ival = CopLINE(PL_curcop);
3309 if (isSPACE(*s) || *s == '#')
3310 PL_copline = NOLINE; /* invalidate current command line number */
3315 if (PL_lex_brackets <= 0)
3316 yyerror("Unmatched right curly bracket");
3318 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
3319 if (PL_lex_brackets < PL_lex_formbrack && PL_lex_state != LEX_INTERPNORMAL)
3320 PL_lex_formbrack = 0;
3321 if (PL_lex_state == LEX_INTERPNORMAL) {
3322 if (PL_lex_brackets == 0) {
3323 if (PL_expect & XFAKEBRACK) {
3324 PL_expect &= XENUMMASK;
3325 PL_lex_state = LEX_INTERPEND;
3327 return yylex(); /* ignore fake brackets */
3329 if (*s == '-' && s[1] == '>')
3330 PL_lex_state = LEX_INTERPENDMAYBE;
3331 else if (*s != '[' && *s != '{')
3332 PL_lex_state = LEX_INTERPEND;
3335 if (PL_expect & XFAKEBRACK) {
3336 PL_expect &= XENUMMASK;
3338 return yylex(); /* ignore fake brackets */
3348 if (PL_expect == XOPERATOR) {
3349 if (ckWARN(WARN_SEMICOLON)
3350 && isIDFIRST_lazy_if(s,UTF) && PL_bufptr == PL_linestart)
3352 CopLINE_dec(PL_curcop);
3353 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3354 CopLINE_inc(PL_curcop);
3359 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
3361 PL_expect = XOPERATOR;
3362 force_ident(PL_tokenbuf, '&');
3366 yylval.ival = (OPpENTERSUB_AMPER<<8);
3385 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
3386 Perl_warner(aTHX_ WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
3388 if (PL_expect == XSTATE && isALPHA(tmp) &&
3389 (s == PL_linestart+1 || s[-2] == '\n') )
3391 if (PL_in_eval && !PL_rsfp) {
3396 if (strnEQ(s,"=cut",4)) {
3410 PL_doextract = TRUE;
3413 if (PL_lex_brackets < PL_lex_formbrack) {
3415 #ifdef PERL_STRICT_CR
3416 for (t = s; SPACE_OR_TAB(*t); t++) ;
3418 for (t = s; SPACE_OR_TAB(*t) || *t == '\r'; t++) ;
3420 if (*t == '\n' || *t == '#') {
3438 if (PL_expect != XOPERATOR) {
3439 if (s[1] != '<' && !strchr(s,'>'))
3442 s = scan_heredoc(s);
3444 s = scan_inputsymbol(s);
3445 TERM(sublex_start());
3450 SHop(OP_LEFT_SHIFT);
3464 SHop(OP_RIGHT_SHIFT);
3473 if (PL_expect == XOPERATOR) {
3474 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3477 return ','; /* grandfather non-comma-format format */
3481 if (s[1] == '#' && (isIDFIRST_lazy_if(s+2,UTF) || strchr("{$:+-", s[2]))) {
3482 PL_tokenbuf[0] = '@';
3483 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1,
3484 sizeof PL_tokenbuf - 1, FALSE);
3485 if (PL_expect == XOPERATOR)
3486 no_op("Array length", s);
3487 if (!PL_tokenbuf[1])
3489 PL_expect = XOPERATOR;
3490 PL_pending_ident = '#';
3494 PL_tokenbuf[0] = '$';
3495 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1,
3496 sizeof PL_tokenbuf - 1, FALSE);
3497 if (PL_expect == XOPERATOR)
3499 if (!PL_tokenbuf[1]) {
3501 yyerror("Final $ should be \\$ or $name");
3505 /* This kludge not intended to be bulletproof. */
3506 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
3507 yylval.opval = newSVOP(OP_CONST, 0,
3508 newSViv(PL_compiling.cop_arybase));
3509 yylval.opval->op_private = OPpCONST_ARYBASE;
3515 if (PL_lex_state == LEX_NORMAL)
3518 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
3521 PL_tokenbuf[0] = '@';
3522 if (ckWARN(WARN_SYNTAX)) {
3524 isSPACE(*t) || isALNUM_lazy_if(t,UTF) || *t == '$';
3527 PL_bufptr = skipspace(PL_bufptr);
3528 while (t < PL_bufend && *t != ']')
3530 Perl_warner(aTHX_ WARN_SYNTAX,
3531 "Multidimensional syntax %.*s not supported",
3532 (t - PL_bufptr) + 1, PL_bufptr);
3536 else if (*s == '{') {
3537 PL_tokenbuf[0] = '%';
3538 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
3539 (t = strchr(s, '}')) && (t = strchr(t, '=')))
3541 char tmpbuf[sizeof PL_tokenbuf];
3543 for (t++; isSPACE(*t); t++) ;
3544 if (isIDFIRST_lazy_if(t,UTF)) {
3545 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
3546 for (; isSPACE(*t); t++) ;
3547 if (*t == ';' && get_cv(tmpbuf, FALSE))
3548 Perl_warner(aTHX_ WARN_SYNTAX,
3549 "You need to quote \"%s\"", tmpbuf);
3555 PL_expect = XOPERATOR;
3556 if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
3557 bool islop = (PL_last_lop == PL_oldoldbufptr);
3558 if (!islop || PL_last_lop_op == OP_GREPSTART)
3559 PL_expect = XOPERATOR;
3560 else if (strchr("$@\"'`q", *s))
3561 PL_expect = XTERM; /* e.g. print $fh "foo" */
3562 else if (strchr("&*<%", *s) && isIDFIRST_lazy_if(s+1,UTF))
3563 PL_expect = XTERM; /* e.g. print $fh &sub */
3564 else if (isIDFIRST_lazy_if(s,UTF)) {
3565 char tmpbuf[sizeof PL_tokenbuf];
3566 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
3567 if ((tmp = keyword(tmpbuf, len))) {
3568 /* binary operators exclude handle interpretations */
3580 PL_expect = XTERM; /* e.g. print $fh length() */
3585 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
3586 if (gv && GvCVu(gv))
3587 PL_expect = XTERM; /* e.g. print $fh subr() */
3590 else if (isDIGIT(*s))
3591 PL_expect = XTERM; /* e.g. print $fh 3 */
3592 else if (*s == '.' && isDIGIT(s[1]))
3593 PL_expect = XTERM; /* e.g. print $fh .3 */
3594 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
3595 PL_expect = XTERM; /* e.g. print $fh -1 */
3596 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
3597 PL_expect = XTERM; /* print $fh <<"EOF" */
3599 PL_pending_ident = '$';
3603 if (PL_expect == XOPERATOR)
3605 PL_tokenbuf[0] = '@';
3606 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
3607 if (!PL_tokenbuf[1]) {
3609 yyerror("Final @ should be \\@ or @name");
3612 if (PL_lex_state == LEX_NORMAL)
3614 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
3616 PL_tokenbuf[0] = '%';
3618 /* Warn about @ where they meant $. */
3619 if (ckWARN(WARN_SYNTAX)) {
3620 if (*s == '[' || *s == '{') {
3622 while (*t && (isALNUM_lazy_if(t,UTF) || strchr(" \t$#+-'\"", *t)))
3624 if (*t == '}' || *t == ']') {
3626 PL_bufptr = skipspace(PL_bufptr);
3627 Perl_warner(aTHX_ WARN_SYNTAX,
3628 "Scalar value %.*s better written as $%.*s",
3629 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
3634 PL_pending_ident = '@';
3637 case '/': /* may either be division or pattern */
3638 case '?': /* may either be conditional or pattern */
3639 if (PL_expect != XOPERATOR) {
3640 /* Disable warning on "study /blah/" */
3641 if (PL_oldoldbufptr == PL_last_uni
3642 && (*PL_last_uni != 's' || s - PL_last_uni < 5
3643 || memNE(PL_last_uni, "study", 5)
3644 || isALNUM_lazy_if(PL_last_uni+5,UTF)))
3646 s = scan_pat(s,OP_MATCH);
3647 TERM(sublex_start());
3655 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
3656 #ifdef PERL_STRICT_CR
3659 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
3661 && (s == PL_linestart || s[-1] == '\n') )
3663 PL_lex_formbrack = 0;
3667 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
3673 yylval.ival = OPf_SPECIAL;
3679 if (PL_expect != XOPERATOR)
3684 case '0': case '1': case '2': case '3': case '4':
3685 case '5': case '6': case '7': case '8': case '9':
3686 s = scan_num(s, &yylval);
3687 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3688 "### Saw number in '%s'\n", s);
3690 if (PL_expect == XOPERATOR)
3695 s = scan_str(s,FALSE,FALSE);
3696 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3697 "### Saw string before '%s'\n", s);
3699 if (PL_expect == XOPERATOR) {
3700 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3703 return ','; /* grandfather non-comma-format format */
3709 missingterm((char*)0);
3710 yylval.ival = OP_CONST;
3711 TERM(sublex_start());
3714 s = scan_str(s,FALSE,FALSE);
3715 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3716 "### Saw string before '%s'\n", s);
3718 if (PL_expect == XOPERATOR) {
3719 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3722 return ','; /* grandfather non-comma-format format */
3728 missingterm((char*)0);
3729 yylval.ival = OP_CONST;
3730 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
3731 if (*d == '$' || *d == '@' || *d == '\\' || UTF8_IS_CONTINUED(*d)) {
3732 yylval.ival = OP_STRINGIFY;
3736 TERM(sublex_start());
3739 s = scan_str(s,FALSE,FALSE);
3740 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3741 "### Saw backtick string before '%s'\n", s);
3743 if (PL_expect == XOPERATOR)
3744 no_op("Backticks",s);
3746 missingterm((char*)0);
3747 yylval.ival = OP_BACKTICK;
3749 TERM(sublex_start());
3753 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
3754 Perl_warner(aTHX_ WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
3756 if (PL_expect == XOPERATOR)
3757 no_op("Backslash",s);
3761 if (isDIGIT(s[1]) && PL_expect != XOPERATOR) {
3765 while (isDIGIT(*start) || *start == '_')
3767 if (*start == '.' && isDIGIT(start[1])) {
3768 s = scan_num(s, &yylval);
3771 /* avoid v123abc() or $h{v1}, allow C<print v10;> */
3772 else if (!isALPHA(*start) && (PL_expect == XTERM || PL_expect == XREF)) {
3776 gv = gv_fetchpv(s, FALSE, SVt_PVCV);
3779 s = scan_num(s, &yylval);
3786 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
3825 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3827 /* Some keywords can be followed by any delimiter, including ':' */
3828 tmp = ((len == 1 && strchr("msyq", PL_tokenbuf[0])) ||
3829 (len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
3830 (PL_tokenbuf[0] == 'q' &&
3831 strchr("qwxr", PL_tokenbuf[1])))));
3833 /* x::* is just a word, unless x is "CORE" */
3834 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
3838 while (d < PL_bufend && isSPACE(*d))
3839 d++; /* no comments skipped here, or s### is misparsed */
3841 /* Is this a label? */
3842 if (!tmp && PL_expect == XSTATE
3843 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
3845 yylval.pval = savepv(PL_tokenbuf);
3850 /* Check for keywords */
3851 tmp = keyword(PL_tokenbuf, len);
3853 /* Is this a word before a => operator? */
3854 if (*d == '=' && d[1] == '>') {
3856 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
3857 yylval.opval->op_private = OPpCONST_BARE;
3858 if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, len))
3859 SvUTF8_on(((SVOP*)yylval.opval)->op_sv);
3863 if (tmp < 0) { /* second-class keyword? */
3864 GV *ogv = Nullgv; /* override (winner) */
3865 GV *hgv = Nullgv; /* hidden (loser) */
3866 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
3868 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
3871 if (GvIMPORTED_CV(gv))
3873 else if (! CvMETHOD(cv))
3877 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3878 (gv = *gvp) != (GV*)&PL_sv_undef &&
3879 GvCVu(gv) && GvIMPORTED_CV(gv))
3885 tmp = 0; /* overridden by import or by GLOBAL */
3888 && -tmp==KEY_lock /* XXX generalizable kludge */
3890 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
3892 tmp = 0; /* any sub overrides "weak" keyword */
3894 else { /* no override */
3898 if (ckWARN(WARN_AMBIGUOUS) && hgv
3899 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
3900 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3901 "Ambiguous call resolved as CORE::%s(), %s",
3902 GvENAME(hgv), "qualify as such or use &");
3909 default: /* not a keyword */
3912 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
3914 /* Get the rest if it looks like a package qualifier */
3916 if (*s == '\'' || (*s == ':' && s[1] == ':')) {
3918 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
3921 Perl_croak(aTHX_ "Bad name after %s%s", PL_tokenbuf,
3922 *s == '\'' ? "'" : "::");
3926 if (PL_expect == XOPERATOR) {
3927 if (PL_bufptr == PL_linestart) {
3928 CopLINE_dec(PL_curcop);
3929 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3930 CopLINE_inc(PL_curcop);
3933 no_op("Bareword",s);
3936 /* Look for a subroutine with this name in current package,
3937 unless name is "Foo::", in which case Foo is a bearword
3938 (and a package name). */
3941 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3943 if (ckWARN(WARN_BAREWORD) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3944 Perl_warner(aTHX_ WARN_BAREWORD,
3945 "Bareword \"%s\" refers to nonexistent package",
3948 PL_tokenbuf[len] = '\0';
3955 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3958 /* if we saw a global override before, get the right name */
3961 sv = newSVpvn("CORE::GLOBAL::",14);
3962 sv_catpv(sv,PL_tokenbuf);
3965 sv = newSVpv(PL_tokenbuf,0);
3967 /* Presume this is going to be a bareword of some sort. */
3970 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3971 yylval.opval->op_private = OPpCONST_BARE;
3973 /* And if "Foo::", then that's what it certainly is. */
3978 /* See if it's the indirect object for a list operator. */
3980 if (PL_oldoldbufptr &&
3981 PL_oldoldbufptr < PL_bufptr &&
3982 (PL_oldoldbufptr == PL_last_lop
3983 || PL_oldoldbufptr == PL_last_uni) &&
3984 /* NO SKIPSPACE BEFORE HERE! */
3985 (PL_expect == XREF ||
3986 ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
3988 bool immediate_paren = *s == '(';
3990 /* (Now we can afford to cross potential line boundary.) */
3993 /* Two barewords in a row may indicate method call. */
3995 if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') && (tmp=intuit_method(s,gv)))
3998 /* If not a declared subroutine, it's an indirect object. */
3999 /* (But it's an indir obj regardless for sort.) */
4001 if ( !immediate_paren && (PL_last_lop_op == OP_SORT ||
4002 ((!gv || !GvCVu(gv)) &&
4003 (PL_last_lop_op != OP_MAPSTART &&
4004 PL_last_lop_op != OP_GREPSTART))))
4006 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
4012 PL_expect = XOPERATOR;
4015 /* Is this a word before a => operator? */
4016 if (*s == '=' && s[1] == '>') {
4018 sv_setpv(((SVOP*)yylval.opval)->op_sv, PL_tokenbuf);
4019 if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, len))
4020 SvUTF8_on(((SVOP*)yylval.opval)->op_sv);
4024 /* If followed by a paren, it's certainly a subroutine. */
4027 if (gv && GvCVu(gv)) {
4028 for (d = s + 1; SPACE_OR_TAB(*d); d++) ;
4029 if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
4034 PL_nextval[PL_nexttoke].opval = yylval.opval;
4035 PL_expect = XOPERATOR;
4041 /* If followed by var or block, call it a method (unless sub) */
4043 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
4044 PL_last_lop = PL_oldbufptr;
4045 PL_last_lop_op = OP_METHOD;
4049 /* If followed by a bareword, see if it looks like indir obj. */
4051 if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') && (tmp = intuit_method(s,gv)))
4054 /* Not a method, so call it a subroutine (if defined) */
4056 if (gv && GvCVu(gv)) {
4058 if (lastchar == '-' && ckWARN_d(WARN_AMBIGUOUS))
4059 Perl_warner(aTHX_ WARN_AMBIGUOUS,
4060 "Ambiguous use of -%s resolved as -&%s()",
4061 PL_tokenbuf, PL_tokenbuf);
4062 /* Check for a constant sub */
4064 if ((sv = cv_const_sv(cv))) {
4066 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
4067 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
4068 yylval.opval->op_private = 0;
4072 /* Resolve to GV now. */
4073 op_free(yylval.opval);
4074 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
4075 yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
4076 PL_last_lop = PL_oldbufptr;
4077 PL_last_lop_op = OP_ENTERSUB;
4078 /* Is there a prototype? */
4081 char *proto = SvPV((SV*)cv, len);
4084 if (strEQ(proto, "$"))
4086 if (*proto == '&' && *s == '{') {
4087 sv_setpv(PL_subname,"__ANON__");
4091 PL_nextval[PL_nexttoke].opval = yylval.opval;
4097 /* Call it a bare word */
4099 if (PL_hints & HINT_STRICT_SUBS)
4100 yylval.opval->op_private |= OPpCONST_STRICT;
4103 if (ckWARN(WARN_RESERVED)) {
4104 if (lastchar != '-') {
4105 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
4107 Perl_warner(aTHX_ WARN_RESERVED, PL_warn_reserved,
4114 if (lastchar && strchr("*%&", lastchar) && ckWARN_d(WARN_AMBIGUOUS)) {
4115 Perl_warner(aTHX_ WARN_AMBIGUOUS,
4116 "Operator or semicolon missing before %c%s",
4117 lastchar, PL_tokenbuf);
4118 Perl_warner(aTHX_ WARN_AMBIGUOUS,
4119 "Ambiguous use of %c resolved as operator %c",
4120 lastchar, lastchar);
4126 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
4127 newSVpv(CopFILE(PL_curcop),0));
4131 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
4132 Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop)));
4135 case KEY___PACKAGE__:
4136 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
4138 ? newSVsv(PL_curstname)
4147 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
4148 char *pname = "main";
4149 if (PL_tokenbuf[2] == 'D')
4150 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
4151 gv = gv_fetchpv(Perl_form(aTHX_ "%s::DATA", pname), TRUE, SVt_PVIO);
4154 GvIOp(gv) = newIO();
4155 IoIFP(GvIOp(gv)) = PL_rsfp;
4156 #if defined(HAS_FCNTL) && defined(F_SETFD)
4158 int fd = PerlIO_fileno(PL_rsfp);
4159 fcntl(fd,F_SETFD,fd >= 3);
4162 /* Mark this internal pseudo-handle as clean */
4163 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
4165 IoTYPE(GvIOp(gv)) = IoTYPE_PIPE;
4166 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
4167 IoTYPE(GvIOp(gv)) = IoTYPE_STD;
4169 IoTYPE(GvIOp(gv)) = IoTYPE_RDONLY;
4170 #if defined(WIN32) && !defined(PERL_TEXTMODE_SCRIPTS)
4171 /* if the script was opened in binmode, we need to revert
4172 * it to text mode for compatibility; but only iff it has CRs
4173 * XXX this is a questionable hack at best. */
4174 if (PL_bufend-PL_bufptr > 2
4175 && PL_bufend[-1] == '\n' && PL_bufend[-2] == '\r')
4178 if (IoTYPE(GvIOp(gv)) == IoTYPE_RDONLY) {
4179 loc = PerlIO_tell(PL_rsfp);
4180 (void)PerlIO_seek(PL_rsfp, 0L, 0);
4182 if (PerlLIO_setmode(PerlIO_fileno(PL_rsfp), O_TEXT) != -1) {
4184 PerlIO_seek(PL_rsfp, loc, 0);
4188 #ifdef PERLIO_LAYERS
4189 if (UTF && !IN_BYTE)
4190 PerlIO_apply_layers(aTHX_ PL_rsfp, NULL, ":utf8");
4203 if (PL_expect == XSTATE) {
4210 if (*s == ':' && s[1] == ':') {
4213 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
4214 if (!(tmp = keyword(PL_tokenbuf, len)))
4215 Perl_croak(aTHX_ "CORE::%s is not a keyword", PL_tokenbuf);
4229 LOP(OP_ACCEPT,XTERM);
4235 LOP(OP_ATAN2,XTERM);
4241 LOP(OP_BINMODE,XTERM);
4244 LOP(OP_BLESS,XTERM);
4253 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
4270 if (!PL_cryptseen) {
4271 PL_cryptseen = TRUE;
4275 LOP(OP_CRYPT,XTERM);
4278 if (ckWARN(WARN_CHMOD)) {
4279 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4280 if (*d != '0' && isDIGIT(*d))
4281 Perl_warner(aTHX_ WARN_CHMOD,
4282 "chmod() mode argument is missing initial 0");
4284 LOP(OP_CHMOD,XTERM);
4287 LOP(OP_CHOWN,XTERM);
4290 LOP(OP_CONNECT,XTERM);
4306 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4310 PL_hints |= HINT_BLOCK_SCOPE;
4320 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
4321 LOP(OP_DBMOPEN,XTERM);
4327 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4334 yylval.ival = CopLINE(PL_curcop);
4348 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
4349 UNIBRACK(OP_ENTEREVAL);
4364 case KEY_endhostent:
4370 case KEY_endservent:
4373 case KEY_endprotoent:
4384 yylval.ival = CopLINE(PL_curcop);
4386 if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
4388 if ((PL_bufend - p) >= 3 &&
4389 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
4391 else if ((PL_bufend - p) >= 4 &&
4392 strnEQ(p, "our", 3) && isSPACE(*(p + 3)))
4395 if (isIDFIRST_lazy_if(p,UTF)) {
4396 p = scan_ident(p, PL_bufend,
4397 PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
4401 Perl_croak(aTHX_ "Missing $ on loop variable");
4406 LOP(OP_FORMLINE,XTERM);
4412 LOP(OP_FCNTL,XTERM);
4418 LOP(OP_FLOCK,XTERM);
4427 LOP(OP_GREPSTART, XREF);
4430 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4445 case KEY_getpriority:
4446 LOP(OP_GETPRIORITY,XTERM);
4448 case KEY_getprotobyname:
4451 case KEY_getprotobynumber:
4452 LOP(OP_GPBYNUMBER,XTERM);
4454 case KEY_getprotoent:
4466 case KEY_getpeername:
4467 UNI(OP_GETPEERNAME);
4469 case KEY_gethostbyname:
4472 case KEY_gethostbyaddr:
4473 LOP(OP_GHBYADDR,XTERM);
4475 case KEY_gethostent:
4478 case KEY_getnetbyname:
4481 case KEY_getnetbyaddr:
4482 LOP(OP_GNBYADDR,XTERM);
4487 case KEY_getservbyname:
4488 LOP(OP_GSBYNAME,XTERM);
4490 case KEY_getservbyport:
4491 LOP(OP_GSBYPORT,XTERM);
4493 case KEY_getservent:
4496 case KEY_getsockname:
4497 UNI(OP_GETSOCKNAME);
4499 case KEY_getsockopt:
4500 LOP(OP_GSOCKOPT,XTERM);
4522 yylval.ival = CopLINE(PL_curcop);
4526 LOP(OP_INDEX,XTERM);
4532 LOP(OP_IOCTL,XTERM);
4544 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4576 LOP(OP_LISTEN,XTERM);
4585 s = scan_pat(s,OP_MATCH);
4586 TERM(sublex_start());
4589 LOP(OP_MAPSTART, XREF);
4592 LOP(OP_MKDIR,XTERM);
4595 LOP(OP_MSGCTL,XTERM);
4598 LOP(OP_MSGGET,XTERM);
4601 LOP(OP_MSGRCV,XTERM);
4604 LOP(OP_MSGSND,XTERM);
4610 if (isIDFIRST_lazy_if(s,UTF)) {
4611 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
4612 if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3))
4614 PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
4615 if (!PL_in_my_stash) {
4618 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
4626 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4633 if (PL_expect != XSTATE)
4634 yyerror("\"no\" not allowed in expression");
4635 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4636 s = force_version(s);
4641 if (*s == '(' || (s = skipspace(s), *s == '('))
4648 if (isIDFIRST_lazy_if(s,UTF)) {
4650 for (d = s; isALNUM_lazy_if(d,UTF); d++) ;
4652 if (strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_PRECEDENCE))
4653 Perl_warner(aTHX_ WARN_PRECEDENCE,
4654 "Precedence problem: open %.*s should be open(%.*s)",
4660 yylval.ival = OP_OR;
4670 LOP(OP_OPEN_DIR,XTERM);
4673 checkcomma(s,PL_tokenbuf,"filehandle");
4677 checkcomma(s,PL_tokenbuf,"filehandle");
4696 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4700 LOP(OP_PIPE_OP,XTERM);
4703 s = scan_str(s,FALSE,FALSE);
4705 missingterm((char*)0);
4706 yylval.ival = OP_CONST;
4707 TERM(sublex_start());
4713 s = scan_str(s,FALSE,FALSE);
4715 missingterm((char*)0);
4717 if (SvCUR(PL_lex_stuff)) {
4720 d = SvPV_force(PL_lex_stuff, len);
4723 for (; isSPACE(*d) && len; --len, ++d) ;
4726 if (!warned && ckWARN(WARN_QW)) {
4727 for (; !isSPACE(*d) && len; --len, ++d) {
4729 Perl_warner(aTHX_ WARN_QW,
4730 "Possible attempt to separate words with commas");
4733 else if (*d == '#') {
4734 Perl_warner(aTHX_ WARN_QW,
4735 "Possible attempt to put comments in qw() list");
4741 for (; !isSPACE(*d) && len; --len, ++d) ;
4743 sv = newSVpvn(b, d-b);
4744 if (DO_UTF8(PL_lex_stuff))
4746 words = append_elem(OP_LIST, words,
4747 newSVOP(OP_CONST, 0, tokeq(sv)));
4751 PL_nextval[PL_nexttoke].opval = words;
4756 SvREFCNT_dec(PL_lex_stuff);
4757 PL_lex_stuff = Nullsv;
4763 s = scan_str(s,FALSE,FALSE);
4765 missingterm((char*)0);
4766 yylval.ival = OP_STRINGIFY;
4767 if (SvIVX(PL_lex_stuff) == '\'')
4768 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
4769 TERM(sublex_start());
4772 s = scan_pat(s,OP_QR);
4773 TERM(sublex_start());
4776 s = scan_str(s,FALSE,FALSE);
4778 missingterm((char*)0);
4779 yylval.ival = OP_BACKTICK;
4781 TERM(sublex_start());
4788 if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
4789 s = force_version(s);
4792 *PL_tokenbuf = '\0';
4793 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4794 if (isIDFIRST_lazy_if(PL_tokenbuf,UTF))
4795 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
4797 yyerror("<> should be quotes");
4805 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4809 LOP(OP_RENAME,XTERM);
4818 LOP(OP_RINDEX,XTERM);
4841 LOP(OP_REVERSE,XTERM);
4852 TERM(sublex_start());
4854 TOKEN(1); /* force error */
4863 LOP(OP_SELECT,XTERM);
4869 LOP(OP_SEMCTL,XTERM);
4872 LOP(OP_SEMGET,XTERM);
4875 LOP(OP_SEMOP,XTERM);
4881 LOP(OP_SETPGRP,XTERM);
4883 case KEY_setpriority:
4884 LOP(OP_SETPRIORITY,XTERM);
4886 case KEY_sethostent:
4892 case KEY_setservent:
4895 case KEY_setprotoent:
4905 LOP(OP_SEEKDIR,XTERM);
4907 case KEY_setsockopt:
4908 LOP(OP_SSOCKOPT,XTERM);
4914 LOP(OP_SHMCTL,XTERM);
4917 LOP(OP_SHMGET,XTERM);
4920 LOP(OP_SHMREAD,XTERM);
4923 LOP(OP_SHMWRITE,XTERM);
4926 LOP(OP_SHUTDOWN,XTERM);
4935 LOP(OP_SOCKET,XTERM);
4937 case KEY_socketpair:
4938 LOP(OP_SOCKPAIR,XTERM);
4941 checkcomma(s,PL_tokenbuf,"subroutine name");
4943 if (*s == ';' || *s == ')') /* probably a close */
4944 Perl_croak(aTHX_ "sort is now a reserved word");
4946 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4950 LOP(OP_SPLIT,XTERM);
4953 LOP(OP_SPRINTF,XTERM);
4956 LOP(OP_SPLICE,XTERM);
4971 LOP(OP_SUBSTR,XTERM);
4977 char tmpbuf[sizeof PL_tokenbuf];
4979 expectation attrful;
4980 bool have_name, have_proto;
4985 if (isIDFIRST_lazy_if(s,UTF) || *s == '\'' ||
4986 (*s == ':' && s[1] == ':'))
4989 attrful = XATTRBLOCK;
4990 /* remember buffer pos'n for later force_word */
4991 tboffset = s - PL_oldbufptr;
4992 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4993 if (strchr(tmpbuf, ':'))
4994 sv_setpv(PL_subname, tmpbuf);
4996 sv_setsv(PL_subname,PL_curstname);
4997 sv_catpvn(PL_subname,"::",2);
4998 sv_catpvn(PL_subname,tmpbuf,len);
5005 Perl_croak(aTHX_ "Missing name in \"my sub\"");
5006 PL_expect = XTERMBLOCK;
5007 attrful = XATTRTERM;
5008 sv_setpv(PL_subname,"?");
5012 if (key == KEY_format) {
5014 PL_lex_formbrack = PL_lex_brackets + 1;
5016 (void) force_word(PL_oldbufptr + tboffset, WORD,
5021 /* Look for a prototype */
5025 s = scan_str(s,FALSE,FALSE);
5027 Perl_croak(aTHX_ "Prototype not terminated");
5029 d = SvPVX(PL_lex_stuff);
5031 for (p = d; *p; ++p) {
5036 SvCUR(PL_lex_stuff) = tmp;
5044 if (*s == ':' && s[1] != ':')
5045 PL_expect = attrful;
5048 PL_nextval[PL_nexttoke].opval =
5049 (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
5050 PL_lex_stuff = Nullsv;
5054 sv_setpv(PL_subname,"__ANON__");
5057 (void) force_word(PL_oldbufptr + tboffset, WORD,
5066 LOP(OP_SYSTEM,XREF);
5069 LOP(OP_SYMLINK,XTERM);
5072 LOP(OP_SYSCALL,XTERM);
5075 LOP(OP_SYSOPEN,XTERM);
5078 LOP(OP_SYSSEEK,XTERM);
5081 LOP(OP_SYSREAD,XTERM);
5084 LOP(OP_SYSWRITE,XTERM);
5088 TERM(sublex_start());
5109 LOP(OP_TRUNCATE,XTERM);
5121 yylval.ival = CopLINE(PL_curcop);
5125 yylval.ival = CopLINE(PL_curcop);
5129 LOP(OP_UNLINK,XTERM);
5135 LOP(OP_UNPACK,XTERM);
5138 LOP(OP_UTIME,XTERM);
5141 if (ckWARN(WARN_UMASK)) {
5142 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
5143 if (*d != '0' && isDIGIT(*d))
5144 Perl_warner(aTHX_ WARN_UMASK,
5145 "umask: argument is missing initial 0");
5150 LOP(OP_UNSHIFT,XTERM);
5153 if (PL_expect != XSTATE)
5154 yyerror("\"use\" not allowed in expression");
5156 if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
5157 s = force_version(s);
5158 if (*s == ';' || (s = skipspace(s), *s == ';')) {
5159 PL_nextval[PL_nexttoke].opval = Nullop;
5164 s = force_word(s,WORD,FALSE,TRUE,FALSE);
5165 s = force_version(s);
5177 yylval.ival = CopLINE(PL_curcop);
5181 PL_hints |= HINT_BLOCK_SCOPE;
5188 LOP(OP_WAITPID,XTERM);
5196 static char ctl_l[2];
5198 if (ctl_l[0] == '\0')
5199 ctl_l[0] = toCTRL('L');
5200 gv_fetchpv(ctl_l,TRUE, SVt_PV);
5203 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
5208 if (PL_expect == XOPERATOR)
5214 yylval.ival = OP_XOR;
5219 TERM(sublex_start());
5224 #pragma segment Main
5228 Perl_keyword(pTHX_ register char *d, I32 len)
5233 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
5234 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
5235 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
5236 if (strEQ(d,"__DATA__")) return KEY___DATA__;
5237 if (strEQ(d,"__END__")) return KEY___END__;
5241 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
5246 if (strEQ(d,"and")) return -KEY_and;
5247 if (strEQ(d,"abs")) return -KEY_abs;
5250 if (strEQ(d,"alarm")) return -KEY_alarm;
5251 if (strEQ(d,"atan2")) return -KEY_atan2;
5254 if (strEQ(d,"accept")) return -KEY_accept;
5259 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
5262 if (strEQ(d,"bless")) return -KEY_bless;
5263 if (strEQ(d,"bind")) return -KEY_bind;
5264 if (strEQ(d,"binmode")) return -KEY_binmode;
5267 if (strEQ(d,"CORE")) return -KEY_CORE;
5268 if (strEQ(d,"CHECK")) return KEY_CHECK;
5273 if (strEQ(d,"cmp")) return -KEY_cmp;
5274 if (strEQ(d,"chr")) return -KEY_chr;
5275 if (strEQ(d,"cos")) return -KEY_cos;
5278 if (strEQ(d,"chop")) return -KEY_chop;
5281 if (strEQ(d,"close")) return -KEY_close;
5282 if (strEQ(d,"chdir")) return -KEY_chdir;
5283 if (strEQ(d,"chomp")) return -KEY_chomp;
5284 if (strEQ(d,"chmod")) return -KEY_chmod;
5285 if (strEQ(d,"chown")) return -KEY_chown;
5286 if (strEQ(d,"crypt")) return -KEY_crypt;
5289 if (strEQ(d,"chroot")) return -KEY_chroot;
5290 if (strEQ(d,"caller")) return -KEY_caller;
5293 if (strEQ(d,"connect")) return -KEY_connect;
5296 if (strEQ(d,"closedir")) return -KEY_closedir;
5297 if (strEQ(d,"continue")) return -KEY_continue;
5302 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
5307 if (strEQ(d,"do")) return KEY_do;
5310 if (strEQ(d,"die")) return -KEY_die;
5313 if (strEQ(d,"dump")) return -KEY_dump;
5316 if (strEQ(d,"delete")) return KEY_delete;
5319 if (strEQ(d,"defined")) return KEY_defined;
5320 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
5323 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
5328 if (strEQ(d,"END")) return KEY_END;
5333 if (strEQ(d,"eq")) return -KEY_eq;
5336 if (strEQ(d,"eof")) return -KEY_eof;
5337 if (strEQ(d,"exp")) return -KEY_exp;
5340 if (strEQ(d,"else")) return KEY_else;
5341 if (strEQ(d,"exit")) return -KEY_exit;
5342 if (strEQ(d,"eval")) return KEY_eval;
5343 if (strEQ(d,"exec")) return -KEY_exec;
5344 if (strEQ(d,"each")) return -KEY_each;
5347 if (strEQ(d,"elsif")) return KEY_elsif;
5350 if (strEQ(d,"exists")) return KEY_exists;
5351 if (strEQ(d,"elseif")) Perl_warn(aTHX_ "elseif should be elsif");
5354 if (strEQ(d,"endgrent")) return -KEY_endgrent;
5355 if (strEQ(d,"endpwent")) return -KEY_endpwent;
5358 if (strEQ(d,"endnetent")) return -KEY_endnetent;
5361 if (strEQ(d,"endhostent")) return -KEY_endhostent;
5362 if (strEQ(d,"endservent")) return -KEY_endservent;
5365 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
5372 if (strEQ(d,"for")) return KEY_for;
5375 if (strEQ(d,"fork")) return -KEY_fork;
5378 if (strEQ(d,"fcntl")) return -KEY_fcntl;
5379 if (strEQ(d,"flock")) return -KEY_flock;
5382 if (strEQ(d,"format")) return KEY_format;
5383 if (strEQ(d,"fileno")) return -KEY_fileno;
5386 if (strEQ(d,"foreach")) return KEY_foreach;
5389 if (strEQ(d,"formline")) return -KEY_formline;
5394 if (strnEQ(d,"get",3)) {
5399 if (strEQ(d,"ppid")) return -KEY_getppid;
5400 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
5403 if (strEQ(d,"pwent")) return -KEY_getpwent;
5404 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
5405 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
5408 if (strEQ(d,"peername")) return -KEY_getpeername;
5409 if (strEQ(d,"protoent")) return -KEY_getprotoent;
5410 if (strEQ(d,"priority")) return -KEY_getpriority;
5413 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
5416 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
5420 else if (*d == 'h') {
5421 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
5422 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
5423 if (strEQ(d,"hostent")) return -KEY_gethostent;
5425 else if (*d == 'n') {
5426 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
5427 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
5428 if (strEQ(d,"netent")) return -KEY_getnetent;
5430 else if (*d == 's') {
5431 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
5432 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
5433 if (strEQ(d,"servent")) return -KEY_getservent;
5434 if (strEQ(d,"sockname")) return -KEY_getsockname;
5435 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
5437 else if (*d == 'g') {
5438 if (strEQ(d,"grent")) return -KEY_getgrent;
5439 if (strEQ(d,"grnam")) return -KEY_getgrnam;
5440 if (strEQ(d,"grgid")) return -KEY_getgrgid;
5442 else if (*d == 'l') {
5443 if (strEQ(d,"login")) return -KEY_getlogin;
5445 else if (strEQ(d,"c")) return -KEY_getc;
5450 if (strEQ(d,"gt")) return -KEY_gt;
5451 if (strEQ(d,"ge")) return -KEY_ge;
5454 if (strEQ(d,"grep")) return KEY_grep;
5455 if (strEQ(d,"goto")) return KEY_goto;
5456 if (strEQ(d,"glob")) return KEY_glob;
5459 if (strEQ(d,"gmtime")) return -KEY_gmtime;
5464 if (strEQ(d,"hex")) return -KEY_hex;
5467 if (strEQ(d,"INIT")) return KEY_INIT;
5472 if (strEQ(d,"if")) return KEY_if;
5475 if (strEQ(d,"int")) return -KEY_int;
5478 if (strEQ(d,"index")) return -KEY_index;
5479 if (strEQ(d,"ioctl")) return -KEY_ioctl;
5484 if (strEQ(d,"join")) return -KEY_join;
5488 if (strEQ(d,"keys")) return -KEY_keys;
5489 if (strEQ(d,"kill")) return -KEY_kill;
5495 if (strEQ(d,"lt")) return -KEY_lt;
5496 if (strEQ(d,"le")) return -KEY_le;
5497 if (strEQ(d,"lc")) return -KEY_lc;
5500 if (strEQ(d,"log")) return -KEY_log;
5503 if (strEQ(d,"last")) return KEY_last;
5504 if (strEQ(d,"link")) return -KEY_link;
5505 if (strEQ(d,"lock")) return -KEY_lock;
5508 if (strEQ(d,"local")) return KEY_local;
5509 if (strEQ(d,"lstat")) return -KEY_lstat;
5512 if (strEQ(d,"length")) return -KEY_length;
5513 if (strEQ(d,"listen")) return -KEY_listen;
5516 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
5519 if (strEQ(d,"localtime")) return -KEY_localtime;
5525 case 1: return KEY_m;
5527 if (strEQ(d,"my")) return KEY_my;
5530 if (strEQ(d,"map")) return KEY_map;
5533 if (strEQ(d,"mkdir")) return -KEY_mkdir;
5536 if (strEQ(d,"msgctl")) return -KEY_msgctl;
5537 if (strEQ(d,"msgget")) return -KEY_msgget;
5538 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
5539 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
5544 if (strEQ(d,"next")) return KEY_next;
5545 if (strEQ(d,"ne")) return -KEY_ne;
5546 if (strEQ(d,"not")) return -KEY_not;
5547 if (strEQ(d,"no")) return KEY_no;
5552 if (strEQ(d,"or")) return -KEY_or;
5555 if (strEQ(d,"ord")) return -KEY_ord;
5556 if (strEQ(d,"oct")) return -KEY_oct;
5557 if (strEQ(d,"our")) return KEY_our;
5560 if (strEQ(d,"open")) return -KEY_open;
5563 if (strEQ(d,"opendir")) return -KEY_opendir;
5570 if (strEQ(d,"pop")) return -KEY_pop;
5571 if (strEQ(d,"pos")) return KEY_pos;
5574 if (strEQ(d,"push")) return -KEY_push;
5575 if (strEQ(d,"pack")) return -KEY_pack;
5576 if (strEQ(d,"pipe")) return -KEY_pipe;
5579 if (strEQ(d,"print")) return KEY_print;
5582 if (strEQ(d,"printf")) return KEY_printf;
5585 if (strEQ(d,"package")) return KEY_package;
5588 if (strEQ(d,"prototype")) return KEY_prototype;
5593 if (strEQ(d,"q")) return KEY_q;
5594 if (strEQ(d,"qr")) return KEY_qr;
5595 if (strEQ(d,"qq")) return KEY_qq;
5596 if (strEQ(d,"qw")) return KEY_qw;
5597 if (strEQ(d,"qx")) return KEY_qx;
5599 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
5604 if (strEQ(d,"ref")) return -KEY_ref;
5607 if (strEQ(d,"read")) return -KEY_read;
5608 if (strEQ(d,"rand")) return -KEY_rand;
5609 if (strEQ(d,"recv")) return -KEY_recv;
5610 if (strEQ(d,"redo")) return KEY_redo;
5613 if (strEQ(d,"rmdir")) return -KEY_rmdir;
5614 if (strEQ(d,"reset")) return -KEY_reset;
5617 if (strEQ(d,"return")) return KEY_return;
5618 if (strEQ(d,"rename")) return -KEY_rename;
5619 if (strEQ(d,"rindex")) return -KEY_rindex;
5622 if (strEQ(d,"require")) return -KEY_require;
5623 if (strEQ(d,"reverse")) return -KEY_reverse;
5624 if (strEQ(d,"readdir")) return -KEY_readdir;
5627 if (strEQ(d,"readlink")) return -KEY_readlink;
5628 if (strEQ(d,"readline")) return -KEY_readline;
5629 if (strEQ(d,"readpipe")) return -KEY_readpipe;
5632 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
5638 case 0: return KEY_s;
5640 if (strEQ(d,"scalar")) return KEY_scalar;
5645 if (strEQ(d,"seek")) return -KEY_seek;
5646 if (strEQ(d,"send")) return -KEY_send;
5649 if (strEQ(d,"semop")) return -KEY_semop;
5652 if (strEQ(d,"select")) return -KEY_select;
5653 if (strEQ(d,"semctl")) return -KEY_semctl;
5654 if (strEQ(d,"semget")) return -KEY_semget;
5657 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
5658 if (strEQ(d,"seekdir")) return -KEY_seekdir;
5661 if (strEQ(d,"setpwent")) return -KEY_setpwent;
5662 if (strEQ(d,"setgrent")) return -KEY_setgrent;
5665 if (strEQ(d,"setnetent")) return -KEY_setnetent;
5668 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
5669 if (strEQ(d,"sethostent")) return -KEY_sethostent;
5670 if (strEQ(d,"setservent")) return -KEY_setservent;
5673 if (strEQ(d,"setpriority")) return -KEY_setpriority;
5674 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
5681 if (strEQ(d,"shift")) return -KEY_shift;
5684 if (strEQ(d,"shmctl")) return -KEY_shmctl;
5685 if (strEQ(d,"shmget")) return -KEY_shmget;
5688 if (strEQ(d,"shmread")) return -KEY_shmread;
5691 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
5692 if (strEQ(d,"shutdown")) return -KEY_shutdown;
5697 if (strEQ(d,"sin")) return -KEY_sin;
5700 if (strEQ(d,"sleep")) return -KEY_sleep;
5703 if (strEQ(d,"sort")) return KEY_sort;
5704 if (strEQ(d,"socket")) return -KEY_socket;
5705 if (strEQ(d,"socketpair")) return -KEY_socketpair;
5708 if (strEQ(d,"split")) return KEY_split;
5709 if (strEQ(d,"sprintf")) return -KEY_sprintf;
5710 if (strEQ(d,"splice")) return -KEY_splice;
5713 if (strEQ(d,"sqrt")) return -KEY_sqrt;
5716 if (strEQ(d,"srand")) return -KEY_srand;
5719 if (strEQ(d,"stat")) return -KEY_stat;
5720 if (strEQ(d,"study")) return KEY_study;
5723 if (strEQ(d,"substr")) return -KEY_substr;
5724 if (strEQ(d,"sub")) return KEY_sub;
5729 if (strEQ(d,"system")) return -KEY_system;
5732 if (strEQ(d,"symlink")) return -KEY_symlink;
5733 if (strEQ(d,"syscall")) return -KEY_syscall;
5734 if (strEQ(d,"sysopen")) return -KEY_sysopen;
5735 if (strEQ(d,"sysread")) return -KEY_sysread;
5736 if (strEQ(d,"sysseek")) return -KEY_sysseek;
5739 if (strEQ(d,"syswrite")) return -KEY_syswrite;
5748 if (strEQ(d,"tr")) return KEY_tr;
5751 if (strEQ(d,"tie")) return KEY_tie;
5754 if (strEQ(d,"tell")) return -KEY_tell;
5755 if (strEQ(d,"tied")) return KEY_tied;
5756 if (strEQ(d,"time")) return -KEY_time;
5759 if (strEQ(d,"times")) return -KEY_times;
5762 if (strEQ(d,"telldir")) return -KEY_telldir;
5765 if (strEQ(d,"truncate")) return -KEY_truncate;
5772 if (strEQ(d,"uc")) return -KEY_uc;
5775 if (strEQ(d,"use")) return KEY_use;
5778 if (strEQ(d,"undef")) return KEY_undef;
5779 if (strEQ(d,"until")) return KEY_until;
5780 if (strEQ(d,"untie")) return KEY_untie;
5781 if (strEQ(d,"utime")) return -KEY_utime;
5782 if (strEQ(d,"umask")) return -KEY_umask;
5785 if (strEQ(d,"unless")) return KEY_unless;
5786 if (strEQ(d,"unpack")) return -KEY_unpack;
5787 if (strEQ(d,"unlink")) return -KEY_unlink;
5790 if (strEQ(d,"unshift")) return -KEY_unshift;
5791 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
5796 if (strEQ(d,"values")) return -KEY_values;
5797 if (strEQ(d,"vec")) return -KEY_vec;
5802 if (strEQ(d,"warn")) return -KEY_warn;
5803 if (strEQ(d,"wait")) return -KEY_wait;
5806 if (strEQ(d,"while")) return KEY_while;
5807 if (strEQ(d,"write")) return -KEY_write;
5810 if (strEQ(d,"waitpid")) return -KEY_waitpid;
5813 if (strEQ(d,"wantarray")) return -KEY_wantarray;
5818 if (len == 1) return -KEY_x;
5819 if (strEQ(d,"xor")) return -KEY_xor;
5822 if (len == 1) return KEY_y;
5831 S_checkcomma(pTHX_ register char *s, char *name, char *what)
5835 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
5836 if (ckWARN(WARN_SYNTAX)) {
5838 for (w = s+2; *w && level; w++) {
5845 for (; *w && isSPACE(*w); w++) ;
5846 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
5847 Perl_warner(aTHX_ WARN_SYNTAX,
5848 "%s (...) interpreted as function",name);
5851 while (s < PL_bufend && isSPACE(*s))
5855 while (s < PL_bufend && isSPACE(*s))
5857 if (isIDFIRST_lazy_if(s,UTF)) {
5859 while (isALNUM_lazy_if(s,UTF))
5861 while (s < PL_bufend && isSPACE(*s))
5866 kw = keyword(w, s - w) || get_cv(w, FALSE) != 0;
5870 Perl_croak(aTHX_ "No comma allowed after %s", what);
5875 /* Either returns sv, or mortalizes sv and returns a new SV*.
5876 Best used as sv=new_constant(..., sv, ...).
5877 If s, pv are NULL, calls subroutine with one argument,
5878 and type is used with error messages only. */
5881 S_new_constant(pTHX_ char *s, STRLEN len, const char *key, SV *sv, SV *pv,
5885 HV *table = GvHV(PL_hintgv); /* ^H */
5889 const char *why1, *why2, *why3;
5891 if (!table || !(PL_hints & HINT_LOCALIZE_HH)) {
5894 why2 = strEQ(key,"charnames")
5895 ? "(possibly a missing \"use charnames ...\")"
5897 msg = Perl_newSVpvf(aTHX_ "Constant(%s) unknown: %s",
5898 (type ? type: "undef"), why2);
5900 /* This is convoluted and evil ("goto considered harmful")
5901 * but I do not understand the intricacies of all the different
5902 * failure modes of %^H in here. The goal here is to make
5903 * the most probable error message user-friendly. --jhi */
5908 msg = Perl_newSVpvf(aTHX_ "Constant(%s): %s%s%s",
5909 (type ? type: "undef"), why1, why2, why3);
5911 yyerror(SvPVX(msg));
5915 cvp = hv_fetch(table, key, strlen(key), FALSE);
5916 if (!cvp || !SvOK(*cvp)) {
5919 why3 = "} is not defined";
5922 sv_2mortal(sv); /* Parent created it permanently */
5925 pv = sv_2mortal(newSVpvn(s, len));
5927 typesv = sv_2mortal(newSVpv(type, 0));
5929 typesv = &PL_sv_undef;
5931 PUSHSTACKi(PERLSI_OVERLOAD);
5943 call_sv(cv, G_SCALAR | ( PL_in_eval ? 0 : G_EVAL));
5947 /* Check the eval first */
5948 if (!PL_in_eval && SvTRUE(ERRSV)) {
5950 sv_catpv(ERRSV, "Propagated");
5951 yyerror(SvPV(ERRSV, n_a)); /* Duplicates the message inside eval */
5953 res = SvREFCNT_inc(sv);
5957 (void)SvREFCNT_inc(res);
5966 why1 = "Call to &{$^H{";
5968 why3 = "}} did not return a defined value";
5977 S_scan_word(pTHX_ register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
5979 register char *d = dest;
5980 register char *e = d + destlen - 3; /* two-character token, ending NUL */
5983 Perl_croak(aTHX_ ident_too_long);
5984 if (isALNUM(*s)) /* UTF handled below */
5986 else if (*s == '\'' && allow_package && isIDFIRST_lazy_if(s+1,UTF)) {
5991 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
5995 else if (UTF && UTF8_IS_START(*s) && isALNUM_utf8((U8*)s)) {
5996 char *t = s + UTF8SKIP(s);
5997 while (UTF8_IS_CONTINUED(*t) && is_utf8_mark((U8*)t))
5999 if (d + (t - s) > e)
6000 Perl_croak(aTHX_ ident_too_long);
6001 Copy(s, d, t - s, char);
6014 S_scan_ident(pTHX_ register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
6024 e = d + destlen - 3; /* two-character token, ending NUL */
6026 while (isDIGIT(*s)) {
6028 Perl_croak(aTHX_ ident_too_long);
6035 Perl_croak(aTHX_ ident_too_long);
6036 if (isALNUM(*s)) /* UTF handled below */
6038 else if (*s == '\'' && isIDFIRST_lazy_if(s+1,UTF)) {
6043 else if (*s == ':' && s[1] == ':') {
6047 else if (UTF && UTF8_IS_START(*s) && isALNUM_utf8((U8*)s)) {
6048 char *t = s + UTF8SKIP(s);
6049 while (UTF8_IS_CONTINUED(*t) && is_utf8_mark((U8*)t))
6051 if (d + (t - s) > e)
6052 Perl_croak(aTHX_ ident_too_long);
6053 Copy(s, d, t - s, char);
6064 if (PL_lex_state != LEX_NORMAL)
6065 PL_lex_state = LEX_INTERPENDMAYBE;
6068 if (*s == '$' && s[1] &&
6069 (isALNUM_lazy_if(s+1,UTF) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
6082 if (*d == '^' && *s && isCONTROLVAR(*s)) {
6087 if (isSPACE(s[-1])) {
6090 if (!SPACE_OR_TAB(ch)) {
6096 if (isIDFIRST_lazy_if(d,UTF)) {
6100 while ((e < send && isALNUM_lazy_if(e,UTF)) || *e == ':') {
6102 while (e < send && UTF8_IS_CONTINUED(*e) && is_utf8_mark((U8*)e))
6105 Copy(s, d, e - s, char);
6110 while ((isALNUM(*s) || *s == ':') && d < e)
6113 Perl_croak(aTHX_ ident_too_long);
6116 while (s < send && SPACE_OR_TAB(*s)) s++;
6117 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
6118 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
6119 const char *brack = *s == '[' ? "[...]" : "{...}";
6120 Perl_warner(aTHX_ WARN_AMBIGUOUS,
6121 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
6122 funny, dest, brack, funny, dest, brack);
6125 PL_lex_brackstack[PL_lex_brackets++] = (char)(XOPERATOR | XFAKEBRACK);
6129 /* Handle extended ${^Foo} variables
6130 * 1999-02-27 mjd-perl-patch@plover.com */
6131 else if (!isALNUM(*d) && !isPRINT(*d) /* isCTRL(d) */
6135 while (isALNUM(*s) && d < e) {
6139 Perl_croak(aTHX_ ident_too_long);
6144 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
6145 PL_lex_state = LEX_INTERPEND;
6148 if (PL_lex_state == LEX_NORMAL) {
6149 if (ckWARN(WARN_AMBIGUOUS) &&
6150 (keyword(dest, d - dest) || get_cv(dest, FALSE)))
6152 Perl_warner(aTHX_ WARN_AMBIGUOUS,
6153 "Ambiguous use of %c{%s} resolved to %c%s",
6154 funny, dest, funny, dest);
6159 s = bracket; /* let the parser handle it */
6163 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
6164 PL_lex_state = LEX_INTERPEND;
6169 Perl_pmflag(pTHX_ U16 *pmfl, int ch)
6174 *pmfl |= PMf_GLOBAL;
6176 *pmfl |= PMf_CONTINUE;
6180 *pmfl |= PMf_MULTILINE;
6182 *pmfl |= PMf_SINGLELINE;
6184 *pmfl |= PMf_EXTENDED;
6188 S_scan_pat(pTHX_ char *start, I32 type)
6193 s = scan_str(start,FALSE,FALSE);
6195 Perl_croak(aTHX_ "Search pattern not terminated");
6197 pm = (PMOP*)newPMOP(type, 0);
6198 if (PL_multi_open == '?')
6199 pm->op_pmflags |= PMf_ONCE;
6201 while (*s && strchr("iomsx", *s))
6202 pmflag(&pm->op_pmflags,*s++);
6205 while (*s && strchr("iogcmsx", *s))
6206 pmflag(&pm->op_pmflags,*s++);
6208 pm->op_pmpermflags = pm->op_pmflags;
6210 PL_lex_op = (OP*)pm;
6211 yylval.ival = OP_MATCH;
6216 S_scan_subst(pTHX_ char *start)
6223 yylval.ival = OP_NULL;
6225 s = scan_str(start,FALSE,FALSE);
6228 Perl_croak(aTHX_ "Substitution pattern not terminated");
6230 if (s[-1] == PL_multi_open)
6233 first_start = PL_multi_start;
6234 s = scan_str(s,FALSE,FALSE);
6237 SvREFCNT_dec(PL_lex_stuff);
6238 PL_lex_stuff = Nullsv;
6240 Perl_croak(aTHX_ "Substitution replacement not terminated");
6242 PL_multi_start = first_start; /* so whole substitution is taken together */
6244 pm = (PMOP*)newPMOP(OP_SUBST, 0);
6250 else if (strchr("iogcmsx", *s))
6251 pmflag(&pm->op_pmflags,*s++);
6258 PL_sublex_info.super_bufptr = s;
6259 PL_sublex_info.super_bufend = PL_bufend;
6261 pm->op_pmflags |= PMf_EVAL;
6262 repl = newSVpvn("",0);
6264 sv_catpv(repl, es ? "eval " : "do ");
6265 sv_catpvn(repl, "{ ", 2);
6266 sv_catsv(repl, PL_lex_repl);
6267 sv_catpvn(repl, " };", 2);
6269 SvREFCNT_dec(PL_lex_repl);
6273 pm->op_pmpermflags = pm->op_pmflags;
6274 PL_lex_op = (OP*)pm;
6275 yylval.ival = OP_SUBST;
6280 S_scan_trans(pTHX_ char *start)
6289 yylval.ival = OP_NULL;
6291 s = scan_str(start,FALSE,FALSE);
6293 Perl_croak(aTHX_ "Transliteration pattern not terminated");
6294 if (s[-1] == PL_multi_open)
6297 s = scan_str(s,FALSE,FALSE);
6300 SvREFCNT_dec(PL_lex_stuff);
6301 PL_lex_stuff = Nullsv;
6303 Perl_croak(aTHX_ "Transliteration replacement not terminated");
6306 New(803,tbl,256,short);
6307 o = newPVOP(OP_TRANS, 0, (char*)tbl);
6309 complement = del = squash = 0;
6310 while (strchr("cds", *s)) {
6312 complement = OPpTRANS_COMPLEMENT;
6314 del = OPpTRANS_DELETE;
6316 squash = OPpTRANS_SQUASH;
6319 o->op_private = del|squash|complement|
6320 (DO_UTF8(PL_lex_stuff)? OPpTRANS_FROM_UTF : 0)|
6321 (DO_UTF8(PL_lex_repl) ? OPpTRANS_TO_UTF : 0);
6324 yylval.ival = OP_TRANS;
6329 S_scan_heredoc(pTHX_ register char *s)
6332 I32 op_type = OP_SCALAR;
6339 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
6343 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
6346 for (peek = s; SPACE_OR_TAB(*peek); peek++) ;
6347 if (*peek && strchr("`'\"",*peek)) {
6350 s = delimcpy(d, e, s, PL_bufend, term, &len);
6360 if (!isALNUM_lazy_if(s,UTF))
6361 deprecate("bare << to mean <<\"\"");
6362 for (; isALNUM_lazy_if(s,UTF); s++) {
6367 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
6368 Perl_croak(aTHX_ "Delimiter for here document is too long");
6371 len = d - PL_tokenbuf;
6372 #ifndef PERL_STRICT_CR
6373 d = strchr(s, '\r');
6377 while (s < PL_bufend) {
6383 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
6392 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
6397 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
6398 herewas = newSVpvn(s,PL_bufend-s);
6400 s--, herewas = newSVpvn(s,d-s);
6401 s += SvCUR(herewas);
6403 tmpstr = NEWSV(87,79);
6404 sv_upgrade(tmpstr, SVt_PVIV);
6409 else if (term == '`') {
6410 op_type = OP_BACKTICK;
6411 SvIVX(tmpstr) = '\\';
6415 PL_multi_start = CopLINE(PL_curcop);
6416 PL_multi_open = PL_multi_close = '<';
6417 term = *PL_tokenbuf;
6418 if (PL_lex_inwhat == OP_SUBST && PL_in_eval && !PL_rsfp) {
6419 char *bufptr = PL_sublex_info.super_bufptr;
6420 char *bufend = PL_sublex_info.super_bufend;
6421 char *olds = s - SvCUR(herewas);
6422 s = strchr(bufptr, '\n');
6426 while (s < bufend &&
6427 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
6429 CopLINE_inc(PL_curcop);
6432 CopLINE_set(PL_curcop, PL_multi_start);
6433 missingterm(PL_tokenbuf);
6435 sv_setpvn(herewas,bufptr,d-bufptr+1);
6436 sv_setpvn(tmpstr,d+1,s-d);
6438 sv_catpvn(herewas,s,bufend-s);
6439 (void)strcpy(bufptr,SvPVX(herewas));
6446 while (s < PL_bufend &&
6447 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
6449 CopLINE_inc(PL_curcop);
6451 if (s >= PL_bufend) {
6452 CopLINE_set(PL_curcop, PL_multi_start);
6453 missingterm(PL_tokenbuf);
6455 sv_setpvn(tmpstr,d+1,s-d);
6457 CopLINE_inc(PL_curcop); /* the preceding stmt passes a newline */
6459 sv_catpvn(herewas,s,PL_bufend-s);
6460 sv_setsv(PL_linestr,herewas);
6461 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
6462 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6463 PL_last_lop = PL_last_uni = Nullch;
6466 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
6467 while (s >= PL_bufend) { /* multiple line string? */
6469 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
6470 CopLINE_set(PL_curcop, PL_multi_start);
6471 missingterm(PL_tokenbuf);
6473 CopLINE_inc(PL_curcop);
6474 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6475 PL_last_lop = PL_last_uni = Nullch;
6476 #ifndef PERL_STRICT_CR
6477 if (PL_bufend - PL_linestart >= 2) {
6478 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
6479 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
6481 PL_bufend[-2] = '\n';
6483 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
6485 else if (PL_bufend[-1] == '\r')
6486 PL_bufend[-1] = '\n';
6488 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
6489 PL_bufend[-1] = '\n';
6491 if (PERLDB_LINE && PL_curstash != PL_debstash) {
6492 SV *sv = NEWSV(88,0);
6494 sv_upgrade(sv, SVt_PVMG);
6495 sv_setsv(sv,PL_linestr);
6496 av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop),sv);
6498 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
6501 sv_catsv(PL_linestr,herewas);
6502 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6506 sv_catsv(tmpstr,PL_linestr);
6511 PL_multi_end = CopLINE(PL_curcop);
6512 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
6513 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
6514 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
6516 SvREFCNT_dec(herewas);
6517 if (UTF && !IN_BYTE && is_utf8_string((U8*)SvPVX(tmpstr), SvCUR(tmpstr)))
6519 PL_lex_stuff = tmpstr;
6520 yylval.ival = op_type;
6525 takes: current position in input buffer
6526 returns: new position in input buffer
6527 side-effects: yylval and lex_op are set.
6532 <FH> read from filehandle
6533 <pkg::FH> read from package qualified filehandle
6534 <pkg'FH> read from package qualified filehandle
6535 <$fh> read from filehandle in $fh
6541 S_scan_inputsymbol(pTHX_ char *start)
6543 register char *s = start; /* current position in buffer */
6549 d = PL_tokenbuf; /* start of temp holding space */
6550 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
6551 end = strchr(s, '\n');
6554 s = delimcpy(d, e, s + 1, end, '>', &len); /* extract until > */
6556 /* die if we didn't have space for the contents of the <>,
6557 or if it didn't end, or if we see a newline
6560 if (len >= sizeof PL_tokenbuf)
6561 Perl_croak(aTHX_ "Excessively long <> operator");
6563 Perl_croak(aTHX_ "Unterminated <> operator");
6568 Remember, only scalar variables are interpreted as filehandles by
6569 this code. Anything more complex (e.g., <$fh{$num}>) will be
6570 treated as a glob() call.
6571 This code makes use of the fact that except for the $ at the front,
6572 a scalar variable and a filehandle look the same.
6574 if (*d == '$' && d[1]) d++;
6576 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
6577 while (*d && (isALNUM_lazy_if(d,UTF) || *d == '\'' || *d == ':'))
6580 /* If we've tried to read what we allow filehandles to look like, and
6581 there's still text left, then it must be a glob() and not a getline.
6582 Use scan_str to pull out the stuff between the <> and treat it
6583 as nothing more than a string.
6586 if (d - PL_tokenbuf != len) {
6587 yylval.ival = OP_GLOB;
6589 s = scan_str(start,FALSE,FALSE);
6591 Perl_croak(aTHX_ "Glob not terminated");
6595 /* we're in a filehandle read situation */
6598 /* turn <> into <ARGV> */
6600 (void)strcpy(d,"ARGV");
6602 /* if <$fh>, create the ops to turn the variable into a
6608 /* try to find it in the pad for this block, otherwise find
6609 add symbol table ops
6611 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
6612 OP *o = newOP(OP_PADSV, 0);
6614 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
6617 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
6618 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
6619 newUNOP(OP_RV2SV, 0,
6620 newGVOP(OP_GV, 0, gv)));
6622 PL_lex_op->op_flags |= OPf_SPECIAL;
6623 /* we created the ops in PL_lex_op, so make yylval.ival a null op */
6624 yylval.ival = OP_NULL;
6627 /* If it's none of the above, it must be a literal filehandle
6628 (<Foo::BAR> or <FOO>) so build a simple readline OP */
6630 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
6631 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
6632 yylval.ival = OP_NULL;
6641 takes: start position in buffer
6642 keep_quoted preserve \ on the embedded delimiter(s)
6643 keep_delims preserve the delimiters around the string
6644 returns: position to continue reading from buffer
6645 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
6646 updates the read buffer.
6648 This subroutine pulls a string out of the input. It is called for:
6649 q single quotes q(literal text)
6650 ' single quotes 'literal text'
6651 qq double quotes qq(interpolate $here please)
6652 " double quotes "interpolate $here please"
6653 qx backticks qx(/bin/ls -l)
6654 ` backticks `/bin/ls -l`
6655 qw quote words @EXPORT_OK = qw( func() $spam )
6656 m// regexp match m/this/
6657 s/// regexp substitute s/this/that/
6658 tr/// string transliterate tr/this/that/
6659 y/// string transliterate y/this/that/
6660 ($*@) sub prototypes sub foo ($)
6661 (stuff) sub attr parameters sub foo : attr(stuff)
6662 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
6664 In most of these cases (all but <>, patterns and transliterate)
6665 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
6666 calls scan_str(). s/// makes yylex() call scan_subst() which calls
6667 scan_str(). tr/// and y/// make yylex() call scan_trans() which
6670 It skips whitespace before the string starts, and treats the first
6671 character as the delimiter. If the delimiter is one of ([{< then
6672 the corresponding "close" character )]}> is used as the closing
6673 delimiter. It allows quoting of delimiters, and if the string has
6674 balanced delimiters ([{<>}]) it allows nesting.
6676 On success, the SV with the resulting string is put into lex_stuff or,
6677 if that is already non-NULL, into lex_repl. The second case occurs only
6678 when parsing the RHS of the special constructs s/// and tr/// (y///).
6679 For convenience, the terminating delimiter character is stuffed into
6684 S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
6686 SV *sv; /* scalar value: string */
6687 char *tmps; /* temp string, used for delimiter matching */
6688 register char *s = start; /* current position in the buffer */
6689 register char term; /* terminating character */
6690 register char *to; /* current position in the sv's data */
6691 I32 brackets = 1; /* bracket nesting level */
6692 bool has_utf8 = FALSE; /* is there any utf8 content? */
6694 /* skip space before the delimiter */
6698 /* mark where we are, in case we need to report errors */
6701 /* after skipping whitespace, the next character is the terminator */
6703 if (UTF8_IS_CONTINUED(term) && UTF)
6706 /* mark where we are */
6707 PL_multi_start = CopLINE(PL_curcop);
6708 PL_multi_open = term;
6710 /* find corresponding closing delimiter */
6711 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
6713 PL_multi_close = term;
6715 /* create a new SV to hold the contents. 87 is leak category, I'm
6716 assuming. 79 is the SV's initial length. What a random number. */
6718 sv_upgrade(sv, SVt_PVIV);
6720 (void)SvPOK_only(sv); /* validate pointer */
6722 /* move past delimiter and try to read a complete string */
6724 sv_catpvn(sv, s, 1);
6727 /* extend sv if need be */
6728 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
6729 /* set 'to' to the next character in the sv's string */
6730 to = SvPVX(sv)+SvCUR(sv);
6732 /* if open delimiter is the close delimiter read unbridle */
6733 if (PL_multi_open == PL_multi_close) {
6734 for (; s < PL_bufend; s++,to++) {
6735 /* embedded newlines increment the current line number */
6736 if (*s == '\n' && !PL_rsfp)
6737 CopLINE_inc(PL_curcop);
6738 /* handle quoted delimiters */
6739 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
6740 if (!keep_quoted && s[1] == term)
6742 /* any other quotes are simply copied straight through */
6746 /* terminate when run out of buffer (the for() condition), or
6747 have found the terminator */
6748 else if (*s == term)
6750 else if (!has_utf8 && UTF8_IS_CONTINUED(*s) && UTF)
6756 /* if the terminator isn't the same as the start character (e.g.,
6757 matched brackets), we have to allow more in the quoting, and
6758 be prepared for nested brackets.
6761 /* read until we run out of string, or we find the terminator */
6762 for (; s < PL_bufend; s++,to++) {
6763 /* embedded newlines increment the line count */
6764 if (*s == '\n' && !PL_rsfp)
6765 CopLINE_inc(PL_curcop);
6766 /* backslashes can escape the open or closing characters */
6767 if (*s == '\\' && s+1 < PL_bufend) {
6769 ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)))
6774 /* allow nested opens and closes */
6775 else if (*s == PL_multi_close && --brackets <= 0)
6777 else if (*s == PL_multi_open)
6779 else if (!has_utf8 && UTF8_IS_CONTINUED(*s) && UTF)
6784 /* terminate the copied string and update the sv's end-of-string */
6786 SvCUR_set(sv, to - SvPVX(sv));
6789 * this next chunk reads more into the buffer if we're not done yet
6793 break; /* handle case where we are done yet :-) */
6795 #ifndef PERL_STRICT_CR
6796 if (to - SvPVX(sv) >= 2) {
6797 if ((to[-2] == '\r' && to[-1] == '\n') ||
6798 (to[-2] == '\n' && to[-1] == '\r'))
6802 SvCUR_set(sv, to - SvPVX(sv));
6804 else if (to[-1] == '\r')
6807 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
6811 /* if we're out of file, or a read fails, bail and reset the current
6812 line marker so we can report where the unterminated string began
6815 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
6817 CopLINE_set(PL_curcop, PL_multi_start);
6820 /* we read a line, so increment our line counter */
6821 CopLINE_inc(PL_curcop);
6823 /* update debugger info */
6824 if (PERLDB_LINE && PL_curstash != PL_debstash) {
6825 SV *sv = NEWSV(88,0);
6827 sv_upgrade(sv, SVt_PVMG);
6828 sv_setsv(sv,PL_linestr);
6829 av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop), sv);
6832 /* having changed the buffer, we must update PL_bufend */
6833 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6834 PL_last_lop = PL_last_uni = Nullch;
6837 /* at this point, we have successfully read the delimited string */
6840 sv_catpvn(sv, s, 1);
6843 PL_multi_end = CopLINE(PL_curcop);
6846 /* if we allocated too much space, give some back */
6847 if (SvCUR(sv) + 5 < SvLEN(sv)) {
6848 SvLEN_set(sv, SvCUR(sv) + 1);
6849 Renew(SvPVX(sv), SvLEN(sv), char);
6852 /* decide whether this is the first or second quoted string we've read
6865 takes: pointer to position in buffer
6866 returns: pointer to new position in buffer
6867 side-effects: builds ops for the constant in yylval.op
6869 Read a number in any of the formats that Perl accepts:
6871 0(x[0-7A-F]+)|([0-7]+)|(b[01])
6872 [\d_]+(\.[\d_]*)?[Ee](\d+)
6874 Underbars (_) are allowed in decimal numbers. If -w is on,
6875 underbars before a decimal point must be at three digit intervals.
6877 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
6880 If it reads a number without a decimal point or an exponent, it will
6881 try converting the number to an integer and see if it can do so
6882 without loss of precision.
6886 Perl_scan_num(pTHX_ char *start, YYSTYPE* lvalp)
6888 register char *s = start; /* current position in buffer */
6889 register char *d; /* destination in temp buffer */
6890 register char *e; /* end of temp buffer */
6891 NV nv; /* number read, as a double */
6892 SV *sv = Nullsv; /* place to put the converted number */
6893 bool floatit; /* boolean: int or float? */
6894 char *lastub = 0; /* position of last underbar */
6895 static char number_too_long[] = "Number too long";
6897 /* We use the first character to decide what type of number this is */
6901 Perl_croak(aTHX_ "panic: scan_num");
6903 /* if it starts with a 0, it could be an octal number, a decimal in
6904 0.13 disguise, or a hexadecimal number, or a binary number. */
6908 u holds the "number so far"
6909 shift the power of 2 of the base
6910 (hex == 4, octal == 3, binary == 1)
6911 overflowed was the number more than we can hold?
6913 Shift is used when we add a digit. It also serves as an "are
6914 we in octal/hex/binary?" indicator to disallow hex characters
6920 bool overflowed = FALSE;
6921 static NV nvshift[5] = { 1.0, 2.0, 4.0, 8.0, 16.0 };
6922 static char* bases[5] = { "", "binary", "", "octal",
6924 static char* Bases[5] = { "", "Binary", "", "Octal",
6926 static char *maxima[5] = { "",
6927 "0b11111111111111111111111111111111",
6931 char *base, *Base, *max;
6937 } else if (s[1] == 'b') {
6941 /* check for a decimal in disguise */
6942 else if (s[1] == '.' || s[1] == 'e' || s[1] == 'E')
6944 /* so it must be octal */
6948 base = bases[shift];
6949 Base = Bases[shift];
6950 max = maxima[shift];
6952 /* read the rest of the number */
6954 /* x is used in the overflow test,
6955 b is the digit we're adding on. */
6960 /* if we don't mention it, we're done */
6969 /* 8 and 9 are not octal */
6972 yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s));
6976 case '2': case '3': case '4':
6977 case '5': case '6': case '7':
6979 yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s));
6983 b = *s++ & 15; /* ASCII digit -> value of digit */
6987 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
6988 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
6989 /* make sure they said 0x */
6994 /* Prepare to put the digit we have onto the end
6995 of the number so far. We check for overflows.
7000 x = u << shift; /* make room for the digit */
7002 if ((x >> shift) != u
7003 && !(PL_hints & HINT_NEW_BINARY)) {
7006 if (ckWARN_d(WARN_OVERFLOW))
7007 Perl_warner(aTHX_ WARN_OVERFLOW,
7008 "Integer overflow in %s number",
7011 u = x | b; /* add the digit to the end */
7014 n *= nvshift[shift];
7015 /* If an NV has not enough bits in its
7016 * mantissa to represent an UV this summing of
7017 * small low-order numbers is a waste of time
7018 * (because the NV cannot preserve the
7019 * low-order bits anyway): we could just
7020 * remember when did we overflow and in the
7021 * end just multiply n by the right
7029 /* if we get here, we had success: make a scalar value from
7035 if (ckWARN(WARN_PORTABLE) && n > 4294967295.0)
7036 Perl_warner(aTHX_ WARN_PORTABLE,
7037 "%s number > %s non-portable",
7043 if (ckWARN(WARN_PORTABLE) && u > 0xffffffff)
7044 Perl_warner(aTHX_ WARN_PORTABLE,
7045 "%s number > %s non-portable",
7050 if (PL_hints & HINT_NEW_BINARY)
7051 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
7056 handle decimal numbers.
7057 we're also sent here when we read a 0 as the first digit
7059 case '1': case '2': case '3': case '4': case '5':
7060 case '6': case '7': case '8': case '9': case '.':
7063 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
7066 /* read next group of digits and _ and copy into d */
7067 while (isDIGIT(*s) || *s == '_') {
7068 /* skip underscores, checking for misplaced ones
7072 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
7073 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
7077 /* check for end of fixed-length buffer */
7079 Perl_croak(aTHX_ number_too_long);
7080 /* if we're ok, copy the character */
7085 /* final misplaced underbar check */
7086 if (lastub && s - lastub != 3) {
7087 if (ckWARN(WARN_SYNTAX))
7088 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
7091 /* read a decimal portion if there is one. avoid
7092 3..5 being interpreted as the number 3. followed
7095 if (*s == '.' && s[1] != '.') {
7099 /* copy, ignoring underbars, until we run out of
7100 digits. Note: no misplaced underbar checks!
7102 for (; isDIGIT(*s) || *s == '_'; s++) {
7103 /* fixed length buffer check */
7105 Perl_croak(aTHX_ number_too_long);
7109 if (*s == '.' && isDIGIT(s[1])) {
7110 /* oops, it's really a v-string, but without the "v" */
7116 /* read exponent part, if present */
7117 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
7121 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
7122 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
7124 /* allow positive or negative exponent */
7125 if (*s == '+' || *s == '-')
7128 /* read digits of exponent (no underbars :-) */
7129 while (isDIGIT(*s)) {
7131 Perl_croak(aTHX_ number_too_long);
7136 /* terminate the string */
7139 /* make an sv from the string */
7142 #if defined(Strtol) && defined(Strtoul)
7145 strtol/strtoll sets errno to ERANGE if the number is too big
7146 for an integer. We try to do an integer conversion first
7147 if no characters indicating "float" have been found.
7154 if (*PL_tokenbuf == '-')
7155 iv = Strtol(PL_tokenbuf, (char**)NULL, 10);
7157 uv = Strtoul(PL_tokenbuf, (char**)NULL, 10);
7159 floatit = TRUE; /* Probably just too large. */
7160 else if (*PL_tokenbuf == '-')
7162 else if (uv <= IV_MAX)
7163 sv_setiv(sv, uv); /* Prefer IVs over UVs. */
7168 nv = Atof(PL_tokenbuf);
7173 No working strtou?ll?.
7175 Unfortunately atol() doesn't do range checks (returning
7176 LONG_MIN/LONG_MAX, and setting errno to ERANGE on overflows)
7177 everywhere [1], so we cannot use use atol() (or atoll()).
7178 If we could, they would be used, as Atol(), very much like
7179 Strtol() and Strtoul() are used above.
7181 [1] XXX Configure test needed to check for atol()
7182 (and atoll()) overflow behaviour XXX
7186 We need to do this the hard way. */
7188 nv = Atof(PL_tokenbuf);
7190 /* See if we can make do with an integer value without loss of
7191 precision. We use U_V to cast to a UV, because some
7192 compilers have issues. Then we try casting it back and see
7193 if it was the same [1]. We only do this if we know we
7194 specifically read an integer. If floatit is true, then we
7195 don't need to do the conversion at all.
7197 [1] Note that this is lossy if our NVs cannot preserve our
7198 UVs. There are metaconfig defines NV_PRESERVES_UV (a boolean)
7199 and NV_PRESERVES_UV_BITS (a number), but in general we really
7200 do hope all such potentially lossy platforms have strtou?ll?
7201 to do a lossless IV/UV conversion.
7203 Maybe could do some tricks with DBL_DIG, LDBL_DIG and
7204 DBL_MANT_DIG and LDBL_MANT_DIG (these are already available
7205 as NV_DIG and NV_MANT_DIG)?
7211 if (!floatit && (NV)uv == nv) {
7213 sv_setiv(sv, uv); /* Prefer IVs over UVs. */
7221 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) :
7222 (PL_hints & HINT_NEW_INTEGER) )
7223 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
7224 (floatit ? "float" : "integer"),
7228 /* if it starts with a v, it could be a v-string */
7234 while (isDIGIT(*pos) || *pos == '_')
7236 if (!isALPHA(*pos)) {
7238 U8 tmpbuf[UTF8_MAXLEN+1];
7240 s++; /* get past 'v' */
7243 sv_setpvn(sv, "", 0);
7246 if (*s == '0' && isDIGIT(s[1]))
7247 yyerror("Octal number in vector unsupported");
7250 /* this is atoi() that tolerates underscores */
7253 while (--end >= s) {
7258 rev += (*end - '0') * mult;
7260 if (orev > rev && ckWARN_d(WARN_OVERFLOW))
7261 Perl_warner(aTHX_ WARN_OVERFLOW,
7262 "Integer overflow in decimal number");
7265 tmpend = uv_to_utf8(tmpbuf, rev);
7268 sv_catpvn(sv, (const char*)tmpbuf, tmpend - tmpbuf);
7269 if (*pos == '.' && isDIGIT(pos[1]))
7275 while (isDIGIT(*pos) || *pos == '_')
7284 sv_utf8_downgrade(sv, TRUE);
7291 /* make the op for the constant and return */
7294 lvalp->opval = newSVOP(OP_CONST, 0, sv);
7296 lvalp->opval = Nullop;
7302 S_scan_formline(pTHX_ register char *s)
7306 SV *stuff = newSVpvn("",0);
7307 bool needargs = FALSE;
7310 if (*s == '.' || *s == /*{*/'}') {
7312 #ifdef PERL_STRICT_CR
7313 for (t = s+1;SPACE_OR_TAB(*t); t++) ;
7315 for (t = s+1;SPACE_OR_TAB(*t) || *t == '\r'; t++) ;
7317 if (*t == '\n' || t == PL_bufend)
7320 if (PL_in_eval && !PL_rsfp) {
7321 eol = strchr(s,'\n');
7326 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
7328 for (t = s; t < eol; t++) {
7329 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
7331 goto enough; /* ~~ must be first line in formline */
7333 if (*t == '@' || *t == '^')
7336 sv_catpvn(stuff, s, eol-s);
7337 #ifndef PERL_STRICT_CR
7338 if (eol-s > 1 && eol[-2] == '\r' && eol[-1] == '\n') {
7339 char *end = SvPVX(stuff) + SvCUR(stuff);
7348 s = filter_gets(PL_linestr, PL_rsfp, 0);
7349 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
7350 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
7351 PL_last_lop = PL_last_uni = Nullch;
7354 yyerror("Format not terminated");
7364 PL_lex_state = LEX_NORMAL;
7365 PL_nextval[PL_nexttoke].ival = 0;
7369 PL_lex_state = LEX_FORMLINE;
7370 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
7372 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
7376 SvREFCNT_dec(stuff);
7377 PL_lex_formbrack = 0;
7388 PL_cshlen = strlen(PL_cshname);
7393 Perl_start_subparse(pTHX_ I32 is_format, U32 flags)
7395 I32 oldsavestack_ix = PL_savestack_ix;
7396 CV* outsidecv = PL_compcv;
7400 assert(SvTYPE(PL_compcv) == SVt_PVCV);
7402 SAVEI32(PL_subline);
7403 save_item(PL_subname);
7406 SAVESPTR(PL_comppad_name);
7407 SAVESPTR(PL_compcv);
7408 SAVEI32(PL_comppad_name_fill);
7409 SAVEI32(PL_min_intro_pending);
7410 SAVEI32(PL_max_intro_pending);
7411 SAVEI32(PL_pad_reset_pending);
7413 PL_compcv = (CV*)NEWSV(1104,0);
7414 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
7415 CvFLAGS(PL_compcv) |= flags;
7417 PL_comppad = newAV();
7418 av_push(PL_comppad, Nullsv);
7419 PL_curpad = AvARRAY(PL_comppad);
7420 PL_comppad_name = newAV();
7421 PL_comppad_name_fill = 0;
7422 PL_min_intro_pending = 0;
7424 PL_subline = CopLINE(PL_curcop);
7426 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
7427 PL_curpad[0] = (SV*)newAV();
7428 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
7429 #endif /* USE_THREADS */
7431 comppadlist = newAV();
7432 AvREAL_off(comppadlist);
7433 av_store(comppadlist, 0, (SV*)PL_comppad_name);
7434 av_store(comppadlist, 1, (SV*)PL_comppad);
7436 CvPADLIST(PL_compcv) = comppadlist;
7437 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
7439 CvOWNER(PL_compcv) = 0;
7440 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
7441 MUTEX_INIT(CvMUTEXP(PL_compcv));
7442 #endif /* USE_THREADS */
7444 return oldsavestack_ix;
7448 #pragma segment Perl_yylex
7451 Perl_yywarn(pTHX_ char *s)
7453 PL_in_eval |= EVAL_WARNONLY;
7455 PL_in_eval &= ~EVAL_WARNONLY;
7460 Perl_yyerror(pTHX_ char *s)
7463 char *context = NULL;
7467 if (!yychar || (yychar == ';' && !PL_rsfp))
7469 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
7470 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
7471 while (isSPACE(*PL_oldoldbufptr))
7473 context = PL_oldoldbufptr;
7474 contlen = PL_bufptr - PL_oldoldbufptr;
7476 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
7477 PL_oldbufptr != PL_bufptr) {
7478 while (isSPACE(*PL_oldbufptr))
7480 context = PL_oldbufptr;
7481 contlen = PL_bufptr - PL_oldbufptr;
7483 else if (yychar > 255)
7484 where = "next token ???";
7485 #ifdef USE_PURE_BISON
7486 /* GNU Bison sets the value -2 */
7487 else if (yychar == -2) {
7489 else if ((yychar & 127) == 127) {
7491 if (PL_lex_state == LEX_NORMAL ||
7492 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
7493 where = "at end of line";
7494 else if (PL_lex_inpat)
7495 where = "within pattern";
7497 where = "within string";
7500 SV *where_sv = sv_2mortal(newSVpvn("next char ", 10));
7502 Perl_sv_catpvf(aTHX_ where_sv, "^%c", toCTRL(yychar));
7503 else if (isPRINT_LC(yychar))
7504 Perl_sv_catpvf(aTHX_ where_sv, "%c", yychar);
7506 Perl_sv_catpvf(aTHX_ where_sv, "\\%03o", yychar & 255);
7507 where = SvPVX(where_sv);
7509 msg = sv_2mortal(newSVpv(s, 0));
7510 Perl_sv_catpvf(aTHX_ msg, " at %s line %"IVdf", ",
7511 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
7513 Perl_sv_catpvf(aTHX_ msg, "near \"%.*s\"\n", contlen, context);
7515 Perl_sv_catpvf(aTHX_ msg, "%s\n", where);
7516 if (PL_multi_start < PL_multi_end && (U32)(CopLINE(PL_curcop) - PL_multi_end) <= 1) {
7517 Perl_sv_catpvf(aTHX_ msg,
7518 " (Might be a runaway multi-line %c%c string starting on line %"IVdf")\n",
7519 (int)PL_multi_open,(int)PL_multi_close,(IV)PL_multi_start);
7522 if (PL_in_eval & EVAL_WARNONLY)
7523 Perl_warn(aTHX_ "%"SVf, msg);
7526 if (PL_error_count >= 10) {
7527 if (PL_in_eval && SvCUR(ERRSV))
7528 Perl_croak(aTHX_ "%"SVf"%s has too many errors.\n",
7529 ERRSV, CopFILE(PL_curcop));
7531 Perl_croak(aTHX_ "%s has too many errors.\n",
7532 CopFILE(PL_curcop));
7535 PL_in_my_stash = Nullhv;
7539 #pragma segment Main
7543 S_swallow_bom(pTHX_ U8 *s)
7546 slen = SvCUR(PL_linestr);
7550 /* UTF-16 little-endian */
7551 if (s[2] == 0 && s[3] == 0) /* UTF-32 little-endian */
7552 Perl_croak(aTHX_ "Unsupported script encoding");
7553 #ifndef PERL_NO_UTF16_FILTER
7554 DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-LE script encoding\n"));
7556 if (PL_bufend > (char*)s) {
7560 filter_add(utf16rev_textfilter, NULL);
7561 New(898, news, (PL_bufend - (char*)s) * 3 / 2 + 1, U8);
7562 PL_bufend = (char*)utf16_to_utf8_reversed(s, news,
7563 PL_bufend - (char*)s - 1,
7565 Copy(news, s, newlen, U8);
7566 SvCUR_set(PL_linestr, newlen);
7567 PL_bufend = SvPVX(PL_linestr) + newlen;
7568 news[newlen++] = '\0';
7572 Perl_croak(aTHX_ "Unsupported script encoding");
7577 if (s[1] == 0xFF) { /* UTF-16 big-endian */
7578 #ifndef PERL_NO_UTF16_FILTER
7579 DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-16BE script encoding\n"));
7581 if (PL_bufend > (char *)s) {
7585 filter_add(utf16_textfilter, NULL);
7586 New(898, news, (PL_bufend - (char*)s) * 3 / 2 + 1, U8);
7587 PL_bufend = (char*)utf16_to_utf8(s, news,
7588 PL_bufend - (char*)s,
7590 Copy(news, s, newlen, U8);
7591 SvCUR_set(PL_linestr, newlen);
7592 PL_bufend = SvPVX(PL_linestr) + newlen;
7593 news[newlen++] = '\0';
7597 Perl_croak(aTHX_ "Unsupported script encoding");
7602 if (slen > 2 && s[1] == 0xBB && s[2] == 0xBF) {
7603 DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-8 script encoding\n"));
7608 if (slen > 3 && s[1] == 0 && /* UTF-32 big-endian */
7609 s[2] == 0xFE && s[3] == 0xFF)
7611 Perl_croak(aTHX_ "Unsupported script encoding");
7623 * Restore a source filter.
7627 restore_rsfp(pTHXo_ void *f)
7629 PerlIO *fp = (PerlIO*)f;
7631 if (PL_rsfp == PerlIO_stdin())
7632 PerlIO_clearerr(PL_rsfp);
7633 else if (PL_rsfp && (PL_rsfp != fp))
7634 PerlIO_close(PL_rsfp);
7638 #ifndef PERL_NO_UTF16_FILTER
7640 utf16_textfilter(pTHXo_ int idx, SV *sv, int maxlen)
7642 I32 count = FILTER_READ(idx+1, sv, maxlen);
7647 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
7648 if (!*SvPV_nolen(sv))
7649 /* Game over, but don't feed an odd-length string to utf16_to_utf8 */
7652 tend = utf16_to_utf8((U8*)SvPVX(sv), tmps, SvCUR(sv), &newlen);
7653 sv_usepvn(sv, (char*)tmps, tend - tmps);
7659 utf16rev_textfilter(pTHXo_ int idx, SV *sv, int maxlen)
7661 I32 count = FILTER_READ(idx+1, sv, maxlen);
7666 if (!*SvPV_nolen(sv))
7667 /* Game over, but don't feed an odd-length string to utf16_to_utf8 */
7670 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
7671 tend = utf16_to_utf8_reversed((U8*)SvPVX(sv), tmps, SvCUR(sv), &newlen);
7672 sv_usepvn(sv, (char*)tmps, tend - tmps);