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 #ifdef DEBUGGING /* Serve -DT. */
130 # define REPORT(x,retval) tokereport(x,s,(int)retval)
131 # define REPORT2(x,retval) tokereport(x,s, yylval.ival)
133 # define REPORT(x,retval) 1
134 # define REPORT2(x,retval) 1
137 #define TOKEN(retval) return (REPORT2("token",retval), PL_bufptr = s,(int)retval)
138 #define OPERATOR(retval) return (REPORT2("operator",retval), PL_expect = XTERM, PL_bufptr = s,(int)retval)
139 #define AOPERATOR(retval) return ao((REPORT2("aop",retval), PL_expect = XTERM, PL_bufptr = s,(int)retval))
140 #define PREBLOCK(retval) return (REPORT2("preblock",retval), PL_expect = XBLOCK,PL_bufptr = s,(int)retval)
141 #define PRETERMBLOCK(retval) return (REPORT2("pretermblock",retval), PL_expect = XTERMBLOCK,PL_bufptr = s,(int)retval)
142 #define PREREF(retval) return (REPORT2("preref",retval), PL_expect = XREF,PL_bufptr = s,(int)retval)
143 #define TERM(retval) return (CLINE, REPORT2("term",retval), PL_expect = XOPERATOR, PL_bufptr = s,(int)retval)
144 #define LOOPX(f) return(yylval.ival=f, REPORT("loopx",f), PL_expect = XTERM,PL_bufptr = s,(int)LOOPEX)
145 #define FTST(f) return(yylval.ival=f, REPORT("ftst",f), PL_expect = XTERM,PL_bufptr = s,(int)UNIOP)
146 #define FUN0(f) return(yylval.ival = f, REPORT("fun0",f), PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC0)
147 #define FUN1(f) return(yylval.ival = f, REPORT("fun1",f), PL_expect = XOPERATOR,PL_bufptr = s,(int)FUNC1)
148 #define BOop(f) return ao((yylval.ival=f, REPORT("bitorop",f), PL_expect = XTERM,PL_bufptr = s,(int)BITOROP))
149 #define BAop(f) return ao((yylval.ival=f, REPORT("bitandop",f), PL_expect = XTERM,PL_bufptr = s,(int)BITANDOP))
150 #define SHop(f) return ao((yylval.ival=f, REPORT("shiftop",f), PL_expect = XTERM,PL_bufptr = s,(int)SHIFTOP))
151 #define PWop(f) return ao((yylval.ival=f, REPORT("powop",f), PL_expect = XTERM,PL_bufptr = s,(int)POWOP))
152 #define PMop(f) return(yylval.ival=f, REPORT("matchop",f), PL_expect = XTERM,PL_bufptr = s,(int)MATCHOP)
153 #define Aop(f) return ao((yylval.ival=f, REPORT("add",f), PL_expect = XTERM,PL_bufptr = s,(int)ADDOP))
154 #define Mop(f) return ao((yylval.ival=f, REPORT("mul",f), PL_expect = XTERM,PL_bufptr = s,(int)MULOP))
155 #define Eop(f) return(yylval.ival=f, REPORT("eq",f), PL_expect = XTERM,PL_bufptr = s,(int)EQOP)
156 #define Rop(f) return(yylval.ival=f, REPORT("rel",f), PL_expect = XTERM,PL_bufptr = s,(int)RELOP)
158 /* This bit of chicanery makes a unary function followed by
159 * a parenthesis into a function with one argument, highest precedence.
161 #define UNI(f) return(yylval.ival = f, \
165 PL_last_uni = PL_oldbufptr, \
166 PL_last_lop_op = f, \
167 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
169 #define UNIBRACK(f) return(yylval.ival = f, \
172 PL_last_uni = PL_oldbufptr, \
173 (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
175 /* grandfather return to old style */
176 #define OLDLOP(f) return(yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
179 S_tokereport(pTHX_ char *thing, char* s, I32 rv)
183 report = newSVpv(thing, 0);
184 Perl_sv_catpvf(aTHX_ report, ":line %i:%i:", CopLINE(PL_curcop), rv);
186 if (s - PL_bufptr > 0)
187 sv_catpvn(report, PL_bufptr, s - PL_bufptr);
189 if (PL_oldbufptr && *PL_oldbufptr)
190 sv_catpv(report, PL_tokenbuf);
192 PerlIO_printf(Perl_debug_log, "### %s\n", SvPV_nolen(report));
199 * This subroutine detects &&= and ||= and turns an ANDAND or OROR
200 * into an OP_ANDASSIGN or OP_ORASSIGN
204 S_ao(pTHX_ int toketype)
206 if (*PL_bufptr == '=') {
208 if (toketype == ANDAND)
209 yylval.ival = OP_ANDASSIGN;
210 else if (toketype == OROR)
211 yylval.ival = OP_ORASSIGN;
219 * When Perl expects an operator and finds something else, no_op
220 * prints the warning. It always prints "<something> found where
221 * operator expected. It prints "Missing semicolon on previous line?"
222 * if the surprise occurs at the start of the line. "do you need to
223 * predeclare ..." is printed out for code like "sub bar; foo bar $x"
224 * where the compiler doesn't know if foo is a method call or a function.
225 * It prints "Missing operator before end of line" if there's nothing
226 * after the missing operator, or "... before <...>" if there is something
227 * after the missing operator.
231 S_no_op(pTHX_ char *what, char *s)
233 char *oldbp = PL_bufptr;
234 bool is_first = (PL_oldbufptr == PL_linestart);
240 yywarn(Perl_form(aTHX_ "%s found where operator expected", what));
242 Perl_warn(aTHX_ "\t(Missing semicolon on previous line?)\n");
243 else if (PL_oldoldbufptr && isIDFIRST_lazy_if(PL_oldoldbufptr,UTF)) {
245 for (t = PL_oldoldbufptr; *t && (isALNUM_lazy_if(t,UTF) || *t == ':'); t++) ;
246 if (t < PL_bufptr && isSPACE(*t))
247 Perl_warn(aTHX_ "\t(Do you need to predeclare %.*s?)\n",
248 t - PL_oldoldbufptr, PL_oldoldbufptr);
252 Perl_warn(aTHX_ "\t(Missing operator before %.*s?)\n", s - oldbp, oldbp);
259 * Complain about missing quote/regexp/heredoc terminator.
260 * If it's called with (char *)NULL then it cauterizes the line buffer.
261 * If we're in a delimited string and the delimiter is a control
262 * character, it's reformatted into a two-char sequence like ^C.
267 S_missingterm(pTHX_ char *s)
272 char *nl = strrchr(s,'\n');
278 iscntrl(PL_multi_close)
280 PL_multi_close < 32 || PL_multi_close == 127
284 tmpbuf[1] = toCTRL(PL_multi_close);
290 *tmpbuf = PL_multi_close;
294 q = strchr(s,'"') ? '\'' : '"';
295 Perl_croak(aTHX_ "Can't find string terminator %c%s%c anywhere before EOF",q,s,q);
303 Perl_deprecate(pTHX_ char *s)
305 if (ckWARN(WARN_DEPRECATED))
306 Perl_warner(aTHX_ WARN_DEPRECATED, "Use of %s is deprecated", s);
311 * Deprecate a comma-less variable list.
317 deprecate("comma-less variable list");
321 * experimental text filters for win32 carriage-returns, utf16-to-utf8 and
322 * utf16-to-utf8-reversed.
325 #ifdef PERL_CR_FILTER
329 register char *s = SvPVX(sv);
330 register char *e = s + SvCUR(sv);
331 /* outer loop optimized to do nothing if there are no CR-LFs */
333 if (*s++ == '\r' && *s == '\n') {
334 /* hit a CR-LF, need to copy the rest */
335 register char *d = s - 1;
338 if (*s == '\r' && s[1] == '\n')
349 S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen)
351 I32 count = FILTER_READ(idx+1, sv, maxlen);
352 if (count > 0 && !maxlen)
360 * Initialize variables. Uses the Perl save_stack to save its state (for
361 * recursive calls to the parser).
365 Perl_lex_start(pTHX_ SV *line)
370 SAVEI32(PL_lex_dojoin);
371 SAVEI32(PL_lex_brackets);
372 SAVEI32(PL_lex_casemods);
373 SAVEI32(PL_lex_starts);
374 SAVEI32(PL_lex_state);
375 SAVEVPTR(PL_lex_inpat);
376 SAVEI32(PL_lex_inwhat);
377 if (PL_lex_state == LEX_KNOWNEXT) {
378 I32 toke = PL_nexttoke;
379 while (--toke >= 0) {
380 SAVEI32(PL_nexttype[toke]);
381 SAVEVPTR(PL_nextval[toke]);
383 SAVEI32(PL_nexttoke);
385 SAVECOPLINE(PL_curcop);
388 SAVEPPTR(PL_oldbufptr);
389 SAVEPPTR(PL_oldoldbufptr);
390 SAVEPPTR(PL_linestart);
391 SAVESPTR(PL_linestr);
392 SAVEPPTR(PL_lex_brackstack);
393 SAVEPPTR(PL_lex_casestack);
394 SAVEDESTRUCTOR_X(restore_rsfp, PL_rsfp);
395 SAVESPTR(PL_lex_stuff);
396 SAVEI32(PL_lex_defer);
397 SAVEI32(PL_sublex_info.sub_inwhat);
398 SAVESPTR(PL_lex_repl);
400 SAVEINT(PL_lex_expect);
402 PL_lex_state = LEX_NORMAL;
406 New(899, PL_lex_brackstack, 120, char);
407 New(899, PL_lex_casestack, 12, char);
408 SAVEFREEPV(PL_lex_brackstack);
409 SAVEFREEPV(PL_lex_casestack);
411 *PL_lex_casestack = '\0';
414 PL_lex_stuff = Nullsv;
415 PL_lex_repl = Nullsv;
419 PL_sublex_info.sub_inwhat = 0;
421 if (SvREADONLY(PL_linestr))
422 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
423 s = SvPV(PL_linestr, len);
424 if (len && s[len-1] != ';') {
425 if (!(SvFLAGS(PL_linestr) & SVs_TEMP))
426 PL_linestr = sv_2mortal(newSVsv(PL_linestr));
427 sv_catpvn(PL_linestr, "\n;", 2);
429 SvTEMP_off(PL_linestr);
430 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
431 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
433 PL_rs = newSVpvn("\n", 1);
439 * Finalizer for lexing operations. Must be called when the parser is
440 * done with the lexer.
446 PL_doextract = FALSE;
451 * This subroutine has nothing to do with tilting, whether at windmills
452 * or pinball tables. Its name is short for "increment line". It
453 * increments the current line number in CopLINE(PL_curcop) and checks
454 * to see whether the line starts with a comment of the form
455 * # line 500 "foo.pm"
456 * If so, it sets the current line number and file to the values in the comment.
460 S_incline(pTHX_ char *s)
467 CopLINE_inc(PL_curcop);
470 while (SPACE_OR_TAB(*s)) s++;
471 if (strnEQ(s, "line", 4))
475 if (*s == ' ' || *s == '\t')
479 while (SPACE_OR_TAB(*s)) s++;
485 while (SPACE_OR_TAB(*s))
487 if (*s == '"' && (t = strchr(s+1, '"'))) {
492 for (t = s; !isSPACE(*t); t++) ;
495 while (SPACE_OR_TAB(*e) || *e == '\r' || *e == '\f')
497 if (*e != '\n' && *e != '\0')
498 return; /* false alarm */
504 Safefree(CopFILE(PL_curcop));
506 SvREFCNT_dec(CopFILEGV(PL_curcop));
508 CopFILE_set(PL_curcop, s);
511 CopLINE_set(PL_curcop, atoi(n)-1);
516 * Called to gobble the appropriate amount and type of whitespace.
517 * Skips comments as well.
521 S_skipspace(pTHX_ register char *s)
523 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
524 while (s < PL_bufend && SPACE_OR_TAB(*s))
530 SSize_t oldprevlen, oldoldprevlen;
531 SSize_t oldloplen, oldunilen;
532 while (s < PL_bufend && isSPACE(*s)) {
533 if (*s++ == '\n' && PL_in_eval && !PL_rsfp)
538 if (s < PL_bufend && *s == '#') {
539 while (s < PL_bufend && *s != '\n')
543 if (PL_in_eval && !PL_rsfp) {
550 /* only continue to recharge the buffer if we're at the end
551 * of the buffer, we're not reading from a source filter, and
552 * we're in normal lexing mode
554 if (s < PL_bufend || !PL_rsfp || PL_sublex_info.sub_inwhat ||
555 PL_lex_state == LEX_FORMLINE)
558 /* try to recharge the buffer */
559 if ((s = filter_gets(PL_linestr, PL_rsfp,
560 (prevlen = SvCUR(PL_linestr)))) == Nullch)
562 /* end of file. Add on the -p or -n magic */
563 if (PL_minus_n || PL_minus_p) {
564 sv_setpv(PL_linestr,PL_minus_p ?
565 ";}continue{print or die qq(-p destination: $!\\n)" :
567 sv_catpv(PL_linestr,";}");
568 PL_minus_n = PL_minus_p = 0;
571 sv_setpv(PL_linestr,";");
573 /* reset variables for next time we lex */
574 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart
576 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
578 /* Close the filehandle. Could be from -P preprocessor,
579 * STDIN, or a regular file. If we were reading code from
580 * STDIN (because the commandline held no -e or filename)
581 * then we don't close it, we reset it so the code can
582 * read from STDIN too.
585 if (PL_preprocess && !PL_in_eval)
586 (void)PerlProc_pclose(PL_rsfp);
587 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
588 PerlIO_clearerr(PL_rsfp);
590 (void)PerlIO_close(PL_rsfp);
595 /* not at end of file, so we only read another line */
596 /* make corresponding updates to old pointers, for yyerror() */
597 oldprevlen = PL_oldbufptr - PL_bufend;
598 oldoldprevlen = PL_oldoldbufptr - PL_bufend;
600 oldunilen = PL_last_uni - PL_bufend;
602 oldloplen = PL_last_lop - PL_bufend;
603 PL_linestart = PL_bufptr = s + prevlen;
604 PL_bufend = s + SvCUR(PL_linestr);
606 PL_oldbufptr = s + oldprevlen;
607 PL_oldoldbufptr = s + oldoldprevlen;
609 PL_last_uni = s + oldunilen;
611 PL_last_lop = s + oldloplen;
614 /* debugger active and we're not compiling the debugger code,
615 * so store the line into the debugger's array of lines
617 if (PERLDB_LINE && PL_curstash != PL_debstash) {
618 SV *sv = NEWSV(85,0);
620 sv_upgrade(sv, SVt_PVMG);
621 sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
622 av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
629 * Check the unary operators to ensure there's no ambiguity in how they're
630 * used. An ambiguous piece of code would be:
632 * This doesn't mean rand() + 5. Because rand() is a unary operator,
633 * the +5 is its argument.
642 if (PL_oldoldbufptr != PL_last_uni)
644 while (isSPACE(*PL_last_uni))
646 for (s = PL_last_uni; isALNUM_lazy_if(s,UTF) || *s == '-'; s++) ;
647 if ((t = strchr(s, '(')) && t < PL_bufptr)
649 if (ckWARN_d(WARN_AMBIGUOUS)){
652 Perl_warner(aTHX_ WARN_AMBIGUOUS,
653 "Warning: Use of \"%s\" without parens is ambiguous",
659 /* workaround to replace the UNI() macro with a function. Only the
660 * hints/uts.sh file mentions this. Other comments elsewhere in the
661 * source indicate Microport Unix might need it too.
667 #define UNI(f) return uni(f,s)
670 S_uni(pTHX_ I32 f, char *s)
675 PL_last_uni = PL_oldbufptr;
686 #endif /* CRIPPLED_CC */
689 * LOP : macro to build a list operator. Its behaviour has been replaced
690 * with a subroutine, S_lop() for which LOP is just another name.
693 #define LOP(f,x) return lop(f,x,s)
697 * Build a list operator (or something that might be one). The rules:
698 * - if we have a next token, then it's a list operator [why?]
699 * - if the next thing is an opening paren, then it's a function
700 * - else it's a list operator
704 S_lop(pTHX_ I32 f, int x, char *s)
711 PL_last_lop = PL_oldbufptr;
726 * When the lexer realizes it knows the next token (for instance,
727 * it is reordering tokens for the parser) then it can call S_force_next
728 * to know what token to return the next time the lexer is called. Caller
729 * will need to set PL_nextval[], and possibly PL_expect to ensure the lexer
730 * handles the token correctly.
734 S_force_next(pTHX_ I32 type)
736 PL_nexttype[PL_nexttoke] = type;
738 if (PL_lex_state != LEX_KNOWNEXT) {
739 PL_lex_defer = PL_lex_state;
740 PL_lex_expect = PL_expect;
741 PL_lex_state = LEX_KNOWNEXT;
747 * When the lexer knows the next thing is a word (for instance, it has
748 * just seen -> and it knows that the next char is a word char, then
749 * it calls S_force_word to stick the next word into the PL_next lookahead.
752 * char *start : buffer position (must be within PL_linestr)
753 * int token : PL_next will be this type of bare word (e.g., METHOD,WORD)
754 * int check_keyword : if true, Perl checks to make sure the word isn't
755 * a keyword (do this if the word is a label, e.g. goto FOO)
756 * int allow_pack : if true, : characters will also be allowed (require,
758 * int allow_initial_tick : used by the "sub" lexer only.
762 S_force_word(pTHX_ register char *start, int token, int check_keyword, int allow_pack, int allow_initial_tick)
767 start = skipspace(start);
769 if (isIDFIRST_lazy_if(s,UTF) ||
770 (allow_pack && *s == ':') ||
771 (allow_initial_tick && *s == '\'') )
773 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
774 if (check_keyword && keyword(PL_tokenbuf, len))
776 if (token == METHOD) {
781 PL_expect = XOPERATOR;
784 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST,0, newSVpv(PL_tokenbuf,0));
785 PL_nextval[PL_nexttoke].opval->op_private |= OPpCONST_BARE;
793 * Called when the lexer wants $foo *foo &foo etc, but the program
794 * text only contains the "foo" portion. The first argument is a pointer
795 * to the "foo", and the second argument is the type symbol to prefix.
796 * Forces the next token to be a "WORD".
797 * Creates the symbol if it didn't already exist (via gv_fetchpv()).
801 S_force_ident(pTHX_ register char *s, int kind)
804 OP* o = (OP*)newSVOP(OP_CONST, 0, newSVpv(s,0));
805 PL_nextval[PL_nexttoke].opval = o;
808 o->op_private = OPpCONST_ENTERED;
809 /* XXX see note in pp_entereval() for why we forgo typo
810 warnings if the symbol must be introduced in an eval.
812 gv_fetchpv(s, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
813 kind == '$' ? SVt_PV :
814 kind == '@' ? SVt_PVAV :
815 kind == '%' ? SVt_PVHV :
823 Perl_str_to_version(pTHX_ SV *sv)
828 char *start = SvPVx(sv,len);
829 bool utf = SvUTF8(sv) ? TRUE : FALSE;
830 char *end = start + len;
831 while (start < end) {
835 n = utf8_to_uv((U8*)start, len, &skip, 0);
840 retval += ((NV)n)/nshift;
849 * Forces the next token to be a version number.
853 S_force_version(pTHX_ char *s)
855 OP *version = Nullop;
864 for (; isDIGIT(*d) || *d == '_' || *d == '.'; d++);
865 if (*d == ';' || isSPACE(*d) || *d == '}' || !*d) {
867 s = scan_num(s, &yylval);
868 version = yylval.opval;
869 ver = cSVOPx(version)->op_sv;
870 if (SvPOK(ver) && !SvNIOK(ver)) {
871 (void)SvUPGRADE(ver, SVt_PVNV);
872 SvNVX(ver) = str_to_version(ver);
873 SvNOK_on(ver); /* hint that it is a version */
878 /* NOTE: The parser sees the package name and the VERSION swapped */
879 PL_nextval[PL_nexttoke].opval = version;
887 * Tokenize a quoted string passed in as an SV. It finds the next
888 * chunk, up to end of string or a backslash. It may make a new
889 * SV containing that chunk (if HINT_NEW_STRING is on). It also
894 S_tokeq(pTHX_ SV *sv)
905 s = SvPV_force(sv, len);
906 if (SvTYPE(sv) >= SVt_PVIV && SvIVX(sv) == -1)
909 while (s < send && *s != '\\')
914 if ( PL_hints & HINT_NEW_STRING )
915 pv = sv_2mortal(newSVpvn(SvPVX(pv), len));
918 if (s + 1 < send && (s[1] == '\\'))
919 s++; /* all that, just for this */
924 SvCUR_set(sv, d - SvPVX(sv));
926 if ( PL_hints & HINT_NEW_STRING )
927 return new_constant(NULL, 0, "q", sv, pv, "q");
932 * Now come three functions related to double-quote context,
933 * S_sublex_start, S_sublex_push, and S_sublex_done. They're used when
934 * converting things like "\u\Lgnat" into ucfirst(lc("gnat")). They
935 * interact with PL_lex_state, and create fake ( ... ) argument lists
936 * to handle functions and concatenation.
937 * They assume that whoever calls them will be setting up a fake
938 * join call, because each subthing puts a ',' after it. This lets
941 * join($, , 'lower ', lcfirst( 'uPpEr', ) ,)
943 * (I'm not sure whether the spurious commas at the end of lcfirst's
944 * arguments and join's arguments are created or not).
949 * Assumes that yylval.ival is the op we're creating (e.g. OP_LCFIRST).
951 * Pattern matching will set PL_lex_op to the pattern-matching op to
952 * make (we return THING if yylval.ival is OP_NULL, PMFUNC otherwise).
954 * OP_CONST and OP_READLINE are easy--just make the new op and return.
956 * Everything else becomes a FUNC.
958 * Sets PL_lex_state to LEX_INTERPPUSH unless (ival was OP_NULL or we
959 * had an OP_CONST or OP_READLINE). This just sets us up for a
960 * call to S_sublex_push().
966 register I32 op_type = yylval.ival;
968 if (op_type == OP_NULL) {
969 yylval.opval = PL_lex_op;
973 if (op_type == OP_CONST || op_type == OP_READLINE) {
974 SV *sv = tokeq(PL_lex_stuff);
976 if (SvTYPE(sv) == SVt_PVIV) {
977 /* Overloaded constants, nothing fancy: Convert to SVt_PV: */
983 nsv = newSVpvn(p, len);
989 yylval.opval = (OP*)newSVOP(op_type, 0, sv);
990 PL_lex_stuff = Nullsv;
994 PL_sublex_info.super_state = PL_lex_state;
995 PL_sublex_info.sub_inwhat = op_type;
996 PL_sublex_info.sub_op = PL_lex_op;
997 PL_lex_state = LEX_INTERPPUSH;
1001 yylval.opval = PL_lex_op;
1011 * Create a new scope to save the lexing state. The scope will be
1012 * ended in S_sublex_done. Returns a '(', starting the function arguments
1013 * to the uc, lc, etc. found before.
1014 * Sets PL_lex_state to LEX_INTERPCONCAT.
1022 PL_lex_state = PL_sublex_info.super_state;
1023 SAVEI32(PL_lex_dojoin);
1024 SAVEI32(PL_lex_brackets);
1025 SAVEI32(PL_lex_casemods);
1026 SAVEI32(PL_lex_starts);
1027 SAVEI32(PL_lex_state);
1028 SAVEVPTR(PL_lex_inpat);
1029 SAVEI32(PL_lex_inwhat);
1030 SAVECOPLINE(PL_curcop);
1031 SAVEPPTR(PL_bufptr);
1032 SAVEPPTR(PL_oldbufptr);
1033 SAVEPPTR(PL_oldoldbufptr);
1034 SAVEPPTR(PL_linestart);
1035 SAVESPTR(PL_linestr);
1036 SAVEPPTR(PL_lex_brackstack);
1037 SAVEPPTR(PL_lex_casestack);
1039 PL_linestr = PL_lex_stuff;
1040 PL_lex_stuff = Nullsv;
1042 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart
1043 = SvPVX(PL_linestr);
1044 PL_bufend += SvCUR(PL_linestr);
1045 SAVEFREESV(PL_linestr);
1047 PL_lex_dojoin = FALSE;
1048 PL_lex_brackets = 0;
1049 New(899, PL_lex_brackstack, 120, char);
1050 New(899, PL_lex_casestack, 12, char);
1051 SAVEFREEPV(PL_lex_brackstack);
1052 SAVEFREEPV(PL_lex_casestack);
1053 PL_lex_casemods = 0;
1054 *PL_lex_casestack = '\0';
1056 PL_lex_state = LEX_INTERPCONCAT;
1057 CopLINE_set(PL_curcop, PL_multi_start);
1059 PL_lex_inwhat = PL_sublex_info.sub_inwhat;
1060 if (PL_lex_inwhat == OP_MATCH || PL_lex_inwhat == OP_QR || PL_lex_inwhat == OP_SUBST)
1061 PL_lex_inpat = PL_sublex_info.sub_op;
1063 PL_lex_inpat = Nullop;
1070 * Restores lexer state after a S_sublex_push.
1076 if (!PL_lex_starts++) {
1077 SV *sv = newSVpvn("",0);
1078 if (SvUTF8(PL_linestr))
1080 PL_expect = XOPERATOR;
1081 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1085 if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */
1086 PL_lex_state = LEX_INTERPCASEMOD;
1090 /* Is there a right-hand side to take care of? (s//RHS/ or tr//RHS/) */
1091 if (PL_lex_repl && (PL_lex_inwhat == OP_SUBST || PL_lex_inwhat == OP_TRANS)) {
1092 PL_linestr = PL_lex_repl;
1094 PL_bufend = PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
1095 PL_bufend += SvCUR(PL_linestr);
1096 SAVEFREESV(PL_linestr);
1097 PL_lex_dojoin = FALSE;
1098 PL_lex_brackets = 0;
1099 PL_lex_casemods = 0;
1100 *PL_lex_casestack = '\0';
1102 if (SvEVALED(PL_lex_repl)) {
1103 PL_lex_state = LEX_INTERPNORMAL;
1105 /* we don't clear PL_lex_repl here, so that we can check later
1106 whether this is an evalled subst; that means we rely on the
1107 logic to ensure sublex_done() is called again only via the
1108 branch (in yylex()) that clears PL_lex_repl, else we'll loop */
1111 PL_lex_state = LEX_INTERPCONCAT;
1112 PL_lex_repl = Nullsv;
1118 PL_bufend = SvPVX(PL_linestr);
1119 PL_bufend += SvCUR(PL_linestr);
1120 PL_expect = XOPERATOR;
1121 PL_sublex_info.sub_inwhat = 0;
1129 Extracts a pattern, double-quoted string, or transliteration. This
1132 It looks at lex_inwhat and PL_lex_inpat to find out whether it's
1133 processing a pattern (PL_lex_inpat is true), a transliteration
1134 (lex_inwhat & OP_TRANS is true), or a double-quoted string.
1136 Returns a pointer to the character scanned up to. Iff this is
1137 advanced from the start pointer supplied (ie if anything was
1138 successfully parsed), will leave an OP for the substring scanned
1139 in yylval. Caller must intuit reason for not parsing further
1140 by looking at the next characters herself.
1144 double-quoted style: \r and \n
1145 regexp special ones: \D \s
1147 backrefs: \1 (deprecated in substitution replacements)
1148 case and quoting: \U \Q \E
1149 stops on @ and $, but not for $ as tail anchor
1151 In transliterations:
1152 characters are VERY literal, except for - not at the start or end
1153 of the string, which indicates a range. scan_const expands the
1154 range to the full set of intermediate characters.
1156 In double-quoted strings:
1158 double-quoted style: \r and \n
1160 backrefs: \1 (deprecated)
1161 case and quoting: \U \Q \E
1164 scan_const does *not* construct ops to handle interpolated strings.
1165 It stops processing as soon as it finds an embedded $ or @ variable
1166 and leaves it to the caller to work out what's going on.
1168 @ in pattern could be: @foo, @{foo}, @$foo, @'foo, @:foo.
1170 $ in pattern could be $foo or could be tail anchor. Assumption:
1171 it's a tail anchor if $ is the last thing in the string, or if it's
1172 followed by one of ")| \n\t"
1174 \1 (backreferences) are turned into $1
1176 The structure of the code is
1177 while (there's a character to process) {
1178 handle transliteration ranges
1179 skip regexp comments
1180 skip # initiated comments in //x patterns
1181 check for embedded @foo
1182 check for embedded scalars
1184 leave intact backslashes from leave (below)
1185 deprecate \1 in strings and sub replacements
1186 handle string-changing backslashes \l \U \Q \E, etc.
1187 switch (what was escaped) {
1188 handle - in a transliteration (becomes a literal -)
1189 handle \132 octal characters
1190 handle 0x15 hex characters
1191 handle \cV (control V)
1192 handle printf backslashes (\f, \r, \n, etc)
1194 } (end if backslash)
1195 } (end while character to read)
1200 S_scan_const(pTHX_ char *start)
1202 register char *send = PL_bufend; /* end of the constant */
1203 SV *sv = NEWSV(93, send - start); /* sv for the constant */
1204 register char *s = start; /* start of the constant */
1205 register char *d = SvPVX(sv); /* destination for copies */
1206 bool dorange = FALSE; /* are we in a translit range? */
1207 bool didrange = FALSE; /* did we just finish a range? */
1208 bool has_utf8 = (PL_linestr && SvUTF8(PL_linestr));
1209 /* the constant is UTF8 */
1212 I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
1213 ? (PL_sublex_info.sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF))
1215 I32 this_utf8 = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
1216 ? (PL_sublex_info.sub_op->op_private & (PL_lex_repl ?
1217 OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF))
1219 const char *leaveit = /* set of acceptably-backslashed characters */
1221 ? "\\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxcz0123456789[{]} \t\n\r\f\v#"
1224 while (s < send || dorange) {
1225 /* get transliterations out of the way (they're most literal) */
1226 if (PL_lex_inwhat == OP_TRANS) {
1227 /* expand a range A-Z to the full set of characters. AIE! */
1229 I32 i; /* current expanded character */
1230 I32 min; /* first character in range */
1231 I32 max; /* last character in range */
1233 i = d - SvPVX(sv); /* remember current offset */
1234 SvGROW(sv, SvLEN(sv) + 256); /* never more than 256 chars in a range */
1235 d = SvPVX(sv) + i; /* refresh d after realloc */
1236 d -= 2; /* eat the first char and the - */
1238 min = (U8)*d; /* first char in range */
1239 max = (U8)d[1]; /* last char in range */
1243 "Invalid [] range \"%c-%c\" in transliteration operator",
1244 (char)min, (char)max);
1248 if ((isLOWER(min) && isLOWER(max)) ||
1249 (isUPPER(min) && isUPPER(max))) {
1251 for (i = min; i <= max; i++)
1255 for (i = min; i <= max; i++)
1262 for (i = min; i <= max; i++)
1265 /* mark the range as done, and continue */
1271 /* range begins (ignore - as first or last char) */
1272 else if (*s == '-' && s+1 < send && s != start) {
1274 Perl_croak(aTHX_ "Ambiguous range in transliteration operator");
1277 *d++ = (char)0xff; /* use illegal utf8 byte--see pmtrans */
1289 /* if we get here, we're not doing a transliteration */
1291 /* skip for regexp comments /(?#comment)/ and code /(?{code})/,
1292 except for the last char, which will be done separately. */
1293 else if (*s == '(' && PL_lex_inpat && s[1] == '?') {
1295 while (s < send && *s != ')')
1298 else if (s[2] == '{' /* This should match regcomp.c */
1299 || ((s[2] == 'p' || s[2] == '?') && s[3] == '{'))
1302 char *regparse = s + (s[2] == '{' ? 3 : 4);
1305 while (count && (c = *regparse)) {
1306 if (c == '\\' && regparse[1])
1314 if (*regparse != ')') {
1315 regparse--; /* Leave one char for continuation. */
1316 yyerror("Sequence (?{...}) not terminated or not {}-balanced");
1318 while (s < regparse)
1323 /* likewise skip #-initiated comments in //x patterns */
1324 else if (*s == '#' && PL_lex_inpat &&
1325 ((PMOP*)PL_lex_inpat)->op_pmflags & PMf_EXTENDED) {
1326 while (s+1 < send && *s != '\n')
1330 /* check for embedded arrays
1331 (@foo, @:foo, @'foo, @{foo}, @$foo, @+, @-)
1333 else if (*s == '@' && s[1]
1334 && (isALNUM_lazy_if(s+1,UTF) || strchr(":'{$+-", s[1])))
1337 /* check for embedded scalars. only stop if we're sure it's a
1340 else if (*s == '$') {
1341 if (!PL_lex_inpat) /* not a regexp, so $ must be var */
1343 if (s + 1 < send && !strchr("()| \n\t", s[1]))
1344 break; /* in regexp, $ might be tail anchor */
1348 if (*s == '\\' && s+1 < send) {
1351 /* some backslashes we leave behind */
1352 if (*leaveit && *s && strchr(leaveit, *s)) {
1358 /* deprecate \1 in strings and substitution replacements */
1359 if (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat &&
1360 isDIGIT(*s) && *s != '0' && !isDIGIT(s[1]))
1362 if (ckWARN(WARN_SYNTAX))
1363 Perl_warner(aTHX_ WARN_SYNTAX, "\\%c better written as $%c", *s, *s);
1368 /* string-change backslash escapes */
1369 if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQ", *s)) {
1374 /* if we get here, it's either a quoted -, or a digit */
1377 /* quoted - in transliterations */
1379 if (PL_lex_inwhat == OP_TRANS) {
1386 if (ckWARN(WARN_MISC) && isALNUM(*s))
1387 Perl_warner(aTHX_ WARN_MISC,
1388 "Unrecognized escape \\%c passed through",
1390 /* default action is to copy the quoted character */
1395 /* \132 indicates an octal constant */
1396 case '0': case '1': case '2': case '3':
1397 case '4': case '5': case '6': case '7':
1399 STRLEN len = 0; /* disallow underscores */
1400 uv = (UV)scan_oct(s, 3, &len);
1403 goto NUM_ESCAPE_INSERT;
1405 /* \x24 indicates a hex constant */
1409 char* e = strchr(s, '}');
1411 yyerror("Missing right brace on \\x{}");
1415 STRLEN len = 1; /* allow underscores */
1416 uv = (UV)scan_hex(s + 1, e - s - 1, &len);
1422 STRLEN len = 0; /* disallow underscores */
1423 uv = (UV)scan_hex(s, 2, &len);
1429 /* Insert oct or hex escaped character.
1430 * There will always enough room in sv since such
1431 * escapes will be longer than any UT-F8 sequence
1432 * they can end up as. */
1434 /* This spot is wrong for EBCDIC. Characters like
1435 * the lowercase letters and digits are >127 in EBCDIC,
1436 * so here they would need to be mapped to the Unicode
1437 * repertoire. --jhi */
1440 if (!has_utf8 && uv > 255) {
1441 /* Might need to recode whatever we have
1442 * accumulated so far if it contains any
1445 * (Can't we keep track of that and avoid
1446 * this rescan? --jhi)
1451 for (c = SvPVX(sv); c < d; c++) {
1452 if (UTF8_IS_CONTINUED(*c))
1456 char *old_pvx = SvPVX(sv);
1460 SvCUR(sv) + hicount + 1) +
1468 if (UTF8_IS_CONTINUED(*src)) {
1469 *dst-- = UTF8_EIGHT_BIT_LO(*src);
1470 *dst-- = UTF8_EIGHT_BIT_HI(*src--);
1479 if (has_utf8 || uv > 255) {
1480 d = (char*)uv_to_utf8((U8*)d, uv);
1492 /* \N{latin small letter a} is a named character */
1496 char* e = strchr(s, '}');
1502 yyerror("Missing right brace on \\N{}");
1506 res = newSVpvn(s + 1, e - s - 1);
1507 res = new_constant( Nullch, 0, "charnames",
1508 res, Nullsv, "\\N{...}" );
1509 str = SvPV(res,len);
1510 if (!has_utf8 && SvUTF8(res)) {
1511 char *ostart = SvPVX(sv);
1512 SvCUR_set(sv, d - ostart);
1515 sv_utf8_upgrade(sv);
1516 /* this just broke our allocation above... */
1517 SvGROW(sv, send - start);
1518 d = SvPVX(sv) + SvCUR(sv);
1521 if (len > e - s + 4) {
1522 char *odest = SvPVX(sv);
1524 SvGROW(sv, (SvCUR(sv) + len - (e - s + 4)));
1525 d = SvPVX(sv) + (d - odest);
1527 Copy(str, d, len, char);
1534 yyerror("Missing braces on \\N{}");
1537 /* \c is a control character */
1554 /* printf-style backslashes, formfeeds, newlines, etc */
1572 *d++ = '\047'; /* CP 1047 */
1575 *d++ = '\057'; /* CP 1047 */
1589 } /* end if (backslash) */
1591 /* (now in tr/// code again) */
1593 if (UTF8_IS_CONTINUED(*s) && (this_utf8 || has_utf8)) {
1594 STRLEN len = (STRLEN) -1;
1597 uv = utf8_to_uv((U8*)s, send - s, &len, 0);
1599 if (len == (STRLEN)-1) {
1600 /* Illegal UTF8 (a high-bit byte), make it valid. */
1601 char *old_pvx = SvPVX(sv);
1602 /* need space for one extra char (NOTE: SvCUR() not set here) */
1603 d = SvGROW(sv, SvLEN(sv) + 1) + (d - old_pvx);
1604 d = (char*)uv_to_utf8((U8*)d, (U8)*s++);
1615 } /* while loop to process each character */
1617 /* terminate the string and set up the sv */
1619 SvCUR_set(sv, d - SvPVX(sv));
1624 /* shrink the sv if we allocated more than we used */
1625 if (SvCUR(sv) + 5 < SvLEN(sv)) {
1626 SvLEN_set(sv, SvCUR(sv) + 1);
1627 Renew(SvPVX(sv), SvLEN(sv), char);
1630 /* return the substring (via yylval) only if we parsed anything */
1631 if (s > PL_bufptr) {
1632 if ( PL_hints & ( PL_lex_inpat ? HINT_NEW_RE : HINT_NEW_STRING ) )
1633 sv = new_constant(start, s - start, (PL_lex_inpat ? "qr" : "q"),
1635 ( PL_lex_inwhat == OP_TRANS
1637 : ( (PL_lex_inwhat == OP_SUBST && !PL_lex_inpat)
1640 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
1647 * Returns TRUE if there's more to the expression (e.g., a subscript),
1650 * It deals with "$foo[3]" and /$foo[3]/ and /$foo[0123456789$]+/
1652 * ->[ and ->{ return TRUE
1653 * { and [ outside a pattern are always subscripts, so return TRUE
1654 * if we're outside a pattern and it's not { or [, then return FALSE
1655 * if we're in a pattern and the first char is a {
1656 * {4,5} (any digits around the comma) returns FALSE
1657 * if we're in a pattern and the first char is a [
1659 * [SOMETHING] has a funky algorithm to decide whether it's a
1660 * character class or not. It has to deal with things like
1661 * /$foo[-3]/ and /$foo[$bar]/ as well as /$foo[$\d]+/
1662 * anything else returns TRUE
1665 /* This is the one truly awful dwimmer necessary to conflate C and sed. */
1668 S_intuit_more(pTHX_ register char *s)
1670 if (PL_lex_brackets)
1672 if (*s == '-' && s[1] == '>' && (s[2] == '[' || s[2] == '{'))
1674 if (*s != '{' && *s != '[')
1679 /* In a pattern, so maybe we have {n,m}. */
1696 /* On the other hand, maybe we have a character class */
1699 if (*s == ']' || *s == '^')
1702 /* this is terrifying, and it works */
1703 int weight = 2; /* let's weigh the evidence */
1705 unsigned char un_char = 255, last_un_char;
1706 char *send = strchr(s,']');
1707 char tmpbuf[sizeof PL_tokenbuf * 4];
1709 if (!send) /* has to be an expression */
1712 Zero(seen,256,char);
1715 else if (isDIGIT(*s)) {
1717 if (isDIGIT(s[1]) && s[2] == ']')
1723 for (; s < send; s++) {
1724 last_un_char = un_char;
1725 un_char = (unsigned char)*s;
1730 weight -= seen[un_char] * 10;
1731 if (isALNUM_lazy_if(s+1,UTF)) {
1732 scan_ident(s, send, tmpbuf, sizeof tmpbuf, FALSE);
1733 if ((int)strlen(tmpbuf) > 1 && gv_fetchpv(tmpbuf,FALSE, SVt_PV))
1738 else if (*s == '$' && s[1] &&
1739 strchr("[#!%*<>()-=",s[1])) {
1740 if (/*{*/ strchr("])} =",s[2]))
1749 if (strchr("wds]",s[1]))
1751 else if (seen['\''] || seen['"'])
1753 else if (strchr("rnftbxcav",s[1]))
1755 else if (isDIGIT(s[1])) {
1757 while (s[1] && isDIGIT(s[1]))
1767 if (strchr("aA01! ",last_un_char))
1769 if (strchr("zZ79~",s[1]))
1771 if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
1772 weight -= 5; /* cope with negative subscript */
1775 if (!isALNUM(last_un_char) && !strchr("$@&",last_un_char) &&
1776 isALPHA(*s) && s[1] && isALPHA(s[1])) {
1781 if (keyword(tmpbuf, d - tmpbuf))
1784 if (un_char == last_un_char + 1)
1786 weight -= seen[un_char];
1791 if (weight >= 0) /* probably a character class */
1801 * Does all the checking to disambiguate
1803 * between foo(bar) and bar->foo. Returns 0 if not a method, otherwise
1804 * FUNCMETH (bar->foo(args)) or METHOD (bar->foo args).
1806 * First argument is the stuff after the first token, e.g. "bar".
1808 * Not a method if bar is a filehandle.
1809 * Not a method if foo is a subroutine prototyped to take a filehandle.
1810 * Not a method if it's really "Foo $bar"
1811 * Method if it's "foo $bar"
1812 * Not a method if it's really "print foo $bar"
1813 * Method if it's really "foo package::" (interpreted as package->foo)
1814 * Not a method if bar is known to be a subroutne ("sub bar; foo bar")
1815 * Not a method if bar is a filehandle or package, but is quoted with
1820 S_intuit_method(pTHX_ char *start, GV *gv)
1822 char *s = start + (*start == '$');
1823 char tmpbuf[sizeof PL_tokenbuf];
1831 if ((cv = GvCVu(gv))) {
1832 char *proto = SvPVX(cv);
1842 s = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
1843 /* start is the beginning of the possible filehandle/object,
1844 * and s is the end of it
1845 * tmpbuf is a copy of it
1848 if (*start == '$') {
1849 if (gv || PL_last_lop_op == OP_PRINT || isUPPER(*PL_tokenbuf))
1854 return *s == '(' ? FUNCMETH : METHOD;
1856 if (!keyword(tmpbuf, len)) {
1857 if (len > 2 && tmpbuf[len - 2] == ':' && tmpbuf[len - 1] == ':') {
1862 indirgv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
1863 if (indirgv && GvCVu(indirgv))
1865 /* filehandle or package name makes it a method */
1866 if (!gv || GvIO(indirgv) || gv_stashpvn(tmpbuf, len, FALSE)) {
1868 if ((PL_bufend - s) >= 2 && *s == '=' && *(s+1) == '>')
1869 return 0; /* no assumptions -- "=>" quotes bearword */
1871 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0,
1872 newSVpvn(tmpbuf,len));
1873 PL_nextval[PL_nexttoke].opval->op_private = OPpCONST_BARE;
1877 return *s == '(' ? FUNCMETH : METHOD;
1885 * Return a string of Perl code to load the debugger. If PERL5DB
1886 * is set, it will return the contents of that, otherwise a
1887 * compile-time require of perl5db.pl.
1894 char *pdb = PerlEnv_getenv("PERL5DB");
1898 SETERRNO(0,SS$_NORMAL);
1899 return "BEGIN { require 'perl5db.pl' }";
1905 /* Encoded script support. filter_add() effectively inserts a
1906 * 'pre-processing' function into the current source input stream.
1907 * Note that the filter function only applies to the current source file
1908 * (e.g., it will not affect files 'require'd or 'use'd by this one).
1910 * The datasv parameter (which may be NULL) can be used to pass
1911 * private data to this instance of the filter. The filter function
1912 * can recover the SV using the FILTER_DATA macro and use it to
1913 * store private buffers and state information.
1915 * The supplied datasv parameter is upgraded to a PVIO type
1916 * and the IoDIRP/IoANY field is used to store the function pointer,
1917 * and IOf_FAKE_DIRP is enabled on datasv to mark this as such.
1918 * Note that IoTOP_NAME, IoFMT_NAME, IoBOTTOM_NAME, if set for
1919 * private use must be set using malloc'd pointers.
1923 Perl_filter_add(pTHX_ filter_t funcp, SV *datasv)
1928 if (!PL_rsfp_filters)
1929 PL_rsfp_filters = newAV();
1931 datasv = NEWSV(255,0);
1932 if (!SvUPGRADE(datasv, SVt_PVIO))
1933 Perl_die(aTHX_ "Can't upgrade filter_add data to SVt_PVIO");
1934 IoANY(datasv) = (void *)funcp; /* stash funcp into spare field */
1935 IoFLAGS(datasv) |= IOf_FAKE_DIRP;
1936 DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_add func %p (%s)\n",
1937 funcp, SvPV_nolen(datasv)));
1938 av_unshift(PL_rsfp_filters, 1);
1939 av_store(PL_rsfp_filters, 0, datasv) ;
1944 /* Delete most recently added instance of this filter function. */
1946 Perl_filter_del(pTHX_ filter_t funcp)
1949 DEBUG_P(PerlIO_printf(Perl_debug_log, "filter_del func %p", funcp));
1950 if (!PL_rsfp_filters || AvFILLp(PL_rsfp_filters)<0)
1952 /* if filter is on top of stack (usual case) just pop it off */
1953 datasv = FILTER_DATA(AvFILLp(PL_rsfp_filters));
1954 if (IoANY(datasv) == (void *)funcp) {
1955 IoFLAGS(datasv) &= ~IOf_FAKE_DIRP;
1956 IoANY(datasv) = (void *)NULL;
1957 sv_free(av_pop(PL_rsfp_filters));
1961 /* we need to search for the correct entry and clear it */
1962 Perl_die(aTHX_ "filter_del can only delete in reverse order (currently)");
1966 /* Invoke the n'th filter function for the current rsfp. */
1968 Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen)
1971 /* 0 = read one text line */
1976 if (!PL_rsfp_filters)
1978 if (idx > AvFILLp(PL_rsfp_filters)){ /* Any more filters? */
1979 /* Provide a default input filter to make life easy. */
1980 /* Note that we append to the line. This is handy. */
1981 DEBUG_P(PerlIO_printf(Perl_debug_log,
1982 "filter_read %d: from rsfp\n", idx));
1986 int old_len = SvCUR(buf_sv) ;
1988 /* ensure buf_sv is large enough */
1989 SvGROW(buf_sv, old_len + maxlen) ;
1990 if ((len = PerlIO_read(PL_rsfp, SvPVX(buf_sv) + old_len, maxlen)) <= 0){
1991 if (PerlIO_error(PL_rsfp))
1992 return -1; /* error */
1994 return 0 ; /* end of file */
1996 SvCUR_set(buf_sv, old_len + len) ;
1999 if (sv_gets(buf_sv, PL_rsfp, SvCUR(buf_sv)) == NULL) {
2000 if (PerlIO_error(PL_rsfp))
2001 return -1; /* error */
2003 return 0 ; /* end of file */
2006 return SvCUR(buf_sv);
2008 /* Skip this filter slot if filter has been deleted */
2009 if ( (datasv = FILTER_DATA(idx)) == &PL_sv_undef){
2010 DEBUG_P(PerlIO_printf(Perl_debug_log,
2011 "filter_read %d: skipped (filter deleted)\n",
2013 return FILTER_READ(idx+1, buf_sv, maxlen); /* recurse */
2015 /* Get function pointer hidden within datasv */
2016 funcp = (filter_t)IoANY(datasv);
2017 DEBUG_P(PerlIO_printf(Perl_debug_log,
2018 "filter_read %d: via function %p (%s)\n",
2019 idx, funcp, SvPV_nolen(datasv)));
2020 /* Call function. The function is expected to */
2021 /* call "FILTER_READ(idx+1, buf_sv)" first. */
2022 /* Return: <0:error, =0:eof, >0:not eof */
2023 return (*funcp)(aTHXo_ idx, buf_sv, maxlen);
2027 S_filter_gets(pTHX_ register SV *sv, register PerlIO *fp, STRLEN append)
2029 #ifdef PERL_CR_FILTER
2030 if (!PL_rsfp_filters) {
2031 filter_add(S_cr_textfilter,NULL);
2034 if (PL_rsfp_filters) {
2037 SvCUR_set(sv, 0); /* start with empty line */
2038 if (FILTER_READ(0, sv, 0) > 0)
2039 return ( SvPVX(sv) ) ;
2044 return (sv_gets(sv, fp, append));
2048 S_find_in_my_stash(pTHX_ char *pkgname, I32 len)
2052 if (len == 11 && *pkgname == '_' && strEQ(pkgname, "__PACKAGE__"))
2056 (pkgname[len - 2] == ':' && pkgname[len - 1] == ':') &&
2057 (gv = gv_fetchpv(pkgname, FALSE, SVt_PVHV)))
2059 return GvHV(gv); /* Foo:: */
2062 /* use constant CLASS => 'MyClass' */
2063 if ((gv = gv_fetchpv(pkgname, FALSE, SVt_PVCV))) {
2065 if (GvCV(gv) && (sv = cv_const_sv(GvCV(gv)))) {
2066 pkgname = SvPV_nolen(sv);
2070 return gv_stashpv(pkgname, FALSE);
2074 static char* exp_name[] =
2075 { "OPERATOR", "TERM", "REF", "STATE", "BLOCK", "ATTRBLOCK",
2076 "ATTRTERM", "TERMBLOCK"
2083 Works out what to call the token just pulled out of the input
2084 stream. The yacc parser takes care of taking the ops we return and
2085 stitching them into a tree.
2091 if read an identifier
2092 if we're in a my declaration
2093 croak if they tried to say my($foo::bar)
2094 build the ops for a my() declaration
2095 if it's an access to a my() variable
2096 are we in a sort block?
2097 croak if my($a); $a <=> $b
2098 build ops for access to a my() variable
2099 if in a dq string, and they've said @foo and we can't find @foo
2101 build ops for a bareword
2102 if we already built the token before, use it.
2105 #ifdef USE_PURE_BISON
2107 #pragma segment Perl_yylex_r
2110 Perl_yylex_r(pTHX_ YYSTYPE *lvalp, int *lcharp)
2115 yylval_pointer[yyactlevel] = lvalp;
2116 yychar_pointer[yyactlevel] = lcharp;
2117 if (yyactlevel >= YYMAXLEVEL)
2118 Perl_croak(aTHX_ "panic: YYMAXLEVEL");
2120 r = Perl_yylex(aTHX);
2130 #pragma segment Perl_yylex
2143 /* check if there's an identifier for us to look at */
2144 if (PL_pending_ident) {
2145 /* pit holds the identifier we read and pending_ident is reset */
2146 char pit = PL_pending_ident;
2147 PL_pending_ident = 0;
2149 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2150 "### Tokener saw identifier '%s'\n", PL_tokenbuf); })
2152 /* if we're in a my(), we can't allow dynamics here.
2153 $foo'bar has already been turned into $foo::bar, so
2154 just check for colons.
2156 if it's a legal name, the OP is a PADANY.
2159 if (PL_in_my == KEY_our) { /* "our" is merely analogous to "my" */
2160 if (strchr(PL_tokenbuf,':'))
2161 yyerror(Perl_form(aTHX_ "No package name allowed for "
2162 "variable %s in \"our\"",
2164 tmp = pad_allocmy(PL_tokenbuf);
2167 if (strchr(PL_tokenbuf,':'))
2168 yyerror(Perl_form(aTHX_ PL_no_myglob,PL_tokenbuf));
2170 yylval.opval = newOP(OP_PADANY, 0);
2171 yylval.opval->op_targ = pad_allocmy(PL_tokenbuf);
2177 build the ops for accesses to a my() variable.
2179 Deny my($a) or my($b) in a sort block, *if* $a or $b is
2180 then used in a comparison. This catches most, but not
2181 all cases. For instance, it catches
2182 sort { my($a); $a <=> $b }
2184 sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; }
2185 (although why you'd do that is anyone's guess).
2188 if (!strchr(PL_tokenbuf,':')) {
2190 /* Check for single character per-thread SVs */
2191 if (PL_tokenbuf[0] == '$' && PL_tokenbuf[2] == '\0'
2192 && !isALPHA(PL_tokenbuf[1]) /* Rule out obvious non-threadsvs */
2193 && (tmp = find_threadsv(&PL_tokenbuf[1])) != NOT_IN_PAD)
2195 yylval.opval = newOP(OP_THREADSV, 0);
2196 yylval.opval->op_targ = tmp;
2199 #endif /* USE_THREADS */
2200 if ((tmp = pad_findmy(PL_tokenbuf)) != NOT_IN_PAD) {
2201 SV *namesv = AvARRAY(PL_comppad_name)[tmp];
2202 /* might be an "our" variable" */
2203 if (SvFLAGS(namesv) & SVpad_OUR) {
2204 /* build ops for a bareword */
2205 SV *sym = newSVpv(HvNAME(GvSTASH(namesv)),0);
2206 sv_catpvn(sym, "::", 2);
2207 sv_catpv(sym, PL_tokenbuf+1);
2208 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sym);
2209 yylval.opval->op_private = OPpCONST_ENTERED;
2210 gv_fetchpv(SvPVX(sym),
2212 ? (GV_ADDMULTI | GV_ADDINEVAL)
2215 ((PL_tokenbuf[0] == '$') ? SVt_PV
2216 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
2221 /* if it's a sort block and they're naming $a or $b */
2222 if (PL_last_lop_op == OP_SORT &&
2223 PL_tokenbuf[0] == '$' &&
2224 (PL_tokenbuf[1] == 'a' || PL_tokenbuf[1] == 'b')
2227 for (d = PL_in_eval ? PL_oldoldbufptr : PL_linestart;
2228 d < PL_bufend && *d != '\n';
2231 if (strnEQ(d,"<=>",3) || strnEQ(d,"cmp",3)) {
2232 Perl_croak(aTHX_ "Can't use \"my %s\" in sort comparison",
2238 yylval.opval = newOP(OP_PADANY, 0);
2239 yylval.opval->op_targ = tmp;
2245 Whine if they've said @foo in a doublequoted string,
2246 and @foo isn't a variable we can find in the symbol
2249 if (pit == '@' && PL_lex_state != LEX_NORMAL && !PL_lex_brackets) {
2250 GV *gv = gv_fetchpv(PL_tokenbuf+1, FALSE, SVt_PVAV);
2251 if ((!gv || ((PL_tokenbuf[0] == '@') ? !GvAV(gv) : !GvHV(gv)))
2252 && ckWARN(WARN_AMBIGUOUS))
2254 /* Downgraded from fatal to warning 20000522 mjd */
2255 Perl_warner(aTHX_ WARN_AMBIGUOUS,
2256 "Possible unintended interpolation of %s in string",
2261 /* build ops for a bareword */
2262 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf+1, 0));
2263 yylval.opval->op_private = OPpCONST_ENTERED;
2264 gv_fetchpv(PL_tokenbuf+1, PL_in_eval ? (GV_ADDMULTI | GV_ADDINEVAL) : TRUE,
2265 ((PL_tokenbuf[0] == '$') ? SVt_PV
2266 : (PL_tokenbuf[0] == '@') ? SVt_PVAV
2271 /* no identifier pending identification */
2273 switch (PL_lex_state) {
2275 case LEX_NORMAL: /* Some compilers will produce faster */
2276 case LEX_INTERPNORMAL: /* code if we comment these out. */
2280 /* when we've already built the next token, just pull it out of the queue */
2283 yylval = PL_nextval[PL_nexttoke];
2285 PL_lex_state = PL_lex_defer;
2286 PL_expect = PL_lex_expect;
2287 PL_lex_defer = LEX_NORMAL;
2289 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2290 "### Next token after '%s' was known, type %"IVdf"\n", PL_bufptr,
2291 (IV)PL_nexttype[PL_nexttoke]); })
2293 return(PL_nexttype[PL_nexttoke]);
2295 /* interpolated case modifiers like \L \U, including \Q and \E.
2296 when we get here, PL_bufptr is at the \
2298 case LEX_INTERPCASEMOD:
2300 if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
2301 Perl_croak(aTHX_ "panic: INTERPCASEMOD");
2303 /* handle \E or end of string */
2304 if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
2308 if (PL_lex_casemods) {
2309 oldmod = PL_lex_casestack[--PL_lex_casemods];
2310 PL_lex_casestack[PL_lex_casemods] = '\0';
2312 if (PL_bufptr != PL_bufend && strchr("LUQ", oldmod)) {
2314 PL_lex_state = LEX_INTERPCONCAT;
2318 if (PL_bufptr != PL_bufend)
2320 PL_lex_state = LEX_INTERPCONCAT;
2324 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2325 "### Saw case modifier at '%s'\n", PL_bufptr); })
2327 if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
2328 tmp = *s, *s = s[2], s[2] = tmp; /* misordered... */
2329 if (strchr("LU", *s) &&
2330 (strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U')))
2332 PL_lex_casestack[--PL_lex_casemods] = '\0';
2335 if (PL_lex_casemods > 10) {
2336 char* newlb = Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
2337 if (newlb != PL_lex_casestack) {
2339 PL_lex_casestack = newlb;
2342 PL_lex_casestack[PL_lex_casemods++] = *s;
2343 PL_lex_casestack[PL_lex_casemods] = '\0';
2344 PL_lex_state = LEX_INTERPCONCAT;
2345 PL_nextval[PL_nexttoke].ival = 0;
2348 PL_nextval[PL_nexttoke].ival = OP_LCFIRST;
2350 PL_nextval[PL_nexttoke].ival = OP_UCFIRST;
2352 PL_nextval[PL_nexttoke].ival = OP_LC;
2354 PL_nextval[PL_nexttoke].ival = OP_UC;
2356 PL_nextval[PL_nexttoke].ival = OP_QUOTEMETA;
2358 Perl_croak(aTHX_ "panic: yylex");
2361 if (PL_lex_starts) {
2370 case LEX_INTERPPUSH:
2371 return sublex_push();
2373 case LEX_INTERPSTART:
2374 if (PL_bufptr == PL_bufend)
2375 return sublex_done();
2376 DEBUG_T({ PerlIO_printf(Perl_debug_log,
2377 "### Interpolated variable at '%s'\n", PL_bufptr); })
2379 PL_lex_dojoin = (*PL_bufptr == '@');
2380 PL_lex_state = LEX_INTERPNORMAL;
2381 if (PL_lex_dojoin) {
2382 PL_nextval[PL_nexttoke].ival = 0;
2385 PL_nextval[PL_nexttoke].opval = newOP(OP_THREADSV, 0);
2386 PL_nextval[PL_nexttoke].opval->op_targ = find_threadsv("\"");
2387 force_next(PRIVATEREF);
2389 force_ident("\"", '$');
2390 #endif /* USE_THREADS */
2391 PL_nextval[PL_nexttoke].ival = 0;
2393 PL_nextval[PL_nexttoke].ival = 0;
2395 PL_nextval[PL_nexttoke].ival = OP_JOIN; /* emulate join($", ...) */
2398 if (PL_lex_starts++) {
2404 case LEX_INTERPENDMAYBE:
2405 if (intuit_more(PL_bufptr)) {
2406 PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
2412 if (PL_lex_dojoin) {
2413 PL_lex_dojoin = FALSE;
2414 PL_lex_state = LEX_INTERPCONCAT;
2417 if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
2418 && SvEVALED(PL_lex_repl))
2420 if (PL_bufptr != PL_bufend)
2421 Perl_croak(aTHX_ "Bad evalled substitution pattern");
2422 PL_lex_repl = Nullsv;
2425 case LEX_INTERPCONCAT:
2427 if (PL_lex_brackets)
2428 Perl_croak(aTHX_ "panic: INTERPCONCAT");
2430 if (PL_bufptr == PL_bufend)
2431 return sublex_done();
2433 if (SvIVX(PL_linestr) == '\'') {
2434 SV *sv = newSVsv(PL_linestr);
2437 else if ( PL_hints & HINT_NEW_RE )
2438 sv = new_constant(NULL, 0, "qr", sv, sv, "q");
2439 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
2443 s = scan_const(PL_bufptr);
2445 PL_lex_state = LEX_INTERPCASEMOD;
2447 PL_lex_state = LEX_INTERPSTART;
2450 if (s != PL_bufptr) {
2451 PL_nextval[PL_nexttoke] = yylval;
2454 if (PL_lex_starts++)
2464 PL_lex_state = LEX_NORMAL;
2465 s = scan_formline(PL_bufptr);
2466 if (!PL_lex_formbrack)
2472 PL_oldoldbufptr = PL_oldbufptr;
2475 PerlIO_printf(Perl_debug_log, "### Tokener expecting %s at %s\n",
2476 exp_name[PL_expect], s);
2482 if (isIDFIRST_lazy_if(s,UTF))
2484 Perl_croak(aTHX_ "Unrecognized character \\x%02X", *s & 255);
2487 goto fake_eof; /* emulate EOF on ^D or ^Z */
2492 if (PL_lex_brackets)
2493 yyerror("Missing right curly or square bracket");
2494 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2495 "### Tokener got EOF\n");
2499 if (s++ < PL_bufend)
2500 goto retry; /* ignore stray nulls */
2503 if (!PL_in_eval && !PL_preambled) {
2504 PL_preambled = TRUE;
2505 sv_setpv(PL_linestr,incl_perldb());
2506 if (SvCUR(PL_linestr))
2507 sv_catpv(PL_linestr,";");
2509 while(AvFILLp(PL_preambleav) >= 0) {
2510 SV *tmpsv = av_shift(PL_preambleav);
2511 sv_catsv(PL_linestr, tmpsv);
2512 sv_catpv(PL_linestr, ";");
2515 sv_free((SV*)PL_preambleav);
2516 PL_preambleav = NULL;
2518 if (PL_minus_n || PL_minus_p) {
2519 sv_catpv(PL_linestr, "LINE: while (<>) {");
2521 sv_catpv(PL_linestr,"chomp;");
2523 GV* gv = gv_fetchpv("::F", TRUE, SVt_PVAV);
2525 GvIMPORTED_AV_on(gv);
2527 if (strchr("/'\"", *PL_splitstr)
2528 && strchr(PL_splitstr + 1, *PL_splitstr))
2529 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s);", PL_splitstr);
2532 s = "'~#\200\1'"; /* surely one char is unused...*/
2533 while (s[1] && strchr(PL_splitstr, *s)) s++;
2535 Perl_sv_catpvf(aTHX_ PL_linestr, "@F=split(%s%c",
2536 "q" + (delim == '\''), delim);
2537 for (s = PL_splitstr; *s; s++) {
2539 sv_catpvn(PL_linestr, "\\", 1);
2540 sv_catpvn(PL_linestr, s, 1);
2542 Perl_sv_catpvf(aTHX_ PL_linestr, "%c);", delim);
2546 sv_catpv(PL_linestr,"@F=split(' ');");
2549 sv_catpv(PL_linestr, "\n");
2550 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2551 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2552 if (PERLDB_LINE && PL_curstash != PL_debstash) {
2553 SV *sv = NEWSV(85,0);
2555 sv_upgrade(sv, SVt_PVMG);
2556 sv_setsv(sv,PL_linestr);
2557 av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
2562 bof = PL_rsfp ? TRUE : FALSE;
2564 #ifdef PERLIO_IS_STDIO
2565 # ifdef __GNU_LIBRARY__
2566 # if __GNU_LIBRARY__ == 1 /* Linux glibc5 */
2567 # define FTELL_FOR_PIPE_IS_BROKEN
2571 # if __GLIBC__ == 1 /* maybe some glibc5 release had it like this? */
2572 # define FTELL_FOR_PIPE_IS_BROKEN
2577 #ifdef FTELL_FOR_PIPE_IS_BROKEN
2578 /* This loses the possibility to detect the bof
2579 * situation on perl -P when the libc5 is being used.
2580 * Workaround? Maybe attach some extra state to PL_rsfp?
2583 bof = PerlIO_tell(PL_rsfp) == 0;
2585 bof = PerlIO_tell(PL_rsfp) == 0;
2588 s = filter_gets(PL_linestr, PL_rsfp, 0);
2592 if (PL_preprocess && !PL_in_eval)
2593 (void)PerlProc_pclose(PL_rsfp);
2594 else if ((PerlIO *)PL_rsfp == PerlIO_stdin())
2595 PerlIO_clearerr(PL_rsfp);
2597 (void)PerlIO_close(PL_rsfp);
2599 PL_doextract = FALSE;
2601 if (!PL_in_eval && (PL_minus_n || PL_minus_p)) {
2602 sv_setpv(PL_linestr,PL_minus_p ? ";}continue{print" : "");
2603 sv_catpv(PL_linestr,";}");
2604 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2605 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2606 PL_minus_n = PL_minus_p = 0;
2609 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2610 sv_setpv(PL_linestr,"");
2611 TOKEN(';'); /* not infinite loop because rsfp is NULL now */
2613 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2614 s = swallow_bom((U8*)s);
2617 if (*s == '#' && s[1] == '!' && instr(s,"perl"))
2618 PL_doextract = FALSE;
2620 /* Incest with pod. */
2621 if (*s == '=' && strnEQ(s, "=cut", 4)) {
2622 sv_setpv(PL_linestr, "");
2623 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2624 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2625 PL_doextract = FALSE;
2629 } while (PL_doextract);
2630 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
2631 if (PERLDB_LINE && PL_curstash != PL_debstash) {
2632 SV *sv = NEWSV(85,0);
2634 sv_upgrade(sv, SVt_PVMG);
2635 sv_setsv(sv,PL_linestr);
2636 av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
2638 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2639 if (CopLINE(PL_curcop) == 1) {
2640 while (s < PL_bufend && isSPACE(*s))
2642 if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
2646 if (*s == '#' && *(s+1) == '!')
2648 #ifdef ALTERNATE_SHEBANG
2650 static char as[] = ALTERNATE_SHEBANG;
2651 if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
2652 d = s + (sizeof(as) - 1);
2654 #endif /* ALTERNATE_SHEBANG */
2663 while (*d && !isSPACE(*d))
2667 #ifdef ARG_ZERO_IS_SCRIPT
2668 if (ipathend > ipath) {
2670 * HP-UX (at least) sets argv[0] to the script name,
2671 * which makes $^X incorrect. And Digital UNIX and Linux,
2672 * at least, set argv[0] to the basename of the Perl
2673 * interpreter. So, having found "#!", we'll set it right.
2675 SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV));
2676 assert(SvPOK(x) || SvGMAGICAL(x));
2677 if (sv_eq(x, CopFILESV(PL_curcop))) {
2678 sv_setpvn(x, ipath, ipathend - ipath);
2681 TAINT_NOT; /* $^X is always tainted, but that's OK */
2683 #endif /* ARG_ZERO_IS_SCRIPT */
2688 d = instr(s,"perl -");
2690 d = instr(s,"perl");
2692 /* avoid getting into infinite loops when shebang
2693 * line contains "Perl" rather than "perl" */
2695 for (d = ipathend-4; d >= ipath; --d) {
2696 if ((*d == 'p' || *d == 'P')
2697 && !ibcmp(d, "perl", 4))
2707 #ifdef ALTERNATE_SHEBANG
2709 * If the ALTERNATE_SHEBANG on this system starts with a
2710 * character that can be part of a Perl expression, then if
2711 * we see it but not "perl", we're probably looking at the
2712 * start of Perl code, not a request to hand off to some
2713 * other interpreter. Similarly, if "perl" is there, but
2714 * not in the first 'word' of the line, we assume the line
2715 * contains the start of the Perl program.
2717 if (d && *s != '#') {
2719 while (*c && !strchr("; \t\r\n\f\v#", *c))
2722 d = Nullch; /* "perl" not in first word; ignore */
2724 *s = '#'; /* Don't try to parse shebang line */
2726 #endif /* ALTERNATE_SHEBANG */
2727 #ifndef MACOS_TRADITIONAL
2732 !instr(s,"indir") &&
2733 instr(PL_origargv[0],"perl"))
2739 while (s < PL_bufend && isSPACE(*s))
2741 if (s < PL_bufend) {
2742 Newz(899,newargv,PL_origargc+3,char*);
2744 while (s < PL_bufend && !isSPACE(*s))
2747 Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
2750 newargv = PL_origargv;
2752 PerlProc_execv(ipath, EXEC_ARGV_CAST(newargv));
2753 Perl_croak(aTHX_ "Can't exec %s", ipath);
2757 U32 oldpdb = PL_perldb;
2758 bool oldn = PL_minus_n;
2759 bool oldp = PL_minus_p;
2761 while (*d && !isSPACE(*d)) d++;
2762 while (SPACE_OR_TAB(*d)) d++;
2766 if (*d == 'M' || *d == 'm') {
2768 while (*d && !isSPACE(*d)) d++;
2769 Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
2772 d = moreswitches(d);
2774 if ((PERLDB_LINE && !oldpdb) ||
2775 ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
2776 /* if we have already added "LINE: while (<>) {",
2777 we must not do it again */
2779 sv_setpv(PL_linestr, "");
2780 PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
2781 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
2782 PL_preambled = FALSE;
2784 (void)gv_fetchfile(PL_origfilename);
2791 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2793 PL_lex_state = LEX_FORMLINE;
2798 #ifdef PERL_STRICT_CR
2799 Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
2801 "\t(Maybe you didn't strip carriage returns after a network transfer?)\n");
2803 case ' ': case '\t': case '\f': case 013:
2804 #ifdef MACOS_TRADITIONAL
2811 if (PL_lex_state != LEX_NORMAL || (PL_in_eval && !PL_rsfp)) {
2812 if (*s == '#' && s == PL_linestart && PL_in_eval && !PL_rsfp) {
2813 /* handle eval qq[#line 1 "foo"\n ...] */
2814 CopLINE_dec(PL_curcop);
2818 while (s < d && *s != '\n')
2823 if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
2825 PL_lex_state = LEX_FORMLINE;
2835 if (s[1] && isALPHA(s[1]) && !isALNUM(s[2])) {
2842 while (s < PL_bufend && SPACE_OR_TAB(*s))
2845 if (strnEQ(s,"=>",2)) {
2846 s = force_word(PL_bufptr,WORD,FALSE,FALSE,FALSE);
2847 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2848 "### Saw unary minus before =>, forcing word '%s'\n", s);
2850 OPERATOR('-'); /* unary minus */
2852 PL_last_uni = PL_oldbufptr;
2854 case 'r': ftst = OP_FTEREAD; break;
2855 case 'w': ftst = OP_FTEWRITE; break;
2856 case 'x': ftst = OP_FTEEXEC; break;
2857 case 'o': ftst = OP_FTEOWNED; break;
2858 case 'R': ftst = OP_FTRREAD; break;
2859 case 'W': ftst = OP_FTRWRITE; break;
2860 case 'X': ftst = OP_FTREXEC; break;
2861 case 'O': ftst = OP_FTROWNED; break;
2862 case 'e': ftst = OP_FTIS; break;
2863 case 'z': ftst = OP_FTZERO; break;
2864 case 's': ftst = OP_FTSIZE; break;
2865 case 'f': ftst = OP_FTFILE; break;
2866 case 'd': ftst = OP_FTDIR; break;
2867 case 'l': ftst = OP_FTLINK; break;
2868 case 'p': ftst = OP_FTPIPE; break;
2869 case 'S': ftst = OP_FTSOCK; break;
2870 case 'u': ftst = OP_FTSUID; break;
2871 case 'g': ftst = OP_FTSGID; break;
2872 case 'k': ftst = OP_FTSVTX; break;
2873 case 'b': ftst = OP_FTBLK; break;
2874 case 'c': ftst = OP_FTCHR; break;
2875 case 't': ftst = OP_FTTTY; break;
2876 case 'T': ftst = OP_FTTEXT; break;
2877 case 'B': ftst = OP_FTBINARY; break;
2878 case 'M': case 'A': case 'C':
2879 gv_fetchpv("\024",TRUE, SVt_PV);
2881 case 'M': ftst = OP_FTMTIME; break;
2882 case 'A': ftst = OP_FTATIME; break;
2883 case 'C': ftst = OP_FTCTIME; break;
2891 PL_last_lop_op = ftst;
2892 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2893 "### Saw file test %c\n", (int)ftst);
2898 /* Assume it was a minus followed by a one-letter named
2899 * subroutine call (or a -bareword), then. */
2900 DEBUG_T( { PerlIO_printf(Perl_debug_log,
2901 "### %c looked like a file test but was not\n",
2910 if (PL_expect == XOPERATOR)
2915 else if (*s == '>') {
2918 if (isIDFIRST_lazy_if(s,UTF)) {
2919 s = force_word(s,METHOD,FALSE,TRUE,FALSE);
2927 if (PL_expect == XOPERATOR)
2930 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2932 OPERATOR('-'); /* unary minus */
2939 if (PL_expect == XOPERATOR)
2944 if (PL_expect == XOPERATOR)
2947 if (isSPACE(*s) || !isSPACE(*PL_bufptr))
2953 if (PL_expect != XOPERATOR) {
2954 s = scan_ident(s, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
2955 PL_expect = XOPERATOR;
2956 force_ident(PL_tokenbuf, '*');
2969 if (PL_expect == XOPERATOR) {
2973 PL_tokenbuf[0] = '%';
2974 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
2975 if (!PL_tokenbuf[1]) {
2977 yyerror("Final % should be \\% or %name");
2980 PL_pending_ident = '%';
2999 switch (PL_expect) {
3002 if (!PL_in_my || PL_lex_state != LEX_NORMAL)
3004 PL_bufptr = s; /* update in case we back off */
3010 PL_expect = XTERMBLOCK;
3014 while (isIDFIRST_lazy_if(s,UTF)) {
3015 d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3016 if (isLOWER(*s) && (tmp = keyword(PL_tokenbuf, len))) {
3017 if (tmp < 0) tmp = -tmp;
3032 d = scan_str(d,TRUE,TRUE);
3035 SvREFCNT_dec(PL_lex_stuff);
3036 PL_lex_stuff = Nullsv;
3038 /* MUST advance bufptr here to avoid bogus
3039 "at end of line" context messages from yyerror().
3041 PL_bufptr = s + len;
3042 yyerror("Unterminated attribute parameter in attribute list");
3045 return 0; /* EOF indicator */
3049 SV *sv = newSVpvn(s, len);
3050 sv_catsv(sv, PL_lex_stuff);
3051 attrs = append_elem(OP_LIST, attrs,
3052 newSVOP(OP_CONST, 0, sv));
3053 SvREFCNT_dec(PL_lex_stuff);
3054 PL_lex_stuff = Nullsv;
3057 if (!PL_in_my && len == 6 && strnEQ(s, "lvalue", len))
3058 CvLVALUE_on(PL_compcv);
3059 else if (!PL_in_my && len == 6 && strnEQ(s, "locked", len))
3060 CvLOCKED_on(PL_compcv);
3061 else if (!PL_in_my && len == 6 && strnEQ(s, "method", len))
3062 CvMETHOD_on(PL_compcv);
3063 /* After we've set the flags, it could be argued that
3064 we don't need to do the attributes.pm-based setting
3065 process, and shouldn't bother appending recognized
3066 flags. To experiment with that, uncomment the
3067 following "else": */
3069 attrs = append_elem(OP_LIST, attrs,
3070 newSVOP(OP_CONST, 0,
3074 if (*s == ':' && s[1] != ':')
3077 break; /* require real whitespace or :'s */
3079 tmp = (PL_expect == XOPERATOR ? '=' : '{'); /*'}(' for vi */
3080 if (*s != ';' && *s != tmp && (tmp != '=' || *s != ')')) {
3081 char q = ((*s == '\'') ? '"' : '\'');
3082 /* If here for an expression, and parsed no attrs, back off. */
3083 if (tmp == '=' && !attrs) {
3087 /* MUST advance bufptr here to avoid bogus "at end of line"
3088 context messages from yyerror().
3092 yyerror("Unterminated attribute list");
3094 yyerror(Perl_form(aTHX_ "Invalid separator character %c%c%c in attribute list",
3102 PL_nextval[PL_nexttoke].opval = attrs;
3110 if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
3111 PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
3127 if (PL_lex_brackets <= 0)
3128 yyerror("Unmatched right square bracket");
3131 if (PL_lex_state == LEX_INTERPNORMAL) {
3132 if (PL_lex_brackets == 0) {
3133 if (*s != '[' && *s != '{' && (*s != '-' || s[1] != '>'))
3134 PL_lex_state = LEX_INTERPEND;
3141 if (PL_lex_brackets > 100) {
3142 char* newlb = Renew(PL_lex_brackstack, PL_lex_brackets + 1, char);
3143 if (newlb != PL_lex_brackstack) {
3145 PL_lex_brackstack = newlb;
3148 switch (PL_expect) {
3150 if (PL_lex_formbrack) {
3154 if (PL_oldoldbufptr == PL_last_lop)
3155 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
3157 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
3158 OPERATOR(HASHBRACK);
3160 while (s < PL_bufend && SPACE_OR_TAB(*s))
3163 PL_tokenbuf[0] = '\0';
3164 if (d < PL_bufend && *d == '-') {
3165 PL_tokenbuf[0] = '-';
3167 while (d < PL_bufend && SPACE_OR_TAB(*d))
3170 if (d < PL_bufend && isIDFIRST_lazy_if(d,UTF)) {
3171 d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
3173 while (d < PL_bufend && SPACE_OR_TAB(*d))
3176 char minus = (PL_tokenbuf[0] == '-');
3177 s = force_word(s + minus, WORD, FALSE, TRUE, FALSE);
3178 if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, 0) &&
3179 PL_nextval[PL_nexttoke-1].opval)
3180 SvUTF8_on(((SVOP*)PL_nextval[PL_nexttoke-1].opval)->op_sv);
3188 PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
3193 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
3198 if (PL_oldoldbufptr == PL_last_lop)
3199 PL_lex_brackstack[PL_lex_brackets++] = XTERM;
3201 PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
3204 OPERATOR(HASHBRACK);
3205 /* This hack serves to disambiguate a pair of curlies
3206 * as being a block or an anon hash. Normally, expectation
3207 * determines that, but in cases where we're not in a
3208 * position to expect anything in particular (like inside
3209 * eval"") we have to resolve the ambiguity. This code
3210 * covers the case where the first term in the curlies is a
3211 * quoted string. Most other cases need to be explicitly
3212 * disambiguated by prepending a `+' before the opening
3213 * curly in order to force resolution as an anon hash.
3215 * XXX should probably propagate the outer expectation
3216 * into eval"" to rely less on this hack, but that could
3217 * potentially break current behavior of eval"".
3221 if (*s == '\'' || *s == '"' || *s == '`') {
3222 /* common case: get past first string, handling escapes */
3223 for (t++; t < PL_bufend && *t != *s;)
3224 if (*t++ == '\\' && (*t == '\\' || *t == *s))
3228 else if (*s == 'q') {
3231 || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
3235 char open, close, term;
3238 while (t < PL_bufend && isSPACE(*t))
3242 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
3246 for (t++; t < PL_bufend; t++) {
3247 if (*t == '\\' && t+1 < PL_bufend && open != '\\')
3249 else if (*t == open)
3253 for (t++; t < PL_bufend; t++) {
3254 if (*t == '\\' && t+1 < PL_bufend)
3256 else if (*t == close && --brackets <= 0)
3258 else if (*t == open)
3264 else if (isALNUM_lazy_if(t,UTF)) {
3266 while (t < PL_bufend && isALNUM_lazy_if(t,UTF))
3269 while (t < PL_bufend && isSPACE(*t))
3271 /* if comma follows first term, call it an anon hash */
3272 /* XXX it could be a comma expression with loop modifiers */
3273 if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
3274 || (*t == '=' && t[1] == '>')))
3275 OPERATOR(HASHBRACK);
3276 if (PL_expect == XREF)
3279 PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
3285 yylval.ival = CopLINE(PL_curcop);
3286 if (isSPACE(*s) || *s == '#')
3287 PL_copline = NOLINE; /* invalidate current command line number */
3292 if (PL_lex_brackets <= 0)
3293 yyerror("Unmatched right curly bracket");
3295 PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
3296 if (PL_lex_brackets < PL_lex_formbrack && PL_lex_state != LEX_INTERPNORMAL)
3297 PL_lex_formbrack = 0;
3298 if (PL_lex_state == LEX_INTERPNORMAL) {
3299 if (PL_lex_brackets == 0) {
3300 if (PL_expect & XFAKEBRACK) {
3301 PL_expect &= XENUMMASK;
3302 PL_lex_state = LEX_INTERPEND;
3304 return yylex(); /* ignore fake brackets */
3306 if (*s == '-' && s[1] == '>')
3307 PL_lex_state = LEX_INTERPENDMAYBE;
3308 else if (*s != '[' && *s != '{')
3309 PL_lex_state = LEX_INTERPEND;
3312 if (PL_expect & XFAKEBRACK) {
3313 PL_expect &= XENUMMASK;
3315 return yylex(); /* ignore fake brackets */
3325 if (PL_expect == XOPERATOR) {
3326 if (ckWARN(WARN_SEMICOLON)
3327 && isIDFIRST_lazy_if(s,UTF) && PL_bufptr == PL_linestart)
3329 CopLINE_dec(PL_curcop);
3330 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3331 CopLINE_inc(PL_curcop);
3336 s = scan_ident(s - 1, PL_bufend, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
3338 PL_expect = XOPERATOR;
3339 force_ident(PL_tokenbuf, '&');
3343 yylval.ival = (OPpENTERSUB_AMPER<<8);
3362 if (ckWARN(WARN_SYNTAX) && tmp && isSPACE(*s) && strchr("+-*/%.^&|<",tmp))
3363 Perl_warner(aTHX_ WARN_SYNTAX, "Reversed %c= operator",(int)tmp);
3365 if (PL_expect == XSTATE && isALPHA(tmp) &&
3366 (s == PL_linestart+1 || s[-2] == '\n') )
3368 if (PL_in_eval && !PL_rsfp) {
3373 if (strnEQ(s,"=cut",4)) {
3387 PL_doextract = TRUE;
3390 if (PL_lex_brackets < PL_lex_formbrack) {
3392 #ifdef PERL_STRICT_CR
3393 for (t = s; SPACE_OR_TAB(*t); t++) ;
3395 for (t = s; SPACE_OR_TAB(*t) || *t == '\r'; t++) ;
3397 if (*t == '\n' || *t == '#') {
3415 if (PL_expect != XOPERATOR) {
3416 if (s[1] != '<' && !strchr(s,'>'))
3419 s = scan_heredoc(s);
3421 s = scan_inputsymbol(s);
3422 TERM(sublex_start());
3427 SHop(OP_LEFT_SHIFT);
3441 SHop(OP_RIGHT_SHIFT);
3450 if (PL_expect == XOPERATOR) {
3451 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3454 return ','; /* grandfather non-comma-format format */
3458 if (s[1] == '#' && (isIDFIRST_lazy_if(s+2,UTF) || strchr("{$:+-", s[2]))) {
3459 PL_tokenbuf[0] = '@';
3460 s = scan_ident(s + 1, PL_bufend, PL_tokenbuf + 1,
3461 sizeof PL_tokenbuf - 1, FALSE);
3462 if (PL_expect == XOPERATOR)
3463 no_op("Array length", s);
3464 if (!PL_tokenbuf[1])
3466 PL_expect = XOPERATOR;
3467 PL_pending_ident = '#';
3471 PL_tokenbuf[0] = '$';
3472 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1,
3473 sizeof PL_tokenbuf - 1, FALSE);
3474 if (PL_expect == XOPERATOR)
3476 if (!PL_tokenbuf[1]) {
3478 yyerror("Final $ should be \\$ or $name");
3482 /* This kludge not intended to be bulletproof. */
3483 if (PL_tokenbuf[1] == '[' && !PL_tokenbuf[2]) {
3484 yylval.opval = newSVOP(OP_CONST, 0,
3485 newSViv(PL_compiling.cop_arybase));
3486 yylval.opval->op_private = OPpCONST_ARYBASE;
3492 if (PL_lex_state == LEX_NORMAL)
3495 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
3498 PL_tokenbuf[0] = '@';
3499 if (ckWARN(WARN_SYNTAX)) {
3501 isSPACE(*t) || isALNUM_lazy_if(t,UTF) || *t == '$';
3504 PL_bufptr = skipspace(PL_bufptr);
3505 while (t < PL_bufend && *t != ']')
3507 Perl_warner(aTHX_ WARN_SYNTAX,
3508 "Multidimensional syntax %.*s not supported",
3509 (t - PL_bufptr) + 1, PL_bufptr);
3513 else if (*s == '{') {
3514 PL_tokenbuf[0] = '%';
3515 if (ckWARN(WARN_SYNTAX) && strEQ(PL_tokenbuf+1, "SIG") &&
3516 (t = strchr(s, '}')) && (t = strchr(t, '=')))
3518 char tmpbuf[sizeof PL_tokenbuf];
3520 for (t++; isSPACE(*t); t++) ;
3521 if (isIDFIRST_lazy_if(t,UTF)) {
3522 t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE, &len);
3523 for (; isSPACE(*t); t++) ;
3524 if (*t == ';' && get_cv(tmpbuf, FALSE))
3525 Perl_warner(aTHX_ WARN_SYNTAX,
3526 "You need to quote \"%s\"", tmpbuf);
3532 PL_expect = XOPERATOR;
3533 if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
3534 bool islop = (PL_last_lop == PL_oldoldbufptr);
3535 if (!islop || PL_last_lop_op == OP_GREPSTART)
3536 PL_expect = XOPERATOR;
3537 else if (strchr("$@\"'`q", *s))
3538 PL_expect = XTERM; /* e.g. print $fh "foo" */
3539 else if (strchr("&*<%", *s) && isIDFIRST_lazy_if(s+1,UTF))
3540 PL_expect = XTERM; /* e.g. print $fh &sub */
3541 else if (isIDFIRST_lazy_if(s,UTF)) {
3542 char tmpbuf[sizeof PL_tokenbuf];
3543 scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
3544 if ((tmp = keyword(tmpbuf, len))) {
3545 /* binary operators exclude handle interpretations */
3557 PL_expect = XTERM; /* e.g. print $fh length() */
3562 GV *gv = gv_fetchpv(tmpbuf, FALSE, SVt_PVCV);
3563 if (gv && GvCVu(gv))
3564 PL_expect = XTERM; /* e.g. print $fh subr() */
3567 else if (isDIGIT(*s))
3568 PL_expect = XTERM; /* e.g. print $fh 3 */
3569 else if (*s == '.' && isDIGIT(s[1]))
3570 PL_expect = XTERM; /* e.g. print $fh .3 */
3571 else if (strchr("/?-+", *s) && !isSPACE(s[1]) && s[1] != '=')
3572 PL_expect = XTERM; /* e.g. print $fh -1 */
3573 else if (*s == '<' && s[1] == '<' && !isSPACE(s[2]) && s[2] != '=')
3574 PL_expect = XTERM; /* print $fh <<"EOF" */
3576 PL_pending_ident = '$';
3580 if (PL_expect == XOPERATOR)
3582 PL_tokenbuf[0] = '@';
3583 s = scan_ident(s, PL_bufend, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
3584 if (!PL_tokenbuf[1]) {
3586 yyerror("Final @ should be \\@ or @name");
3589 if (PL_lex_state == LEX_NORMAL)
3591 if ((PL_expect != XREF || PL_oldoldbufptr == PL_last_lop) && intuit_more(s)) {
3593 PL_tokenbuf[0] = '%';
3595 /* Warn about @ where they meant $. */
3596 if (ckWARN(WARN_SYNTAX)) {
3597 if (*s == '[' || *s == '{') {
3599 while (*t && (isALNUM_lazy_if(t,UTF) || strchr(" \t$#+-'\"", *t)))
3601 if (*t == '}' || *t == ']') {
3603 PL_bufptr = skipspace(PL_bufptr);
3604 Perl_warner(aTHX_ WARN_SYNTAX,
3605 "Scalar value %.*s better written as $%.*s",
3606 t-PL_bufptr, PL_bufptr, t-PL_bufptr-1, PL_bufptr+1);
3611 PL_pending_ident = '@';
3614 case '/': /* may either be division or pattern */
3615 case '?': /* may either be conditional or pattern */
3616 if (PL_expect != XOPERATOR) {
3617 /* Disable warning on "study /blah/" */
3618 if (PL_oldoldbufptr == PL_last_uni
3619 && (*PL_last_uni != 's' || s - PL_last_uni < 5
3620 || memNE(PL_last_uni, "study", 5)
3621 || isALNUM_lazy_if(PL_last_uni+5,UTF)))
3623 s = scan_pat(s,OP_MATCH);
3624 TERM(sublex_start());
3632 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack
3633 #ifdef PERL_STRICT_CR
3636 && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))
3638 && (s == PL_linestart || s[-1] == '\n') )
3640 PL_lex_formbrack = 0;
3644 if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
3650 yylval.ival = OPf_SPECIAL;
3656 if (PL_expect != XOPERATOR)
3661 case '0': case '1': case '2': case '3': case '4':
3662 case '5': case '6': case '7': case '8': case '9':
3663 s = scan_num(s, &yylval);
3664 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3665 "### Saw number in '%s'\n", s);
3667 if (PL_expect == XOPERATOR)
3672 s = scan_str(s,FALSE,FALSE);
3673 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3674 "### Saw string in '%s'\n", s);
3676 if (PL_expect == XOPERATOR) {
3677 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3680 return ','; /* grandfather non-comma-format format */
3686 missingterm((char*)0);
3687 yylval.ival = OP_CONST;
3688 TERM(sublex_start());
3691 s = scan_str(s,FALSE,FALSE);
3692 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3693 "### Saw string in '%s'\n", s);
3695 if (PL_expect == XOPERATOR) {
3696 if (PL_lex_formbrack && PL_lex_brackets == PL_lex_formbrack) {
3699 return ','; /* grandfather non-comma-format format */
3705 missingterm((char*)0);
3706 yylval.ival = OP_CONST;
3707 for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
3708 if (*d == '$' || *d == '@' || *d == '\\' || UTF8_IS_CONTINUED(*d)) {
3709 yylval.ival = OP_STRINGIFY;
3713 TERM(sublex_start());
3716 s = scan_str(s,FALSE,FALSE);
3717 DEBUG_T( { PerlIO_printf(Perl_debug_log,
3718 "### Saw backtick string in '%s'\n", s);
3720 if (PL_expect == XOPERATOR)
3721 no_op("Backticks",s);
3723 missingterm((char*)0);
3724 yylval.ival = OP_BACKTICK;
3726 TERM(sublex_start());
3730 if (ckWARN(WARN_SYNTAX) && PL_lex_inwhat && isDIGIT(*s))
3731 Perl_warner(aTHX_ WARN_SYNTAX,"Can't use \\%c to mean $%c in expression",
3733 if (PL_expect == XOPERATOR)
3734 no_op("Backslash",s);
3738 if (isDIGIT(s[1]) && PL_expect != XOPERATOR) {
3742 while (isDIGIT(*start) || *start == '_')
3744 if (*start == '.' && isDIGIT(start[1])) {
3745 s = scan_num(s, &yylval);
3748 /* avoid v123abc() or $h{v1}, allow C<print v10;> */
3749 else if (!isALPHA(*start) && (PL_expect == XTERM || PL_expect == XREF)) {
3753 gv = gv_fetchpv(s, FALSE, SVt_PVCV);
3756 s = scan_num(s, &yylval);
3763 if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
3802 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
3804 /* Some keywords can be followed by any delimiter, including ':' */
3805 tmp = ((len == 1 && strchr("msyq", PL_tokenbuf[0])) ||
3806 (len == 2 && ((PL_tokenbuf[0] == 't' && PL_tokenbuf[1] == 'r') ||
3807 (PL_tokenbuf[0] == 'q' &&
3808 strchr("qwxr", PL_tokenbuf[1])))));
3810 /* x::* is just a word, unless x is "CORE" */
3811 if (!tmp && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
3815 while (d < PL_bufend && isSPACE(*d))
3816 d++; /* no comments skipped here, or s### is misparsed */
3818 /* Is this a label? */
3819 if (!tmp && PL_expect == XSTATE
3820 && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
3822 yylval.pval = savepv(PL_tokenbuf);
3827 /* Check for keywords */
3828 tmp = keyword(PL_tokenbuf, len);
3830 /* Is this a word before a => operator? */
3831 if (*d == '=' && d[1] == '>') {
3833 yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpv(PL_tokenbuf,0));
3834 yylval.opval->op_private = OPpCONST_BARE;
3835 if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, len))
3836 SvUTF8_on(((SVOP*)yylval.opval)->op_sv);
3840 if (tmp < 0) { /* second-class keyword? */
3841 GV *ogv = Nullgv; /* override (winner) */
3842 GV *hgv = Nullgv; /* hidden (loser) */
3843 if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
3845 if ((gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV)) &&
3848 if (GvIMPORTED_CV(gv))
3850 else if (! CvMETHOD(cv))
3854 (gvp = (GV**)hv_fetch(PL_globalstash,PL_tokenbuf,len,FALSE)) &&
3855 (gv = *gvp) != (GV*)&PL_sv_undef &&
3856 GvCVu(gv) && GvIMPORTED_CV(gv))
3862 tmp = 0; /* overridden by import or by GLOBAL */
3865 && -tmp==KEY_lock /* XXX generalizable kludge */
3867 && !hv_fetch(GvHVn(PL_incgv), "Thread.pm", 9, FALSE))
3869 tmp = 0; /* any sub overrides "weak" keyword */
3871 else { /* no override */
3875 if (ckWARN(WARN_AMBIGUOUS) && hgv
3876 && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
3877 Perl_warner(aTHX_ WARN_AMBIGUOUS,
3878 "Ambiguous call resolved as CORE::%s(), %s",
3879 GvENAME(hgv), "qualify as such or use &");
3886 default: /* not a keyword */
3889 char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
3891 /* Get the rest if it looks like a package qualifier */
3893 if (*s == '\'' || (*s == ':' && s[1] == ':')) {
3895 s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
3898 Perl_croak(aTHX_ "Bad name after %s%s", PL_tokenbuf,
3899 *s == '\'' ? "'" : "::");
3903 if (PL_expect == XOPERATOR) {
3904 if (PL_bufptr == PL_linestart) {
3905 CopLINE_dec(PL_curcop);
3906 Perl_warner(aTHX_ WARN_SEMICOLON, PL_warn_nosemi);
3907 CopLINE_inc(PL_curcop);
3910 no_op("Bareword",s);
3913 /* Look for a subroutine with this name in current package,
3914 unless name is "Foo::", in which case Foo is a bearword
3915 (and a package name). */
3918 PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':')
3920 if (ckWARN(WARN_BAREWORD) && ! gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVHV))
3921 Perl_warner(aTHX_ WARN_BAREWORD,
3922 "Bareword \"%s\" refers to nonexistent package",
3925 PL_tokenbuf[len] = '\0';
3932 gv = gv_fetchpv(PL_tokenbuf, FALSE, SVt_PVCV);
3935 /* if we saw a global override before, get the right name */
3938 sv = newSVpvn("CORE::GLOBAL::",14);
3939 sv_catpv(sv,PL_tokenbuf);
3942 sv = newSVpv(PL_tokenbuf,0);
3944 /* Presume this is going to be a bareword of some sort. */
3947 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
3948 yylval.opval->op_private = OPpCONST_BARE;
3950 /* And if "Foo::", then that's what it certainly is. */
3955 /* See if it's the indirect object for a list operator. */
3957 if (PL_oldoldbufptr &&
3958 PL_oldoldbufptr < PL_bufptr &&
3959 (PL_oldoldbufptr == PL_last_lop
3960 || PL_oldoldbufptr == PL_last_uni) &&
3961 /* NO SKIPSPACE BEFORE HERE! */
3962 (PL_expect == XREF ||
3963 ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7) == OA_FILEREF))
3965 bool immediate_paren = *s == '(';
3967 /* (Now we can afford to cross potential line boundary.) */
3970 /* Two barewords in a row may indicate method call. */
3972 if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') && (tmp=intuit_method(s,gv)))
3975 /* If not a declared subroutine, it's an indirect object. */
3976 /* (But it's an indir obj regardless for sort.) */
3978 if ( !immediate_paren && (PL_last_lop_op == OP_SORT ||
3979 ((!gv || !GvCVu(gv)) &&
3980 (PL_last_lop_op != OP_MAPSTART &&
3981 PL_last_lop_op != OP_GREPSTART))))
3983 PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
3989 PL_expect = XOPERATOR;
3992 /* Is this a word before a => operator? */
3993 if (*s == '=' && s[1] == '>') {
3995 sv_setpv(((SVOP*)yylval.opval)->op_sv, PL_tokenbuf);
3996 if (UTF && !IN_BYTE && is_utf8_string((U8*)PL_tokenbuf, len))
3997 SvUTF8_on(((SVOP*)yylval.opval)->op_sv);
4001 /* If followed by a paren, it's certainly a subroutine. */
4004 if (gv && GvCVu(gv)) {
4005 for (d = s + 1; SPACE_OR_TAB(*d); d++) ;
4006 if (*d == ')' && (sv = cv_const_sv(GvCV(gv)))) {
4011 PL_nextval[PL_nexttoke].opval = yylval.opval;
4012 PL_expect = XOPERATOR;
4018 /* If followed by var or block, call it a method (unless sub) */
4020 if ((*s == '$' || *s == '{') && (!gv || !GvCVu(gv))) {
4021 PL_last_lop = PL_oldbufptr;
4022 PL_last_lop_op = OP_METHOD;
4026 /* If followed by a bareword, see if it looks like indir obj. */
4028 if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') && (tmp = intuit_method(s,gv)))
4031 /* Not a method, so call it a subroutine (if defined) */
4033 if (gv && GvCVu(gv)) {
4035 if (lastchar == '-' && ckWARN_d(WARN_AMBIGUOUS))
4036 Perl_warner(aTHX_ WARN_AMBIGUOUS,
4037 "Ambiguous use of -%s resolved as -&%s()",
4038 PL_tokenbuf, PL_tokenbuf);
4039 /* Check for a constant sub */
4041 if ((sv = cv_const_sv(cv))) {
4043 SvREFCNT_dec(((SVOP*)yylval.opval)->op_sv);
4044 ((SVOP*)yylval.opval)->op_sv = SvREFCNT_inc(sv);
4045 yylval.opval->op_private = 0;
4049 /* Resolve to GV now. */
4050 op_free(yylval.opval);
4051 yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv));
4052 yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
4053 PL_last_lop = PL_oldbufptr;
4054 PL_last_lop_op = OP_ENTERSUB;
4055 /* Is there a prototype? */
4058 char *proto = SvPV((SV*)cv, len);
4061 if (strEQ(proto, "$"))
4063 if (*proto == '&' && *s == '{') {
4064 sv_setpv(PL_subname,"__ANON__");
4068 PL_nextval[PL_nexttoke].opval = yylval.opval;
4074 /* Call it a bare word */
4076 if (PL_hints & HINT_STRICT_SUBS)
4077 yylval.opval->op_private |= OPpCONST_STRICT;
4080 if (ckWARN(WARN_RESERVED)) {
4081 if (lastchar != '-') {
4082 for (d = PL_tokenbuf; *d && isLOWER(*d); d++) ;
4084 Perl_warner(aTHX_ WARN_RESERVED, PL_warn_reserved,
4091 if (lastchar && strchr("*%&", lastchar) && ckWARN_d(WARN_AMBIGUOUS)) {
4092 Perl_warner(aTHX_ WARN_AMBIGUOUS,
4093 "Operator or semicolon missing before %c%s",
4094 lastchar, PL_tokenbuf);
4095 Perl_warner(aTHX_ WARN_AMBIGUOUS,
4096 "Ambiguous use of %c resolved as operator %c",
4097 lastchar, lastchar);
4103 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
4104 newSVpv(CopFILE(PL_curcop),0));
4108 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
4109 Perl_newSVpvf(aTHX_ "%"IVdf, (IV)CopLINE(PL_curcop)));
4112 case KEY___PACKAGE__:
4113 yylval.opval = (OP*)newSVOP(OP_CONST, 0,
4115 ? newSVsv(PL_curstname)
4124 if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
4125 char *pname = "main";
4126 if (PL_tokenbuf[2] == 'D')
4127 pname = HvNAME(PL_curstash ? PL_curstash : PL_defstash);
4128 gv = gv_fetchpv(Perl_form(aTHX_ "%s::DATA", pname), TRUE, SVt_PVIO);
4131 GvIOp(gv) = newIO();
4132 IoIFP(GvIOp(gv)) = PL_rsfp;
4133 #if defined(HAS_FCNTL) && defined(F_SETFD)
4135 int fd = PerlIO_fileno(PL_rsfp);
4136 fcntl(fd,F_SETFD,fd >= 3);
4139 /* Mark this internal pseudo-handle as clean */
4140 IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
4142 IoTYPE(GvIOp(gv)) = IoTYPE_PIPE;
4143 else if ((PerlIO*)PL_rsfp == PerlIO_stdin())
4144 IoTYPE(GvIOp(gv)) = IoTYPE_STD;
4146 IoTYPE(GvIOp(gv)) = IoTYPE_RDONLY;
4147 #if defined(WIN32) && !defined(PERL_TEXTMODE_SCRIPTS)
4148 /* if the script was opened in binmode, we need to revert
4149 * it to text mode for compatibility; but only iff it has CRs
4150 * XXX this is a questionable hack at best. */
4151 if (PL_bufend-PL_bufptr > 2
4152 && PL_bufend[-1] == '\n' && PL_bufend[-2] == '\r')
4155 if (IoTYPE(GvIOp(gv)) == IoTYPE_RDONLY) {
4156 loc = PerlIO_tell(PL_rsfp);
4157 (void)PerlIO_seek(PL_rsfp, 0L, 0);
4159 if (PerlLIO_setmode(PerlIO_fileno(PL_rsfp), O_TEXT) != -1) {
4160 #if defined(__BORLANDC__)
4161 /* XXX see note in do_binmode() */
4162 ((FILE*)PL_rsfp)->flags |= _F_BIN;
4165 PerlIO_seek(PL_rsfp, loc, 0);
4169 #ifdef PERLIO_LAYERS
4170 if (UTF && !IN_BYTE)
4171 PerlIO_apply_layers(aTHX_ PL_rsfp, NULL, ":utf8");
4184 if (PL_expect == XSTATE) {
4191 if (*s == ':' && s[1] == ':') {
4194 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
4195 if (!(tmp = keyword(PL_tokenbuf, len)))
4196 Perl_croak(aTHX_ "CORE::%s is not a keyword", PL_tokenbuf);
4210 LOP(OP_ACCEPT,XTERM);
4216 LOP(OP_ATAN2,XTERM);
4222 LOP(OP_BINMODE,XTERM);
4225 LOP(OP_BLESS,XTERM);
4234 (void)gv_fetchpv("ENV",TRUE, SVt_PVHV); /* may use HOME */
4251 if (!PL_cryptseen) {
4252 PL_cryptseen = TRUE;
4256 LOP(OP_CRYPT,XTERM);
4259 if (ckWARN(WARN_CHMOD)) {
4260 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
4261 if (*d != '0' && isDIGIT(*d))
4262 Perl_warner(aTHX_ WARN_CHMOD,
4263 "chmod() mode argument is missing initial 0");
4265 LOP(OP_CHMOD,XTERM);
4268 LOP(OP_CHOWN,XTERM);
4271 LOP(OP_CONNECT,XTERM);
4287 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4291 PL_hints |= HINT_BLOCK_SCOPE;
4301 gv_fetchpv("AnyDBM_File::ISA", GV_ADDMULTI, SVt_PVAV);
4302 LOP(OP_DBMOPEN,XTERM);
4308 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4315 yylval.ival = CopLINE(PL_curcop);
4329 PL_expect = (*s == '{') ? XTERMBLOCK : XTERM;
4330 UNIBRACK(OP_ENTEREVAL);
4345 case KEY_endhostent:
4351 case KEY_endservent:
4354 case KEY_endprotoent:
4365 yylval.ival = CopLINE(PL_curcop);
4367 if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
4369 if ((PL_bufend - p) >= 3 &&
4370 strnEQ(p, "my", 2) && isSPACE(*(p + 2)))
4372 else if ((PL_bufend - p) >= 4 &&
4373 strnEQ(p, "our", 3) && isSPACE(*(p + 3)))
4376 if (isIDFIRST_lazy_if(p,UTF)) {
4377 p = scan_ident(p, PL_bufend,
4378 PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
4382 Perl_croak(aTHX_ "Missing $ on loop variable");
4387 LOP(OP_FORMLINE,XTERM);
4393 LOP(OP_FCNTL,XTERM);
4399 LOP(OP_FLOCK,XTERM);
4408 LOP(OP_GREPSTART, XREF);
4411 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4426 case KEY_getpriority:
4427 LOP(OP_GETPRIORITY,XTERM);
4429 case KEY_getprotobyname:
4432 case KEY_getprotobynumber:
4433 LOP(OP_GPBYNUMBER,XTERM);
4435 case KEY_getprotoent:
4447 case KEY_getpeername:
4448 UNI(OP_GETPEERNAME);
4450 case KEY_gethostbyname:
4453 case KEY_gethostbyaddr:
4454 LOP(OP_GHBYADDR,XTERM);
4456 case KEY_gethostent:
4459 case KEY_getnetbyname:
4462 case KEY_getnetbyaddr:
4463 LOP(OP_GNBYADDR,XTERM);
4468 case KEY_getservbyname:
4469 LOP(OP_GSBYNAME,XTERM);
4471 case KEY_getservbyport:
4472 LOP(OP_GSBYPORT,XTERM);
4474 case KEY_getservent:
4477 case KEY_getsockname:
4478 UNI(OP_GETSOCKNAME);
4480 case KEY_getsockopt:
4481 LOP(OP_GSOCKOPT,XTERM);
4503 yylval.ival = CopLINE(PL_curcop);
4507 LOP(OP_INDEX,XTERM);
4513 LOP(OP_IOCTL,XTERM);
4525 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4557 LOP(OP_LISTEN,XTERM);
4566 s = scan_pat(s,OP_MATCH);
4567 TERM(sublex_start());
4570 LOP(OP_MAPSTART, XREF);
4573 LOP(OP_MKDIR,XTERM);
4576 LOP(OP_MSGCTL,XTERM);
4579 LOP(OP_MSGGET,XTERM);
4582 LOP(OP_MSGRCV,XTERM);
4585 LOP(OP_MSGSND,XTERM);
4591 if (isIDFIRST_lazy_if(s,UTF)) {
4592 s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
4593 if (len == 3 && strnEQ(PL_tokenbuf, "sub", 3))
4595 PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
4596 if (!PL_in_my_stash) {
4599 sprintf(tmpbuf, "No such class %.1000s", PL_tokenbuf);
4607 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4614 if (PL_expect != XSTATE)
4615 yyerror("\"no\" not allowed in expression");
4616 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4617 s = force_version(s);
4622 if (*s == '(' || (s = skipspace(s), *s == '('))
4629 if (isIDFIRST_lazy_if(s,UTF)) {
4631 for (d = s; isALNUM_lazy_if(d,UTF); d++) ;
4633 if (strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_PRECEDENCE))
4634 Perl_warner(aTHX_ WARN_PRECEDENCE,
4635 "Precedence problem: open %.*s should be open(%.*s)",
4641 yylval.ival = OP_OR;
4651 LOP(OP_OPEN_DIR,XTERM);
4654 checkcomma(s,PL_tokenbuf,"filehandle");
4658 checkcomma(s,PL_tokenbuf,"filehandle");
4677 s = force_word(s,WORD,FALSE,TRUE,FALSE);
4681 LOP(OP_PIPE_OP,XTERM);
4684 s = scan_str(s,FALSE,FALSE);
4686 missingterm((char*)0);
4687 yylval.ival = OP_CONST;
4688 TERM(sublex_start());
4694 s = scan_str(s,FALSE,FALSE);
4696 missingterm((char*)0);
4698 if (SvCUR(PL_lex_stuff)) {
4701 d = SvPV_force(PL_lex_stuff, len);
4704 for (; isSPACE(*d) && len; --len, ++d) ;
4707 if (!warned && ckWARN(WARN_QW)) {
4708 for (; !isSPACE(*d) && len; --len, ++d) {
4710 Perl_warner(aTHX_ WARN_QW,
4711 "Possible attempt to separate words with commas");
4714 else if (*d == '#') {
4715 Perl_warner(aTHX_ WARN_QW,
4716 "Possible attempt to put comments in qw() list");
4722 for (; !isSPACE(*d) && len; --len, ++d) ;
4724 sv = newSVpvn(b, d-b);
4725 if (DO_UTF8(PL_lex_stuff))
4727 words = append_elem(OP_LIST, words,
4728 newSVOP(OP_CONST, 0, tokeq(sv)));
4732 PL_nextval[PL_nexttoke].opval = words;
4737 SvREFCNT_dec(PL_lex_stuff);
4738 PL_lex_stuff = Nullsv;
4744 s = scan_str(s,FALSE,FALSE);
4745 if (tmp == KEY_qu && is_utf8_string((U8*)s, SvCUR(PL_lex_stuff)))
4746 SvUTF8_on(PL_lex_stuff);
4748 missingterm((char*)0);
4749 yylval.ival = OP_STRINGIFY;
4750 if (SvIVX(PL_lex_stuff) == '\'')
4751 SvIVX(PL_lex_stuff) = 0; /* qq'$foo' should intepolate */
4752 TERM(sublex_start());
4755 s = scan_pat(s,OP_QR);
4756 TERM(sublex_start());
4759 s = scan_str(s,FALSE,FALSE);
4761 missingterm((char*)0);
4762 yylval.ival = OP_BACKTICK;
4764 TERM(sublex_start());
4771 if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
4772 s = force_version(s);
4775 *PL_tokenbuf = '\0';
4776 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4777 if (isIDFIRST_lazy_if(PL_tokenbuf,UTF))
4778 gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf), TRUE);
4780 yyerror("<> should be quotes");
4788 s = force_word(s,WORD,TRUE,FALSE,FALSE);
4792 LOP(OP_RENAME,XTERM);
4801 LOP(OP_RINDEX,XTERM);
4824 LOP(OP_REVERSE,XTERM);
4835 TERM(sublex_start());
4837 TOKEN(1); /* force error */
4846 LOP(OP_SELECT,XTERM);
4852 LOP(OP_SEMCTL,XTERM);
4855 LOP(OP_SEMGET,XTERM);
4858 LOP(OP_SEMOP,XTERM);
4864 LOP(OP_SETPGRP,XTERM);
4866 case KEY_setpriority:
4867 LOP(OP_SETPRIORITY,XTERM);
4869 case KEY_sethostent:
4875 case KEY_setservent:
4878 case KEY_setprotoent:
4888 LOP(OP_SEEKDIR,XTERM);
4890 case KEY_setsockopt:
4891 LOP(OP_SSOCKOPT,XTERM);
4897 LOP(OP_SHMCTL,XTERM);
4900 LOP(OP_SHMGET,XTERM);
4903 LOP(OP_SHMREAD,XTERM);
4906 LOP(OP_SHMWRITE,XTERM);
4909 LOP(OP_SHUTDOWN,XTERM);
4918 LOP(OP_SOCKET,XTERM);
4920 case KEY_socketpair:
4921 LOP(OP_SOCKPAIR,XTERM);
4924 checkcomma(s,PL_tokenbuf,"subroutine name");
4926 if (*s == ';' || *s == ')') /* probably a close */
4927 Perl_croak(aTHX_ "sort is now a reserved word");
4929 s = force_word(s,WORD,TRUE,TRUE,FALSE);
4933 LOP(OP_SPLIT,XTERM);
4936 LOP(OP_SPRINTF,XTERM);
4939 LOP(OP_SPLICE,XTERM);
4954 LOP(OP_SUBSTR,XTERM);
4960 char tmpbuf[sizeof PL_tokenbuf];
4962 expectation attrful;
4963 bool have_name, have_proto;
4968 if (isIDFIRST_lazy_if(s,UTF) || *s == '\'' ||
4969 (*s == ':' && s[1] == ':'))
4972 attrful = XATTRBLOCK;
4973 /* remember buffer pos'n for later force_word */
4974 tboffset = s - PL_oldbufptr;
4975 d = scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
4976 if (strchr(tmpbuf, ':'))
4977 sv_setpv(PL_subname, tmpbuf);
4979 sv_setsv(PL_subname,PL_curstname);
4980 sv_catpvn(PL_subname,"::",2);
4981 sv_catpvn(PL_subname,tmpbuf,len);
4988 Perl_croak(aTHX_ "Missing name in \"my sub\"");
4989 PL_expect = XTERMBLOCK;
4990 attrful = XATTRTERM;
4991 sv_setpv(PL_subname,"?");
4995 if (key == KEY_format) {
4997 PL_lex_formbrack = PL_lex_brackets + 1;
4999 (void) force_word(PL_oldbufptr + tboffset, WORD,
5004 /* Look for a prototype */
5008 s = scan_str(s,FALSE,FALSE);
5011 SvREFCNT_dec(PL_lex_stuff);
5012 PL_lex_stuff = Nullsv;
5013 Perl_croak(aTHX_ "Prototype not terminated");
5016 d = SvPVX(PL_lex_stuff);
5018 for (p = d; *p; ++p) {
5023 SvCUR(PL_lex_stuff) = tmp;
5031 if (*s == ':' && s[1] != ':')
5032 PL_expect = attrful;
5035 PL_nextval[PL_nexttoke].opval =
5036 (OP*)newSVOP(OP_CONST, 0, PL_lex_stuff);
5037 PL_lex_stuff = Nullsv;
5041 sv_setpv(PL_subname,"__ANON__");
5044 (void) force_word(PL_oldbufptr + tboffset, WORD,
5053 LOP(OP_SYSTEM,XREF);
5056 LOP(OP_SYMLINK,XTERM);
5059 LOP(OP_SYSCALL,XTERM);
5062 LOP(OP_SYSOPEN,XTERM);
5065 LOP(OP_SYSSEEK,XTERM);
5068 LOP(OP_SYSREAD,XTERM);
5071 LOP(OP_SYSWRITE,XTERM);
5075 TERM(sublex_start());
5096 LOP(OP_TRUNCATE,XTERM);
5108 yylval.ival = CopLINE(PL_curcop);
5112 yylval.ival = CopLINE(PL_curcop);
5116 LOP(OP_UNLINK,XTERM);
5122 LOP(OP_UNPACK,XTERM);
5125 LOP(OP_UTIME,XTERM);
5128 if (ckWARN(WARN_UMASK)) {
5129 for (d = s; d < PL_bufend && (isSPACE(*d) || *d == '('); d++) ;
5130 if (*d != '0' && isDIGIT(*d))
5131 Perl_warner(aTHX_ WARN_UMASK,
5132 "umask: argument is missing initial 0");
5137 LOP(OP_UNSHIFT,XTERM);
5140 if (PL_expect != XSTATE)
5141 yyerror("\"use\" not allowed in expression");
5143 if (isDIGIT(*s) || (*s == 'v' && isDIGIT(s[1]))) {
5144 s = force_version(s);
5145 if (*s == ';' || (s = skipspace(s), *s == ';')) {
5146 PL_nextval[PL_nexttoke].opval = Nullop;
5151 s = force_word(s,WORD,FALSE,TRUE,FALSE);
5152 s = force_version(s);
5164 yylval.ival = CopLINE(PL_curcop);
5168 PL_hints |= HINT_BLOCK_SCOPE;
5175 LOP(OP_WAITPID,XTERM);
5183 static char ctl_l[2];
5185 if (ctl_l[0] == '\0')
5186 ctl_l[0] = toCTRL('L');
5187 gv_fetchpv(ctl_l,TRUE, SVt_PV);
5190 gv_fetchpv("\f",TRUE, SVt_PV); /* Make sure $^L is defined */
5195 if (PL_expect == XOPERATOR)
5201 yylval.ival = OP_XOR;
5206 TERM(sublex_start());
5211 #pragma segment Main
5215 Perl_keyword(pTHX_ register char *d, I32 len)
5220 if (strEQ(d,"__FILE__")) return -KEY___FILE__;
5221 if (strEQ(d,"__LINE__")) return -KEY___LINE__;
5222 if (strEQ(d,"__PACKAGE__")) return -KEY___PACKAGE__;
5223 if (strEQ(d,"__DATA__")) return KEY___DATA__;
5224 if (strEQ(d,"__END__")) return KEY___END__;
5228 if (strEQ(d,"AUTOLOAD")) return KEY_AUTOLOAD;
5233 if (strEQ(d,"and")) return -KEY_and;
5234 if (strEQ(d,"abs")) return -KEY_abs;
5237 if (strEQ(d,"alarm")) return -KEY_alarm;
5238 if (strEQ(d,"atan2")) return -KEY_atan2;
5241 if (strEQ(d,"accept")) return -KEY_accept;
5246 if (strEQ(d,"BEGIN")) return KEY_BEGIN;
5249 if (strEQ(d,"bless")) return -KEY_bless;
5250 if (strEQ(d,"bind")) return -KEY_bind;
5251 if (strEQ(d,"binmode")) return -KEY_binmode;
5254 if (strEQ(d,"CORE")) return -KEY_CORE;
5255 if (strEQ(d,"CHECK")) return KEY_CHECK;
5260 if (strEQ(d,"cmp")) return -KEY_cmp;
5261 if (strEQ(d,"chr")) return -KEY_chr;
5262 if (strEQ(d,"cos")) return -KEY_cos;
5265 if (strEQ(d,"chop")) return -KEY_chop;
5268 if (strEQ(d,"close")) return -KEY_close;
5269 if (strEQ(d,"chdir")) return -KEY_chdir;
5270 if (strEQ(d,"chomp")) return -KEY_chomp;
5271 if (strEQ(d,"chmod")) return -KEY_chmod;
5272 if (strEQ(d,"chown")) return -KEY_chown;
5273 if (strEQ(d,"crypt")) return -KEY_crypt;
5276 if (strEQ(d,"chroot")) return -KEY_chroot;
5277 if (strEQ(d,"caller")) return -KEY_caller;
5280 if (strEQ(d,"connect")) return -KEY_connect;
5283 if (strEQ(d,"closedir")) return -KEY_closedir;
5284 if (strEQ(d,"continue")) return -KEY_continue;
5289 if (strEQ(d,"DESTROY")) return KEY_DESTROY;
5294 if (strEQ(d,"do")) return KEY_do;
5297 if (strEQ(d,"die")) return -KEY_die;
5300 if (strEQ(d,"dump")) return -KEY_dump;
5303 if (strEQ(d,"delete")) return KEY_delete;
5306 if (strEQ(d,"defined")) return KEY_defined;
5307 if (strEQ(d,"dbmopen")) return -KEY_dbmopen;
5310 if (strEQ(d,"dbmclose")) return -KEY_dbmclose;
5315 if (strEQ(d,"END")) return KEY_END;
5320 if (strEQ(d,"eq")) return -KEY_eq;
5323 if (strEQ(d,"eof")) return -KEY_eof;
5324 if (strEQ(d,"exp")) return -KEY_exp;
5327 if (strEQ(d,"else")) return KEY_else;
5328 if (strEQ(d,"exit")) return -KEY_exit;
5329 if (strEQ(d,"eval")) return KEY_eval;
5330 if (strEQ(d,"exec")) return -KEY_exec;
5331 if (strEQ(d,"each")) return -KEY_each;
5334 if (strEQ(d,"elsif")) return KEY_elsif;
5337 if (strEQ(d,"exists")) return KEY_exists;
5338 if (strEQ(d,"elseif")) Perl_warn(aTHX_ "elseif should be elsif");
5341 if (strEQ(d,"endgrent")) return -KEY_endgrent;
5342 if (strEQ(d,"endpwent")) return -KEY_endpwent;
5345 if (strEQ(d,"endnetent")) return -KEY_endnetent;
5348 if (strEQ(d,"endhostent")) return -KEY_endhostent;
5349 if (strEQ(d,"endservent")) return -KEY_endservent;
5352 if (strEQ(d,"endprotoent")) return -KEY_endprotoent;
5359 if (strEQ(d,"for")) return KEY_for;
5362 if (strEQ(d,"fork")) return -KEY_fork;
5365 if (strEQ(d,"fcntl")) return -KEY_fcntl;
5366 if (strEQ(d,"flock")) return -KEY_flock;
5369 if (strEQ(d,"format")) return KEY_format;
5370 if (strEQ(d,"fileno")) return -KEY_fileno;
5373 if (strEQ(d,"foreach")) return KEY_foreach;
5376 if (strEQ(d,"formline")) return -KEY_formline;
5381 if (strnEQ(d,"get",3)) {
5386 if (strEQ(d,"ppid")) return -KEY_getppid;
5387 if (strEQ(d,"pgrp")) return -KEY_getpgrp;
5390 if (strEQ(d,"pwent")) return -KEY_getpwent;
5391 if (strEQ(d,"pwnam")) return -KEY_getpwnam;
5392 if (strEQ(d,"pwuid")) return -KEY_getpwuid;
5395 if (strEQ(d,"peername")) return -KEY_getpeername;
5396 if (strEQ(d,"protoent")) return -KEY_getprotoent;
5397 if (strEQ(d,"priority")) return -KEY_getpriority;
5400 if (strEQ(d,"protobyname")) return -KEY_getprotobyname;
5403 if (strEQ(d,"protobynumber"))return -KEY_getprotobynumber;
5407 else if (*d == 'h') {
5408 if (strEQ(d,"hostbyname")) return -KEY_gethostbyname;
5409 if (strEQ(d,"hostbyaddr")) return -KEY_gethostbyaddr;
5410 if (strEQ(d,"hostent")) return -KEY_gethostent;
5412 else if (*d == 'n') {
5413 if (strEQ(d,"netbyname")) return -KEY_getnetbyname;
5414 if (strEQ(d,"netbyaddr")) return -KEY_getnetbyaddr;
5415 if (strEQ(d,"netent")) return -KEY_getnetent;
5417 else if (*d == 's') {
5418 if (strEQ(d,"servbyname")) return -KEY_getservbyname;
5419 if (strEQ(d,"servbyport")) return -KEY_getservbyport;
5420 if (strEQ(d,"servent")) return -KEY_getservent;
5421 if (strEQ(d,"sockname")) return -KEY_getsockname;
5422 if (strEQ(d,"sockopt")) return -KEY_getsockopt;
5424 else if (*d == 'g') {
5425 if (strEQ(d,"grent")) return -KEY_getgrent;
5426 if (strEQ(d,"grnam")) return -KEY_getgrnam;
5427 if (strEQ(d,"grgid")) return -KEY_getgrgid;
5429 else if (*d == 'l') {
5430 if (strEQ(d,"login")) return -KEY_getlogin;
5432 else if (strEQ(d,"c")) return -KEY_getc;
5437 if (strEQ(d,"gt")) return -KEY_gt;
5438 if (strEQ(d,"ge")) return -KEY_ge;
5441 if (strEQ(d,"grep")) return KEY_grep;
5442 if (strEQ(d,"goto")) return KEY_goto;
5443 if (strEQ(d,"glob")) return KEY_glob;
5446 if (strEQ(d,"gmtime")) return -KEY_gmtime;
5451 if (strEQ(d,"hex")) return -KEY_hex;
5454 if (strEQ(d,"INIT")) return KEY_INIT;
5459 if (strEQ(d,"if")) return KEY_if;
5462 if (strEQ(d,"int")) return -KEY_int;
5465 if (strEQ(d,"index")) return -KEY_index;
5466 if (strEQ(d,"ioctl")) return -KEY_ioctl;
5471 if (strEQ(d,"join")) return -KEY_join;
5475 if (strEQ(d,"keys")) return -KEY_keys;
5476 if (strEQ(d,"kill")) return -KEY_kill;
5482 if (strEQ(d,"lt")) return -KEY_lt;
5483 if (strEQ(d,"le")) return -KEY_le;
5484 if (strEQ(d,"lc")) return -KEY_lc;
5487 if (strEQ(d,"log")) return -KEY_log;
5490 if (strEQ(d,"last")) return KEY_last;
5491 if (strEQ(d,"link")) return -KEY_link;
5492 if (strEQ(d,"lock")) return -KEY_lock;
5495 if (strEQ(d,"local")) return KEY_local;
5496 if (strEQ(d,"lstat")) return -KEY_lstat;
5499 if (strEQ(d,"length")) return -KEY_length;
5500 if (strEQ(d,"listen")) return -KEY_listen;
5503 if (strEQ(d,"lcfirst")) return -KEY_lcfirst;
5506 if (strEQ(d,"localtime")) return -KEY_localtime;
5512 case 1: return KEY_m;
5514 if (strEQ(d,"my")) return KEY_my;
5517 if (strEQ(d,"map")) return KEY_map;
5520 if (strEQ(d,"mkdir")) return -KEY_mkdir;
5523 if (strEQ(d,"msgctl")) return -KEY_msgctl;
5524 if (strEQ(d,"msgget")) return -KEY_msgget;
5525 if (strEQ(d,"msgrcv")) return -KEY_msgrcv;
5526 if (strEQ(d,"msgsnd")) return -KEY_msgsnd;
5531 if (strEQ(d,"next")) return KEY_next;
5532 if (strEQ(d,"ne")) return -KEY_ne;
5533 if (strEQ(d,"not")) return -KEY_not;
5534 if (strEQ(d,"no")) return KEY_no;
5539 if (strEQ(d,"or")) return -KEY_or;
5542 if (strEQ(d,"ord")) return -KEY_ord;
5543 if (strEQ(d,"oct")) return -KEY_oct;
5544 if (strEQ(d,"our")) return KEY_our;
5547 if (strEQ(d,"open")) return -KEY_open;
5550 if (strEQ(d,"opendir")) return -KEY_opendir;
5557 if (strEQ(d,"pop")) return -KEY_pop;
5558 if (strEQ(d,"pos")) return KEY_pos;
5561 if (strEQ(d,"push")) return -KEY_push;
5562 if (strEQ(d,"pack")) return -KEY_pack;
5563 if (strEQ(d,"pipe")) return -KEY_pipe;
5566 if (strEQ(d,"print")) return KEY_print;
5569 if (strEQ(d,"printf")) return KEY_printf;
5572 if (strEQ(d,"package")) return KEY_package;
5575 if (strEQ(d,"prototype")) return KEY_prototype;
5580 if (strEQ(d,"q")) return KEY_q;
5581 if (strEQ(d,"qr")) return KEY_qr;
5582 if (strEQ(d,"qq")) return KEY_qq;
5583 if (strEQ(d,"qu")) return KEY_qu;
5584 if (strEQ(d,"qw")) return KEY_qw;
5585 if (strEQ(d,"qx")) return KEY_qx;
5587 else if (strEQ(d,"quotemeta")) return -KEY_quotemeta;
5592 if (strEQ(d,"ref")) return -KEY_ref;
5595 if (strEQ(d,"read")) return -KEY_read;
5596 if (strEQ(d,"rand")) return -KEY_rand;
5597 if (strEQ(d,"recv")) return -KEY_recv;
5598 if (strEQ(d,"redo")) return KEY_redo;
5601 if (strEQ(d,"rmdir")) return -KEY_rmdir;
5602 if (strEQ(d,"reset")) return -KEY_reset;
5605 if (strEQ(d,"return")) return KEY_return;
5606 if (strEQ(d,"rename")) return -KEY_rename;
5607 if (strEQ(d,"rindex")) return -KEY_rindex;
5610 if (strEQ(d,"require")) return -KEY_require;
5611 if (strEQ(d,"reverse")) return -KEY_reverse;
5612 if (strEQ(d,"readdir")) return -KEY_readdir;
5615 if (strEQ(d,"readlink")) return -KEY_readlink;
5616 if (strEQ(d,"readline")) return -KEY_readline;
5617 if (strEQ(d,"readpipe")) return -KEY_readpipe;
5620 if (strEQ(d,"rewinddir")) return -KEY_rewinddir;
5626 case 0: return KEY_s;
5628 if (strEQ(d,"scalar")) return KEY_scalar;
5633 if (strEQ(d,"seek")) return -KEY_seek;
5634 if (strEQ(d,"send")) return -KEY_send;
5637 if (strEQ(d,"semop")) return -KEY_semop;
5640 if (strEQ(d,"select")) return -KEY_select;
5641 if (strEQ(d,"semctl")) return -KEY_semctl;
5642 if (strEQ(d,"semget")) return -KEY_semget;
5645 if (strEQ(d,"setpgrp")) return -KEY_setpgrp;
5646 if (strEQ(d,"seekdir")) return -KEY_seekdir;
5649 if (strEQ(d,"setpwent")) return -KEY_setpwent;
5650 if (strEQ(d,"setgrent")) return -KEY_setgrent;
5653 if (strEQ(d,"setnetent")) return -KEY_setnetent;
5656 if (strEQ(d,"setsockopt")) return -KEY_setsockopt;
5657 if (strEQ(d,"sethostent")) return -KEY_sethostent;
5658 if (strEQ(d,"setservent")) return -KEY_setservent;
5661 if (strEQ(d,"setpriority")) return -KEY_setpriority;
5662 if (strEQ(d,"setprotoent")) return -KEY_setprotoent;
5669 if (strEQ(d,"shift")) return -KEY_shift;
5672 if (strEQ(d,"shmctl")) return -KEY_shmctl;
5673 if (strEQ(d,"shmget")) return -KEY_shmget;
5676 if (strEQ(d,"shmread")) return -KEY_shmread;
5679 if (strEQ(d,"shmwrite")) return -KEY_shmwrite;
5680 if (strEQ(d,"shutdown")) return -KEY_shutdown;
5685 if (strEQ(d,"sin")) return -KEY_sin;
5688 if (strEQ(d,"sleep")) return -KEY_sleep;
5691 if (strEQ(d,"sort")) return KEY_sort;
5692 if (strEQ(d,"socket")) return -KEY_socket;
5693 if (strEQ(d,"socketpair")) return -KEY_socketpair;
5696 if (strEQ(d,"split")) return KEY_split;
5697 if (strEQ(d,"sprintf")) return -KEY_sprintf;
5698 if (strEQ(d,"splice")) return -KEY_splice;
5701 if (strEQ(d,"sqrt")) return -KEY_sqrt;
5704 if (strEQ(d,"srand")) return -KEY_srand;
5707 if (strEQ(d,"stat")) return -KEY_stat;
5708 if (strEQ(d,"study")) return KEY_study;
5711 if (strEQ(d,"substr")) return -KEY_substr;
5712 if (strEQ(d,"sub")) return KEY_sub;
5717 if (strEQ(d,"system")) return -KEY_system;
5720 if (strEQ(d,"symlink")) return -KEY_symlink;
5721 if (strEQ(d,"syscall")) return -KEY_syscall;
5722 if (strEQ(d,"sysopen")) return -KEY_sysopen;
5723 if (strEQ(d,"sysread")) return -KEY_sysread;
5724 if (strEQ(d,"sysseek")) return -KEY_sysseek;
5727 if (strEQ(d,"syswrite")) return -KEY_syswrite;
5736 if (strEQ(d,"tr")) return KEY_tr;
5739 if (strEQ(d,"tie")) return KEY_tie;
5742 if (strEQ(d,"tell")) return -KEY_tell;
5743 if (strEQ(d,"tied")) return KEY_tied;
5744 if (strEQ(d,"time")) return -KEY_time;
5747 if (strEQ(d,"times")) return -KEY_times;
5750 if (strEQ(d,"telldir")) return -KEY_telldir;
5753 if (strEQ(d,"truncate")) return -KEY_truncate;
5760 if (strEQ(d,"uc")) return -KEY_uc;
5763 if (strEQ(d,"use")) return KEY_use;
5766 if (strEQ(d,"undef")) return KEY_undef;
5767 if (strEQ(d,"until")) return KEY_until;
5768 if (strEQ(d,"untie")) return KEY_untie;
5769 if (strEQ(d,"utime")) return -KEY_utime;
5770 if (strEQ(d,"umask")) return -KEY_umask;
5773 if (strEQ(d,"unless")) return KEY_unless;
5774 if (strEQ(d,"unpack")) return -KEY_unpack;
5775 if (strEQ(d,"unlink")) return -KEY_unlink;
5778 if (strEQ(d,"unshift")) return -KEY_unshift;
5779 if (strEQ(d,"ucfirst")) return -KEY_ucfirst;
5784 if (strEQ(d,"values")) return -KEY_values;
5785 if (strEQ(d,"vec")) return -KEY_vec;
5790 if (strEQ(d,"warn")) return -KEY_warn;
5791 if (strEQ(d,"wait")) return -KEY_wait;
5794 if (strEQ(d,"while")) return KEY_while;
5795 if (strEQ(d,"write")) return -KEY_write;
5798 if (strEQ(d,"waitpid")) return -KEY_waitpid;
5801 if (strEQ(d,"wantarray")) return -KEY_wantarray;
5806 if (len == 1) return -KEY_x;
5807 if (strEQ(d,"xor")) return -KEY_xor;
5810 if (len == 1) return KEY_y;
5819 S_checkcomma(pTHX_ register char *s, char *name, char *what)
5823 if (*s == ' ' && s[1] == '(') { /* XXX gotta be a better way */
5824 if (ckWARN(WARN_SYNTAX)) {
5826 for (w = s+2; *w && level; w++) {
5833 for (; *w && isSPACE(*w); w++) ;
5834 if (!*w || !strchr(";|})]oaiuw!=", *w)) /* an advisory hack only... */
5835 Perl_warner(aTHX_ WARN_SYNTAX,
5836 "%s (...) interpreted as function",name);
5839 while (s < PL_bufend && isSPACE(*s))
5843 while (s < PL_bufend && isSPACE(*s))
5845 if (isIDFIRST_lazy_if(s,UTF)) {
5847 while (isALNUM_lazy_if(s,UTF))
5849 while (s < PL_bufend && isSPACE(*s))
5854 kw = keyword(w, s - w) || get_cv(w, FALSE) != 0;
5858 Perl_croak(aTHX_ "No comma allowed after %s", what);
5863 /* Either returns sv, or mortalizes sv and returns a new SV*.
5864 Best used as sv=new_constant(..., sv, ...).
5865 If s, pv are NULL, calls subroutine with one argument,
5866 and type is used with error messages only. */
5869 S_new_constant(pTHX_ char *s, STRLEN len, const char *key, SV *sv, SV *pv,
5873 HV *table = GvHV(PL_hintgv); /* ^H */
5877 const char *why1, *why2, *why3;
5879 if (!table || !(PL_hints & HINT_LOCALIZE_HH)) {
5882 why2 = strEQ(key,"charnames")
5883 ? "(possibly a missing \"use charnames ...\")"
5885 msg = Perl_newSVpvf(aTHX_ "Constant(%s) unknown: %s",
5886 (type ? type: "undef"), why2);
5888 /* This is convoluted and evil ("goto considered harmful")
5889 * but I do not understand the intricacies of all the different
5890 * failure modes of %^H in here. The goal here is to make
5891 * the most probable error message user-friendly. --jhi */
5896 msg = Perl_newSVpvf(aTHX_ "Constant(%s): %s%s%s",
5897 (type ? type: "undef"), why1, why2, why3);
5899 yyerror(SvPVX(msg));
5903 cvp = hv_fetch(table, key, strlen(key), FALSE);
5904 if (!cvp || !SvOK(*cvp)) {
5907 why3 = "} is not defined";
5910 sv_2mortal(sv); /* Parent created it permanently */
5913 pv = sv_2mortal(newSVpvn(s, len));
5915 typesv = sv_2mortal(newSVpv(type, 0));
5917 typesv = &PL_sv_undef;
5919 PUSHSTACKi(PERLSI_OVERLOAD);
5931 call_sv(cv, G_SCALAR | ( PL_in_eval ? 0 : G_EVAL));
5935 /* Check the eval first */
5936 if (!PL_in_eval && SvTRUE(ERRSV)) {
5938 sv_catpv(ERRSV, "Propagated");
5939 yyerror(SvPV(ERRSV, n_a)); /* Duplicates the message inside eval */
5941 res = SvREFCNT_inc(sv);
5945 (void)SvREFCNT_inc(res);
5954 why1 = "Call to &{$^H{";
5956 why3 = "}} did not return a defined value";
5965 S_scan_word(pTHX_ register char *s, char *dest, STRLEN destlen, int allow_package, STRLEN *slp)
5967 register char *d = dest;
5968 register char *e = d + destlen - 3; /* two-character token, ending NUL */
5971 Perl_croak(aTHX_ ident_too_long);
5972 if (isALNUM(*s)) /* UTF handled below */
5974 else if (*s == '\'' && allow_package && isIDFIRST_lazy_if(s+1,UTF)) {
5979 else if (*s == ':' && s[1] == ':' && allow_package && s[2] != '$') {
5983 else if (UTF && UTF8_IS_START(*s) && isALNUM_utf8((U8*)s)) {
5984 char *t = s + UTF8SKIP(s);
5985 while (UTF8_IS_CONTINUED(*t) && is_utf8_mark((U8*)t))
5987 if (d + (t - s) > e)
5988 Perl_croak(aTHX_ ident_too_long);
5989 Copy(s, d, t - s, char);
6002 S_scan_ident(pTHX_ register char *s, register char *send, char *dest, STRLEN destlen, I32 ck_uni)
6012 e = d + destlen - 3; /* two-character token, ending NUL */
6014 while (isDIGIT(*s)) {
6016 Perl_croak(aTHX_ ident_too_long);
6023 Perl_croak(aTHX_ ident_too_long);
6024 if (isALNUM(*s)) /* UTF handled below */
6026 else if (*s == '\'' && isIDFIRST_lazy_if(s+1,UTF)) {
6031 else if (*s == ':' && s[1] == ':') {
6035 else if (UTF && UTF8_IS_START(*s) && isALNUM_utf8((U8*)s)) {
6036 char *t = s + UTF8SKIP(s);
6037 while (UTF8_IS_CONTINUED(*t) && is_utf8_mark((U8*)t))
6039 if (d + (t - s) > e)
6040 Perl_croak(aTHX_ ident_too_long);
6041 Copy(s, d, t - s, char);
6052 if (PL_lex_state != LEX_NORMAL)
6053 PL_lex_state = LEX_INTERPENDMAYBE;
6056 if (*s == '$' && s[1] &&
6057 (isALNUM_lazy_if(s+1,UTF) || strchr("${", s[1]) || strnEQ(s+1,"::",2)) )
6070 if (*d == '^' && *s && isCONTROLVAR(*s)) {
6075 if (isSPACE(s[-1])) {
6078 if (!SPACE_OR_TAB(ch)) {
6084 if (isIDFIRST_lazy_if(d,UTF)) {
6088 while ((e < send && isALNUM_lazy_if(e,UTF)) || *e == ':') {
6090 while (e < send && UTF8_IS_CONTINUED(*e) && is_utf8_mark((U8*)e))
6093 Copy(s, d, e - s, char);
6098 while ((isALNUM(*s) || *s == ':') && d < e)
6101 Perl_croak(aTHX_ ident_too_long);
6104 while (s < send && SPACE_OR_TAB(*s)) s++;
6105 if ((*s == '[' || (*s == '{' && strNE(dest, "sub")))) {
6106 if (ckWARN(WARN_AMBIGUOUS) && keyword(dest, d - dest)) {
6107 const char *brack = *s == '[' ? "[...]" : "{...}";
6108 Perl_warner(aTHX_ WARN_AMBIGUOUS,
6109 "Ambiguous use of %c{%s%s} resolved to %c%s%s",
6110 funny, dest, brack, funny, dest, brack);
6113 PL_lex_brackstack[PL_lex_brackets++] = (char)(XOPERATOR | XFAKEBRACK);
6117 /* Handle extended ${^Foo} variables
6118 * 1999-02-27 mjd-perl-patch@plover.com */
6119 else if (!isALNUM(*d) && !isPRINT(*d) /* isCTRL(d) */
6123 while (isALNUM(*s) && d < e) {
6127 Perl_croak(aTHX_ ident_too_long);
6132 if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets)
6133 PL_lex_state = LEX_INTERPEND;
6136 if (PL_lex_state == LEX_NORMAL) {
6137 if (ckWARN(WARN_AMBIGUOUS) &&
6138 (keyword(dest, d - dest) || get_cv(dest, FALSE)))
6140 Perl_warner(aTHX_ WARN_AMBIGUOUS,
6141 "Ambiguous use of %c{%s} resolved to %c%s",
6142 funny, dest, funny, dest);
6147 s = bracket; /* let the parser handle it */
6151 else if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets && !intuit_more(s))
6152 PL_lex_state = LEX_INTERPEND;
6157 Perl_pmflag(pTHX_ U16 *pmfl, int ch)
6162 *pmfl |= PMf_GLOBAL;
6164 *pmfl |= PMf_CONTINUE;
6168 *pmfl |= PMf_MULTILINE;
6170 *pmfl |= PMf_SINGLELINE;
6172 *pmfl |= PMf_EXTENDED;
6176 S_scan_pat(pTHX_ char *start, I32 type)
6181 s = scan_str(start,FALSE,FALSE);
6184 SvREFCNT_dec(PL_lex_stuff);
6185 PL_lex_stuff = Nullsv;
6186 Perl_croak(aTHX_ "Search pattern not terminated");
6189 pm = (PMOP*)newPMOP(type, 0);
6190 if (PL_multi_open == '?')
6191 pm->op_pmflags |= PMf_ONCE;
6193 while (*s && strchr("iomsx", *s))
6194 pmflag(&pm->op_pmflags,*s++);
6197 while (*s && strchr("iogcmsx", *s))
6198 pmflag(&pm->op_pmflags,*s++);
6200 pm->op_pmpermflags = pm->op_pmflags;
6202 PL_lex_op = (OP*)pm;
6203 yylval.ival = OP_MATCH;
6208 S_scan_subst(pTHX_ char *start)
6215 yylval.ival = OP_NULL;
6217 s = scan_str(start,FALSE,FALSE);
6221 SvREFCNT_dec(PL_lex_stuff);
6222 PL_lex_stuff = Nullsv;
6223 Perl_croak(aTHX_ "Substitution pattern not terminated");
6226 if (s[-1] == PL_multi_open)
6229 first_start = PL_multi_start;
6230 s = scan_str(s,FALSE,FALSE);
6233 SvREFCNT_dec(PL_lex_stuff);
6234 PL_lex_stuff = Nullsv;
6236 SvREFCNT_dec(PL_lex_repl);
6237 PL_lex_repl = Nullsv;
6238 Perl_croak(aTHX_ "Substitution replacement not terminated");
6240 PL_multi_start = first_start; /* so whole substitution is taken together */
6242 pm = (PMOP*)newPMOP(OP_SUBST, 0);
6248 else if (strchr("iogcmsx", *s))
6249 pmflag(&pm->op_pmflags,*s++);
6256 PL_sublex_info.super_bufptr = s;
6257 PL_sublex_info.super_bufend = PL_bufend;
6259 pm->op_pmflags |= PMf_EVAL;
6260 repl = newSVpvn("",0);
6262 sv_catpv(repl, es ? "eval " : "do ");
6263 sv_catpvn(repl, "{ ", 2);
6264 sv_catsv(repl, PL_lex_repl);
6265 sv_catpvn(repl, " };", 2);
6267 SvREFCNT_dec(PL_lex_repl);
6271 pm->op_pmpermflags = pm->op_pmflags;
6272 PL_lex_op = (OP*)pm;
6273 yylval.ival = OP_SUBST;
6278 S_scan_trans(pTHX_ char *start)
6289 yylval.ival = OP_NULL;
6291 s = scan_str(start,FALSE,FALSE);
6294 SvREFCNT_dec(PL_lex_stuff);
6295 PL_lex_stuff = Nullsv;
6296 Perl_croak(aTHX_ "Transliteration pattern not terminated");
6298 if (s[-1] == PL_multi_open)
6301 s = scan_str(s,FALSE,FALSE);
6304 SvREFCNT_dec(PL_lex_stuff);
6305 PL_lex_stuff = Nullsv;
6307 SvREFCNT_dec(PL_lex_repl);
6308 PL_lex_repl = Nullsv;
6309 Perl_croak(aTHX_ "Transliteration replacement not terminated");
6312 New(803,tbl,256,short);
6313 o = newPVOP(OP_TRANS, 0, (char*)tbl);
6315 complement = del = squash = 0;
6316 while (strchr("cds", *s)) {
6318 complement = OPpTRANS_COMPLEMENT;
6320 del = OPpTRANS_DELETE;
6322 squash = OPpTRANS_SQUASH;
6325 o->op_private = del|squash|complement|
6326 (DO_UTF8(PL_lex_stuff)? OPpTRANS_FROM_UTF : 0)|
6327 (DO_UTF8(PL_lex_repl) ? OPpTRANS_TO_UTF : 0);
6330 yylval.ival = OP_TRANS;
6335 S_scan_heredoc(pTHX_ register char *s)
6338 I32 op_type = OP_SCALAR;
6345 int outer = (PL_rsfp && !(PL_lex_inwhat == OP_SCALAR));
6349 e = PL_tokenbuf + sizeof PL_tokenbuf - 1;
6352 for (peek = s; SPACE_OR_TAB(*peek); peek++) ;
6353 if (*peek && strchr("`'\"",*peek)) {
6356 s = delimcpy(d, e, s, PL_bufend, term, &len);
6366 if (!isALNUM_lazy_if(s,UTF))
6367 deprecate("bare << to mean <<\"\"");
6368 for (; isALNUM_lazy_if(s,UTF); s++) {
6373 if (d >= PL_tokenbuf + sizeof PL_tokenbuf - 1)
6374 Perl_croak(aTHX_ "Delimiter for here document is too long");
6377 len = d - PL_tokenbuf;
6378 #ifndef PERL_STRICT_CR
6379 d = strchr(s, '\r');
6383 while (s < PL_bufend) {
6389 else if (*s == '\n' && s[1] == '\r') { /* \015\013 on a mac? */
6398 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
6403 if (outer || !(d=ninstr(s,PL_bufend,d,d+1)))
6404 herewas = newSVpvn(s,PL_bufend-s);
6406 s--, herewas = newSVpvn(s,d-s);
6407 s += SvCUR(herewas);
6409 tmpstr = NEWSV(87,79);
6410 sv_upgrade(tmpstr, SVt_PVIV);
6415 else if (term == '`') {
6416 op_type = OP_BACKTICK;
6417 SvIVX(tmpstr) = '\\';
6421 PL_multi_start = CopLINE(PL_curcop);
6422 PL_multi_open = PL_multi_close = '<';
6423 term = *PL_tokenbuf;
6424 if (PL_lex_inwhat == OP_SUBST && PL_in_eval && !PL_rsfp) {
6425 char *bufptr = PL_sublex_info.super_bufptr;
6426 char *bufend = PL_sublex_info.super_bufend;
6427 char *olds = s - SvCUR(herewas);
6428 s = strchr(bufptr, '\n');
6432 while (s < bufend &&
6433 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
6435 CopLINE_inc(PL_curcop);
6438 CopLINE_set(PL_curcop, PL_multi_start);
6439 missingterm(PL_tokenbuf);
6441 sv_setpvn(herewas,bufptr,d-bufptr+1);
6442 sv_setpvn(tmpstr,d+1,s-d);
6444 sv_catpvn(herewas,s,bufend-s);
6445 (void)strcpy(bufptr,SvPVX(herewas));
6452 while (s < PL_bufend &&
6453 (*s != term || memNE(s,PL_tokenbuf,len)) ) {
6455 CopLINE_inc(PL_curcop);
6457 if (s >= PL_bufend) {
6458 CopLINE_set(PL_curcop, PL_multi_start);
6459 missingterm(PL_tokenbuf);
6461 sv_setpvn(tmpstr,d+1,s-d);
6463 CopLINE_inc(PL_curcop); /* the preceding stmt passes a newline */
6465 sv_catpvn(herewas,s,PL_bufend-s);
6466 sv_setsv(PL_linestr,herewas);
6467 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = s = PL_linestart = SvPVX(PL_linestr);
6468 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6471 sv_setpvn(tmpstr,"",0); /* avoid "uninitialized" warning */
6472 while (s >= PL_bufend) { /* multiple line string? */
6474 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
6475 CopLINE_set(PL_curcop, PL_multi_start);
6476 missingterm(PL_tokenbuf);
6478 CopLINE_inc(PL_curcop);
6479 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6480 #ifndef PERL_STRICT_CR
6481 if (PL_bufend - PL_linestart >= 2) {
6482 if ((PL_bufend[-2] == '\r' && PL_bufend[-1] == '\n') ||
6483 (PL_bufend[-2] == '\n' && PL_bufend[-1] == '\r'))
6485 PL_bufend[-2] = '\n';
6487 SvCUR_set(PL_linestr, PL_bufend - SvPVX(PL_linestr));
6489 else if (PL_bufend[-1] == '\r')
6490 PL_bufend[-1] = '\n';
6492 else if (PL_bufend - PL_linestart == 1 && PL_bufend[-1] == '\r')
6493 PL_bufend[-1] = '\n';
6495 if (PERLDB_LINE && PL_curstash != PL_debstash) {
6496 SV *sv = NEWSV(88,0);
6498 sv_upgrade(sv, SVt_PVMG);
6499 sv_setsv(sv,PL_linestr);
6500 av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop),sv);
6502 if (*s == term && memEQ(s,PL_tokenbuf,len)) {
6505 sv_catsv(PL_linestr,herewas);
6506 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6510 sv_catsv(tmpstr,PL_linestr);
6515 PL_multi_end = CopLINE(PL_curcop);
6516 if (SvCUR(tmpstr) + 5 < SvLEN(tmpstr)) {
6517 SvLEN_set(tmpstr, SvCUR(tmpstr) + 1);
6518 Renew(SvPVX(tmpstr), SvLEN(tmpstr), char);
6520 SvREFCNT_dec(herewas);
6521 if (UTF && !IN_BYTE && is_utf8_string((U8*)SvPVX(tmpstr), SvCUR(tmpstr)))
6523 PL_lex_stuff = tmpstr;
6524 yylval.ival = op_type;
6529 takes: current position in input buffer
6530 returns: new position in input buffer
6531 side-effects: yylval and lex_op are set.
6536 <FH> read from filehandle
6537 <pkg::FH> read from package qualified filehandle
6538 <pkg'FH> read from package qualified filehandle
6539 <$fh> read from filehandle in $fh
6545 S_scan_inputsymbol(pTHX_ char *start)
6547 register char *s = start; /* current position in buffer */
6553 d = PL_tokenbuf; /* start of temp holding space */
6554 e = PL_tokenbuf + sizeof PL_tokenbuf; /* end of temp holding space */
6555 end = strchr(s, '\n');
6558 s = delimcpy(d, e, s + 1, end, '>', &len); /* extract until > */
6560 /* die if we didn't have space for the contents of the <>,
6561 or if it didn't end, or if we see a newline
6564 if (len >= sizeof PL_tokenbuf)
6565 Perl_croak(aTHX_ "Excessively long <> operator");
6567 Perl_croak(aTHX_ "Unterminated <> operator");
6572 Remember, only scalar variables are interpreted as filehandles by
6573 this code. Anything more complex (e.g., <$fh{$num}>) will be
6574 treated as a glob() call.
6575 This code makes use of the fact that except for the $ at the front,
6576 a scalar variable and a filehandle look the same.
6578 if (*d == '$' && d[1]) d++;
6580 /* allow <Pkg'VALUE> or <Pkg::VALUE> */
6581 while (*d && (isALNUM_lazy_if(d,UTF) || *d == '\'' || *d == ':'))
6584 /* If we've tried to read what we allow filehandles to look like, and
6585 there's still text left, then it must be a glob() and not a getline.
6586 Use scan_str to pull out the stuff between the <> and treat it
6587 as nothing more than a string.
6590 if (d - PL_tokenbuf != len) {
6591 yylval.ival = OP_GLOB;
6593 s = scan_str(start,FALSE,FALSE);
6595 Perl_croak(aTHX_ "Glob not terminated");
6599 /* we're in a filehandle read situation */
6602 /* turn <> into <ARGV> */
6604 (void)strcpy(d,"ARGV");
6606 /* if <$fh>, create the ops to turn the variable into a
6612 /* try to find it in the pad for this block, otherwise find
6613 add symbol table ops
6615 if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
6616 OP *o = newOP(OP_PADSV, 0);
6618 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, o);
6621 GV *gv = gv_fetchpv(d+1,TRUE, SVt_PV);
6622 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0,
6623 newUNOP(OP_RV2SV, 0,
6624 newGVOP(OP_GV, 0, gv)));
6626 PL_lex_op->op_flags |= OPf_SPECIAL;
6627 /* we created the ops in PL_lex_op, so make yylval.ival a null op */
6628 yylval.ival = OP_NULL;
6631 /* If it's none of the above, it must be a literal filehandle
6632 (<Foo::BAR> or <FOO>) so build a simple readline OP */
6634 GV *gv = gv_fetchpv(d,TRUE, SVt_PVIO);
6635 PL_lex_op = (OP*)newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, gv));
6636 yylval.ival = OP_NULL;
6645 takes: start position in buffer
6646 keep_quoted preserve \ on the embedded delimiter(s)
6647 keep_delims preserve the delimiters around the string
6648 returns: position to continue reading from buffer
6649 side-effects: multi_start, multi_close, lex_repl or lex_stuff, and
6650 updates the read buffer.
6652 This subroutine pulls a string out of the input. It is called for:
6653 q single quotes q(literal text)
6654 ' single quotes 'literal text'
6655 qq double quotes qq(interpolate $here please)
6656 " double quotes "interpolate $here please"
6657 qx backticks qx(/bin/ls -l)
6658 ` backticks `/bin/ls -l`
6659 qw quote words @EXPORT_OK = qw( func() $spam )
6660 m// regexp match m/this/
6661 s/// regexp substitute s/this/that/
6662 tr/// string transliterate tr/this/that/
6663 y/// string transliterate y/this/that/
6664 ($*@) sub prototypes sub foo ($)
6665 (stuff) sub attr parameters sub foo : attr(stuff)
6666 <> readline or globs <FOO>, <>, <$fh>, or <*.c>
6668 In most of these cases (all but <>, patterns and transliterate)
6669 yylex() calls scan_str(). m// makes yylex() call scan_pat() which
6670 calls scan_str(). s/// makes yylex() call scan_subst() which calls
6671 scan_str(). tr/// and y/// make yylex() call scan_trans() which
6674 It skips whitespace before the string starts, and treats the first
6675 character as the delimiter. If the delimiter is one of ([{< then
6676 the corresponding "close" character )]}> is used as the closing
6677 delimiter. It allows quoting of delimiters, and if the string has
6678 balanced delimiters ([{<>}]) it allows nesting.
6680 The lexer always reads these strings into lex_stuff, except in the
6681 case of the operators which take *two* arguments (s/// and tr///)
6682 when it checks to see if lex_stuff is full (presumably with the 1st
6683 arg to s or tr) and if so puts the string into lex_repl.
6688 S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
6690 SV *sv; /* scalar value: string */
6691 char *tmps; /* temp string, used for delimiter matching */
6692 register char *s = start; /* current position in the buffer */
6693 register char term; /* terminating character */
6694 register char *to; /* current position in the sv's data */
6695 I32 brackets = 1; /* bracket nesting level */
6696 bool has_utf8 = FALSE; /* is there any utf8 content? */
6698 /* skip space before the delimiter */
6702 /* mark where we are, in case we need to report errors */
6705 /* after skipping whitespace, the next character is the terminator */
6707 if (UTF8_IS_CONTINUED(term) && UTF)
6710 /* mark where we are */
6711 PL_multi_start = CopLINE(PL_curcop);
6712 PL_multi_open = term;
6714 /* find corresponding closing delimiter */
6715 if (term && (tmps = strchr("([{< )]}> )]}>",term)))
6717 PL_multi_close = term;
6719 /* create a new SV to hold the contents. 87 is leak category, I'm
6720 assuming. 79 is the SV's initial length. What a random number. */
6722 sv_upgrade(sv, SVt_PVIV);
6724 (void)SvPOK_only(sv); /* validate pointer */
6726 /* move past delimiter and try to read a complete string */
6728 sv_catpvn(sv, s, 1);
6731 /* extend sv if need be */
6732 SvGROW(sv, SvCUR(sv) + (PL_bufend - s) + 1);
6733 /* set 'to' to the next character in the sv's string */
6734 to = SvPVX(sv)+SvCUR(sv);
6736 /* if open delimiter is the close delimiter read unbridle */
6737 if (PL_multi_open == PL_multi_close) {
6738 for (; s < PL_bufend; s++,to++) {
6739 /* embedded newlines increment the current line number */
6740 if (*s == '\n' && !PL_rsfp)
6741 CopLINE_inc(PL_curcop);
6742 /* handle quoted delimiters */
6743 if (*s == '\\' && s+1 < PL_bufend && term != '\\') {
6744 if (!keep_quoted && s[1] == term)
6746 /* any other quotes are simply copied straight through */
6750 /* terminate when run out of buffer (the for() condition), or
6751 have found the terminator */
6752 else if (*s == term)
6754 else if (!has_utf8 && UTF8_IS_CONTINUED(*s) && UTF)
6760 /* if the terminator isn't the same as the start character (e.g.,
6761 matched brackets), we have to allow more in the quoting, and
6762 be prepared for nested brackets.
6765 /* read until we run out of string, or we find the terminator */
6766 for (; s < PL_bufend; s++,to++) {
6767 /* embedded newlines increment the line count */
6768 if (*s == '\n' && !PL_rsfp)
6769 CopLINE_inc(PL_curcop);
6770 /* backslashes can escape the open or closing characters */
6771 if (*s == '\\' && s+1 < PL_bufend) {
6773 ((s[1] == PL_multi_open) || (s[1] == PL_multi_close)))
6778 /* allow nested opens and closes */
6779 else if (*s == PL_multi_close && --brackets <= 0)
6781 else if (*s == PL_multi_open)
6783 else if (!has_utf8 && UTF8_IS_CONTINUED(*s) && UTF)
6788 /* terminate the copied string and update the sv's end-of-string */
6790 SvCUR_set(sv, to - SvPVX(sv));
6793 * this next chunk reads more into the buffer if we're not done yet
6797 break; /* handle case where we are done yet :-) */
6799 #ifndef PERL_STRICT_CR
6800 if (to - SvPVX(sv) >= 2) {
6801 if ((to[-2] == '\r' && to[-1] == '\n') ||
6802 (to[-2] == '\n' && to[-1] == '\r'))
6806 SvCUR_set(sv, to - SvPVX(sv));
6808 else if (to[-1] == '\r')
6811 else if (to - SvPVX(sv) == 1 && to[-1] == '\r')
6815 /* if we're out of file, or a read fails, bail and reset the current
6816 line marker so we can report where the unterminated string began
6819 !(PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = filter_gets(PL_linestr, PL_rsfp, 0))) {
6821 CopLINE_set(PL_curcop, PL_multi_start);
6824 /* we read a line, so increment our line counter */
6825 CopLINE_inc(PL_curcop);
6827 /* update debugger info */
6828 if (PERLDB_LINE && PL_curstash != PL_debstash) {
6829 SV *sv = NEWSV(88,0);
6831 sv_upgrade(sv, SVt_PVMG);
6832 sv_setsv(sv,PL_linestr);
6833 av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop), sv);
6836 /* having changed the buffer, we must update PL_bufend */
6837 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
6840 /* at this point, we have successfully read the delimited string */
6843 sv_catpvn(sv, s, 1);
6846 PL_multi_end = CopLINE(PL_curcop);
6849 /* if we allocated too much space, give some back */
6850 if (SvCUR(sv) + 5 < SvLEN(sv)) {
6851 SvLEN_set(sv, SvCUR(sv) + 1);
6852 Renew(SvPVX(sv), SvLEN(sv), char);
6855 /* decide whether this is the first or second quoted string we've read
6868 takes: pointer to position in buffer
6869 returns: pointer to new position in buffer
6870 side-effects: builds ops for the constant in yylval.op
6872 Read a number in any of the formats that Perl accepts:
6874 0(x[0-7A-F]+)|([0-7]+)|(b[01])
6875 [\d_]+(\.[\d_]*)?[Ee](\d+)
6877 Underbars (_) are allowed in decimal numbers. If -w is on,
6878 underbars before a decimal point must be at three digit intervals.
6880 Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the
6883 If it reads a number without a decimal point or an exponent, it will
6884 try converting the number to an integer and see if it can do so
6885 without loss of precision.
6889 Perl_scan_num(pTHX_ char *start, YYSTYPE* lvalp)
6891 register char *s = start; /* current position in buffer */
6892 register char *d; /* destination in temp buffer */
6893 register char *e; /* end of temp buffer */
6894 NV nv; /* number read, as a double */
6895 SV *sv = Nullsv; /* place to put the converted number */
6896 bool floatit; /* boolean: int or float? */
6897 char *lastub = 0; /* position of last underbar */
6898 static char number_too_long[] = "Number too long";
6900 /* We use the first character to decide what type of number this is */
6904 Perl_croak(aTHX_ "panic: scan_num");
6906 /* if it starts with a 0, it could be an octal number, a decimal in
6907 0.13 disguise, or a hexadecimal number, or a binary number. */
6911 u holds the "number so far"
6912 shift the power of 2 of the base
6913 (hex == 4, octal == 3, binary == 1)
6914 overflowed was the number more than we can hold?
6916 Shift is used when we add a digit. It also serves as an "are
6917 we in octal/hex/binary?" indicator to disallow hex characters
6923 bool overflowed = FALSE;
6924 static NV nvshift[5] = { 1.0, 2.0, 4.0, 8.0, 16.0 };
6925 static char* bases[5] = { "", "binary", "", "octal",
6927 static char* Bases[5] = { "", "Binary", "", "Octal",
6929 static char *maxima[5] = { "",
6930 "0b11111111111111111111111111111111",
6934 char *base, *Base, *max;
6940 } else if (s[1] == 'b') {
6944 /* check for a decimal in disguise */
6945 else if (s[1] == '.' || s[1] == 'e' || s[1] == 'E')
6947 /* so it must be octal */
6951 base = bases[shift];
6952 Base = Bases[shift];
6953 max = maxima[shift];
6955 /* read the rest of the number */
6957 /* x is used in the overflow test,
6958 b is the digit we're adding on. */
6963 /* if we don't mention it, we're done */
6972 /* 8 and 9 are not octal */
6975 yyerror(Perl_form(aTHX_ "Illegal octal digit '%c'", *s));
6979 case '2': case '3': case '4':
6980 case '5': case '6': case '7':
6982 yyerror(Perl_form(aTHX_ "Illegal binary digit '%c'", *s));
6986 b = *s++ & 15; /* ASCII digit -> value of digit */
6990 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
6991 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
6992 /* make sure they said 0x */
6997 /* Prepare to put the digit we have onto the end
6998 of the number so far. We check for overflows.
7003 x = u << shift; /* make room for the digit */
7005 if ((x >> shift) != u
7006 && !(PL_hints & HINT_NEW_BINARY)) {
7009 if (ckWARN_d(WARN_OVERFLOW))
7010 Perl_warner(aTHX_ WARN_OVERFLOW,
7011 "Integer overflow in %s number",
7014 u = x | b; /* add the digit to the end */
7017 n *= nvshift[shift];
7018 /* If an NV has not enough bits in its
7019 * mantissa to represent an UV this summing of
7020 * small low-order numbers is a waste of time
7021 * (because the NV cannot preserve the
7022 * low-order bits anyway): we could just
7023 * remember when did we overflow and in the
7024 * end just multiply n by the right
7032 /* if we get here, we had success: make a scalar value from
7038 if (ckWARN(WARN_PORTABLE) && n > 4294967295.0)
7039 Perl_warner(aTHX_ WARN_PORTABLE,
7040 "%s number > %s non-portable",
7046 if (ckWARN(WARN_PORTABLE) && u > 0xffffffff)
7047 Perl_warner(aTHX_ WARN_PORTABLE,
7048 "%s number > %s non-portable",
7053 if (PL_hints & HINT_NEW_BINARY)
7054 sv = new_constant(start, s - start, "binary", sv, Nullsv, NULL);
7059 handle decimal numbers.
7060 we're also sent here when we read a 0 as the first digit
7062 case '1': case '2': case '3': case '4': case '5':
7063 case '6': case '7': case '8': case '9': case '.':
7066 e = PL_tokenbuf + sizeof PL_tokenbuf - 6; /* room for various punctuation */
7069 /* read next group of digits and _ and copy into d */
7070 while (isDIGIT(*s) || *s == '_') {
7071 /* skip underscores, checking for misplaced ones
7075 if (ckWARN(WARN_SYNTAX) && lastub && s - lastub != 3)
7076 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
7080 /* check for end of fixed-length buffer */
7082 Perl_croak(aTHX_ number_too_long);
7083 /* if we're ok, copy the character */
7088 /* final misplaced underbar check */
7089 if (lastub && s - lastub != 3) {
7090 if (ckWARN(WARN_SYNTAX))
7091 Perl_warner(aTHX_ WARN_SYNTAX, "Misplaced _ in number");
7094 /* read a decimal portion if there is one. avoid
7095 3..5 being interpreted as the number 3. followed
7098 if (*s == '.' && s[1] != '.') {
7102 /* copy, ignoring underbars, until we run out of
7103 digits. Note: no misplaced underbar checks!
7105 for (; isDIGIT(*s) || *s == '_'; s++) {
7106 /* fixed length buffer check */
7108 Perl_croak(aTHX_ number_too_long);
7112 if (*s == '.' && isDIGIT(s[1])) {
7113 /* oops, it's really a v-string, but without the "v" */
7119 /* read exponent part, if present */
7120 if (*s && strchr("eE",*s) && strchr("+-0123456789",s[1])) {
7124 /* regardless of whether user said 3E5 or 3e5, use lower 'e' */
7125 *d++ = 'e'; /* At least some Mach atof()s don't grok 'E' */
7127 /* allow positive or negative exponent */
7128 if (*s == '+' || *s == '-')
7131 /* read digits of exponent (no underbars :-) */
7132 while (isDIGIT(*s)) {
7134 Perl_croak(aTHX_ number_too_long);
7139 /* terminate the string */
7142 /* make an sv from the string */
7145 #if defined(Strtol) && defined(Strtoul)
7148 strtol/strtoll sets errno to ERANGE if the number is too big
7149 for an integer. We try to do an integer conversion first
7150 if no characters indicating "float" have been found.
7157 if (*PL_tokenbuf == '-')
7158 iv = Strtol(PL_tokenbuf, (char**)NULL, 10);
7160 uv = Strtoul(PL_tokenbuf, (char**)NULL, 10);
7162 floatit = TRUE; /* Probably just too large. */
7163 else if (*PL_tokenbuf == '-')
7165 else if (uv <= IV_MAX)
7166 sv_setiv(sv, uv); /* Prefer IVs over UVs. */
7171 nv = Atof(PL_tokenbuf);
7176 No working strtou?ll?.
7178 Unfortunately atol() doesn't do range checks (returning
7179 LONG_MIN/LONG_MAX, and setting errno to ERANGE on overflows)
7180 everywhere [1], so we cannot use use atol() (or atoll()).
7181 If we could, they would be used, as Atol(), very much like
7182 Strtol() and Strtoul() are used above.
7184 [1] XXX Configure test needed to check for atol()
7185 (and atoll()) overflow behaviour XXX
7189 We need to do this the hard way. */
7191 nv = Atof(PL_tokenbuf);
7193 /* See if we can make do with an integer value without loss of
7194 precision. We use U_V to cast to a UV, because some
7195 compilers have issues. Then we try casting it back and see
7196 if it was the same [1]. We only do this if we know we
7197 specifically read an integer. If floatit is true, then we
7198 don't need to do the conversion at all.
7200 [1] Note that this is lossy if our NVs cannot preserve our
7201 UVs. There are metaconfig defines NV_PRESERVES_UV (a boolean)
7202 and NV_PRESERVES_UV_BITS (a number), but in general we really
7203 do hope all such potentially lossy platforms have strtou?ll?
7204 to do a lossless IV/UV conversion.
7206 Maybe could do some tricks with DBL_DIG, LDBL_DIG and
7207 DBL_MANT_DIG and LDBL_MANT_DIG (these are already available
7208 as NV_DIG and NV_MANT_DIG)?
7214 if (!floatit && (NV)uv == nv) {
7216 sv_setiv(sv, uv); /* Prefer IVs over UVs. */
7224 if ( floatit ? (PL_hints & HINT_NEW_FLOAT) :
7225 (PL_hints & HINT_NEW_INTEGER) )
7226 sv = new_constant(PL_tokenbuf, d - PL_tokenbuf,
7227 (floatit ? "float" : "integer"),
7231 /* if it starts with a v, it could be a v-string */
7237 while (isDIGIT(*pos) || *pos == '_')
7239 if (!isALPHA(*pos)) {
7241 U8 tmpbuf[UTF8_MAXLEN+1];
7243 s++; /* get past 'v' */
7246 sv_setpvn(sv, "", 0);
7249 if (*s == '0' && isDIGIT(s[1]))
7250 yyerror("Octal number in vector unsupported");
7253 /* this is atoi() that tolerates underscores */
7256 while (--end >= s) {
7261 rev += (*end - '0') * mult;
7263 if (orev > rev && ckWARN_d(WARN_OVERFLOW))
7264 Perl_warner(aTHX_ WARN_OVERFLOW,
7265 "Integer overflow in decimal number");
7268 tmpend = uv_to_utf8(tmpbuf, rev);
7271 sv_catpvn(sv, (const char*)tmpbuf, tmpend - tmpbuf);
7272 if (*pos == '.' && isDIGIT(pos[1]))
7278 while (isDIGIT(*pos) || *pos == '_')
7287 sv_utf8_downgrade(sv, TRUE);
7294 /* make the op for the constant and return */
7297 lvalp->opval = newSVOP(OP_CONST, 0, sv);
7299 lvalp->opval = Nullop;
7305 S_scan_formline(pTHX_ register char *s)
7309 SV *stuff = newSVpvn("",0);
7310 bool needargs = FALSE;
7313 if (*s == '.' || *s == /*{*/'}') {
7315 #ifdef PERL_STRICT_CR
7316 for (t = s+1;SPACE_OR_TAB(*t); t++) ;
7318 for (t = s+1;SPACE_OR_TAB(*t) || *t == '\r'; t++) ;
7320 if (*t == '\n' || t == PL_bufend)
7323 if (PL_in_eval && !PL_rsfp) {
7324 eol = strchr(s,'\n');
7329 eol = PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
7331 for (t = s; t < eol; t++) {
7332 if (*t == '~' && t[1] == '~' && SvCUR(stuff)) {
7334 goto enough; /* ~~ must be first line in formline */
7336 if (*t == '@' || *t == '^')
7339 sv_catpvn(stuff, s, eol-s);
7340 #ifndef PERL_STRICT_CR
7341 if (eol-s > 1 && eol[-2] == '\r' && eol[-1] == '\n') {
7342 char *end = SvPVX(stuff) + SvCUR(stuff);
7351 s = filter_gets(PL_linestr, PL_rsfp, 0);
7352 PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = SvPVX(PL_linestr);
7353 PL_bufend = PL_bufptr + SvCUR(PL_linestr);
7356 yyerror("Format not terminated");
7366 PL_lex_state = LEX_NORMAL;
7367 PL_nextval[PL_nexttoke].ival = 0;
7371 PL_lex_state = LEX_FORMLINE;
7372 PL_nextval[PL_nexttoke].opval = (OP*)newSVOP(OP_CONST, 0, stuff);
7374 PL_nextval[PL_nexttoke].ival = OP_FORMLINE;
7378 SvREFCNT_dec(stuff);
7379 PL_lex_formbrack = 0;
7390 PL_cshlen = strlen(PL_cshname);
7395 Perl_start_subparse(pTHX_ I32 is_format, U32 flags)
7397 I32 oldsavestack_ix = PL_savestack_ix;
7398 CV* outsidecv = PL_compcv;
7402 assert(SvTYPE(PL_compcv) == SVt_PVCV);
7404 SAVEI32(PL_subline);
7405 save_item(PL_subname);
7408 SAVESPTR(PL_comppad_name);
7409 SAVESPTR(PL_compcv);
7410 SAVEI32(PL_comppad_name_fill);
7411 SAVEI32(PL_min_intro_pending);
7412 SAVEI32(PL_max_intro_pending);
7413 SAVEI32(PL_pad_reset_pending);
7415 PL_compcv = (CV*)NEWSV(1104,0);
7416 sv_upgrade((SV *)PL_compcv, is_format ? SVt_PVFM : SVt_PVCV);
7417 CvFLAGS(PL_compcv) |= flags;
7419 PL_comppad = newAV();
7420 av_push(PL_comppad, Nullsv);
7421 PL_curpad = AvARRAY(PL_comppad);
7422 PL_comppad_name = newAV();
7423 PL_comppad_name_fill = 0;
7424 PL_min_intro_pending = 0;
7426 PL_subline = CopLINE(PL_curcop);
7428 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
7429 PL_curpad[0] = (SV*)newAV();
7430 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
7431 #endif /* USE_THREADS */
7433 comppadlist = newAV();
7434 AvREAL_off(comppadlist);
7435 av_store(comppadlist, 0, (SV*)PL_comppad_name);
7436 av_store(comppadlist, 1, (SV*)PL_comppad);
7438 CvPADLIST(PL_compcv) = comppadlist;
7439 CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(outsidecv);
7441 CvOWNER(PL_compcv) = 0;
7442 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
7443 MUTEX_INIT(CvMUTEXP(PL_compcv));
7444 #endif /* USE_THREADS */
7446 return oldsavestack_ix;
7450 Perl_yywarn(pTHX_ char *s)
7452 PL_in_eval |= EVAL_WARNONLY;
7454 PL_in_eval &= ~EVAL_WARNONLY;
7459 Perl_yyerror(pTHX_ char *s)
7462 char *context = NULL;
7466 if (!yychar || (yychar == ';' && !PL_rsfp))
7468 else if (PL_bufptr > PL_oldoldbufptr && PL_bufptr - PL_oldoldbufptr < 200 &&
7469 PL_oldoldbufptr != PL_oldbufptr && PL_oldbufptr != PL_bufptr) {
7470 while (isSPACE(*PL_oldoldbufptr))
7472 context = PL_oldoldbufptr;
7473 contlen = PL_bufptr - PL_oldoldbufptr;
7475 else if (PL_bufptr > PL_oldbufptr && PL_bufptr - PL_oldbufptr < 200 &&
7476 PL_oldbufptr != PL_bufptr) {
7477 while (isSPACE(*PL_oldbufptr))
7479 context = PL_oldbufptr;
7480 contlen = PL_bufptr - PL_oldbufptr;
7482 else if (yychar > 255)
7483 where = "next token ???";
7484 #ifdef USE_PURE_BISON
7485 /* GNU Bison sets the value -2 */
7486 else if (yychar == -2) {
7488 else if ((yychar & 127) == 127) {
7490 if (PL_lex_state == LEX_NORMAL ||
7491 (PL_lex_state == LEX_KNOWNEXT && PL_lex_defer == LEX_NORMAL))
7492 where = "at end of line";
7493 else if (PL_lex_inpat)
7494 where = "within pattern";
7496 where = "within string";
7499 SV *where_sv = sv_2mortal(newSVpvn("next char ", 10));
7501 Perl_sv_catpvf(aTHX_ where_sv, "^%c", toCTRL(yychar));
7502 else if (isPRINT_LC(yychar))
7503 Perl_sv_catpvf(aTHX_ where_sv, "%c", yychar);
7505 Perl_sv_catpvf(aTHX_ where_sv, "\\%03o", yychar & 255);
7506 where = SvPVX(where_sv);
7508 msg = sv_2mortal(newSVpv(s, 0));
7509 Perl_sv_catpvf(aTHX_ msg, " at %s line %"IVdf", ",
7510 CopFILE(PL_curcop), (IV)CopLINE(PL_curcop));
7512 Perl_sv_catpvf(aTHX_ msg, "near \"%.*s\"\n", contlen, context);
7514 Perl_sv_catpvf(aTHX_ msg, "%s\n", where);
7515 if (PL_multi_start < PL_multi_end && (U32)(CopLINE(PL_curcop) - PL_multi_end) <= 1) {
7516 Perl_sv_catpvf(aTHX_ msg,
7517 " (Might be a runaway multi-line %c%c string starting on line %"IVdf")\n",
7518 (int)PL_multi_open,(int)PL_multi_close,(IV)PL_multi_start);
7521 if (PL_in_eval & EVAL_WARNONLY)
7522 Perl_warn(aTHX_ "%"SVf, msg);
7525 if (PL_error_count >= 10) {
7526 if (PL_in_eval && SvCUR(ERRSV))
7527 Perl_croak(aTHX_ "%"SVf"%s has too many errors.\n",
7528 ERRSV, CopFILE(PL_curcop));
7530 Perl_croak(aTHX_ "%s has too many errors.\n",
7531 CopFILE(PL_curcop));
7534 PL_in_my_stash = Nullhv;
7539 S_swallow_bom(pTHX_ U8 *s)
7542 slen = SvCUR(PL_linestr);
7546 /* UTF-16 little-endian */
7547 if (s[2] == 0 && s[3] == 0) /* UTF-32 little-endian */
7548 Perl_croak(aTHX_ "Unsupported script encoding");
7549 #ifndef PERL_NO_UTF16_FILTER
7550 DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-LE script encoding\n"));
7552 if (PL_bufend > (char*)s) {
7556 filter_add(utf16rev_textfilter, NULL);
7557 New(898, news, (PL_bufend - (char*)s) * 3 / 2 + 1, U8);
7558 PL_bufend = (char*)utf16_to_utf8_reversed(s, news,
7559 PL_bufend - (char*)s - 1,
7561 Copy(news, s, newlen, U8);
7562 SvCUR_set(PL_linestr, newlen);
7563 PL_bufend = SvPVX(PL_linestr) + newlen;
7564 news[newlen++] = '\0';
7568 Perl_croak(aTHX_ "Unsupported script encoding");
7573 if (s[1] == 0xFF) { /* UTF-16 big-endian */
7574 #ifndef PERL_NO_UTF16_FILTER
7575 DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-16BE script encoding\n"));
7577 if (PL_bufend > (char *)s) {
7581 filter_add(utf16_textfilter, NULL);
7582 New(898, news, (PL_bufend - (char*)s) * 3 / 2 + 1, U8);
7583 PL_bufend = (char*)utf16_to_utf8(s, news,
7584 PL_bufend - (char*)s,
7586 Copy(news, s, newlen, U8);
7587 SvCUR_set(PL_linestr, newlen);
7588 PL_bufend = SvPVX(PL_linestr) + newlen;
7589 news[newlen++] = '\0';
7593 Perl_croak(aTHX_ "Unsupported script encoding");
7598 if (slen > 2 && s[1] == 0xBB && s[2] == 0xBF) {
7599 DEBUG_p(PerlIO_printf(Perl_debug_log, "UTF-8 script encoding\n"));
7604 if (slen > 3 && s[1] == 0 && /* UTF-32 big-endian */
7605 s[2] == 0xFE && s[3] == 0xFF)
7607 Perl_croak(aTHX_ "Unsupported script encoding");
7619 * Restore a source filter.
7623 restore_rsfp(pTHXo_ void *f)
7625 PerlIO *fp = (PerlIO*)f;
7627 if (PL_rsfp == PerlIO_stdin())
7628 PerlIO_clearerr(PL_rsfp);
7629 else if (PL_rsfp && (PL_rsfp != fp))
7630 PerlIO_close(PL_rsfp);
7634 #ifndef PERL_NO_UTF16_FILTER
7636 utf16_textfilter(pTHXo_ int idx, SV *sv, int maxlen)
7638 I32 count = FILTER_READ(idx+1, sv, maxlen);
7643 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
7644 if (!*SvPV_nolen(sv))
7645 /* Game over, but don't feed an odd-length string to utf16_to_utf8 */
7648 tend = utf16_to_utf8((U8*)SvPVX(sv), tmps, SvCUR(sv), &newlen);
7649 sv_usepvn(sv, (char*)tmps, tend - tmps);
7655 utf16rev_textfilter(pTHXo_ int idx, SV *sv, int maxlen)
7657 I32 count = FILTER_READ(idx+1, sv, maxlen);
7662 if (!*SvPV_nolen(sv))
7663 /* Game over, but don't feed an odd-length string to utf16_to_utf8 */
7666 New(898, tmps, SvCUR(sv) * 3 / 2 + 1, U8);
7667 tend = utf16_to_utf8_reversed((U8*)SvPVX(sv), tmps, SvCUR(sv), &newlen);
7668 sv_usepvn(sv, (char*)tmps, tend - tmps);