3 * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * "A ship then new they built for him/of mithril and of elven glass" --Bilbo
16 #define PERL_IN_PERL_C
18 #include "patchlevel.h" /* for local_patches */
22 char *nw_get_sitelib(const char *pl);
25 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
42 #if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE) && !defined(PERL_MICRO)
43 char *getenv (char *); /* Usually in <stdlib.h> */
46 static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
54 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
60 #if defined(USE_ITHREADS)
61 # define INIT_TLS_AND_INTERP \
63 if (!PL_curinterp) { \
64 PERL_SET_INTERP(my_perl); \
67 PERL_SET_THX(my_perl); \
69 MUTEX_INIT(&PL_dollarzero_mutex); \
72 PERL_SET_THX(my_perl); \
76 # define INIT_TLS_AND_INTERP \
78 if (!PL_curinterp) { \
79 PERL_SET_INTERP(my_perl); \
81 PERL_SET_THX(my_perl); \
85 #ifdef PERL_IMPLICIT_SYS
87 perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
88 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
89 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
90 struct IPerlDir* ipD, struct IPerlSock* ipS,
91 struct IPerlProc* ipP)
93 PerlInterpreter *my_perl;
94 /* New() needs interpreter, so call malloc() instead */
95 my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
97 Zero(my_perl, 1, PerlInterpreter);
113 =head1 Embedding Functions
115 =for apidoc perl_alloc
117 Allocates a new Perl interpreter. See L<perlembed>.
125 PerlInterpreter *my_perl;
126 #ifdef USE_5005THREADS
130 /* New() needs interpreter, so call malloc() instead */
131 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
134 Zero(my_perl, 1, PerlInterpreter);
137 #endif /* PERL_IMPLICIT_SYS */
140 =for apidoc perl_construct
142 Initializes a new Perl interpreter. See L<perlembed>.
148 perl_construct(pTHXx)
152 PL_perl_destruct_level = 1;
154 if (PL_perl_destruct_level > 0)
158 /* Init the real globals (and main thread)? */
160 #ifdef PERL_FLEXIBLE_EXCEPTIONS
161 PL_protect = MEMBER_TO_FPTR(Perl_default_protect); /* for exceptions */
164 PL_curcop = &PL_compiling; /* needed by ckWARN, right away */
166 PL_linestr = NEWSV(65,79);
167 sv_upgrade(PL_linestr,SVt_PVIV);
169 if (!SvREADONLY(&PL_sv_undef)) {
170 /* set read-only and try to insure than we wont see REFCNT==0
173 SvREADONLY_on(&PL_sv_undef);
174 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
176 sv_setpv(&PL_sv_no,PL_No);
178 SvREADONLY_on(&PL_sv_no);
179 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
181 sv_setpv(&PL_sv_yes,PL_Yes);
183 SvREADONLY_on(&PL_sv_yes);
184 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
187 PL_sighandlerp = Perl_sighandler;
188 PL_pidstatus = newHV();
191 PL_rs = newSVpvn("\n", 1);
196 PL_lex_state = LEX_NOTPARSING;
202 SET_NUMERIC_STANDARD();
206 PL_patchlevel = NEWSV(0,4);
207 (void)SvUPGRADE(PL_patchlevel, SVt_PVNV);
208 if (PERL_REVISION > 127 || PERL_VERSION > 127 || PERL_SUBVERSION > 127)
209 SvGROW(PL_patchlevel, UTF8_MAXLEN*3+1);
210 s = (U8*)SvPVX(PL_patchlevel);
211 /* Build version strings using "native" characters */
212 s = uvchr_to_utf8(s, (UV)PERL_REVISION);
213 s = uvchr_to_utf8(s, (UV)PERL_VERSION);
214 s = uvchr_to_utf8(s, (UV)PERL_SUBVERSION);
216 SvCUR_set(PL_patchlevel, s - (U8*)SvPVX(PL_patchlevel));
217 SvPOK_on(PL_patchlevel);
218 SvNVX(PL_patchlevel) = (NV)PERL_REVISION +
219 ((NV)PERL_VERSION / (NV)1000) +
220 ((NV)PERL_SUBVERSION / (NV)1000000);
221 SvNOK_on(PL_patchlevel); /* dual valued */
222 SvUTF8_on(PL_patchlevel);
223 SvREADONLY_on(PL_patchlevel);
226 #if defined(LOCAL_PATCH_COUNT)
227 PL_localpatches = local_patches; /* For possible -v */
230 #ifdef HAVE_INTERP_INTERN
234 PerlIO_init(aTHX); /* Hook to IO system */
236 PL_fdpid = newAV(); /* for remembering popen pids by fd */
237 PL_modglobal = newHV(); /* pointers to per-interpreter module globals */
238 PL_errors = newSVpvn("",0);
239 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
240 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
241 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
243 PL_regex_padav = newAV();
244 av_push(PL_regex_padav,(SV*)newAV()); /* First entry is an array of empty elements */
245 PL_regex_pad = AvARRAY(PL_regex_padav);
247 #ifdef USE_REENTRANT_API
248 Perl_reentrant_init(aTHX);
251 /* Note that strtab is a rather special HV. Assumptions are made
252 about not iterating on it, and not adding tie magic to it.
253 It is properly deallocated in perl_destruct() */
256 HvSHAREKEYS_off(PL_strtab); /* mandatory */
257 hv_ksplit(PL_strtab, 512);
259 #if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
260 _dyld_lookup_and_bind
261 ("__environ", (unsigned long *) &environ_pointer, NULL);
264 #ifdef USE_ENVIRON_ARRAY
265 PL_origenviron = environ;
268 /* Use sysconf(_SC_CLK_TCK) if available, if not
269 * available or if the sysconf() fails, use the HZ. */
270 #if defined(HAS_SYSCONF) && defined(_SC_CLK_TCK)
271 PL_clocktick = sysconf(_SC_CLK_TCK);
272 if (PL_clocktick <= 0)
276 PL_stashcache = newHV();
278 #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT)
279 /* [perl #22371] Algorimic Complexity Attack on Perl 5.6.1, 5.8.0 */
281 char *s = PerlEnv_getenv("PERL_HASH_SEED");
283 while (isSPACE(*s)) s++;
284 if (s && isDIGIT(*s))
285 PL_hash_seed = (UV)atoi(s);
286 #ifndef USE_HASH_SEED_EXPLICIT
288 /* Compute a random seed */
289 (void)seedDrand01((Rand_seed_t)seed());
290 PL_srand_called = TRUE;
291 PL_hash_seed = (UV)(Drand01() * (NV)UV_MAX);
292 #if RANDBITS < (UVSIZE * 8)
294 int skip = (UVSIZE * 8) - RANDBITS;
295 PL_hash_seed >>= skip;
296 /* The low bits might need extra help. */
297 PL_hash_seed += (UV)(Drand01() * ((1 << skip) - 1));
299 #endif /* RANDBITS < (UVSIZE * 8) */
301 #endif /* USE_HASH_SEED_EXPLICIT */
302 if ((s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG")))
303 PerlIO_printf(Perl_debug_log, "HASH_SEED = %"UVuf"\n",
306 #endif /* #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT) */
312 =for apidoc nothreadhook
314 Stub that provides thread hook for perl_destruct when there are
321 Perl_nothreadhook(pTHX)
327 =for apidoc perl_destruct
329 Shuts down a Perl interpreter. See L<perlembed>.
337 volatile int destruct_level; /* 0=none, 1=full, 2=full with checks */
339 #ifdef USE_5005THREADS
341 #endif /* USE_5005THREADS */
343 /* wait for all pseudo-forked children to finish */
344 PERL_WAIT_FOR_CHILDREN;
346 destruct_level = PL_perl_destruct_level;
350 if ((s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"))) {
352 if (destruct_level < i)
359 if(PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
364 if (PL_endav && !PL_minus_c)
365 call_list(PL_scopestack_ix, PL_endav);
371 /* Need to flush since END blocks can produce output */
374 if (CALL_FPTR(PL_threadhook)(aTHX)) {
375 /* Threads hook has vetoed further cleanup */
376 return STATUS_NATIVE_EXPORT;
379 /* We must account for everything. */
381 /* Destroy the main CV and syntax tree */
383 op_free(PL_main_root);
384 PL_main_root = Nullop;
386 PL_curcop = &PL_compiling;
387 PL_main_start = Nullop;
388 SvREFCNT_dec(PL_main_cv);
392 /* Tell PerlIO we are about to tear things apart in case
393 we have layers which are using resources that should
397 PerlIO_destruct(aTHX);
399 if (PL_sv_objcount) {
401 * Try to destruct global references. We do this first so that the
402 * destructors and destructees still exist. Some sv's might remain.
403 * Non-referenced objects are on their own.
408 /* unhook hooks which will soon be, or use, destroyed data */
409 SvREFCNT_dec(PL_warnhook);
410 PL_warnhook = Nullsv;
411 SvREFCNT_dec(PL_diehook);
414 /* call exit list functions */
415 while (PL_exitlistlen-- > 0)
416 PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr);
418 Safefree(PL_exitlist);
423 if (destruct_level == 0){
425 DEBUG_P(debprofdump());
427 #if defined(PERLIO_LAYERS)
428 /* No more IO - including error messages ! */
429 PerlIO_cleanup(aTHX);
432 /* The exit() function will do everything that needs doing. */
433 return STATUS_NATIVE_EXPORT;
436 /* jettison our possibly duplicated environment */
437 /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied
438 * so we certainly shouldn't free it here
440 #if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV)
441 if (environ != PL_origenviron
443 /* only main thread can free environ[0] contents */
444 && PL_curinterp == aTHX
450 for (i = 0; environ[i]; i++)
451 safesysfree(environ[i]);
453 /* Must use safesysfree() when working with environ. */
454 safesysfree(environ);
456 environ = PL_origenviron;
461 /* the syntax tree is shared between clones
462 * so op_free(PL_main_root) only ReREFCNT_dec's
463 * REGEXPs in the parent interpreter
464 * we need to manually ReREFCNT_dec for the clones
467 I32 i = AvFILLp(PL_regex_padav) + 1;
468 SV **ary = AvARRAY(PL_regex_padav);
472 REGEXP *re = INT2PTR(REGEXP *,SvIVX(resv));
474 if (SvFLAGS(resv) & SVf_BREAK) {
475 /* this is PL_reg_curpm, already freed
476 * flag is set in regexec.c:S_regtry
478 SvFLAGS(resv) &= ~SVf_BREAK;
480 else if(SvREPADTMP(resv)) {
481 SvREPADTMP_off(resv);
488 SvREFCNT_dec(PL_regex_padav);
489 PL_regex_padav = Nullav;
493 SvREFCNT_dec((SV*) PL_stashcache);
494 PL_stashcache = NULL;
496 /* loosen bonds of global variables */
499 (void)PerlIO_close(PL_rsfp);
503 /* Filters for program text */
504 SvREFCNT_dec(PL_rsfp_filters);
505 PL_rsfp_filters = Nullav;
508 PL_preprocess = FALSE;
514 PL_doswitches = FALSE;
515 PL_dowarn = G_WARN_OFF;
516 PL_doextract = FALSE;
517 PL_sawampersand = FALSE; /* must save all match strings */
520 Safefree(PL_inplace);
522 SvREFCNT_dec(PL_patchlevel);
525 SvREFCNT_dec(PL_e_script);
526 PL_e_script = Nullsv;
529 /* magical thingies */
531 SvREFCNT_dec(PL_ofs_sv); /* $, */
534 SvREFCNT_dec(PL_ors_sv); /* $\ */
537 SvREFCNT_dec(PL_rs); /* $/ */
540 PL_multiline = 0; /* $* */
541 Safefree(PL_osname); /* $^O */
544 SvREFCNT_dec(PL_statname);
545 PL_statname = Nullsv;
548 /* defgv, aka *_ should be taken care of elsewhere */
550 /* clean up after study() */
551 SvREFCNT_dec(PL_lastscream);
552 PL_lastscream = Nullsv;
553 Safefree(PL_screamfirst);
555 Safefree(PL_screamnext);
559 Safefree(PL_efloatbuf);
560 PL_efloatbuf = Nullch;
563 /* startup and shutdown function lists */
564 SvREFCNT_dec(PL_beginav);
565 SvREFCNT_dec(PL_beginav_save);
566 SvREFCNT_dec(PL_endav);
567 SvREFCNT_dec(PL_checkav);
568 SvREFCNT_dec(PL_checkav_save);
569 SvREFCNT_dec(PL_initav);
571 PL_beginav_save = Nullav;
574 PL_checkav_save = Nullav;
577 /* shortcuts just get cleared */
583 PL_argvoutgv = Nullgv;
585 PL_stderrgv = Nullgv;
586 PL_last_in_gv = Nullgv;
588 PL_debstash = Nullhv;
590 /* reset so print() ends up where we expect */
593 SvREFCNT_dec(PL_argvout_stack);
594 PL_argvout_stack = Nullav;
596 SvREFCNT_dec(PL_modglobal);
597 PL_modglobal = Nullhv;
598 SvREFCNT_dec(PL_preambleav);
599 PL_preambleav = Nullav;
600 SvREFCNT_dec(PL_subname);
602 SvREFCNT_dec(PL_linestr);
604 SvREFCNT_dec(PL_pidstatus);
605 PL_pidstatus = Nullhv;
606 SvREFCNT_dec(PL_toptarget);
607 PL_toptarget = Nullsv;
608 SvREFCNT_dec(PL_bodytarget);
609 PL_bodytarget = Nullsv;
610 PL_formtarget = Nullsv;
612 /* free locale stuff */
613 #ifdef USE_LOCALE_COLLATE
614 Safefree(PL_collation_name);
615 PL_collation_name = Nullch;
618 #ifdef USE_LOCALE_NUMERIC
619 Safefree(PL_numeric_name);
620 PL_numeric_name = Nullch;
621 SvREFCNT_dec(PL_numeric_radix_sv);
624 /* clear utf8 character classes */
625 SvREFCNT_dec(PL_utf8_alnum);
626 SvREFCNT_dec(PL_utf8_alnumc);
627 SvREFCNT_dec(PL_utf8_ascii);
628 SvREFCNT_dec(PL_utf8_alpha);
629 SvREFCNT_dec(PL_utf8_space);
630 SvREFCNT_dec(PL_utf8_cntrl);
631 SvREFCNT_dec(PL_utf8_graph);
632 SvREFCNT_dec(PL_utf8_digit);
633 SvREFCNT_dec(PL_utf8_upper);
634 SvREFCNT_dec(PL_utf8_lower);
635 SvREFCNT_dec(PL_utf8_print);
636 SvREFCNT_dec(PL_utf8_punct);
637 SvREFCNT_dec(PL_utf8_xdigit);
638 SvREFCNT_dec(PL_utf8_mark);
639 SvREFCNT_dec(PL_utf8_toupper);
640 SvREFCNT_dec(PL_utf8_totitle);
641 SvREFCNT_dec(PL_utf8_tolower);
642 SvREFCNT_dec(PL_utf8_tofold);
643 SvREFCNT_dec(PL_utf8_idstart);
644 SvREFCNT_dec(PL_utf8_idcont);
645 PL_utf8_alnum = Nullsv;
646 PL_utf8_alnumc = Nullsv;
647 PL_utf8_ascii = Nullsv;
648 PL_utf8_alpha = Nullsv;
649 PL_utf8_space = Nullsv;
650 PL_utf8_cntrl = Nullsv;
651 PL_utf8_graph = Nullsv;
652 PL_utf8_digit = Nullsv;
653 PL_utf8_upper = Nullsv;
654 PL_utf8_lower = Nullsv;
655 PL_utf8_print = Nullsv;
656 PL_utf8_punct = Nullsv;
657 PL_utf8_xdigit = Nullsv;
658 PL_utf8_mark = Nullsv;
659 PL_utf8_toupper = Nullsv;
660 PL_utf8_totitle = Nullsv;
661 PL_utf8_tolower = Nullsv;
662 PL_utf8_tofold = Nullsv;
663 PL_utf8_idstart = Nullsv;
664 PL_utf8_idcont = Nullsv;
666 if (!specialWARN(PL_compiling.cop_warnings))
667 SvREFCNT_dec(PL_compiling.cop_warnings);
668 PL_compiling.cop_warnings = Nullsv;
669 if (!specialCopIO(PL_compiling.cop_io))
670 SvREFCNT_dec(PL_compiling.cop_io);
671 PL_compiling.cop_io = Nullsv;
672 CopFILE_free(&PL_compiling);
673 CopSTASH_free(&PL_compiling);
675 /* Prepare to destruct main symbol table. */
680 SvREFCNT_dec(PL_curstname);
681 PL_curstname = Nullsv;
683 /* clear queued errors */
684 SvREFCNT_dec(PL_errors);
688 if (destruct_level >= 2 && ckWARN_d(WARN_INTERNAL)) {
689 if (PL_scopestack_ix != 0)
690 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
691 "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
692 (long)PL_scopestack_ix);
693 if (PL_savestack_ix != 0)
694 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
695 "Unbalanced saves: %ld more saves than restores\n",
696 (long)PL_savestack_ix);
697 if (PL_tmps_floor != -1)
698 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n",
699 (long)PL_tmps_floor + 1);
700 if (cxstack_ix != -1)
701 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n",
702 (long)cxstack_ix + 1);
705 /* Now absolutely destruct everything, somehow or other, loops or no. */
706 SvFLAGS(PL_fdpid) |= SVTYPEMASK; /* don't clean out pid table now */
707 SvFLAGS(PL_strtab) |= SVTYPEMASK; /* don't clean out strtab now */
709 /* the 2 is for PL_fdpid and PL_strtab */
710 while (PL_sv_count > 2 && sv_clean_all())
713 SvFLAGS(PL_fdpid) &= ~SVTYPEMASK;
714 SvFLAGS(PL_fdpid) |= SVt_PVAV;
715 SvFLAGS(PL_strtab) &= ~SVTYPEMASK;
716 SvFLAGS(PL_strtab) |= SVt_PVHV;
718 AvREAL_off(PL_fdpid); /* no surviving entries */
719 SvREFCNT_dec(PL_fdpid); /* needed in io_close() */
722 #ifdef HAVE_INTERP_INTERN
726 /* Destruct the global string table. */
728 /* Yell and reset the HeVAL() slots that are still holding refcounts,
729 * so that sv_free() won't fail on them.
737 max = HvMAX(PL_strtab);
738 array = HvARRAY(PL_strtab);
741 if (hent && ckWARN_d(WARN_INTERNAL)) {
742 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
743 "Unbalanced string table refcount: (%d) for \"%s\"",
744 HeVAL(hent) - Nullsv, HeKEY(hent));
745 HeVAL(hent) = Nullsv;
755 SvREFCNT_dec(PL_strtab);
758 /* free the pointer table used for cloning */
759 ptr_table_free(PL_ptr_table);
762 /* free special SVs */
764 SvREFCNT(&PL_sv_yes) = 0;
765 sv_clear(&PL_sv_yes);
766 SvANY(&PL_sv_yes) = NULL;
767 SvFLAGS(&PL_sv_yes) = 0;
769 SvREFCNT(&PL_sv_no) = 0;
771 SvANY(&PL_sv_no) = NULL;
772 SvFLAGS(&PL_sv_no) = 0;
776 for (i=0; i<=2; i++) {
777 SvREFCNT(PERL_DEBUG_PAD(i)) = 0;
778 sv_clear(PERL_DEBUG_PAD(i));
779 SvANY(PERL_DEBUG_PAD(i)) = NULL;
780 SvFLAGS(PERL_DEBUG_PAD(i)) = 0;
784 if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
785 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count);
787 #ifdef DEBUG_LEAKING_SCALARS
788 if (PL_sv_count != 0) {
793 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
794 svend = &sva[SvREFCNT(sva)];
795 for (sv = sva + 1; sv < svend; ++sv) {
796 if (SvTYPE(sv) != SVTYPEMASK) {
797 PerlIO_printf(Perl_debug_log, "leaked: 0x%p\n", sv);
805 #if defined(PERLIO_LAYERS)
806 /* No more IO - including error messages ! */
807 PerlIO_cleanup(aTHX);
810 /* sv_undef needs to stay immortal until after PerlIO_cleanup
811 as currently layers use it rather than Nullsv as a marker
812 for no arg - and will try and SvREFCNT_dec it.
814 SvREFCNT(&PL_sv_undef) = 0;
815 SvREADONLY_off(&PL_sv_undef);
817 Safefree(PL_origfilename);
818 Safefree(PL_reg_start_tmp);
820 Safefree(PL_reg_curpm);
821 Safefree(PL_reg_poscache);
823 Safefree(PL_op_mask);
824 Safefree(PL_psig_ptr);
825 Safefree(PL_psig_name);
826 Safefree(PL_bitcount);
827 Safefree(PL_psig_pend);
829 PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
831 DEBUG_P(debprofdump());
833 #ifdef USE_REENTRANT_API
834 Perl_reentrant_free(aTHX);
839 /* As the absolutely last thing, free the non-arena SV for mess() */
842 /* it could have accumulated taint magic */
843 if (SvTYPE(PL_mess_sv) >= SVt_PVMG) {
846 for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
847 moremagic = mg->mg_moremagic;
848 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global
850 Safefree(mg->mg_ptr);
854 /* we know that type >= SVt_PV */
855 (void)SvOOK_off(PL_mess_sv);
856 Safefree(SvPVX(PL_mess_sv));
857 Safefree(SvANY(PL_mess_sv));
858 Safefree(PL_mess_sv);
861 return STATUS_NATIVE_EXPORT;
865 =for apidoc perl_free
867 Releases a Perl interpreter. See L<perlembed>.
875 #if defined(WIN32) || defined(NETWARE)
876 # if defined(PERL_IMPLICIT_SYS)
878 void *host = nw_internal_host;
880 void *host = w32_internal_host;
884 nw_delete_internal_host(host);
886 win32_delete_internal_host(host);
897 Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
899 Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
900 PL_exitlist[PL_exitlistlen].fn = fn;
901 PL_exitlist[PL_exitlistlen].ptr = ptr;
906 =for apidoc perl_parse
908 Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
914 perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
919 #ifdef USE_5005THREADS
923 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
926 Perl_croak(aTHX_ "suidperl is no longer needed since the kernel can now execute\n\
927 setuid perl scripts securely.\n");
936 /* Come here if running an undumped a.out. */
938 PL_origfilename = savepv(argv[0]);
939 PL_do_undump = FALSE;
940 cxstack_ix = -1; /* start label stack again */
942 init_postdump_symbols(argc,argv,env);
947 op_free(PL_main_root);
948 PL_main_root = Nullop;
950 PL_main_start = Nullop;
951 SvREFCNT_dec(PL_main_cv);
955 oldscope = PL_scopestack_ix;
956 PL_dowarn = G_WARN_OFF;
958 #ifdef PERL_FLEXIBLE_EXCEPTIONS
959 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vparse_body), env, xsinit);
965 #ifndef PERL_FLEXIBLE_EXCEPTIONS
966 parse_body(env,xsinit);
969 call_list(oldscope, PL_checkav);
976 /* my_exit() was called */
977 while (PL_scopestack_ix > oldscope)
980 PL_curstash = PL_defstash;
982 call_list(oldscope, PL_checkav);
983 ret = STATUS_NATIVE_EXPORT;
986 PerlIO_printf(Perl_error_log, "panic: top_env\n");
994 #ifdef PERL_FLEXIBLE_EXCEPTIONS
996 S_vparse_body(pTHX_ va_list args)
998 char **env = va_arg(args, char**);
999 XSINIT_t xsinit = va_arg(args, XSINIT_t);
1001 return parse_body(env, xsinit);
1006 S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
1008 int argc = PL_origargc;
1009 char **argv = PL_origargv;
1010 char *scriptname = NULL;
1012 VOL bool dosearch = FALSE;
1013 char *validarg = "";
1016 char *cddir = Nullch;
1018 sv_setpvn(PL_linestr,"",0);
1019 sv = newSVpvn("",0); /* first used for -I flags */
1023 for (argc--,argv++; argc > 0; argc--,argv++) {
1024 if (argv[0][0] != '-' || !argv[0][1])
1028 validarg = " PHOOEY ";
1036 #ifndef PERL_STRICT_CR
1061 if ((s = moreswitches(s)))
1066 CHECK_MALLOC_TOO_LATE_FOR('t');
1067 if( !PL_tainting ) {
1068 PL_taint_warn = TRUE;
1074 CHECK_MALLOC_TOO_LATE_FOR('T');
1076 PL_taint_warn = FALSE;
1081 #ifdef MACOS_TRADITIONAL
1082 /* ignore -e for Dev:Pseudo argument */
1083 if (argv[1] && !strcmp(argv[1], "Dev:Pseudo"))
1086 if (PL_euid != PL_uid || PL_egid != PL_gid)
1087 Perl_croak(aTHX_ "No -e allowed in setuid scripts");
1089 PL_e_script = newSVpvn("",0);
1090 filter_add(read_e_script, NULL);
1093 sv_catpv(PL_e_script, s);
1095 sv_catpv(PL_e_script, argv[1]);
1099 Perl_croak(aTHX_ "No code specified for -e");
1100 sv_catpv(PL_e_script, "\n");
1103 case 'I': /* -I handled both here and in moreswitches() */
1105 if (!*++s && (s=argv[1]) != Nullch) {
1110 STRLEN len = strlen(s);
1111 p = savepvn(s, len);
1112 incpush(p, TRUE, TRUE, FALSE);
1113 sv_catpvn(sv, "-I", 2);
1114 sv_catpvn(sv, p, len);
1115 sv_catpvn(sv, " ", 1);
1119 Perl_croak(aTHX_ "No directory specified for -I");
1123 PL_preprocess = TRUE;
1133 PL_preambleav = newAV();
1134 av_push(PL_preambleav, newSVpv("use Config qw(myconfig config_vars)",0));
1136 PL_Sv = newSVpv("print myconfig();",0);
1138 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
1140 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
1142 sv_catpv(PL_Sv,"\" Compile-time options:");
1144 sv_catpv(PL_Sv," DEBUGGING");
1146 # ifdef MULTIPLICITY
1147 sv_catpv(PL_Sv," MULTIPLICITY");
1149 # ifdef USE_5005THREADS
1150 sv_catpv(PL_Sv," USE_5005THREADS");
1152 # ifdef USE_ITHREADS
1153 sv_catpv(PL_Sv," USE_ITHREADS");
1155 # ifdef USE_64_BIT_INT
1156 sv_catpv(PL_Sv," USE_64_BIT_INT");
1158 # ifdef USE_64_BIT_ALL
1159 sv_catpv(PL_Sv," USE_64_BIT_ALL");
1161 # ifdef USE_LONG_DOUBLE
1162 sv_catpv(PL_Sv," USE_LONG_DOUBLE");
1164 # ifdef USE_LARGE_FILES
1165 sv_catpv(PL_Sv," USE_LARGE_FILES");
1168 sv_catpv(PL_Sv," USE_SOCKS");
1170 # ifdef PERL_IMPLICIT_CONTEXT
1171 sv_catpv(PL_Sv," PERL_IMPLICIT_CONTEXT");
1173 # ifdef PERL_IMPLICIT_SYS
1174 sv_catpv(PL_Sv," PERL_IMPLICIT_SYS");
1176 sv_catpv(PL_Sv,"\\n\",");
1178 #if defined(LOCAL_PATCH_COUNT)
1179 if (LOCAL_PATCH_COUNT > 0) {
1181 sv_catpv(PL_Sv,"\" Locally applied patches:\\n\",");
1182 for (i = 1; i <= LOCAL_PATCH_COUNT; i++) {
1183 if (PL_localpatches[i])
1184 Perl_sv_catpvf(aTHX_ PL_Sv,"q\" \t%s\n\",",PL_localpatches[i]);
1188 Perl_sv_catpvf(aTHX_ PL_Sv,"\" Built under %s\\n\"",OSNAME);
1191 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled at %s %s\\n\"",__DATE__,__TIME__);
1193 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled on %s\\n\"",__DATE__);
1196 sv_catpv(PL_Sv, "; \
1198 @env = map { \"$_=\\\"$ENV{$_}\\\"\" } sort grep {/^PERL/} keys %ENV; ");
1201 push @env, \"CYGWIN=\\\"$ENV{CYGWIN}\\\"\";");
1204 print \" \\%ENV:\\n @env\\n\" if @env; \
1205 print \" \\@INC:\\n @INC\\n\";");
1208 PL_Sv = newSVpv("config_vars(qw(",0);
1209 sv_catpv(PL_Sv, ++s);
1210 sv_catpv(PL_Sv, "))");
1213 av_push(PL_preambleav, PL_Sv);
1214 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1217 PL_doextract = TRUE;
1225 if (!*++s || isSPACE(*s)) {
1229 /* catch use of gnu style long options */
1230 if (strEQ(s, "version")) {
1234 if (strEQ(s, "help")) {
1241 Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s);
1245 sv_setsv(get_sv("/", TRUE), PL_rs);
1248 #ifndef SECURE_INTERNAL_GETENV
1251 (s = PerlEnv_getenv("PERL5OPT")))
1256 if (*s == '-' && *(s+1) == 'T') {
1257 CHECK_MALLOC_TOO_LATE_FOR('T');
1259 PL_taint_warn = FALSE;
1262 char *popt_copy = Nullch;
1275 if (!strchr("DIMUdmtwA", *s))
1276 Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
1280 popt_copy = SvPVX(sv_2mortal(newSVpv(popt,0)));
1281 s = popt_copy + (s - popt);
1282 d = popt_copy + (d - popt);
1289 if( !PL_tainting ) {
1290 PL_taint_warn = TRUE;
1300 if (PL_taint_warn && PL_dowarn != G_WARN_ALL_OFF) {
1301 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
1305 scriptname = argv[0];
1308 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1310 else if (scriptname == Nullch) {
1312 if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
1320 open_script(scriptname,dosearch,sv,&fdscript);
1322 validate_suid(validarg, scriptname,fdscript);
1325 #if defined(SIGCHLD) || defined(SIGCLD)
1328 # define SIGCHLD SIGCLD
1330 Sighandler_t sigstate = rsignal_state(SIGCHLD);
1331 if (sigstate == SIG_IGN) {
1332 if (ckWARN(WARN_SIGNAL))
1333 Perl_warner(aTHX_ packWARN(WARN_SIGNAL),
1334 "Can't ignore signal CHLD, forcing to default");
1335 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
1341 #ifdef MACOS_TRADITIONAL
1342 if (PL_doextract || gMacPerl_AlwaysExtract) {
1347 if (cddir && PerlDir_chdir(cddir) < 0)
1348 Perl_croak(aTHX_ "Can't chdir to %s",cddir);
1352 PL_main_cv = PL_compcv = (CV*)NEWSV(1104,0);
1353 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
1354 CvUNIQUE_on(PL_compcv);
1356 CvPADLIST(PL_compcv) = pad_new(0);
1357 #ifdef USE_5005THREADS
1358 CvOWNER(PL_compcv) = 0;
1359 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
1360 MUTEX_INIT(CvMUTEXP(PL_compcv));
1361 #endif /* USE_5005THREADS */
1364 boot_core_UNIVERSAL();
1366 boot_core_xsutils();
1370 (*xsinit)(aTHX); /* in case linked C routines want magical variables */
1372 #if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC)
1378 # ifdef HAS_SOCKS5_INIT
1379 socks5_init(argv[0]);
1385 init_predump_symbols();
1386 /* init_postdump_symbols not currently designed to be called */
1387 /* more than once (ENV isn't cleared first, for example) */
1388 /* But running with -u leaves %ENV & @ARGV undefined! XXX */
1390 init_postdump_symbols(argc,argv,env);
1392 /* PL_unicode is turned on by -C or by $ENV{PERL_UNICODE}.
1393 * PL_utf8locale is conditionally turned on by
1394 * locale.c:Perl_init_i18nl10n() if the environment
1395 * look like the user wants to use UTF-8. */
1397 /* Requires init_predump_symbols(). */
1398 if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) {
1403 /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR
1404 * and the default open disciplines. */
1405 if ((PL_unicode & PERL_UNICODE_STDIN_FLAG) &&
1406 PL_stdingv && (io = GvIO(PL_stdingv)) &&
1408 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1409 if ((PL_unicode & PERL_UNICODE_STDOUT_FLAG) &&
1410 PL_defoutgv && (io = GvIO(PL_defoutgv)) &&
1412 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1413 if ((PL_unicode & PERL_UNICODE_STDERR_FLAG) &&
1414 PL_stderrgv && (io = GvIO(PL_stderrgv)) &&
1416 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1417 if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) &&
1418 (sv = GvSV(gv_fetchpv("\017PEN", TRUE, SVt_PV)))) {
1419 U32 in = PL_unicode & PERL_UNICODE_IN_FLAG;
1420 U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG;
1423 sv_setpvn(sv, ":utf8\0:utf8", 11);
1425 sv_setpvn(sv, ":utf8\0", 6);
1428 sv_setpvn(sv, "\0:utf8", 6);
1434 if ((s = PerlEnv_getenv("PERL_SIGNALS"))) {
1435 if (strEQ(s, "unsafe"))
1436 PL_signals |= PERL_SIGNALS_UNSAFE_FLAG;
1437 else if (strEQ(s, "safe"))
1438 PL_signals &= ~PERL_SIGNALS_UNSAFE_FLAG;
1440 Perl_croak(aTHX_ "PERL_SIGNALS illegal: \"%s\"", s);
1445 /* now parse the script */
1447 SETERRNO(0,SS_NORMAL);
1449 #ifdef MACOS_TRADITIONAL
1450 if (gMacPerl_SyntaxError = (yyparse() || PL_error_count)) {
1452 Perl_croak(aTHX_ "%s had compilation errors.\n", MacPerl_MPWFileName(PL_origfilename));
1454 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1455 MacPerl_MPWFileName(PL_origfilename));
1459 if (yyparse() || PL_error_count) {
1461 Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
1463 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1468 CopLINE_set(PL_curcop, 0);
1469 PL_curstash = PL_defstash;
1470 PL_preprocess = FALSE;
1472 SvREFCNT_dec(PL_e_script);
1473 PL_e_script = Nullsv;
1480 SAVECOPFILE(PL_curcop);
1481 SAVECOPLINE(PL_curcop);
1482 gv_check(PL_defstash);
1489 if ((s=PerlEnv_getenv("PERL_DEBUG_MSTATS")) && atoi(s) >= 2)
1490 dump_mstats("after compilation:");
1499 =for apidoc perl_run
1501 Tells a Perl interpreter to run. See L<perlembed>.
1512 #ifdef USE_5005THREADS
1516 oldscope = PL_scopestack_ix;
1521 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1523 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vrun_body), oldscope);
1529 cxstack_ix = -1; /* start context stack again */
1531 case 0: /* normal completion */
1532 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1537 case 2: /* my_exit() */
1538 while (PL_scopestack_ix > oldscope)
1541 PL_curstash = PL_defstash;
1542 if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) &&
1543 PL_endav && !PL_minus_c)
1544 call_list(oldscope, PL_endav);
1546 if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
1547 dump_mstats("after execution: ");
1549 ret = STATUS_NATIVE_EXPORT;
1553 POPSTACK_TO(PL_mainstack);
1556 PerlIO_printf(Perl_error_log, "panic: restartop\n");
1566 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1568 S_vrun_body(pTHX_ va_list args)
1570 I32 oldscope = va_arg(args, I32);
1572 return run_body(oldscope);
1578 S_run_body(pTHX_ I32 oldscope)
1580 DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
1581 PL_sawampersand ? "Enabling" : "Omitting"));
1583 if (!PL_restartop) {
1584 DEBUG_x(dump_all());
1585 DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
1586 DEBUG_S(PerlIO_printf(Perl_debug_log, "main thread is 0x%"UVxf"\n",
1590 #ifdef MACOS_TRADITIONAL
1591 PerlIO_printf(Perl_error_log, "%s%s syntax OK\n",
1592 (gMacPerl_ErrorFormat ? "# " : ""),
1593 MacPerl_MPWFileName(PL_origfilename));
1595 PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
1599 if (PERLDB_SINGLE && PL_DBsingle)
1600 sv_setiv(PL_DBsingle, 1);
1602 call_list(oldscope, PL_initav);
1608 PL_op = PL_restartop;
1612 else if (PL_main_start) {
1613 CvDEPTH(PL_main_cv) = 1;
1614 PL_op = PL_main_start;
1624 =head1 SV Manipulation Functions
1626 =for apidoc p||get_sv
1628 Returns the SV of the specified Perl scalar. If C<create> is set and the
1629 Perl variable does not exist then it will be created. If C<create> is not
1630 set and the variable does not exist then NULL is returned.
1636 Perl_get_sv(pTHX_ const char *name, I32 create)
1639 #ifdef USE_5005THREADS
1640 if (name[1] == '\0' && !isALPHA(name[0])) {
1641 PADOFFSET tmp = find_threadsv(name);
1642 if (tmp != NOT_IN_PAD)
1643 return THREADSV(tmp);
1645 #endif /* USE_5005THREADS */
1646 gv = gv_fetchpv(name, create, SVt_PV);
1653 =head1 Array Manipulation Functions
1655 =for apidoc p||get_av
1657 Returns the AV of the specified Perl array. If C<create> is set and the
1658 Perl variable does not exist then it will be created. If C<create> is not
1659 set and the variable does not exist then NULL is returned.
1665 Perl_get_av(pTHX_ const char *name, I32 create)
1667 GV* gv = gv_fetchpv(name, create, SVt_PVAV);
1676 =head1 Hash Manipulation Functions
1678 =for apidoc p||get_hv
1680 Returns the HV of the specified Perl hash. If C<create> is set and the
1681 Perl variable does not exist then it will be created. If C<create> is not
1682 set and the variable does not exist then NULL is returned.
1688 Perl_get_hv(pTHX_ const char *name, I32 create)
1690 GV* gv = gv_fetchpv(name, create, SVt_PVHV);
1699 =head1 CV Manipulation Functions
1701 =for apidoc p||get_cv
1703 Returns the CV of the specified Perl subroutine. If C<create> is set and
1704 the Perl subroutine does not exist then it will be declared (which has the
1705 same effect as saying C<sub name;>). If C<create> is not set and the
1706 subroutine does not exist then NULL is returned.
1712 Perl_get_cv(pTHX_ const char *name, I32 create)
1714 GV* gv = gv_fetchpv(name, create, SVt_PVCV);
1715 /* XXX unsafe for threads if eval_owner isn't held */
1716 /* XXX this is probably not what they think they're getting.
1717 * It has the same effect as "sub name;", i.e. just a forward
1719 if (create && !GvCVu(gv))
1720 return newSUB(start_subparse(FALSE, 0),
1721 newSVOP(OP_CONST, 0, newSVpv(name,0)),
1729 /* Be sure to refetch the stack pointer after calling these routines. */
1733 =head1 Callback Functions
1735 =for apidoc p||call_argv
1737 Performs a callback to the specified Perl sub. See L<perlcall>.
1743 Perl_call_argv(pTHX_ const char *sub_name, I32 flags, register char **argv)
1745 /* See G_* flags in cop.h */
1746 /* null terminated arg list */
1753 XPUSHs(sv_2mortal(newSVpv(*argv,0)));
1758 return call_pv(sub_name, flags);
1762 =for apidoc p||call_pv
1764 Performs a callback to the specified Perl sub. See L<perlcall>.
1770 Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
1771 /* name of the subroutine */
1772 /* See G_* flags in cop.h */
1774 return call_sv((SV*)get_cv(sub_name, TRUE), flags);
1778 =for apidoc p||call_method
1780 Performs a callback to the specified Perl method. The blessed object must
1781 be on the stack. See L<perlcall>.
1787 Perl_call_method(pTHX_ const char *methname, I32 flags)
1788 /* name of the subroutine */
1789 /* See G_* flags in cop.h */
1791 return call_sv(sv_2mortal(newSVpv(methname,0)), flags | G_METHOD);
1794 /* May be called with any of a CV, a GV, or an SV containing the name. */
1796 =for apidoc p||call_sv
1798 Performs a callback to the Perl sub whose name is in the SV. See
1805 Perl_call_sv(pTHX_ SV *sv, I32 flags)
1806 /* See G_* flags in cop.h */
1809 LOGOP myop; /* fake syntax tree node */
1812 volatile I32 retval = 0;
1814 bool oldcatch = CATCH_GET;
1819 if (flags & G_DISCARD) {
1824 Zero(&myop, 1, LOGOP);
1825 myop.op_next = Nullop;
1826 if (!(flags & G_NOARGS))
1827 myop.op_flags |= OPf_STACKED;
1828 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
1829 (flags & G_ARRAY) ? OPf_WANT_LIST :
1834 EXTEND(PL_stack_sp, 1);
1835 *++PL_stack_sp = sv;
1837 oldscope = PL_scopestack_ix;
1839 if (PERLDB_SUB && PL_curstash != PL_debstash
1840 /* Handle first BEGIN of -d. */
1841 && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
1842 /* Try harder, since this may have been a sighandler, thus
1843 * curstash may be meaningless. */
1844 && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != PL_debstash)
1845 && !(flags & G_NODEBUG))
1846 PL_op->op_private |= OPpENTERSUB_DB;
1848 if (flags & G_METHOD) {
1849 Zero(&method_op, 1, UNOP);
1850 method_op.op_next = PL_op;
1851 method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
1852 myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
1853 PL_op = (OP*)&method_op;
1856 if (!(flags & G_EVAL)) {
1858 call_body((OP*)&myop, FALSE);
1859 retval = PL_stack_sp - (PL_stack_base + oldmark);
1860 CATCH_SET(oldcatch);
1863 myop.op_other = (OP*)&myop;
1865 /* we're trying to emulate pp_entertry() here */
1867 register PERL_CONTEXT *cx;
1868 I32 gimme = GIMME_V;
1873 push_return(Nullop);
1874 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
1876 PL_eval_root = PL_op; /* Only needed so that goto works right. */
1878 PL_in_eval = EVAL_INEVAL;
1879 if (flags & G_KEEPERR)
1880 PL_in_eval |= EVAL_KEEPERR;
1886 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1888 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
1895 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1897 call_body((OP*)&myop, FALSE);
1899 retval = PL_stack_sp - (PL_stack_base + oldmark);
1900 if (!(flags & G_KEEPERR))
1907 /* my_exit() was called */
1908 PL_curstash = PL_defstash;
1911 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
1912 Perl_croak(aTHX_ "Callback called exit");
1917 PL_op = PL_restartop;
1921 PL_stack_sp = PL_stack_base + oldmark;
1922 if (flags & G_ARRAY)
1926 *++PL_stack_sp = &PL_sv_undef;
1931 if (PL_scopestack_ix > oldscope) {
1935 register PERL_CONTEXT *cx;
1947 if (flags & G_DISCARD) {
1948 PL_stack_sp = PL_stack_base + oldmark;
1957 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1959 S_vcall_body(pTHX_ va_list args)
1961 OP *myop = va_arg(args, OP*);
1962 int is_eval = va_arg(args, int);
1964 call_body(myop, is_eval);
1970 S_call_body(pTHX_ OP *myop, int is_eval)
1972 if (PL_op == myop) {
1974 PL_op = Perl_pp_entereval(aTHX); /* this doesn't do a POPMARK */
1976 PL_op = Perl_pp_entersub(aTHX); /* this does */
1982 /* Eval a string. The G_EVAL flag is always assumed. */
1985 =for apidoc p||eval_sv
1987 Tells Perl to C<eval> the string in the SV.
1993 Perl_eval_sv(pTHX_ SV *sv, I32 flags)
1995 /* See G_* flags in cop.h */
1998 UNOP myop; /* fake syntax tree node */
1999 volatile I32 oldmark = SP - PL_stack_base;
2000 volatile I32 retval = 0;
2006 if (flags & G_DISCARD) {
2013 Zero(PL_op, 1, UNOP);
2014 EXTEND(PL_stack_sp, 1);
2015 *++PL_stack_sp = sv;
2016 oldscope = PL_scopestack_ix;
2018 if (!(flags & G_NOARGS))
2019 myop.op_flags = OPf_STACKED;
2020 myop.op_next = Nullop;
2021 myop.op_type = OP_ENTEREVAL;
2022 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
2023 (flags & G_ARRAY) ? OPf_WANT_LIST :
2025 if (flags & G_KEEPERR)
2026 myop.op_flags |= OPf_SPECIAL;
2028 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2030 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
2037 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2039 call_body((OP*)&myop,TRUE);
2041 retval = PL_stack_sp - (PL_stack_base + oldmark);
2042 if (!(flags & G_KEEPERR))
2049 /* my_exit() was called */
2050 PL_curstash = PL_defstash;
2053 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
2054 Perl_croak(aTHX_ "Callback called exit");
2059 PL_op = PL_restartop;
2063 PL_stack_sp = PL_stack_base + oldmark;
2064 if (flags & G_ARRAY)
2068 *++PL_stack_sp = &PL_sv_undef;
2074 if (flags & G_DISCARD) {
2075 PL_stack_sp = PL_stack_base + oldmark;
2085 =for apidoc p||eval_pv
2087 Tells Perl to C<eval> the given string and return an SV* result.
2093 Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
2096 SV* sv = newSVpv(p, 0);
2098 eval_sv(sv, G_SCALAR);
2105 if (croak_on_error && SvTRUE(ERRSV)) {
2107 Perl_croak(aTHX_ SvPVx(ERRSV, n_a));
2113 /* Require a module. */
2116 =head1 Embedding Functions
2118 =for apidoc p||require_pv
2120 Tells Perl to C<require> the file named by the string argument. It is
2121 analogous to the Perl code C<eval "require '$file'">. It's even
2122 implemented that way; consider using load_module instead.
2127 Perl_require_pv(pTHX_ const char *pv)
2131 PUSHSTACKi(PERLSI_REQUIRE);
2133 sv = sv_newmortal();
2134 sv_setpv(sv, "require '");
2137 eval_sv(sv, G_DISCARD);
2143 Perl_magicname(pTHX_ char *sym, char *name, I32 namlen)
2147 if ((gv = gv_fetchpv(sym,TRUE, SVt_PV)))
2148 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, namlen);
2152 S_usage(pTHX_ char *name) /* XXX move this out into a module ? */
2154 /* This message really ought to be max 23 lines.
2155 * Removed -h because the user already knows that option. Others? */
2157 static char *usage_msg[] = {
2158 "-0[octal] specify record separator (\\0, if no argument)",
2159 "-a autosplit mode with -n or -p (splits $_ into @F)",
2160 "-C enable native wide character system interfaces",
2161 "-c check syntax only (runs BEGIN and CHECK blocks)",
2162 "-d[:debugger] run program under debugger",
2163 "-D[number/list] set debugging flags (argument is a bit mask or alphabets)",
2164 "-e 'command' one line of program (several -e's allowed, omit programfile)",
2165 "-F/pattern/ split() pattern for -a switch (//'s are optional)",
2166 "-i[extension] edit <> files in place (makes backup if extension supplied)",
2167 "-Idirectory specify @INC/#include directory (several -I's allowed)",
2168 "-l[octal] enable line ending processing, specifies line terminator",
2169 "-[mM][-]module execute `use/no module...' before executing program",
2170 "-n assume 'while (<>) { ... }' loop around program",
2171 "-p assume loop like -n but print line also, like sed",
2172 "-P run program through C preprocessor before compilation",
2173 "-s enable rudimentary parsing for switches after programfile",
2174 "-S look for programfile using PATH environment variable",
2175 "-T enable tainting checks",
2176 "-t enable tainting warnings",
2177 "-u dump core after parsing program",
2178 "-U allow unsafe operations",
2179 "-v print version, subversion (includes VERY IMPORTANT perl info)",
2180 "-V[:variable] print configuration summary (or a single Config.pm variable)",
2181 "-w enable many useful warnings (RECOMMENDED)",
2182 "-W enable all warnings",
2183 "-X disable all warnings",
2184 "-x[directory] strip off text before #!perl line and perhaps cd to directory",
2188 char **p = usage_msg;
2190 PerlIO_printf(PerlIO_stdout(),
2191 "\nUsage: %s [switches] [--] [programfile] [arguments]",
2194 PerlIO_printf(PerlIO_stdout(), "\n %s", *p++);
2197 /* This routine handles any switches that can be given during run */
2200 Perl_moreswitches(pTHX_ char *s)
2210 SvREFCNT_dec(PL_rs);
2211 if (s[1] == 'x' && s[2]) {
2215 for (s += 2, e = s; *e; e++);
2217 flags = PERL_SCAN_SILENT_ILLDIGIT;
2218 rschar = (U32)grok_hex(s, &numlen, &flags, NULL);
2219 if (s + numlen < e) {
2220 rschar = 0; /* Grandfather -0xFOO as -0 -xFOO. */
2224 PL_rs = newSVpvn("", 0);
2225 SvGROW(PL_rs, (STRLEN)(UNISKIP(rschar) + 1));
2226 tmps = (U8*)SvPVX(PL_rs);
2227 uvchr_to_utf8(tmps, rschar);
2228 SvCUR_set(PL_rs, UNISKIP(rschar));
2233 rschar = (U32)grok_oct(s, &numlen, &flags, NULL);
2234 if (rschar & ~((U8)~0))
2235 PL_rs = &PL_sv_undef;
2236 else if (!rschar && numlen >= 2)
2237 PL_rs = newSVpvn("", 0);
2239 char ch = (char)rschar;
2240 PL_rs = newSVpvn(&ch, 1);
2247 PL_unicode = parse_unicode_opts(&s);
2252 while (*s && !isSPACE(*s)) ++s;
2254 PL_splitstr = savepv(PL_splitstr);
2267 /* The following permits -d:Mod to accepts arguments following an =
2268 in the fashion that -MSome::Mod does. */
2269 if (*s == ':' || *s == '=') {
2272 sv = newSVpv("use Devel::", 0);
2274 /* We now allow -d:Module=Foo,Bar */
2275 while(isALNUM(*s) || *s==':') ++s;
2277 sv_catpv(sv, start);
2279 sv_catpvn(sv, start, s-start);
2280 sv_catpv(sv, " split(/,/,q{");
2285 my_setenv("PERL5DB", SvPV(sv, PL_na));
2288 PL_perldb = PERLDB_ALL;
2296 if (isALPHA(s[1])) {
2297 /* if adding extra options, remember to update DEBUG_MASK */
2298 static char debopts[] = "psltocPmfrxu HXDSTRJvC";
2301 for (s++; *s && (d = strchr(debopts,*s)); s++)
2302 PL_debug |= 1 << (d - debopts);
2305 PL_debug = atoi(s+1);
2306 for (s++; isDIGIT(*s); s++) ;
2309 if (DEBUG_p_TEST_ && ckWARN_d(WARN_DEBUGGING))
2310 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2311 "-Dp not implemented on this platform\n");
2313 PL_debug |= DEBUG_TOP_FLAG;
2314 #else /* !DEBUGGING */
2315 if (ckWARN_d(WARN_DEBUGGING))
2316 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2317 "Recompile perl with -DDEBUGGING to use -D switch\n");
2318 for (s++; isALNUM(*s); s++) ;
2324 usage(PL_origargv[0]);
2328 Safefree(PL_inplace);
2329 #if defined(__CYGWIN__) /* do backup extension automagically */
2330 if (*(s+1) == '\0') {
2331 PL_inplace = savepv(".bak");
2334 #endif /* __CYGWIN__ */
2335 PL_inplace = savepv(s+1);
2337 for (s = PL_inplace; *s && !isSPACE(*s); s++) ;
2340 if (*s == '-') /* Additional switches on #! line. */
2344 case 'I': /* -I handled both here and in parse_body() */
2347 while (*s && isSPACE(*s))
2352 /* ignore trailing spaces (possibly followed by other switches) */
2354 for (e = p; *e && !isSPACE(*e); e++) ;
2358 } while (*p && *p != '-');
2359 e = savepvn(s, e-s);
2360 incpush(e, TRUE, TRUE, FALSE);
2367 Perl_croak(aTHX_ "No directory specified for -I");
2373 SvREFCNT_dec(PL_ors_sv);
2378 PL_ors_sv = newSVpvn("\n",1);
2379 numlen = 3 + (*s == '0');
2380 *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL);
2384 if (RsPARA(PL_rs)) {
2385 PL_ors_sv = newSVpvn("\n\n",2);
2388 PL_ors_sv = newSVsv(PL_rs);
2395 PL_preambleav = newAV();
2397 SV *sv = newSVpvn("use assertions::activate split(/,/,q{",37);
2401 av_push(PL_preambleav, sv);
2404 av_push(PL_preambleav, newSVpvn("use assertions::activate",24));
2407 forbid_setid("-M"); /* XXX ? */
2410 forbid_setid("-m"); /* XXX ? */
2415 /* -M-foo == 'no foo' */
2416 if (*s == '-') { use = "no "; ++s; }
2417 sv = newSVpv(use,0);
2419 /* We allow -M'Module qw(Foo Bar)' */
2420 while(isALNUM(*s) || *s==':') ++s;
2422 sv_catpv(sv, start);
2423 if (*(start-1) == 'm') {
2425 Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
2426 sv_catpv( sv, " ()");
2430 Perl_croak(aTHX_ "Module name required with -%c option",
2432 sv_catpvn(sv, start, s-start);
2433 sv_catpv(sv, " split(/,/,q{");
2439 PL_preambleav = newAV();
2440 av_push(PL_preambleav, sv);
2443 Perl_croak(aTHX_ "No space allowed after -%c", *(s-1));
2455 PL_doswitches = TRUE;
2469 #ifdef MACOS_TRADITIONAL
2470 Perl_croak(aTHX_ "Believe me, you don't want to use \"-u\" on a Macintosh");
2472 PL_do_undump = TRUE;
2481 PerlIO_printf(PerlIO_stdout(),
2482 Perl_form(aTHX_ "\nThis is perl, v%"VDf" built for %s",
2483 PL_patchlevel, ARCHNAME));
2485 /* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */
2486 PerlIO_printf(PerlIO_stdout(),
2487 Perl_form(aTHX_ "\nThis is perl, version %vd\n", PL_patchlevel));
2488 PerlIO_printf(PerlIO_stdout(),
2489 Perl_form(aTHX_ " built under %s at %s %s\n",
2490 OSNAME, __DATE__, __TIME__));
2491 PerlIO_printf(PerlIO_stdout(),
2492 Perl_form(aTHX_ " OS Specific Release: %s\n",
2496 #if defined(LOCAL_PATCH_COUNT)
2497 if (LOCAL_PATCH_COUNT > 0)
2498 PerlIO_printf(PerlIO_stdout(),
2499 "\n(with %d registered patch%s, "
2500 "see perl -V for more detail)",
2501 (int)LOCAL_PATCH_COUNT,
2502 (LOCAL_PATCH_COUNT!=1) ? "es" : "");
2505 PerlIO_printf(PerlIO_stdout(),
2506 "\n\nCopyright 1987-2003, Larry Wall\n");
2507 #ifdef MACOS_TRADITIONAL
2508 PerlIO_printf(PerlIO_stdout(),
2509 "\nMac OS port Copyright 1991-2002, Matthias Neeracher;\n"
2510 "maintained by Chris Nandor\n");
2513 PerlIO_printf(PerlIO_stdout(),
2514 "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
2517 PerlIO_printf(PerlIO_stdout(),
2518 "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
2519 "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
2522 PerlIO_printf(PerlIO_stdout(),
2523 "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
2524 "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n");
2527 PerlIO_printf(PerlIO_stdout(),
2528 "atariST series port, ++jrb bammi@cadence.com\n");
2531 PerlIO_printf(PerlIO_stdout(),
2532 "BeOS port Copyright Tom Spindler, 1997-1999\n");
2535 PerlIO_printf(PerlIO_stdout(),
2536 "MPE/iX port Copyright by Mark Klein and Mark Bixby, 1996-2002\n");
2539 PerlIO_printf(PerlIO_stdout(),
2540 "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
2543 PerlIO_printf(PerlIO_stdout(),
2544 "Stratus VOS port by Paul.Green@stratus.com, 1997-2002\n");
2547 PerlIO_printf(PerlIO_stdout(),
2548 "VM/ESA port by Neale Ferguson, 1998-1999\n");
2551 PerlIO_printf(PerlIO_stdout(),
2552 "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
2555 PerlIO_printf(PerlIO_stdout(),
2556 "MiNT port by Guido Flohr, 1997-1999\n");
2559 PerlIO_printf(PerlIO_stdout(),
2560 "EPOC port by Olaf Flebbe, 1999-2002\n");
2563 PerlIO_printf(PerlIO_stdout(),"WINCE port by Rainer Keuchel, 2001-2002\n");
2564 PerlIO_printf(PerlIO_stdout(),"Built on " __DATE__ " " __TIME__ "\n\n");
2567 #ifdef BINARY_BUILD_NOTICE
2568 BINARY_BUILD_NOTICE;
2570 PerlIO_printf(PerlIO_stdout(),
2572 Perl may be copied only under the terms of either the Artistic License or the\n\
2573 GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
2574 Complete documentation for Perl, including FAQ lists, should be found on\n\
2575 this system using `man perl' or `perldoc perl'. If you have access to the\n\
2576 Internet, point your browser at http://www.perl.com/, the Perl Home Page.\n\n");
2579 if (! (PL_dowarn & G_WARN_ALL_MASK))
2580 PL_dowarn |= G_WARN_ON;
2584 PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
2585 if (!specialWARN(PL_compiling.cop_warnings))
2586 SvREFCNT_dec(PL_compiling.cop_warnings);
2587 PL_compiling.cop_warnings = pWARN_ALL ;
2591 PL_dowarn = G_WARN_ALL_OFF;
2592 if (!specialWARN(PL_compiling.cop_warnings))
2593 SvREFCNT_dec(PL_compiling.cop_warnings);
2594 PL_compiling.cop_warnings = pWARN_NONE ;
2599 if (s[1] == '-') /* Additional switches on #! line. */
2604 #if defined(WIN32) || !defined(PERL_STRICT_CR)
2610 #ifdef ALTERNATE_SHEBANG
2611 case 'S': /* OS/2 needs -S on "extproc" line. */
2619 Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
2624 /* compliments of Tom Christiansen */
2626 /* unexec() can be found in the Gnu emacs distribution */
2627 /* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
2630 Perl_my_unexec(pTHX)
2638 prog = newSVpv(BIN_EXP, 0);
2639 sv_catpv(prog, "/perl");
2640 file = newSVpv(PL_origfilename, 0);
2641 sv_catpv(file, ".perldump");
2643 unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
2644 /* unexec prints msg to stderr in case of failure */
2645 PerlProc_exit(status);
2648 # include <lib$routines.h>
2649 lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */
2651 ABORT(); /* for use with undump */
2656 /* initialize curinterp */
2662 # define PERLVAR(var,type)
2663 # define PERLVARA(var,n,type)
2664 # if defined(PERL_IMPLICIT_CONTEXT)
2665 # if defined(USE_5005THREADS)
2666 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2667 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2668 # else /* !USE_5005THREADS */
2669 # define PERLVARI(var,type,init) aTHX->var = init;
2670 # define PERLVARIC(var,type,init) aTHX->var = init;
2671 # endif /* USE_5005THREADS */
2673 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2674 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2676 # include "intrpvar.h"
2677 # ifndef USE_5005THREADS
2678 # include "thrdvar.h"
2685 # define PERLVAR(var,type)
2686 # define PERLVARA(var,n,type)
2687 # define PERLVARI(var,type,init) PL_##var = init;
2688 # define PERLVARIC(var,type,init) PL_##var = init;
2689 # include "intrpvar.h"
2690 # ifndef USE_5005THREADS
2691 # include "thrdvar.h"
2702 S_init_main_stash(pTHX)
2706 PL_curstash = PL_defstash = newHV();
2707 PL_curstname = newSVpvn("main",4);
2708 gv = gv_fetchpv("main::",TRUE, SVt_PVHV);
2709 SvREFCNT_dec(GvHV(gv));
2710 GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
2712 HvNAME(PL_defstash) = savepv("main");
2713 PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
2714 GvMULTI_on(PL_incgv);
2715 PL_hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */
2716 GvMULTI_on(PL_hintgv);
2717 PL_defgv = gv_fetchpv("_",TRUE, SVt_PVAV);
2718 PL_errgv = gv_HVadd(gv_fetchpv("@", TRUE, SVt_PV));
2719 GvMULTI_on(PL_errgv);
2720 PL_replgv = gv_fetchpv("\022", TRUE, SVt_PV); /* ^R */
2721 GvMULTI_on(PL_replgv);
2722 (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */
2723 sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */
2724 sv_setpvn(ERRSV, "", 0);
2725 PL_curstash = PL_defstash;
2726 CopSTASH_set(&PL_compiling, PL_defstash);
2727 PL_debstash = GvHV(gv_fetchpv("DB::", GV_ADDMULTI, SVt_PVHV));
2728 PL_globalstash = GvHV(gv_fetchpv("CORE::GLOBAL::", GV_ADDMULTI, SVt_PVHV));
2729 /* We must init $/ before switches are processed. */
2730 sv_setpvn(get_sv("/", TRUE), "\n", 1);
2734 S_open_script(pTHX_ char *scriptname, bool dosearch, SV *sv, int *fdscript)
2738 char *cpp_discard_flag;
2744 PL_origfilename = savepv("-e");
2747 /* if find_script() returns, it returns a malloc()-ed value */
2748 PL_origfilename = scriptname = find_script(scriptname, dosearch, NULL, 1);
2750 if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) {
2751 char *s = scriptname + 8;
2752 *fdscript = atoi(s);
2756 scriptname = savepv(s + 1);
2757 Safefree(PL_origfilename);
2758 PL_origfilename = scriptname;
2763 CopFILE_free(PL_curcop);
2764 CopFILE_set(PL_curcop, PL_origfilename);
2765 if (strEQ(PL_origfilename,"-"))
2767 if (*fdscript >= 0) {
2768 PL_rsfp = PerlIO_fdopen(*fdscript,PERL_SCRIPT_MODE);
2769 # if defined(HAS_FCNTL) && defined(F_SETFD)
2771 /* ensure close-on-exec */
2772 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2775 else if (PL_preprocess) {
2776 char *cpp_cfg = CPPSTDIN;
2777 SV *cpp = newSVpvn("",0);
2778 SV *cmd = NEWSV(0,0);
2780 if (strEQ(cpp_cfg, "cppstdin"))
2781 Perl_sv_catpvf(aTHX_ cpp, "%s/", BIN_EXP);
2782 sv_catpv(cpp, cpp_cfg);
2785 sv_catpvn(sv, "-I", 2);
2786 sv_catpv(sv,PRIVLIB_EXP);
2789 DEBUG_P(PerlIO_printf(Perl_debug_log,
2790 "PL_preprocess: scriptname=\"%s\", cpp=\"%s\", sv=\"%s\", CPPMINUS=\"%s\"\n",
2791 scriptname, SvPVX (cpp), SvPVX (sv), CPPMINUS));
2793 # if defined(MSDOS) || defined(WIN32) || defined(VMS)
2800 cpp_discard_flag = "";
2802 cpp_discard_flag = "-C";
2806 perl = os2_execname(aTHX);
2808 perl = PL_origargv[0];
2812 /* This strips off Perl comments which might interfere with
2813 the C pre-processor, including #!. #line directives are
2814 deliberately stripped to avoid confusion with Perl's version
2815 of #line. FWP played some golf with it so it will fit
2816 into VMS's 255 character buffer.
2819 code = "(1../^#!.*perl/i)|/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2821 code = "/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2823 Perl_sv_setpvf(aTHX_ cmd, "\
2824 %s -ne%s%s%s %s | %"SVf" %s %"SVf" %s",
2825 perl, quote, code, quote, scriptname, cpp,
2826 cpp_discard_flag, sv, CPPMINUS);
2828 PL_doextract = FALSE;
2829 # ifdef IAMSUID /* actually, this is caught earlier */
2830 if (PL_euid != PL_uid && !PL_euid) { /* if running suidperl */
2832 (void)seteuid(PL_uid); /* musn't stay setuid root */
2834 # ifdef HAS_SETREUID
2835 (void)setreuid((Uid_t)-1, PL_uid);
2837 # ifdef HAS_SETRESUID
2838 (void)setresuid((Uid_t)-1, PL_uid, (Uid_t)-1);
2840 PerlProc_setuid(PL_uid);
2844 if (PerlProc_geteuid() != PL_uid)
2845 Perl_croak(aTHX_ "Can't do seteuid!\n");
2847 # endif /* IAMSUID */
2849 DEBUG_P(PerlIO_printf(Perl_debug_log,
2850 "PL_preprocess: cmd=\"%s\"\n",
2853 PL_rsfp = PerlProc_popen(SvPVX(cmd), "r");
2857 else if (!*scriptname) {
2858 forbid_setid("program input from stdin");
2859 PL_rsfp = PerlIO_stdin();
2862 PL_rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
2863 # if defined(HAS_FCNTL) && defined(F_SETFD)
2865 /* ensure close-on-exec */
2866 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2871 # ifndef IAMSUID /* in case script is not readable before setuid */
2873 PerlLIO_stat(CopFILE(PL_curcop),&PL_statbuf) >= 0 &&
2874 PL_statbuf.st_mode & (S_ISUID|S_ISGID))
2877 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT,
2878 BIN_EXP, (int)PERL_REVISION,
2880 (int)PERL_SUBVERSION), PL_origargv);
2881 Perl_croak(aTHX_ "Can't do setuid\n");
2887 Perl_croak(aTHX_ "Can't open perl script: %s\n",
2890 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
2891 CopFILE(PL_curcop), Strerror(errno));
2897 * I_SYSSTATVFS HAS_FSTATVFS
2899 * I_STATFS HAS_FSTATFS HAS_GETFSSTAT
2900 * I_MNTENT HAS_GETMNTENT HAS_HASMNTOPT
2901 * here so that metaconfig picks them up. */
2905 S_fd_on_nosuid_fs(pTHX_ int fd)
2907 int check_okay = 0; /* able to do all the required sys/libcalls */
2908 int on_nosuid = 0; /* the fd is on a nosuid fs */
2910 * Preferred order: fstatvfs(), fstatfs(), ustat()+getmnt(), getmntent().
2911 * fstatvfs() is UNIX98.
2912 * fstatfs() is 4.3 BSD.
2913 * ustat()+getmnt() is pre-4.3 BSD.
2914 * getmntent() is O(number-of-mounted-filesystems) and can hang on
2915 * an irrelevant filesystem while trying to reach the right one.
2918 #undef FD_ON_NOSUID_CHECK_OKAY /* found the syscalls to do the check? */
2920 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2921 defined(HAS_FSTATVFS)
2922 # define FD_ON_NOSUID_CHECK_OKAY
2923 struct statvfs stfs;
2925 check_okay = fstatvfs(fd, &stfs) == 0;
2926 on_nosuid = check_okay && (stfs.f_flag & ST_NOSUID);
2927 # endif /* fstatvfs */
2929 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2930 defined(PERL_MOUNT_NOSUID) && \
2931 defined(HAS_FSTATFS) && \
2932 defined(HAS_STRUCT_STATFS) && \
2933 defined(HAS_STRUCT_STATFS_F_FLAGS)
2934 # define FD_ON_NOSUID_CHECK_OKAY
2937 check_okay = fstatfs(fd, &stfs) == 0;
2938 on_nosuid = check_okay && (stfs.f_flags & PERL_MOUNT_NOSUID);
2939 # endif /* fstatfs */
2941 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2942 defined(PERL_MOUNT_NOSUID) && \
2943 defined(HAS_FSTAT) && \
2944 defined(HAS_USTAT) && \
2945 defined(HAS_GETMNT) && \
2946 defined(HAS_STRUCT_FS_DATA) && \
2948 # define FD_ON_NOSUID_CHECK_OKAY
2951 if (fstat(fd, &fdst) == 0) {
2953 if (ustat(fdst.st_dev, &us) == 0) {
2955 /* NOSTAT_ONE here because we're not examining fields which
2956 * vary between that case and STAT_ONE. */
2957 if (getmnt((int*)0, &fsd, (int)0, NOSTAT_ONE, us.f_fname) == 0) {
2958 size_t cmplen = sizeof(us.f_fname);
2959 if (sizeof(fsd.fd_req.path) < cmplen)
2960 cmplen = sizeof(fsd.fd_req.path);
2961 if (strnEQ(fsd.fd_req.path, us.f_fname, cmplen) &&
2962 fdst.st_dev == fsd.fd_req.dev) {
2964 on_nosuid = fsd.fd_req.flags & PERL_MOUNT_NOSUID;
2970 # endif /* fstat+ustat+getmnt */
2972 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2973 defined(HAS_GETMNTENT) && \
2974 defined(HAS_HASMNTOPT) && \
2975 defined(MNTOPT_NOSUID)
2976 # define FD_ON_NOSUID_CHECK_OKAY
2977 FILE *mtab = fopen("/etc/mtab", "r");
2978 struct mntent *entry;
2981 if (mtab && (fstat(fd, &stb) == 0)) {
2982 while (entry = getmntent(mtab)) {
2983 if (stat(entry->mnt_dir, &fsb) == 0
2984 && fsb.st_dev == stb.st_dev)
2986 /* found the filesystem */
2988 if (hasmntopt(entry, MNTOPT_NOSUID))
2991 } /* A single fs may well fail its stat(). */
2996 # endif /* getmntent+hasmntopt */
2999 Perl_croak(aTHX_ "Can't check filesystem of script \"%s\" for nosuid", PL_origfilename);
3002 #endif /* IAMSUID */
3005 S_validate_suid(pTHX_ char *validarg, char *scriptname, int fdscript)
3011 /* do we need to emulate setuid on scripts? */
3013 /* This code is for those BSD systems that have setuid #! scripts disabled
3014 * in the kernel because of a security problem. Merely defining DOSUID
3015 * in perl will not fix that problem, but if you have disabled setuid
3016 * scripts in the kernel, this will attempt to emulate setuid and setgid
3017 * on scripts that have those now-otherwise-useless bits set. The setuid
3018 * root version must be called suidperl or sperlN.NNN. If regular perl
3019 * discovers that it has opened a setuid script, it calls suidperl with
3020 * the same argv that it had. If suidperl finds that the script it has
3021 * just opened is NOT setuid root, it sets the effective uid back to the
3022 * uid. We don't just make perl setuid root because that loses the
3023 * effective uid we had before invoking perl, if it was different from the
3026 * DOSUID must be defined in both perl and suidperl, and IAMSUID must
3027 * be defined in suidperl only. suidperl must be setuid root. The
3028 * Configure script will set this up for you if you want it.
3034 if (PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf) < 0) /* normal stat is insecure */
3035 Perl_croak(aTHX_ "Can't stat script \"%s\"",PL_origfilename);
3036 if (fdscript < 0 && PL_statbuf.st_mode & (S_ISUID|S_ISGID)) {
3041 #ifndef HAS_SETREUID
3042 /* On this access check to make sure the directories are readable,
3043 * there is actually a small window that the user could use to make
3044 * filename point to an accessible directory. So there is a faint
3045 * chance that someone could execute a setuid script down in a
3046 * non-accessible directory. I don't know what to do about that.
3047 * But I don't think it's too important. The manual lies when
3048 * it says access() is useful in setuid programs.
3050 if (PerlLIO_access(CopFILE(PL_curcop),1)) /*double check*/
3051 Perl_croak(aTHX_ "Permission denied");
3053 /* If we can swap euid and uid, then we can determine access rights
3054 * with a simple stat of the file, and then compare device and
3055 * inode to make sure we did stat() on the same file we opened.
3056 * Then we just have to make sure he or she can execute it.
3063 setreuid(PL_euid,PL_uid) < 0
3066 setresuid(PL_euid,PL_uid,(Uid_t)-1) < 0
3069 || PerlProc_getuid() != PL_euid || PerlProc_geteuid() != PL_uid)
3070 Perl_croak(aTHX_ "Can't swap uid and euid"); /* really paranoid */
3071 if (PerlLIO_stat(CopFILE(PL_curcop),&tmpstatbuf) < 0)
3072 Perl_croak(aTHX_ "Permission denied"); /* testing full pathname here */
3073 #if defined(IAMSUID) && !defined(NO_NOSUID_CHECK)
3074 if (fd_on_nosuid_fs(PerlIO_fileno(PL_rsfp)))
3075 Perl_croak(aTHX_ "Permission denied");
3077 if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
3078 tmpstatbuf.st_ino != PL_statbuf.st_ino) {
3079 (void)PerlIO_close(PL_rsfp);
3080 Perl_croak(aTHX_ "Permission denied\n");
3084 setreuid(PL_uid,PL_euid) < 0
3086 # if defined(HAS_SETRESUID)
3087 setresuid(PL_uid,PL_euid,(Uid_t)-1) < 0
3090 || PerlProc_getuid() != PL_uid || PerlProc_geteuid() != PL_euid)
3091 Perl_croak(aTHX_ "Can't reswap uid and euid");
3092 if (!cando(S_IXUSR,FALSE,&PL_statbuf)) /* can real uid exec? */
3093 Perl_croak(aTHX_ "Permission denied\n");
3095 #endif /* HAS_SETREUID */
3096 #endif /* IAMSUID */
3098 if (!S_ISREG(PL_statbuf.st_mode))
3099 Perl_croak(aTHX_ "Permission denied");
3100 if (PL_statbuf.st_mode & S_IWOTH)
3101 Perl_croak(aTHX_ "Setuid/gid script is writable by world");
3102 PL_doswitches = FALSE; /* -s is insecure in suid */
3103 CopLINE_inc(PL_curcop);
3104 if (sv_gets(PL_linestr, PL_rsfp, 0) == Nullch ||
3105 strnNE(SvPV(PL_linestr,n_a),"#!",2) ) /* required even on Sys V */
3106 Perl_croak(aTHX_ "No #! line");
3107 s = SvPV(PL_linestr,n_a)+2;
3109 while (!isSPACE(*s)) s++;
3110 for (s2 = s; (s2 > SvPV(PL_linestr,n_a)+2 &&
3111 (isDIGIT(s2[-1]) || strchr("._-", s2[-1]))); s2--) ;
3112 if (strnNE(s2-4,"perl",4) && strnNE(s-9,"perl",4)) /* sanity check */
3113 Perl_croak(aTHX_ "Not a perl script");
3114 while (*s == ' ' || *s == '\t') s++;
3116 * #! arg must be what we saw above. They can invoke it by
3117 * mentioning suidperl explicitly, but they may not add any strange
3118 * arguments beyond what #! says if they do invoke suidperl that way.
3120 len = strlen(validarg);
3121 if (strEQ(validarg," PHOOEY ") ||
3122 strnNE(s,validarg,len) || !isSPACE(s[len]))
3123 Perl_croak(aTHX_ "Args must match #! line");
3126 if (PL_euid != PL_uid && (PL_statbuf.st_mode & S_ISUID) &&
3127 PL_euid == PL_statbuf.st_uid)
3129 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3130 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3131 #endif /* IAMSUID */
3133 if (PL_euid) { /* oops, we're not the setuid root perl */
3134 (void)PerlIO_close(PL_rsfp);
3137 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT, BIN_EXP,
3138 (int)PERL_REVISION, (int)PERL_VERSION,
3139 (int)PERL_SUBVERSION), PL_origargv);
3141 Perl_croak(aTHX_ "Can't do setuid\n");
3144 if (PL_statbuf.st_mode & S_ISGID && PL_statbuf.st_gid != PL_egid) {
3146 (void)setegid(PL_statbuf.st_gid);
3149 (void)setregid((Gid_t)-1,PL_statbuf.st_gid);
3151 #ifdef HAS_SETRESGID
3152 (void)setresgid((Gid_t)-1,PL_statbuf.st_gid,(Gid_t)-1);
3154 PerlProc_setgid(PL_statbuf.st_gid);
3158 if (PerlProc_getegid() != PL_statbuf.st_gid)
3159 Perl_croak(aTHX_ "Can't do setegid!\n");
3161 if (PL_statbuf.st_mode & S_ISUID) {
3162 if (PL_statbuf.st_uid != PL_euid)
3164 (void)seteuid(PL_statbuf.st_uid); /* all that for this */
3167 (void)setreuid((Uid_t)-1,PL_statbuf.st_uid);
3169 #ifdef HAS_SETRESUID
3170 (void)setresuid((Uid_t)-1,PL_statbuf.st_uid,(Uid_t)-1);
3172 PerlProc_setuid(PL_statbuf.st_uid);
3176 if (PerlProc_geteuid() != PL_statbuf.st_uid)
3177 Perl_croak(aTHX_ "Can't do seteuid!\n");
3179 else if (PL_uid) { /* oops, mustn't run as root */
3181 (void)seteuid((Uid_t)PL_uid);
3184 (void)setreuid((Uid_t)-1,(Uid_t)PL_uid);
3186 #ifdef HAS_SETRESUID
3187 (void)setresuid((Uid_t)-1,(Uid_t)PL_uid,(Uid_t)-1);
3189 PerlProc_setuid((Uid_t)PL_uid);
3193 if (PerlProc_geteuid() != PL_uid)
3194 Perl_croak(aTHX_ "Can't do seteuid!\n");
3197 if (!cando(S_IXUSR,TRUE,&PL_statbuf))
3198 Perl_croak(aTHX_ "Permission denied\n"); /* they can't do this */
3201 else if (PL_preprocess)
3202 Perl_croak(aTHX_ "-P not allowed for setuid/setgid script\n");
3203 else if (fdscript >= 0)
3204 Perl_croak(aTHX_ "fd script not allowed in suidperl\n");
3206 Perl_croak(aTHX_ "Script is not setuid/setgid in suidperl\n");
3208 /* We absolutely must clear out any saved ids here, so we */
3209 /* exec the real perl, substituting fd script for scriptname. */
3210 /* (We pass script name as "subdir" of fd, which perl will grok.) */
3211 PerlIO_rewind(PL_rsfp);
3212 PerlLIO_lseek(PerlIO_fileno(PL_rsfp),(Off_t)0,0); /* just in case rewind didn't */
3213 for (which = 1; PL_origargv[which] && PL_origargv[which] != scriptname; which++) ;
3214 if (!PL_origargv[which])
3215 Perl_croak(aTHX_ "Permission denied");
3216 PL_origargv[which] = savepv(Perl_form(aTHX_ "/dev/fd/%d/%s",
3217 PerlIO_fileno(PL_rsfp), PL_origargv[which]));
3218 #if defined(HAS_FCNTL) && defined(F_SETFD)
3219 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,0); /* ensure no close-on-exec */
3221 PerlProc_execv(Perl_form(aTHX_ "%s/perl"PERL_FS_VER_FMT, BIN_EXP,
3222 (int)PERL_REVISION, (int)PERL_VERSION,
3223 (int)PERL_SUBVERSION), PL_origargv);/* try again */
3224 Perl_croak(aTHX_ "Can't do setuid\n");
3225 #endif /* IAMSUID */
3227 if (PL_euid != PL_uid || PL_egid != PL_gid) { /* (suidperl doesn't exist, in fact) */
3228 #ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
3229 PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf); /* may be either wrapped or real suid */
3230 if ((PL_euid != PL_uid && PL_euid == PL_statbuf.st_uid && PL_statbuf.st_mode & S_ISUID)
3232 (PL_egid != PL_gid && PL_egid == PL_statbuf.st_gid && PL_statbuf.st_mode & S_ISGID)
3235 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3236 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3237 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
3238 /* not set-id, must be wrapped */
3244 S_find_beginning(pTHX)
3246 register char *s, *s2;
3247 #ifdef MACOS_TRADITIONAL
3251 /* skip forward in input to the real script? */
3254 #ifdef MACOS_TRADITIONAL
3255 /* Since the Mac OS does not honor #! arguments for us, we do it ourselves */
3257 while (PL_doextract || gMacPerl_AlwaysExtract) {
3258 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
3259 if (!gMacPerl_AlwaysExtract)
3260 Perl_croak(aTHX_ "No Perl script found in input\n");
3262 if (PL_doextract) /* require explicit override ? */
3263 if (!OverrideExtract(PL_origfilename))
3264 Perl_croak(aTHX_ "User aborted script\n");
3266 PL_doextract = FALSE;
3268 /* Pater peccavi, file does not have #! */
3269 PerlIO_rewind(PL_rsfp);
3274 while (PL_doextract) {
3275 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch)
3276 Perl_croak(aTHX_ "No Perl script found in input\n");
3279 if (*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL")))) {
3280 PerlIO_ungetc(PL_rsfp, '\n'); /* to keep line count right */
3281 PL_doextract = FALSE;
3282 while (*s && !(isSPACE (*s) || *s == '#')) s++;
3284 while (*s == ' ' || *s == '\t') s++;
3286 while (isDIGIT(s2[-1]) || strchr("-._", s2[-1])) s2--;
3287 if (strnEQ(s2-4,"perl",4))
3289 while ((s = moreswitches(s)))
3292 #ifdef MACOS_TRADITIONAL
3293 /* We are always searching for the #!perl line in MacPerl,
3294 * so if we find it, still keep the line count correct
3295 * by counting lines we already skipped over
3297 for (; maclines > 0 ; maclines--)
3298 PerlIO_ungetc(PL_rsfp, '\n');
3302 /* gMacPerl_AlwaysExtract is false in MPW tool */
3303 } else if (gMacPerl_AlwaysExtract) {
3314 PL_uid = PerlProc_getuid();
3315 PL_euid = PerlProc_geteuid();
3316 PL_gid = PerlProc_getgid();
3317 PL_egid = PerlProc_getegid();
3319 PL_uid |= PL_gid << 16;
3320 PL_euid |= PL_egid << 16;
3322 /* Should not happen: */
3323 CHECK_MALLOC_TAINT(PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
3324 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
3328 /* This is used very early in the lifetime of the program. */
3330 Perl_doing_taint(int argc, char *argv[], char *envp[])
3332 int uid = PerlProc_getuid();
3333 int euid = PerlProc_geteuid();
3334 int gid = PerlProc_getgid();
3335 int egid = PerlProc_getegid();
3341 if (uid && (euid != uid || egid != gid))
3343 /* This is a really primitive check; $ENV{PERL_MALLOC_OPT} is
3344 ignored only if -T are the first chars together; otherwise one
3345 gets "Too late" message. */
3346 if ( argc > 1 && argv[1][0] == '-'
3347 && (argv[1][1] == 't' || argv[1][1] == 'T') )
3354 S_forbid_setid(pTHX_ char *s)
3356 if (PL_euid != PL_uid)
3357 Perl_croak(aTHX_ "No %s allowed while running setuid", s);
3358 if (PL_egid != PL_gid)
3359 Perl_croak(aTHX_ "No %s allowed while running setgid", s);
3363 Perl_init_debugger(pTHX)
3365 HV *ostash = PL_curstash;
3367 PL_curstash = PL_debstash;
3368 PL_dbargs = GvAV(gv_AVadd((gv_fetchpv("args", GV_ADDMULTI, SVt_PVAV))));
3369 AvREAL_off(PL_dbargs);
3370 PL_DBgv = gv_fetchpv("DB", GV_ADDMULTI, SVt_PVGV);
3371 PL_DBline = gv_fetchpv("dbline", GV_ADDMULTI, SVt_PVAV);
3372 PL_DBsub = gv_HVadd(gv_fetchpv("sub", GV_ADDMULTI, SVt_PVHV));
3373 sv_upgrade(GvSV(PL_DBsub), SVt_IV); /* IVX accessed if PERLDB_SUB_NN */
3374 PL_DBsingle = GvSV((gv_fetchpv("single", GV_ADDMULTI, SVt_PV)));
3375 sv_setiv(PL_DBsingle, 0);
3376 PL_DBtrace = GvSV((gv_fetchpv("trace", GV_ADDMULTI, SVt_PV)));
3377 sv_setiv(PL_DBtrace, 0);
3378 PL_DBsignal = GvSV((gv_fetchpv("signal", GV_ADDMULTI, SVt_PV)));
3379 sv_setiv(PL_DBsignal, 0);
3380 PL_DBassertion = GvSV((gv_fetchpv("assertion", GV_ADDMULTI, SVt_PV)));
3381 sv_setiv(PL_DBassertion, 0);
3382 PL_curstash = ostash;
3385 #ifndef STRESS_REALLOC
3386 #define REASONABLE(size) (size)
3388 #define REASONABLE(size) (1) /* unreasonable */
3392 Perl_init_stacks(pTHX)
3394 /* start with 128-item stack and 8K cxstack */
3395 PL_curstackinfo = new_stackinfo(REASONABLE(128),
3396 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
3397 PL_curstackinfo->si_type = PERLSI_MAIN;
3398 PL_curstack = PL_curstackinfo->si_stack;
3399 PL_mainstack = PL_curstack; /* remember in case we switch stacks */
3401 PL_stack_base = AvARRAY(PL_curstack);
3402 PL_stack_sp = PL_stack_base;
3403 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
3405 New(50,PL_tmps_stack,REASONABLE(128),SV*);
3408 PL_tmps_max = REASONABLE(128);
3410 New(54,PL_markstack,REASONABLE(32),I32);
3411 PL_markstack_ptr = PL_markstack;
3412 PL_markstack_max = PL_markstack + REASONABLE(32);
3416 New(54,PL_scopestack,REASONABLE(32),I32);
3417 PL_scopestack_ix = 0;
3418 PL_scopestack_max = REASONABLE(32);
3420 New(54,PL_savestack,REASONABLE(128),ANY);
3421 PL_savestack_ix = 0;
3422 PL_savestack_max = REASONABLE(128);
3424 New(54,PL_retstack,REASONABLE(16),OP*);
3426 PL_retstack_max = REASONABLE(16);
3434 while (PL_curstackinfo->si_next)
3435 PL_curstackinfo = PL_curstackinfo->si_next;
3436 while (PL_curstackinfo) {
3437 PERL_SI *p = PL_curstackinfo->si_prev;
3438 /* curstackinfo->si_stack got nuked by sv_free_arenas() */
3439 Safefree(PL_curstackinfo->si_cxstack);
3440 Safefree(PL_curstackinfo);
3441 PL_curstackinfo = p;
3443 Safefree(PL_tmps_stack);
3444 Safefree(PL_markstack);
3445 Safefree(PL_scopestack);
3446 Safefree(PL_savestack);
3447 Safefree(PL_retstack);
3456 lex_start(PL_linestr);
3458 PL_subname = newSVpvn("main",4);
3462 S_init_predump_symbols(pTHX)
3467 sv_setpvn(get_sv("\"", TRUE), " ", 1);
3468 PL_stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
3469 GvMULTI_on(PL_stdingv);
3470 io = GvIOp(PL_stdingv);
3471 IoTYPE(io) = IoTYPE_RDONLY;
3472 IoIFP(io) = PerlIO_stdin();
3473 tmpgv = gv_fetchpv("stdin",TRUE, SVt_PV);
3475 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3477 tmpgv = gv_fetchpv("STDOUT",TRUE, SVt_PVIO);
3480 IoTYPE(io) = IoTYPE_WRONLY;
3481 IoOFP(io) = IoIFP(io) = PerlIO_stdout();
3483 tmpgv = gv_fetchpv("stdout",TRUE, SVt_PV);
3485 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3487 PL_stderrgv = gv_fetchpv("STDERR",TRUE, SVt_PVIO);
3488 GvMULTI_on(PL_stderrgv);
3489 io = GvIOp(PL_stderrgv);
3490 IoTYPE(io) = IoTYPE_WRONLY;
3491 IoOFP(io) = IoIFP(io) = PerlIO_stderr();
3492 tmpgv = gv_fetchpv("stderr",TRUE, SVt_PV);
3494 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3496 PL_statname = NEWSV(66,0); /* last filename we did stat on */
3499 Safefree(PL_osname);
3500 PL_osname = savepv(OSNAME);
3504 Perl_init_argv_symbols(pTHX_ register int argc, register char **argv)
3507 argc--,argv++; /* skip name of script */
3508 if (PL_doswitches) {
3509 for (; argc > 0 && **argv == '-'; argc--,argv++) {
3512 if (argv[0][1] == '-' && !argv[0][2]) {
3516 if ((s = strchr(argv[0], '='))) {
3518 sv_setpv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),s);
3521 sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),1);
3524 if ((PL_argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV))) {
3525 GvMULTI_on(PL_argvgv);
3526 (void)gv_AVadd(PL_argvgv);
3527 av_clear(GvAVn(PL_argvgv));
3528 for (; argc > 0; argc--,argv++) {
3529 SV *sv = newSVpv(argv[0],0);
3530 av_push(GvAVn(PL_argvgv),sv);
3531 if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) {
3532 if (PL_unicode & PERL_UNICODE_ARGV_FLAG)
3535 if (PL_unicode & PERL_UNICODE_WIDESYSCALLS_FLAG) /* Sarathy? */
3536 (void)sv_utf8_decode(sv);
3541 #ifdef HAS_PROCSELFEXE
3542 /* This is a function so that we don't hold on to MAXPATHLEN
3543 bytes of stack longer than necessary
3546 S_procself_val(pTHX_ SV *sv, char *arg0)
3548 char buf[MAXPATHLEN];
3549 int len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
3551 /* On Playstation2 Linux V1.0 (kernel 2.2.1) readlink(/proc/self/exe)
3552 includes a spurious NUL which will cause $^X to fail in system
3553 or backticks (this will prevent extensions from being built and
3554 many tests from working). readlink is not meant to add a NUL.
3555 Normal readlink works fine.
3557 if (len > 0 && buf[len-1] == '\0') {
3561 /* FreeBSD's implementation is acknowledged to be imperfect, sometimes
3562 returning the text "unknown" from the readlink rather than the path
3563 to the executable (or returning an error from the readlink). Any valid
3564 path has a '/' in it somewhere, so use that to validate the result.
3565 See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703
3567 if (len > 0 && memchr(buf, '/', len)) {
3568 sv_setpvn(sv,buf,len);
3574 #endif /* HAS_PROCSELFEXE */
3577 S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register char **env)
3583 PL_toptarget = NEWSV(0,0);
3584 sv_upgrade(PL_toptarget, SVt_PVFM);
3585 sv_setpvn(PL_toptarget, "", 0);
3586 PL_bodytarget = NEWSV(0,0);
3587 sv_upgrade(PL_bodytarget, SVt_PVFM);
3588 sv_setpvn(PL_bodytarget, "", 0);
3589 PL_formtarget = PL_bodytarget;
3593 init_argv_symbols(argc,argv);
3595 if ((tmpgv = gv_fetchpv("0",TRUE, SVt_PV))) {
3596 #ifdef MACOS_TRADITIONAL
3597 /* $0 is not majick on a Mac */
3598 sv_setpv(GvSV(tmpgv),MacPerl_MPWFileName(PL_origfilename));
3600 sv_setpv(GvSV(tmpgv),PL_origfilename);
3601 magicname("0", "0", 1);
3604 if ((tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))) {/* $^X */
3605 #ifdef HAS_PROCSELFEXE
3606 S_procself_val(aTHX_ GvSV(tmpgv), PL_origargv[0]);
3609 sv_setpv(GvSV(tmpgv), os2_execname(aTHX));
3611 sv_setpv(GvSV(tmpgv),PL_origargv[0]);
3615 if ((PL_envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV))) {
3617 GvMULTI_on(PL_envgv);
3618 hv = GvHVn(PL_envgv);
3619 hv_magic(hv, Nullgv, PERL_MAGIC_env);
3620 #ifdef USE_ENVIRON_ARRAY
3621 /* Note that if the supplied env parameter is actually a copy
3622 of the global environ then it may now point to free'd memory
3623 if the environment has been modified since. To avoid this
3624 problem we treat env==NULL as meaning 'use the default'
3629 # ifdef USE_ITHREADS
3630 && PL_curinterp == aTHX
3634 environ[0] = Nullch;
3637 for (; *env; env++) {
3638 if (!(s = strchr(*env,'=')))
3645 sv = newSVpv(s+1, 0);
3646 (void)hv_store(hv, *env, s - *env, sv, 0);
3650 #endif /* USE_ENVIRON_ARRAY */
3653 if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) {
3654 SvREADONLY_off(GvSV(tmpgv));
3655 sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid());
3656 SvREADONLY_on(GvSV(tmpgv));
3658 #ifdef THREADS_HAVE_PIDS
3659 PL_ppid = (IV)getppid();
3662 /* touch @F array to prevent spurious warnings 20020415 MJD */
3664 (void) get_av("main::F", TRUE | GV_ADDMULTI);
3666 /* touch @- and @+ arrays to prevent spurious warnings 20020415 MJD */
3667 (void) get_av("main::-", TRUE | GV_ADDMULTI);
3668 (void) get_av("main::+", TRUE | GV_ADDMULTI);
3672 S_init_perllib(pTHX)
3677 s = PerlEnv_getenv("PERL5LIB");
3679 incpush(s, TRUE, TRUE, TRUE);
3681 incpush(PerlEnv_getenv("PERLLIB"), FALSE, FALSE, TRUE);
3683 /* Treat PERL5?LIB as a possible search list logical name -- the
3684 * "natural" VMS idiom for a Unix path string. We allow each
3685 * element to be a set of |-separated directories for compatibility.
3689 if (my_trnlnm("PERL5LIB",buf,0))
3690 do { incpush(buf,TRUE,TRUE,TRUE); } while (my_trnlnm("PERL5LIB",buf,++idx));
3692 while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf,FALSE,FALSE,TRUE);
3696 /* Use the ~-expanded versions of APPLLIB (undocumented),
3697 ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
3700 incpush(APPLLIB_EXP, TRUE, TRUE, TRUE);
3704 incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
3706 #ifdef MACOS_TRADITIONAL
3709 SV * privdir = NEWSV(55, 0);
3710 char * macperl = PerlEnv_getenv("MACPERL");
3715 Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
3716 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3717 incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
3718 Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
3719 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3720 incpush(SvPVX(privdir), TRUE, FALSE, TRUE);
3722 SvREFCNT_dec(privdir);
3725 incpush(":", FALSE, FALSE, TRUE);
3728 # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
3731 incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
3733 incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
3737 /* sitearch is always relative to sitelib on Windows for
3738 * DLL-based path intuition to work correctly */
3739 # if !defined(WIN32)
3740 incpush(SITEARCH_EXP, FALSE, FALSE, TRUE);
3746 /* this picks up sitearch as well */
3747 incpush(SITELIB_EXP, TRUE, FALSE, TRUE);
3749 incpush(SITELIB_EXP, FALSE, FALSE, TRUE);
3753 #ifdef SITELIB_STEM /* Search for version-specific dirs below here */
3754 incpush(SITELIB_STEM, FALSE, TRUE, TRUE);
3757 #ifdef PERL_VENDORARCH_EXP
3758 /* vendorarch is always relative to vendorlib on Windows for
3759 * DLL-based path intuition to work correctly */
3760 # if !defined(WIN32)
3761 incpush(PERL_VENDORARCH_EXP, FALSE, FALSE, TRUE);
3765 #ifdef PERL_VENDORLIB_EXP
3767 incpush(PERL_VENDORLIB_EXP, TRUE, FALSE, TRUE); /* this picks up vendorarch as well */
3769 incpush(PERL_VENDORLIB_EXP, FALSE, FALSE, TRUE);
3773 #ifdef PERL_VENDORLIB_STEM /* Search for version-specific dirs below here */
3774 incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE);
3777 #ifdef PERL_OTHERLIBDIRS
3778 incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE);
3782 incpush(".", FALSE, FALSE, TRUE);
3783 #endif /* MACOS_TRADITIONAL */
3786 #if defined(DOSISH) || defined(EPOC)
3787 # define PERLLIB_SEP ';'
3790 # define PERLLIB_SEP '|'
3792 # if defined(MACOS_TRADITIONAL)
3793 # define PERLLIB_SEP ','
3795 # define PERLLIB_SEP ':'
3799 #ifndef PERLLIB_MANGLE
3800 # define PERLLIB_MANGLE(s,n) (s)
3804 S_incpush(pTHX_ char *p, int addsubdirs, int addoldvers, int usesep)
3806 SV *subdir = Nullsv;
3811 if (addsubdirs || addoldvers) {
3812 subdir = sv_newmortal();
3815 /* Break at all separators */
3817 SV *libdir = NEWSV(55,0);
3820 /* skip any consecutive separators */
3822 while ( *p == PERLLIB_SEP ) {
3823 /* Uncomment the next line for PATH semantics */
3824 /* av_push(GvAVn(PL_incgv), newSVpvn(".", 1)); */
3829 if ( usesep && (s = strchr(p, PERLLIB_SEP)) != Nullch ) {
3830 sv_setpvn(libdir, PERLLIB_MANGLE(p, (STRLEN)(s - p)),
3835 sv_setpv(libdir, PERLLIB_MANGLE(p, 0));
3836 p = Nullch; /* break out */
3838 #ifdef MACOS_TRADITIONAL
3839 if (!strchr(SvPVX(libdir), ':')) {
3842 sv_setpv(libdir, MacPerl_CanonDir(SvPVX(libdir), buf, 0));
3844 if (SvPVX(libdir)[SvCUR(libdir)-1] != ':')
3845 sv_catpv(libdir, ":");
3849 * BEFORE pushing libdir onto @INC we may first push version- and
3850 * archname-specific sub-directories.
3852 if (addsubdirs || addoldvers) {
3853 #ifdef PERL_INC_VERSION_LIST
3854 /* Configure terminates PERL_INC_VERSION_LIST with a NULL */
3855 const char *incverlist[] = { PERL_INC_VERSION_LIST };
3856 const char **incver;
3863 if ((unix = tounixspec_ts(SvPV(libdir,len),Nullch)) != Nullch) {
3865 while (unix[len-1] == '/') len--; /* Cosmetic */
3866 sv_usepvn(libdir,unix,len);
3869 PerlIO_printf(Perl_error_log,
3870 "Failed to unixify @INC element \"%s\"\n",
3874 #ifdef MACOS_TRADITIONAL
3875 #define PERL_AV_SUFFIX_FMT ""
3876 #define PERL_ARCH_FMT "%s:"
3877 #define PERL_ARCH_FMT_PATH PERL_FS_VER_FMT PERL_AV_SUFFIX_FMT
3879 #define PERL_AV_SUFFIX_FMT "/"
3880 #define PERL_ARCH_FMT "/%s"
3881 #define PERL_ARCH_FMT_PATH PERL_AV_SUFFIX_FMT PERL_FS_VER_FMT
3883 /* .../version/archname if -d .../version/archname */
3884 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH PERL_ARCH_FMT,
3886 (int)PERL_REVISION, (int)PERL_VERSION,
3887 (int)PERL_SUBVERSION, ARCHNAME);
3888 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3889 S_ISDIR(tmpstatbuf.st_mode))
3890 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3892 /* .../version if -d .../version */
3893 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH, libdir,
3894 (int)PERL_REVISION, (int)PERL_VERSION,
3895 (int)PERL_SUBVERSION);
3896 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3897 S_ISDIR(tmpstatbuf.st_mode))
3898 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3900 /* .../archname if -d .../archname */
3901 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, ARCHNAME);
3902 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3903 S_ISDIR(tmpstatbuf.st_mode))
3904 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3907 #ifdef PERL_INC_VERSION_LIST
3909 for (incver = incverlist; *incver; incver++) {
3910 /* .../xxx if -d .../xxx */
3911 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, *incver);
3912 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3913 S_ISDIR(tmpstatbuf.st_mode))
3914 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3920 /* finally push this lib directory on the end of @INC */
3921 av_push(GvAVn(PL_incgv), libdir);
3925 #ifdef USE_5005THREADS
3926 STATIC struct perl_thread *
3927 S_init_main_thread(pTHX)
3929 #if !defined(PERL_IMPLICIT_CONTEXT)
3930 struct perl_thread *thr;
3934 Newz(53, thr, 1, struct perl_thread);
3935 PL_curcop = &PL_compiling;
3936 thr->interp = PERL_GET_INTERP;
3937 thr->cvcache = newHV();
3938 thr->threadsv = newAV();
3939 /* thr->threadsvp is set when find_threadsv is called */
3940 thr->specific = newAV();
3941 thr->flags = THRf_R_JOINABLE;
3942 MUTEX_INIT(&thr->mutex);
3943 /* Handcraft thrsv similarly to mess_sv */
3944 New(53, PL_thrsv, 1, SV);
3945 Newz(53, xpv, 1, XPV);
3946 SvFLAGS(PL_thrsv) = SVt_PV;
3947 SvANY(PL_thrsv) = (void*)xpv;
3948 SvREFCNT(PL_thrsv) = 1 << 30; /* practically infinite */
3949 SvPVX(PL_thrsv) = (char*)thr;
3950 SvCUR_set(PL_thrsv, sizeof(thr));
3951 SvLEN_set(PL_thrsv, sizeof(thr));
3952 *SvEND(PL_thrsv) = '\0'; /* in the trailing_nul field */
3953 thr->oursv = PL_thrsv;
3954 PL_chopset = " \n-";
3957 MUTEX_LOCK(&PL_threads_mutex);
3963 MUTEX_UNLOCK(&PL_threads_mutex);
3965 #ifdef HAVE_THREAD_INTERN
3966 Perl_init_thread_intern(thr);
3969 #ifdef SET_THREAD_SELF
3970 SET_THREAD_SELF(thr);
3972 thr->self = pthread_self();
3973 #endif /* SET_THREAD_SELF */
3977 * These must come after the thread self setting
3978 * because sv_setpvn does SvTAINT and the taint
3979 * fields thread selfness being set.
3981 PL_toptarget = NEWSV(0,0);
3982 sv_upgrade(PL_toptarget, SVt_PVFM);
3983 sv_setpvn(PL_toptarget, "", 0);
3984 PL_bodytarget = NEWSV(0,0);
3985 sv_upgrade(PL_bodytarget, SVt_PVFM);
3986 sv_setpvn(PL_bodytarget, "", 0);
3987 PL_formtarget = PL_bodytarget;
3988 thr->errsv = newSVpvn("", 0);
3989 (void) find_threadsv("@"); /* Ensure $@ is initialised early */
3992 PL_peepp = MEMBER_TO_FPTR(Perl_peep);
3993 PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
3994 PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
3995 PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);
3996 PL_regint_string = MEMBER_TO_FPTR(Perl_re_intuit_string);
3997 PL_regfree = MEMBER_TO_FPTR(Perl_pregfree);
3999 PL_reginterp_cnt = 0;
4003 #endif /* USE_5005THREADS */
4006 Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
4009 line_t oldline = CopLINE(PL_curcop);
4015 while (AvFILL(paramList) >= 0) {
4016 cv = (CV*)av_shift(paramList);
4018 if (paramList == PL_beginav) {
4019 /* save PL_beginav for compiler */
4020 if (! PL_beginav_save)
4021 PL_beginav_save = newAV();
4022 av_push(PL_beginav_save, (SV*)cv);
4024 else if (paramList == PL_checkav) {
4025 /* save PL_checkav for compiler */
4026 if (! PL_checkav_save)
4027 PL_checkav_save = newAV();
4028 av_push(PL_checkav_save, (SV*)cv);
4033 #ifdef PERL_FLEXIBLE_EXCEPTIONS
4034 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_list_body), cv);
4040 #ifndef PERL_FLEXIBLE_EXCEPTIONS
4044 (void)SvPV(atsv, len);
4046 PL_curcop = &PL_compiling;
4047 CopLINE_set(PL_curcop, oldline);
4048 if (paramList == PL_beginav)
4049 sv_catpv(atsv, "BEGIN failed--compilation aborted");
4051 Perl_sv_catpvf(aTHX_ atsv,
4052 "%s failed--call queue aborted",
4053 paramList == PL_checkav ? "CHECK"
4054 : paramList == PL_initav ? "INIT"
4056 while (PL_scopestack_ix > oldscope)
4059 Perl_croak(aTHX_ "%"SVf"", atsv);
4066 /* my_exit() was called */
4067 while (PL_scopestack_ix > oldscope)
4070 PL_curstash = PL_defstash;
4071 PL_curcop = &PL_compiling;
4072 CopLINE_set(PL_curcop, oldline);
4074 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED)) {
4075 if (paramList == PL_beginav)
4076 Perl_croak(aTHX_ "BEGIN failed--compilation aborted");
4078 Perl_croak(aTHX_ "%s failed--call queue aborted",
4079 paramList == PL_checkav ? "CHECK"
4080 : paramList == PL_initav ? "INIT"
4087 PL_curcop = &PL_compiling;
4088 CopLINE_set(PL_curcop, oldline);
4091 PerlIO_printf(Perl_error_log, "panic: restartop\n");
4099 #ifdef PERL_FLEXIBLE_EXCEPTIONS
4101 S_vcall_list_body(pTHX_ va_list args)
4103 CV *cv = va_arg(args, CV*);
4104 return call_list_body(cv);
4109 S_call_list_body(pTHX_ CV *cv)
4111 PUSHMARK(PL_stack_sp);
4112 call_sv((SV*)cv, G_EVAL|G_DISCARD);
4117 Perl_my_exit(pTHX_ U32 status)
4119 DEBUG_S(PerlIO_printf(Perl_debug_log, "my_exit: thread %p, status %lu\n",
4120 thr, (unsigned long) status));
4129 STATUS_NATIVE_SET(status);
4136 Perl_my_failure_exit(pTHX)
4139 if (vaxc$errno & 1) {
4140 if (STATUS_NATIVE & 1) /* fortuitiously includes "-1" */
4141 STATUS_NATIVE_SET(44);
4144 if (!vaxc$errno && errno) /* unlikely */
4145 STATUS_NATIVE_SET(44);
4147 STATUS_NATIVE_SET(vaxc$errno);
4152 STATUS_POSIX_SET(errno);
4154 exitstatus = STATUS_POSIX >> 8;
4155 if (exitstatus & 255)
4156 STATUS_POSIX_SET(exitstatus);
4158 STATUS_POSIX_SET(255);
4165 S_my_exit_jump(pTHX)
4167 register PERL_CONTEXT *cx;
4172 SvREFCNT_dec(PL_e_script);
4173 PL_e_script = Nullsv;
4176 POPSTACK_TO(PL_mainstack);
4177 if (cxstack_ix >= 0) {
4180 POPBLOCK(cx,PL_curpm);
4188 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen)
4191 p = SvPVX(PL_e_script);
4192 nl = strchr(p, '\n');
4193 nl = (nl) ? nl+1 : SvEND(PL_e_script);
4195 filter_del(read_e_script);
4198 sv_catpvn(buf_sv, p, nl-p);
4199 sv_chop(PL_e_script, nl);