3 * Copyright (c) 1987-2002 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 * "A ship then new they built for him/of mithril and of elven glass" --Bilbo
15 #define PERL_IN_PERL_C
17 #include "patchlevel.h" /* for local_patches */
21 char *nw_get_sitelib(const char *pl);
24 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
41 #if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE) && !defined(PERL_MICRO)
42 char *getenv (char *); /* Usually in <stdlib.h> */
45 static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
53 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
59 #if defined(USE_5005THREADS)
60 # define INIT_TLS_AND_INTERP \
62 if (!PL_curinterp) { \
63 PERL_SET_INTERP(my_perl); \
69 # if defined(USE_ITHREADS)
70 # define INIT_TLS_AND_INTERP \
72 if (!PL_curinterp) { \
73 PERL_SET_INTERP(my_perl); \
76 PERL_SET_THX(my_perl); \
80 PERL_SET_THX(my_perl); \
84 # define INIT_TLS_AND_INTERP \
86 if (!PL_curinterp) { \
87 PERL_SET_INTERP(my_perl); \
89 PERL_SET_THX(my_perl); \
94 #ifdef PERL_IMPLICIT_SYS
96 perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
97 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
98 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
99 struct IPerlDir* ipD, struct IPerlSock* ipS,
100 struct IPerlProc* ipP)
102 PerlInterpreter *my_perl;
103 /* New() needs interpreter, so call malloc() instead */
104 my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
106 Zero(my_perl, 1, PerlInterpreter);
122 =head1 Embedding Functions
124 =for apidoc perl_alloc
126 Allocates a new Perl interpreter. See L<perlembed>.
134 PerlInterpreter *my_perl;
135 #ifdef USE_5005THREADS
139 /* New() needs interpreter, so call malloc() instead */
140 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
143 Zero(my_perl, 1, PerlInterpreter);
146 #endif /* PERL_IMPLICIT_SYS */
149 =for apidoc perl_construct
151 Initializes a new Perl interpreter. See L<perlembed>.
157 perl_construct(pTHXx)
159 #ifdef USE_5005THREADS
161 struct perl_thread *thr = NULL;
162 #endif /* FAKE_THREADS */
163 #endif /* USE_5005THREADS */
167 PL_perl_destruct_level = 1;
169 if (PL_perl_destruct_level > 0)
173 /* Init the real globals (and main thread)? */
175 #ifdef USE_5005THREADS
176 MUTEX_INIT(&PL_sv_mutex);
178 * Safe to use basic SV functions from now on (though
179 * not things like mortals or tainting yet).
181 MUTEX_INIT(&PL_eval_mutex);
182 COND_INIT(&PL_eval_cond);
183 MUTEX_INIT(&PL_threads_mutex);
184 COND_INIT(&PL_nthreads_cond);
185 # ifdef EMULATE_ATOMIC_REFCOUNTS
186 MUTEX_INIT(&PL_svref_mutex);
187 # endif /* EMULATE_ATOMIC_REFCOUNTS */
189 MUTEX_INIT(&PL_cred_mutex);
190 MUTEX_INIT(&PL_sv_lock_mutex);
191 MUTEX_INIT(&PL_fdpid_mutex);
193 thr = init_main_thread();
194 #endif /* USE_5005THREADS */
196 #ifdef PERL_FLEXIBLE_EXCEPTIONS
197 PL_protect = MEMBER_TO_FPTR(Perl_default_protect); /* for exceptions */
200 PL_curcop = &PL_compiling; /* needed by ckWARN, right away */
202 PL_linestr = NEWSV(65,79);
203 sv_upgrade(PL_linestr,SVt_PVIV);
205 if (!SvREADONLY(&PL_sv_undef)) {
206 /* set read-only and try to insure than we wont see REFCNT==0
209 SvREADONLY_on(&PL_sv_undef);
210 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
212 sv_setpv(&PL_sv_no,PL_No);
214 SvREADONLY_on(&PL_sv_no);
215 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
217 sv_setpv(&PL_sv_yes,PL_Yes);
219 SvREADONLY_on(&PL_sv_yes);
220 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
223 PL_sighandlerp = Perl_sighandler;
224 PL_pidstatus = newHV();
227 PL_rs = newSVpvn("\n", 1);
232 PL_lex_state = LEX_NOTPARSING;
238 SET_NUMERIC_STANDARD();
242 PL_patchlevel = NEWSV(0,4);
243 (void)SvUPGRADE(PL_patchlevel, SVt_PVNV);
244 if (PERL_REVISION > 127 || PERL_VERSION > 127 || PERL_SUBVERSION > 127)
245 SvGROW(PL_patchlevel, UTF8_MAXLEN*3+1);
246 s = (U8*)SvPVX(PL_patchlevel);
247 /* Build version strings using "native" characters */
248 s = uvchr_to_utf8(s, (UV)PERL_REVISION);
249 s = uvchr_to_utf8(s, (UV)PERL_VERSION);
250 s = uvchr_to_utf8(s, (UV)PERL_SUBVERSION);
252 SvCUR_set(PL_patchlevel, s - (U8*)SvPVX(PL_patchlevel));
253 SvPOK_on(PL_patchlevel);
254 SvNVX(PL_patchlevel) = (NV)PERL_REVISION
255 + ((NV)PERL_VERSION / (NV)1000)
256 #if defined(PERL_SUBVERSION) && PERL_SUBVERSION > 0
257 + ((NV)PERL_SUBVERSION / (NV)1000000)
260 SvNOK_on(PL_patchlevel); /* dual valued */
261 SvUTF8_on(PL_patchlevel);
262 SvREADONLY_on(PL_patchlevel);
265 #if defined(LOCAL_PATCH_COUNT)
266 PL_localpatches = local_patches; /* For possible -v */
269 #ifdef HAVE_INTERP_INTERN
273 PerlIO_init(aTHX); /* Hook to IO system */
275 PL_fdpid = newAV(); /* for remembering popen pids by fd */
276 PL_modglobal = newHV(); /* pointers to per-interpreter module globals */
277 PL_errors = newSVpvn("",0);
278 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
279 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
280 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
282 PL_regex_padav = newAV();
283 av_push(PL_regex_padav,(SV*)newAV()); /* First entry is an array of empty elements */
284 PL_regex_pad = AvARRAY(PL_regex_padav);
286 #ifdef USE_REENTRANT_API
287 Perl_reentrant_init(aTHX);
290 /* Note that strtab is a rather special HV. Assumptions are made
291 about not iterating on it, and not adding tie magic to it.
292 It is properly deallocated in perl_destruct() */
295 #ifdef USE_5005THREADS
296 MUTEX_INIT(&PL_strtab_mutex);
298 HvSHAREKEYS_off(PL_strtab); /* mandatory */
299 hv_ksplit(PL_strtab, 512);
301 #if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
302 _dyld_lookup_and_bind
303 ("__environ", (unsigned long *) &environ_pointer, NULL);
306 #ifdef USE_ENVIRON_ARRAY
307 PL_origenviron = environ;
310 /* Use sysconf(_SC_CLK_TCK) if available, if not
311 * available or if the sysconf() fails, use the HZ. */
312 #if defined(HAS_SYSCONF) && defined(_SC_CLK_TCK)
313 PL_clocktick = sysconf(_SC_CLK_TCK);
314 if (PL_clocktick <= 0)
322 =for apidoc nothreadhook
324 Stub that provides thread hook for perl_destruct when there are
331 Perl_nothreadhook(pTHX)
337 =for apidoc perl_destruct
339 Shuts down a Perl interpreter. See L<perlembed>.
347 volatile int destruct_level; /* 0=none, 1=full, 2=full with checks */
349 #ifdef USE_5005THREADS
352 #endif /* USE_5005THREADS */
354 /* wait for all pseudo-forked children to finish */
355 PERL_WAIT_FOR_CHILDREN;
357 #ifdef USE_5005THREADS
359 /* Pass 1 on any remaining threads: detach joinables, join zombies */
361 MUTEX_LOCK(&PL_threads_mutex);
362 DEBUG_S(PerlIO_printf(Perl_debug_log,
363 "perl_destruct: waiting for %d threads...\n",
365 for (t = thr->next; t != thr; t = t->next) {
366 MUTEX_LOCK(&t->mutex);
367 switch (ThrSTATE(t)) {
370 DEBUG_S(PerlIO_printf(Perl_debug_log,
371 "perl_destruct: joining zombie %p\n", t));
372 ThrSETSTATE(t, THRf_DEAD);
373 MUTEX_UNLOCK(&t->mutex);
376 * The SvREFCNT_dec below may take a long time (e.g. av
377 * may contain an object scalar whose destructor gets
378 * called) so we have to unlock threads_mutex and start
381 MUTEX_UNLOCK(&PL_threads_mutex);
383 SvREFCNT_dec((SV*)av);
384 DEBUG_S(PerlIO_printf(Perl_debug_log,
385 "perl_destruct: joined zombie %p OK\n", t));
387 case THRf_R_JOINABLE:
388 DEBUG_S(PerlIO_printf(Perl_debug_log,
389 "perl_destruct: detaching thread %p\n", t));
390 ThrSETSTATE(t, THRf_R_DETACHED);
392 * We unlock threads_mutex and t->mutex in the opposite order
393 * from which we locked them just so that DETACH won't
394 * deadlock if it panics. It's only a breach of good style
395 * not a bug since they are unlocks not locks.
397 MUTEX_UNLOCK(&PL_threads_mutex);
399 MUTEX_UNLOCK(&t->mutex);
402 DEBUG_S(PerlIO_printf(Perl_debug_log,
403 "perl_destruct: ignoring %p (state %u)\n",
405 MUTEX_UNLOCK(&t->mutex);
406 /* fall through and out */
409 /* We leave the above "Pass 1" loop with threads_mutex still locked */
411 /* Pass 2 on remaining threads: wait for the thread count to drop to one */
412 while (PL_nthreads > 1)
414 DEBUG_S(PerlIO_printf(Perl_debug_log,
415 "perl_destruct: final wait for %d threads\n",
417 COND_WAIT(&PL_nthreads_cond, &PL_threads_mutex);
419 /* At this point, we're the last thread */
420 MUTEX_UNLOCK(&PL_threads_mutex);
421 DEBUG_S(PerlIO_printf(Perl_debug_log, "perl_destruct: armageddon has arrived\n"));
422 MUTEX_DESTROY(&PL_threads_mutex);
423 COND_DESTROY(&PL_nthreads_cond);
425 #endif /* !defined(FAKE_THREADS) */
426 #endif /* USE_5005THREADS */
428 destruct_level = PL_perl_destruct_level;
432 if ((s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"))) {
434 if (destruct_level < i)
441 if(PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
446 if (PL_endav && !PL_minus_c)
447 call_list(PL_scopestack_ix, PL_endav);
453 /* Need to flush since END blocks can produce output */
456 if (CALL_FPTR(PL_threadhook)(aTHX)) {
457 /* Threads hook has vetoed further cleanup */
458 return STATUS_NATIVE_EXPORT;
461 /* We must account for everything. */
463 /* Destroy the main CV and syntax tree */
465 /* If running under -d may not have PL_comppad. */
466 PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL;
467 op_free(PL_main_root);
468 PL_main_root = Nullop;
470 PL_curcop = &PL_compiling;
471 PL_main_start = Nullop;
472 SvREFCNT_dec(PL_main_cv);
476 /* Tell PerlIO we are about to tear things apart in case
477 we have layers which are using resources that should
481 PerlIO_destruct(aTHX);
483 if (PL_sv_objcount) {
485 * Try to destruct global references. We do this first so that the
486 * destructors and destructees still exist. Some sv's might remain.
487 * Non-referenced objects are on their own.
492 /* unhook hooks which will soon be, or use, destroyed data */
493 SvREFCNT_dec(PL_warnhook);
494 PL_warnhook = Nullsv;
495 SvREFCNT_dec(PL_diehook);
498 /* call exit list functions */
499 while (PL_exitlistlen-- > 0)
500 PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr);
502 Safefree(PL_exitlist);
504 if (destruct_level == 0){
506 DEBUG_P(debprofdump());
508 #if defined(PERLIO_LAYERS)
509 /* No more IO - including error messages ! */
510 PerlIO_cleanup(aTHX);
513 /* The exit() function will do everything that needs doing. */
514 return STATUS_NATIVE_EXPORT;
517 /* jettison our possibly duplicated environment */
518 /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied
519 * so we certainly shouldn't free it here
521 #if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV)
522 if (environ != PL_origenviron
524 /* only main thread can free environ[0] contents */
525 && PL_curinterp == aTHX
531 for (i = 0; environ[i]; i++)
532 safesysfree(environ[i]);
534 /* Must use safesysfree() when working with environ. */
535 safesysfree(environ);
537 environ = PL_origenviron;
542 /* the syntax tree is shared between clones
543 * so op_free(PL_main_root) only ReREFCNT_dec's
544 * REGEXPs in the parent interpreter
545 * we need to manually ReREFCNT_dec for the clones
548 I32 i = AvFILLp(PL_regex_padav) + 1;
549 SV **ary = AvARRAY(PL_regex_padav);
553 REGEXP *re = INT2PTR(REGEXP *,SvIVX(resv));
555 if (SvFLAGS(resv) & SVf_BREAK) {
556 /* this is PL_reg_curpm, already freed
557 * flag is set in regexec.c:S_regtry
559 SvFLAGS(resv) &= ~SVf_BREAK;
561 else if(SvREPADTMP(resv)) {
562 SvREPADTMP_off(resv);
569 SvREFCNT_dec(PL_regex_padav);
570 PL_regex_padav = Nullav;
574 /* loosen bonds of global variables */
577 (void)PerlIO_close(PL_rsfp);
581 /* Filters for program text */
582 SvREFCNT_dec(PL_rsfp_filters);
583 PL_rsfp_filters = Nullav;
586 PL_preprocess = FALSE;
592 PL_doswitches = FALSE;
593 PL_dowarn = G_WARN_OFF;
594 PL_doextract = FALSE;
595 PL_sawampersand = FALSE; /* must save all match strings */
598 Safefree(PL_inplace);
600 SvREFCNT_dec(PL_patchlevel);
603 SvREFCNT_dec(PL_e_script);
604 PL_e_script = Nullsv;
607 while (--PL_origargc >= 0) {
608 Safefree(PL_origargv[PL_origargc]);
610 Safefree(PL_origargv);
612 /* magical thingies */
614 SvREFCNT_dec(PL_ofs_sv); /* $, */
617 SvREFCNT_dec(PL_ors_sv); /* $\ */
620 SvREFCNT_dec(PL_rs); /* $/ */
623 PL_multiline = 0; /* $* */
624 Safefree(PL_osname); /* $^O */
627 SvREFCNT_dec(PL_statname);
628 PL_statname = Nullsv;
631 /* defgv, aka *_ should be taken care of elsewhere */
633 /* clean up after study() */
634 SvREFCNT_dec(PL_lastscream);
635 PL_lastscream = Nullsv;
636 Safefree(PL_screamfirst);
638 Safefree(PL_screamnext);
642 Safefree(PL_efloatbuf);
643 PL_efloatbuf = Nullch;
646 /* startup and shutdown function lists */
647 SvREFCNT_dec(PL_beginav);
648 SvREFCNT_dec(PL_beginav_save);
649 SvREFCNT_dec(PL_endav);
650 SvREFCNT_dec(PL_checkav);
651 SvREFCNT_dec(PL_checkav_save);
652 SvREFCNT_dec(PL_initav);
654 PL_beginav_save = Nullav;
657 PL_checkav_save = Nullav;
660 /* shortcuts just get cleared */
666 PL_argvoutgv = Nullgv;
668 PL_stderrgv = Nullgv;
669 PL_last_in_gv = Nullgv;
671 PL_debstash = Nullhv;
673 /* reset so print() ends up where we expect */
676 SvREFCNT_dec(PL_argvout_stack);
677 PL_argvout_stack = Nullav;
679 SvREFCNT_dec(PL_modglobal);
680 PL_modglobal = Nullhv;
681 SvREFCNT_dec(PL_preambleav);
682 PL_preambleav = Nullav;
683 SvREFCNT_dec(PL_subname);
685 SvREFCNT_dec(PL_linestr);
687 SvREFCNT_dec(PL_pidstatus);
688 PL_pidstatus = Nullhv;
689 SvREFCNT_dec(PL_toptarget);
690 PL_toptarget = Nullsv;
691 SvREFCNT_dec(PL_bodytarget);
692 PL_bodytarget = Nullsv;
693 PL_formtarget = Nullsv;
695 /* free locale stuff */
696 #ifdef USE_LOCALE_COLLATE
697 Safefree(PL_collation_name);
698 PL_collation_name = Nullch;
701 #ifdef USE_LOCALE_NUMERIC
702 Safefree(PL_numeric_name);
703 PL_numeric_name = Nullch;
704 SvREFCNT_dec(PL_numeric_radix_sv);
707 /* clear utf8 character classes */
708 SvREFCNT_dec(PL_utf8_alnum);
709 SvREFCNT_dec(PL_utf8_alnumc);
710 SvREFCNT_dec(PL_utf8_ascii);
711 SvREFCNT_dec(PL_utf8_alpha);
712 SvREFCNT_dec(PL_utf8_space);
713 SvREFCNT_dec(PL_utf8_cntrl);
714 SvREFCNT_dec(PL_utf8_graph);
715 SvREFCNT_dec(PL_utf8_digit);
716 SvREFCNT_dec(PL_utf8_upper);
717 SvREFCNT_dec(PL_utf8_lower);
718 SvREFCNT_dec(PL_utf8_print);
719 SvREFCNT_dec(PL_utf8_punct);
720 SvREFCNT_dec(PL_utf8_xdigit);
721 SvREFCNT_dec(PL_utf8_mark);
722 SvREFCNT_dec(PL_utf8_toupper);
723 SvREFCNT_dec(PL_utf8_totitle);
724 SvREFCNT_dec(PL_utf8_tolower);
725 SvREFCNT_dec(PL_utf8_tofold);
726 SvREFCNT_dec(PL_utf8_idstart);
727 SvREFCNT_dec(PL_utf8_idcont);
728 PL_utf8_alnum = Nullsv;
729 PL_utf8_alnumc = Nullsv;
730 PL_utf8_ascii = Nullsv;
731 PL_utf8_alpha = Nullsv;
732 PL_utf8_space = Nullsv;
733 PL_utf8_cntrl = Nullsv;
734 PL_utf8_graph = Nullsv;
735 PL_utf8_digit = Nullsv;
736 PL_utf8_upper = Nullsv;
737 PL_utf8_lower = Nullsv;
738 PL_utf8_print = Nullsv;
739 PL_utf8_punct = Nullsv;
740 PL_utf8_xdigit = Nullsv;
741 PL_utf8_mark = Nullsv;
742 PL_utf8_toupper = Nullsv;
743 PL_utf8_totitle = Nullsv;
744 PL_utf8_tolower = Nullsv;
745 PL_utf8_tofold = Nullsv;
746 PL_utf8_idstart = Nullsv;
747 PL_utf8_idcont = Nullsv;
749 if (!specialWARN(PL_compiling.cop_warnings))
750 SvREFCNT_dec(PL_compiling.cop_warnings);
751 PL_compiling.cop_warnings = Nullsv;
752 if (!specialCopIO(PL_compiling.cop_io))
753 SvREFCNT_dec(PL_compiling.cop_io);
754 PL_compiling.cop_io = Nullsv;
755 CopFILE_free(&PL_compiling);
756 CopSTASH_free(&PL_compiling);
758 /* Prepare to destruct main symbol table. */
763 SvREFCNT_dec(PL_curstname);
764 PL_curstname = Nullsv;
766 /* clear queued errors */
767 SvREFCNT_dec(PL_errors);
771 if (destruct_level >= 2 && ckWARN_d(WARN_INTERNAL)) {
772 if (PL_scopestack_ix != 0)
773 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
774 "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
775 (long)PL_scopestack_ix);
776 if (PL_savestack_ix != 0)
777 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
778 "Unbalanced saves: %ld more saves than restores\n",
779 (long)PL_savestack_ix);
780 if (PL_tmps_floor != -1)
781 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n",
782 (long)PL_tmps_floor + 1);
783 if (cxstack_ix != -1)
784 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n",
785 (long)cxstack_ix + 1);
788 /* Now absolutely destruct everything, somehow or other, loops or no. */
789 SvFLAGS(PL_fdpid) |= SVTYPEMASK; /* don't clean out pid table now */
790 SvFLAGS(PL_strtab) |= SVTYPEMASK; /* don't clean out strtab now */
792 /* the 2 is for PL_fdpid and PL_strtab */
793 while (PL_sv_count > 2 && sv_clean_all())
796 SvFLAGS(PL_fdpid) &= ~SVTYPEMASK;
797 SvFLAGS(PL_fdpid) |= SVt_PVAV;
798 SvFLAGS(PL_strtab) &= ~SVTYPEMASK;
799 SvFLAGS(PL_strtab) |= SVt_PVHV;
801 AvREAL_off(PL_fdpid); /* no surviving entries */
802 SvREFCNT_dec(PL_fdpid); /* needed in io_close() */
805 #ifdef HAVE_INTERP_INTERN
809 /* Destruct the global string table. */
811 /* Yell and reset the HeVAL() slots that are still holding refcounts,
812 * so that sv_free() won't fail on them.
820 max = HvMAX(PL_strtab);
821 array = HvARRAY(PL_strtab);
824 if (hent && ckWARN_d(WARN_INTERNAL)) {
825 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
826 "Unbalanced string table refcount: (%d) for \"%s\"",
827 HeVAL(hent) - Nullsv, HeKEY(hent));
828 HeVAL(hent) = Nullsv;
838 SvREFCNT_dec(PL_strtab);
841 /* free the pointer table used for cloning */
842 ptr_table_free(PL_ptr_table);
845 /* free special SVs */
847 SvREFCNT(&PL_sv_yes) = 0;
848 sv_clear(&PL_sv_yes);
849 SvANY(&PL_sv_yes) = NULL;
850 SvFLAGS(&PL_sv_yes) = 0;
852 SvREFCNT(&PL_sv_no) = 0;
854 SvANY(&PL_sv_no) = NULL;
855 SvFLAGS(&PL_sv_no) = 0;
859 for (i=0; i<=2; i++) {
860 SvREFCNT(PERL_DEBUG_PAD(i)) = 0;
861 sv_clear(PERL_DEBUG_PAD(i));
862 SvANY(PERL_DEBUG_PAD(i)) = NULL;
863 SvFLAGS(PERL_DEBUG_PAD(i)) = 0;
867 if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
868 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count);
870 #if defined(PERLIO_LAYERS)
871 /* No more IO - including error messages ! */
872 PerlIO_cleanup(aTHX);
875 /* sv_undef needs to stay immortal until after PerlIO_cleanup
876 as currently layers use it rather than Nullsv as a marker
877 for no arg - and will try and SvREFCNT_dec it.
879 SvREFCNT(&PL_sv_undef) = 0;
880 SvREADONLY_off(&PL_sv_undef);
882 Safefree(PL_origfilename);
883 Safefree(PL_reg_start_tmp);
885 Safefree(PL_reg_curpm);
886 Safefree(PL_reg_poscache);
887 Safefree(HeKEY_hek(&PL_hv_fetch_ent_mh));
888 Safefree(PL_op_mask);
889 Safefree(PL_psig_ptr);
890 Safefree(PL_psig_name);
891 Safefree(PL_bitcount);
892 Safefree(PL_psig_pend);
894 PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
896 DEBUG_P(debprofdump());
897 #ifdef USE_5005THREADS
898 MUTEX_DESTROY(&PL_strtab_mutex);
899 MUTEX_DESTROY(&PL_sv_mutex);
900 MUTEX_DESTROY(&PL_eval_mutex);
901 MUTEX_DESTROY(&PL_cred_mutex);
902 MUTEX_DESTROY(&PL_fdpid_mutex);
903 COND_DESTROY(&PL_eval_cond);
904 #ifdef EMULATE_ATOMIC_REFCOUNTS
905 MUTEX_DESTROY(&PL_svref_mutex);
906 #endif /* EMULATE_ATOMIC_REFCOUNTS */
908 /* As the penultimate thing, free the non-arena SV for thrsv */
909 Safefree(SvPVX(PL_thrsv));
910 Safefree(SvANY(PL_thrsv));
913 #endif /* USE_5005THREADS */
915 #ifdef USE_REENTRANT_API
916 Perl_reentrant_free(aTHX);
921 /* As the absolutely last thing, free the non-arena SV for mess() */
924 /* it could have accumulated taint magic */
925 if (SvTYPE(PL_mess_sv) >= SVt_PVMG) {
928 for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
929 moremagic = mg->mg_moremagic;
930 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global
932 Safefree(mg->mg_ptr);
936 /* we know that type >= SVt_PV */
937 (void)SvOOK_off(PL_mess_sv);
938 Safefree(SvPVX(PL_mess_sv));
939 Safefree(SvANY(PL_mess_sv));
940 Safefree(PL_mess_sv);
943 return STATUS_NATIVE_EXPORT;
947 =for apidoc perl_free
949 Releases a Perl interpreter. See L<perlembed>.
957 #if defined(WIN32) || defined(NETWARE)
958 # if defined(PERL_IMPLICIT_SYS)
960 void *host = nw_internal_host;
962 void *host = w32_internal_host;
966 nw_delete_internal_host(host);
968 win32_delete_internal_host(host);
979 Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
981 Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
982 PL_exitlist[PL_exitlistlen].fn = fn;
983 PL_exitlist[PL_exitlistlen].ptr = ptr;
988 =for apidoc perl_parse
990 Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
996 perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
1001 #ifdef USE_5005THREADS
1005 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
1008 Perl_croak(aTHX_ "suidperl is no longer needed since the kernel can now execute\n\
1009 setuid perl scripts securely.\n");
1015 /* we copy rather than point to argv
1016 * since perl_clone will copy and perl_destruct
1017 * has no way of knowing if we've made a copy or
1018 * just point to argv
1020 int i = PL_origargc;
1021 New(0, PL_origargv, i+1, char*);
1022 PL_origargv[i] = '\0';
1024 PL_origargv[i] = savepv(argv[i]);
1032 /* Come here if running an undumped a.out. */
1034 PL_origfilename = savepv(argv[0]);
1035 PL_do_undump = FALSE;
1036 cxstack_ix = -1; /* start label stack again */
1038 init_postdump_symbols(argc,argv,env);
1043 PL_curpad = AvARRAY(PL_comppad);
1044 op_free(PL_main_root);
1045 PL_main_root = Nullop;
1047 PL_main_start = Nullop;
1048 SvREFCNT_dec(PL_main_cv);
1049 PL_main_cv = Nullcv;
1052 oldscope = PL_scopestack_ix;
1053 PL_dowarn = G_WARN_OFF;
1055 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1056 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vparse_body), env, xsinit);
1062 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1063 parse_body(env,xsinit);
1066 call_list(oldscope, PL_checkav);
1073 /* my_exit() was called */
1074 while (PL_scopestack_ix > oldscope)
1077 PL_curstash = PL_defstash;
1079 call_list(oldscope, PL_checkav);
1080 ret = STATUS_NATIVE_EXPORT;
1083 PerlIO_printf(Perl_error_log, "panic: top_env\n");
1091 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1093 S_vparse_body(pTHX_ va_list args)
1095 char **env = va_arg(args, char**);
1096 XSINIT_t xsinit = va_arg(args, XSINIT_t);
1098 return parse_body(env, xsinit);
1103 S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
1105 int argc = PL_origargc;
1106 char **argv = PL_origargv;
1107 char *scriptname = NULL;
1109 VOL bool dosearch = FALSE;
1110 char *validarg = "";
1114 char *cddir = Nullch;
1116 sv_setpvn(PL_linestr,"",0);
1117 sv = newSVpvn("",0); /* first used for -I flags */
1121 for (argc--,argv++; argc > 0; argc--,argv++) {
1122 if (argv[0][0] != '-' || !argv[0][1])
1126 validarg = " PHOOEY ";
1135 win32_argv2utf8(argc-1, argv+1);
1138 #ifndef PERL_STRICT_CR
1162 if ((s = moreswitches(s)))
1167 if( !PL_tainting ) {
1168 PL_taint_warn = TRUE;
1175 PL_taint_warn = FALSE;
1180 #ifdef MACOS_TRADITIONAL
1181 /* ignore -e for Dev:Pseudo argument */
1182 if (argv[1] && !strcmp(argv[1], "Dev:Pseudo"))
1185 if (PL_euid != PL_uid || PL_egid != PL_gid)
1186 Perl_croak(aTHX_ "No -e allowed in setuid scripts");
1188 PL_e_script = newSVpvn("",0);
1189 filter_add(read_e_script, NULL);
1192 sv_catpv(PL_e_script, s);
1194 sv_catpv(PL_e_script, argv[1]);
1198 Perl_croak(aTHX_ "No code specified for -e");
1199 sv_catpv(PL_e_script, "\n");
1202 case 'I': /* -I handled both here and in moreswitches() */
1204 if (!*++s && (s=argv[1]) != Nullch) {
1209 STRLEN len = strlen(s);
1210 p = savepvn(s, len);
1211 incpush(p, TRUE, TRUE);
1212 sv_catpvn(sv, "-I", 2);
1213 sv_catpvn(sv, p, len);
1214 sv_catpvn(sv, " ", 1);
1218 Perl_croak(aTHX_ "No directory specified for -I");
1222 PL_preprocess = TRUE;
1232 PL_preambleav = newAV();
1233 av_push(PL_preambleav, newSVpv("use Config qw(myconfig config_vars)",0));
1235 PL_Sv = newSVpv("print myconfig();",0);
1237 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
1239 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
1241 sv_catpv(PL_Sv,"\" Compile-time options:");
1243 sv_catpv(PL_Sv," DEBUGGING");
1245 # ifdef MULTIPLICITY
1246 sv_catpv(PL_Sv," MULTIPLICITY");
1248 # ifdef USE_5005THREADS
1249 sv_catpv(PL_Sv," USE_5005THREADS");
1251 # ifdef USE_ITHREADS
1252 sv_catpv(PL_Sv," USE_ITHREADS");
1254 # ifdef USE_64_BIT_INT
1255 sv_catpv(PL_Sv," USE_64_BIT_INT");
1257 # ifdef USE_64_BIT_ALL
1258 sv_catpv(PL_Sv," USE_64_BIT_ALL");
1260 # ifdef USE_LONG_DOUBLE
1261 sv_catpv(PL_Sv," USE_LONG_DOUBLE");
1263 # ifdef USE_LARGE_FILES
1264 sv_catpv(PL_Sv," USE_LARGE_FILES");
1267 sv_catpv(PL_Sv," USE_SOCKS");
1269 # ifdef PERL_IMPLICIT_CONTEXT
1270 sv_catpv(PL_Sv," PERL_IMPLICIT_CONTEXT");
1272 # ifdef PERL_IMPLICIT_SYS
1273 sv_catpv(PL_Sv," PERL_IMPLICIT_SYS");
1275 sv_catpv(PL_Sv,"\\n\",");
1277 #if defined(LOCAL_PATCH_COUNT)
1278 if (LOCAL_PATCH_COUNT > 0) {
1280 sv_catpv(PL_Sv,"\" Locally applied patches:\\n\",");
1281 for (i = 1; i <= LOCAL_PATCH_COUNT; i++) {
1282 if (PL_localpatches[i])
1283 Perl_sv_catpvf(aTHX_ PL_Sv,"q\" \t%s\n\",",PL_localpatches[i]);
1287 Perl_sv_catpvf(aTHX_ PL_Sv,"\" Built under %s\\n\"",OSNAME);
1290 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled at %s %s\\n\"",__DATE__,__TIME__);
1292 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled on %s\\n\"",__DATE__);
1295 sv_catpv(PL_Sv, "; \
1297 @env = map { \"$_=\\\"$ENV{$_}\\\"\" } sort grep {/^PERL/} keys %ENV; ");
1300 push @env, \"CYGWIN=\\\"$ENV{CYGWIN}\\\"\";");
1303 print \" \\%ENV:\\n @env\\n\" if @env; \
1304 print \" \\@INC:\\n @INC\\n\";");
1307 PL_Sv = newSVpv("config_vars(qw(",0);
1308 sv_catpv(PL_Sv, ++s);
1309 sv_catpv(PL_Sv, "))");
1312 av_push(PL_preambleav, PL_Sv);
1313 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1316 PL_doextract = TRUE;
1324 if (!*++s || isSPACE(*s)) {
1328 /* catch use of gnu style long options */
1329 if (strEQ(s, "version")) {
1333 if (strEQ(s, "help")) {
1340 Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s);
1344 sv_setsv(get_sv("/", TRUE), PL_rs);
1347 #ifndef SECURE_INTERNAL_GETENV
1350 (s = PerlEnv_getenv("PERL5OPT")))
1355 if (*s == '-' && *(s+1) == 'T') {
1357 PL_taint_warn = FALSE;
1360 char *popt_copy = Nullch;
1373 if (!strchr("DIMUdmtw", *s))
1374 Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
1378 popt_copy = SvPVX(sv_2mortal(newSVpv(popt,0)));
1379 s = popt_copy + (s - popt);
1380 d = popt_copy + (d - popt);
1387 if( !PL_tainting ) {
1388 PL_taint_warn = TRUE;
1398 if (PL_taint_warn && PL_dowarn != G_WARN_ALL_OFF) {
1399 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
1403 scriptname = argv[0];
1406 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1408 else if (scriptname == Nullch) {
1410 if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
1418 open_script(scriptname,dosearch,sv,&fdscript);
1420 validate_suid(validarg, scriptname,fdscript);
1423 #if defined(SIGCHLD) || defined(SIGCLD)
1426 # define SIGCHLD SIGCLD
1428 Sighandler_t sigstate = rsignal_state(SIGCHLD);
1429 if (sigstate == SIG_IGN) {
1430 if (ckWARN(WARN_SIGNAL))
1431 Perl_warner(aTHX_ packWARN(WARN_SIGNAL),
1432 "Can't ignore signal CHLD, forcing to default");
1433 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
1439 #ifdef MACOS_TRADITIONAL
1440 if (PL_doextract || gMacPerl_AlwaysExtract) {
1445 if (cddir && PerlDir_chdir(cddir) < 0)
1446 Perl_croak(aTHX_ "Can't chdir to %s",cddir);
1450 PL_main_cv = PL_compcv = (CV*)NEWSV(1104,0);
1451 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
1452 CvUNIQUE_on(PL_compcv);
1454 PL_comppad = newAV();
1455 av_push(PL_comppad, Nullsv);
1456 PL_curpad = AvARRAY(PL_comppad);
1457 PL_comppad_name = newAV();
1458 PL_comppad_name_fill = 0;
1459 PL_min_intro_pending = 0;
1461 #ifdef USE_5005THREADS
1462 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
1463 PL_curpad[0] = (SV*)newAV();
1464 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
1465 CvOWNER(PL_compcv) = 0;
1466 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
1467 MUTEX_INIT(CvMUTEXP(PL_compcv));
1468 #endif /* USE_5005THREADS */
1470 comppadlist = newAV();
1471 AvREAL_off(comppadlist);
1472 av_store(comppadlist, 0, (SV*)PL_comppad_name);
1473 av_store(comppadlist, 1, (SV*)PL_comppad);
1474 CvPADLIST(PL_compcv) = comppadlist;
1477 boot_core_UNIVERSAL();
1479 boot_core_xsutils();
1483 (*xsinit)(aTHX); /* in case linked C routines want magical variables */
1485 #if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC)
1491 # ifdef HAS_SOCKS5_INIT
1492 socks5_init(argv[0]);
1498 init_predump_symbols();
1499 /* init_postdump_symbols not currently designed to be called */
1500 /* more than once (ENV isn't cleared first, for example) */
1501 /* But running with -u leaves %ENV & @ARGV undefined! XXX */
1503 init_postdump_symbols(argc,argv,env);
1505 /* PL_wantutf8 is conditionally turned on by
1506 * locale.c:Perl_init_i18nl10n() if the environment
1507 * look like the user wants to use UTF-8. */
1508 if (PL_wantutf8) { /* Requires init_predump_symbols(). */
1512 /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR
1513 * _and_ the default open discipline. */
1514 if (PL_stdingv && (io = GvIO(PL_stdingv)) && (fp = IoIFP(io)))
1515 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1516 if (PL_defoutgv && (io = GvIO(PL_defoutgv)) && (fp = IoOFP(io)))
1517 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1518 if (PL_stderrgv && (io = GvIO(PL_stderrgv)) && (fp = IoOFP(io)))
1519 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1520 if ((sv = GvSV(gv_fetchpv("\017PEN", TRUE, SVt_PV)))) {
1521 sv_setpvn(sv, ":utf8\0:utf8", 11);
1528 /* now parse the script */
1530 SETERRNO(0,SS_NORMAL);
1532 #ifdef MACOS_TRADITIONAL
1533 if (gMacPerl_SyntaxError = (yyparse() || PL_error_count)) {
1535 Perl_croak(aTHX_ "%s had compilation errors.\n", MacPerl_MPWFileName(PL_origfilename));
1537 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1538 MacPerl_MPWFileName(PL_origfilename));
1542 if (yyparse() || PL_error_count) {
1544 Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
1546 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1551 CopLINE_set(PL_curcop, 0);
1552 PL_curstash = PL_defstash;
1553 PL_preprocess = FALSE;
1555 SvREFCNT_dec(PL_e_script);
1556 PL_e_script = Nullsv;
1563 SAVECOPFILE(PL_curcop);
1564 SAVECOPLINE(PL_curcop);
1565 gv_check(PL_defstash);
1572 if ((s=PerlEnv_getenv("PERL_DEBUG_MSTATS")) && atoi(s) >= 2)
1573 dump_mstats("after compilation:");
1582 =for apidoc perl_run
1584 Tells a Perl interpreter to run. See L<perlembed>.
1595 #ifdef USE_5005THREADS
1599 oldscope = PL_scopestack_ix;
1604 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1606 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vrun_body), oldscope);
1612 cxstack_ix = -1; /* start context stack again */
1614 case 0: /* normal completion */
1615 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1620 case 2: /* my_exit() */
1621 while (PL_scopestack_ix > oldscope)
1624 PL_curstash = PL_defstash;
1625 if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) &&
1626 PL_endav && !PL_minus_c)
1627 call_list(oldscope, PL_endav);
1629 if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
1630 dump_mstats("after execution: ");
1632 ret = STATUS_NATIVE_EXPORT;
1636 POPSTACK_TO(PL_mainstack);
1639 PerlIO_printf(Perl_error_log, "panic: restartop\n");
1649 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1651 S_vrun_body(pTHX_ va_list args)
1653 I32 oldscope = va_arg(args, I32);
1655 return run_body(oldscope);
1661 S_run_body(pTHX_ I32 oldscope)
1663 DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
1664 PL_sawampersand ? "Enabling" : "Omitting"));
1666 if (!PL_restartop) {
1667 DEBUG_x(dump_all());
1668 DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
1669 DEBUG_S(PerlIO_printf(Perl_debug_log, "main thread is 0x%"UVxf"\n",
1673 #ifdef MACOS_TRADITIONAL
1674 PerlIO_printf(Perl_error_log, "%s%s syntax OK\n",
1675 (gMacPerl_ErrorFormat ? "# " : ""),
1676 MacPerl_MPWFileName(PL_origfilename));
1678 PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
1682 if (PERLDB_SINGLE && PL_DBsingle)
1683 sv_setiv(PL_DBsingle, 1);
1685 call_list(oldscope, PL_initav);
1691 PL_op = PL_restartop;
1695 else if (PL_main_start) {
1696 CvDEPTH(PL_main_cv) = 1;
1697 PL_op = PL_main_start;
1707 =head1 SV Manipulation Functions
1709 =for apidoc p||get_sv
1711 Returns the SV of the specified Perl scalar. If C<create> is set and the
1712 Perl variable does not exist then it will be created. If C<create> is not
1713 set and the variable does not exist then NULL is returned.
1719 Perl_get_sv(pTHX_ const char *name, I32 create)
1722 #ifdef USE_5005THREADS
1723 if (name[1] == '\0' && !isALPHA(name[0])) {
1724 PADOFFSET tmp = find_threadsv(name);
1725 if (tmp != NOT_IN_PAD)
1726 return THREADSV(tmp);
1728 #endif /* USE_5005THREADS */
1729 gv = gv_fetchpv(name, create, SVt_PV);
1736 =head1 Array Manipulation Functions
1738 =for apidoc p||get_av
1740 Returns the AV of the specified Perl array. If C<create> is set and the
1741 Perl variable does not exist then it will be created. If C<create> is not
1742 set and the variable does not exist then NULL is returned.
1748 Perl_get_av(pTHX_ const char *name, I32 create)
1750 GV* gv = gv_fetchpv(name, create, SVt_PVAV);
1759 =head1 Hash Manipulation Functions
1761 =for apidoc p||get_hv
1763 Returns the HV of the specified Perl hash. If C<create> is set and the
1764 Perl variable does not exist then it will be created. If C<create> is not
1765 set and the variable does not exist then NULL is returned.
1771 Perl_get_hv(pTHX_ const char *name, I32 create)
1773 GV* gv = gv_fetchpv(name, create, SVt_PVHV);
1782 =head1 CV Manipulation Functions
1784 =for apidoc p||get_cv
1786 Returns the CV of the specified Perl subroutine. If C<create> is set and
1787 the Perl subroutine does not exist then it will be declared (which has the
1788 same effect as saying C<sub name;>). If C<create> is not set and the
1789 subroutine does not exist then NULL is returned.
1795 Perl_get_cv(pTHX_ const char *name, I32 create)
1797 GV* gv = gv_fetchpv(name, create, SVt_PVCV);
1798 /* XXX unsafe for threads if eval_owner isn't held */
1799 /* XXX this is probably not what they think they're getting.
1800 * It has the same effect as "sub name;", i.e. just a forward
1802 if (create && !GvCVu(gv))
1803 return newSUB(start_subparse(FALSE, 0),
1804 newSVOP(OP_CONST, 0, newSVpv(name,0)),
1812 /* Be sure to refetch the stack pointer after calling these routines. */
1816 =head1 Callback Functions
1818 =for apidoc p||call_argv
1820 Performs a callback to the specified Perl sub. See L<perlcall>.
1826 Perl_call_argv(pTHX_ const char *sub_name, I32 flags, register char **argv)
1828 /* See G_* flags in cop.h */
1829 /* null terminated arg list */
1836 XPUSHs(sv_2mortal(newSVpv(*argv,0)));
1841 return call_pv(sub_name, flags);
1845 =for apidoc p||call_pv
1847 Performs a callback to the specified Perl sub. See L<perlcall>.
1853 Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
1854 /* name of the subroutine */
1855 /* See G_* flags in cop.h */
1857 return call_sv((SV*)get_cv(sub_name, TRUE), flags);
1861 =for apidoc p||call_method
1863 Performs a callback to the specified Perl method. The blessed object must
1864 be on the stack. See L<perlcall>.
1870 Perl_call_method(pTHX_ const char *methname, I32 flags)
1871 /* name of the subroutine */
1872 /* See G_* flags in cop.h */
1874 return call_sv(sv_2mortal(newSVpv(methname,0)), flags | G_METHOD);
1877 /* May be called with any of a CV, a GV, or an SV containing the name. */
1879 =for apidoc p||call_sv
1881 Performs a callback to the Perl sub whose name is in the SV. See
1888 Perl_call_sv(pTHX_ SV *sv, I32 flags)
1889 /* See G_* flags in cop.h */
1892 LOGOP myop; /* fake syntax tree node */
1895 volatile I32 retval = 0;
1897 bool oldcatch = CATCH_GET;
1902 if (flags & G_DISCARD) {
1907 Zero(&myop, 1, LOGOP);
1908 myop.op_next = Nullop;
1909 if (!(flags & G_NOARGS))
1910 myop.op_flags |= OPf_STACKED;
1911 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
1912 (flags & G_ARRAY) ? OPf_WANT_LIST :
1917 EXTEND(PL_stack_sp, 1);
1918 *++PL_stack_sp = sv;
1920 oldscope = PL_scopestack_ix;
1922 if (PERLDB_SUB && PL_curstash != PL_debstash
1923 /* Handle first BEGIN of -d. */
1924 && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
1925 /* Try harder, since this may have been a sighandler, thus
1926 * curstash may be meaningless. */
1927 && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != PL_debstash)
1928 && !(flags & G_NODEBUG))
1929 PL_op->op_private |= OPpENTERSUB_DB;
1931 if (flags & G_METHOD) {
1932 Zero(&method_op, 1, UNOP);
1933 method_op.op_next = PL_op;
1934 method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
1935 myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
1936 PL_op = (OP*)&method_op;
1939 if (!(flags & G_EVAL)) {
1941 call_body((OP*)&myop, FALSE);
1942 retval = PL_stack_sp - (PL_stack_base + oldmark);
1943 CATCH_SET(oldcatch);
1946 myop.op_other = (OP*)&myop;
1948 /* we're trying to emulate pp_entertry() here */
1950 register PERL_CONTEXT *cx;
1951 I32 gimme = GIMME_V;
1956 push_return(Nullop);
1957 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
1959 PL_eval_root = PL_op; /* Only needed so that goto works right. */
1961 PL_in_eval = EVAL_INEVAL;
1962 if (flags & G_KEEPERR)
1963 PL_in_eval |= EVAL_KEEPERR;
1969 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1971 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
1978 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1980 call_body((OP*)&myop, FALSE);
1982 retval = PL_stack_sp - (PL_stack_base + oldmark);
1983 if (!(flags & G_KEEPERR))
1990 /* my_exit() was called */
1991 PL_curstash = PL_defstash;
1994 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
1995 Perl_croak(aTHX_ "Callback called exit");
2000 PL_op = PL_restartop;
2004 PL_stack_sp = PL_stack_base + oldmark;
2005 if (flags & G_ARRAY)
2009 *++PL_stack_sp = &PL_sv_undef;
2014 if (PL_scopestack_ix > oldscope) {
2018 register PERL_CONTEXT *cx;
2030 if (flags & G_DISCARD) {
2031 PL_stack_sp = PL_stack_base + oldmark;
2040 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2042 S_vcall_body(pTHX_ va_list args)
2044 OP *myop = va_arg(args, OP*);
2045 int is_eval = va_arg(args, int);
2047 call_body(myop, is_eval);
2053 S_call_body(pTHX_ OP *myop, int is_eval)
2055 if (PL_op == myop) {
2057 PL_op = Perl_pp_entereval(aTHX); /* this doesn't do a POPMARK */
2059 PL_op = Perl_pp_entersub(aTHX); /* this does */
2065 /* Eval a string. The G_EVAL flag is always assumed. */
2068 =for apidoc p||eval_sv
2070 Tells Perl to C<eval> the string in the SV.
2076 Perl_eval_sv(pTHX_ SV *sv, I32 flags)
2078 /* See G_* flags in cop.h */
2081 UNOP myop; /* fake syntax tree node */
2082 volatile I32 oldmark = SP - PL_stack_base;
2083 volatile I32 retval = 0;
2089 if (flags & G_DISCARD) {
2096 Zero(PL_op, 1, UNOP);
2097 EXTEND(PL_stack_sp, 1);
2098 *++PL_stack_sp = sv;
2099 oldscope = PL_scopestack_ix;
2101 if (!(flags & G_NOARGS))
2102 myop.op_flags = OPf_STACKED;
2103 myop.op_next = Nullop;
2104 myop.op_type = OP_ENTEREVAL;
2105 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
2106 (flags & G_ARRAY) ? OPf_WANT_LIST :
2108 if (flags & G_KEEPERR)
2109 myop.op_flags |= OPf_SPECIAL;
2111 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2113 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
2120 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2122 call_body((OP*)&myop,TRUE);
2124 retval = PL_stack_sp - (PL_stack_base + oldmark);
2125 if (!(flags & G_KEEPERR))
2132 /* my_exit() was called */
2133 PL_curstash = PL_defstash;
2136 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
2137 Perl_croak(aTHX_ "Callback called exit");
2142 PL_op = PL_restartop;
2146 PL_stack_sp = PL_stack_base + oldmark;
2147 if (flags & G_ARRAY)
2151 *++PL_stack_sp = &PL_sv_undef;
2157 if (flags & G_DISCARD) {
2158 PL_stack_sp = PL_stack_base + oldmark;
2168 =for apidoc p||eval_pv
2170 Tells Perl to C<eval> the given string and return an SV* result.
2176 Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
2179 SV* sv = newSVpv(p, 0);
2181 eval_sv(sv, G_SCALAR);
2188 if (croak_on_error && SvTRUE(ERRSV)) {
2190 Perl_croak(aTHX_ SvPVx(ERRSV, n_a));
2196 /* Require a module. */
2199 =head1 Embedding Functions
2201 =for apidoc p||require_pv
2203 Tells Perl to C<require> the file named by the string argument. It is
2204 analogous to the Perl code C<eval "require '$file'">. It's even
2205 implemented that way; consider using Perl_load_module instead.
2210 Perl_require_pv(pTHX_ const char *pv)
2214 PUSHSTACKi(PERLSI_REQUIRE);
2216 sv = sv_newmortal();
2217 sv_setpv(sv, "require '");
2220 eval_sv(sv, G_DISCARD);
2226 Perl_magicname(pTHX_ char *sym, char *name, I32 namlen)
2230 if ((gv = gv_fetchpv(sym,TRUE, SVt_PV)))
2231 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, namlen);
2235 S_usage(pTHX_ char *name) /* XXX move this out into a module ? */
2237 /* This message really ought to be max 23 lines.
2238 * Removed -h because the user already knows that option. Others? */
2240 static char *usage_msg[] = {
2241 "-0[octal] specify record separator (\\0, if no argument)",
2242 "-a autosplit mode with -n or -p (splits $_ into @F)",
2243 "-C enable native wide character system interfaces",
2244 "-c check syntax only (runs BEGIN and CHECK blocks)",
2245 "-d[:debugger] run program under debugger",
2246 "-D[number/list] set debugging flags (argument is a bit mask or alphabets)",
2247 "-e 'command' one line of program (several -e's allowed, omit programfile)",
2248 "-F/pattern/ split() pattern for -a switch (//'s are optional)",
2249 "-i[extension] edit <> files in place (makes backup if extension supplied)",
2250 "-Idirectory specify @INC/#include directory (several -I's allowed)",
2251 "-l[octal] enable line ending processing, specifies line terminator",
2252 "-[mM][-]module execute `use/no module...' before executing program",
2253 "-n assume 'while (<>) { ... }' loop around program",
2254 "-p assume loop like -n but print line also, like sed",
2255 "-P run program through C preprocessor before compilation",
2256 "-s enable rudimentary parsing for switches after programfile",
2257 "-S look for programfile using PATH environment variable",
2258 "-T enable tainting checks",
2259 "-t enable tainting warnings",
2260 "-u dump core after parsing program",
2261 "-U allow unsafe operations",
2262 "-v print version, subversion (includes VERY IMPORTANT perl info)",
2263 "-V[:variable] print configuration summary (or a single Config.pm variable)",
2264 "-w enable many useful warnings (RECOMMENDED)",
2265 "-W enable all warnings",
2266 "-X disable all warnings",
2267 "-x[directory] strip off text before #!perl line and perhaps cd to directory",
2271 char **p = usage_msg;
2273 PerlIO_printf(PerlIO_stdout(),
2274 "\nUsage: %s [switches] [--] [programfile] [arguments]",
2277 PerlIO_printf(PerlIO_stdout(), "\n %s", *p++);
2280 /* This routine handles any switches that can be given during run */
2283 Perl_moreswitches(pTHX_ char *s)
2293 rschar = (U32)grok_oct(s, &numlen, &flags, NULL);
2294 SvREFCNT_dec(PL_rs);
2295 if (rschar & ~((U8)~0))
2296 PL_rs = &PL_sv_undef;
2297 else if (!rschar && numlen >= 2)
2298 PL_rs = newSVpvn("", 0);
2300 char ch = (char)rschar;
2301 PL_rs = newSVpvn(&ch, 1);
2306 PL_widesyscalls = TRUE;
2312 while (*s && !isSPACE(*s)) ++s;
2314 PL_splitstr = savepv(PL_splitstr);
2327 /* The following permits -d:Mod to accepts arguments following an =
2328 in the fashion that -MSome::Mod does. */
2329 if (*s == ':' || *s == '=') {
2332 sv = newSVpv("use Devel::", 0);
2334 /* We now allow -d:Module=Foo,Bar */
2335 while(isALNUM(*s) || *s==':') ++s;
2337 sv_catpv(sv, start);
2339 sv_catpvn(sv, start, s-start);
2340 sv_catpv(sv, " split(/,/,q{");
2345 my_setenv("PERL5DB", SvPV(sv, PL_na));
2348 PL_perldb = PERLDB_ALL;
2356 if (isALPHA(s[1])) {
2357 /* if adding extra options, remember to update DEBUG_MASK */
2358 static char debopts[] = "psltocPmfrxuLHXDSTRJ";
2361 for (s++; *s && (d = strchr(debopts,*s)); s++)
2362 PL_debug |= 1 << (d - debopts);
2365 PL_debug = atoi(s+1);
2366 for (s++; isDIGIT(*s); s++) ;
2369 if (DEBUG_p_TEST_ && ckWARN_d(WARN_DEBUGGING))
2370 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2371 "-Dp not implemented on this platform\n");
2373 PL_debug |= DEBUG_TOP_FLAG;
2374 #else /* !DEBUGGING */
2375 if (ckWARN_d(WARN_DEBUGGING))
2376 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2377 "Recompile perl with -DDEBUGGING to use -D switch\n");
2378 for (s++; isALNUM(*s); s++) ;
2384 usage(PL_origargv[0]);
2388 Safefree(PL_inplace);
2389 #if defined(__CYGWIN__) /* do backup extension automagically */
2390 if (*(s+1) == '\0') {
2391 PL_inplace = savepv(".bak");
2394 #endif /* __CYGWIN__ */
2395 PL_inplace = savepv(s+1);
2397 for (s = PL_inplace; *s && !isSPACE(*s); s++) ;
2400 if (*s == '-') /* Additional switches on #! line. */
2404 case 'I': /* -I handled both here and in parse_body() */
2407 while (*s && isSPACE(*s))
2412 /* ignore trailing spaces (possibly followed by other switches) */
2414 for (e = p; *e && !isSPACE(*e); e++) ;
2418 } while (*p && *p != '-');
2419 e = savepvn(s, e-s);
2420 incpush(e, TRUE, TRUE);
2427 Perl_croak(aTHX_ "No directory specified for -I");
2433 SvREFCNT_dec(PL_ors_sv);
2438 PL_ors_sv = newSVpvn("\n",1);
2439 numlen = 3 + (*s == '0');
2440 *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL);
2444 if (RsPARA(PL_rs)) {
2445 PL_ors_sv = newSVpvn("\n\n",2);
2448 PL_ors_sv = newSVsv(PL_rs);
2453 forbid_setid("-M"); /* XXX ? */
2456 forbid_setid("-m"); /* XXX ? */
2461 /* -M-foo == 'no foo' */
2462 if (*s == '-') { use = "no "; ++s; }
2463 sv = newSVpv(use,0);
2465 /* We allow -M'Module qw(Foo Bar)' */
2466 while(isALNUM(*s) || *s==':') ++s;
2468 sv_catpv(sv, start);
2469 if (*(start-1) == 'm') {
2471 Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
2472 sv_catpv( sv, " ()");
2476 Perl_croak(aTHX_ "Module name required with -%c option",
2478 sv_catpvn(sv, start, s-start);
2479 sv_catpv(sv, " split(/,/,q{");
2485 PL_preambleav = newAV();
2486 av_push(PL_preambleav, sv);
2489 Perl_croak(aTHX_ "No space allowed after -%c", *(s-1));
2501 PL_doswitches = TRUE;
2506 Perl_croak(aTHX_ "Too late for \"-t\" option");
2511 Perl_croak(aTHX_ "Too late for \"-T\" option");
2515 #ifdef MACOS_TRADITIONAL
2516 Perl_croak(aTHX_ "Believe me, you don't want to use \"-u\" on a Macintosh");
2518 PL_do_undump = TRUE;
2527 PerlIO_printf(PerlIO_stdout(),
2528 Perl_form(aTHX_ "\nThis is perl, v%"VDf" built for %s",
2529 PL_patchlevel, ARCHNAME));
2531 /* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */
2532 PerlIO_printf(PerlIO_stdout(),
2533 Perl_form(aTHX_ "\nThis is perl, version %vd\n", PL_patchlevel));
2534 PerlIO_printf(PerlIO_stdout(),
2535 Perl_form(aTHX_ " built under %s at %s %s\n",
2536 OSNAME, __DATE__, __TIME__));
2537 PerlIO_printf(PerlIO_stdout(),
2538 Perl_form(aTHX_ " OS Specific Release: %s\n",
2542 #if defined(LOCAL_PATCH_COUNT)
2543 if (LOCAL_PATCH_COUNT > 0)
2544 PerlIO_printf(PerlIO_stdout(),
2545 "\n(with %d registered patch%s, "
2546 "see perl -V for more detail)",
2547 (int)LOCAL_PATCH_COUNT,
2548 (LOCAL_PATCH_COUNT!=1) ? "es" : "");
2551 PerlIO_printf(PerlIO_stdout(),
2552 "\n\nCopyright 1987-2002, Larry Wall\n");
2553 #ifdef MACOS_TRADITIONAL
2554 PerlIO_printf(PerlIO_stdout(),
2555 "\nMac OS port Copyright 1991-2002, Matthias Neeracher;\n"
2556 "maintained by Chris Nandor\n");
2559 PerlIO_printf(PerlIO_stdout(),
2560 "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
2563 PerlIO_printf(PerlIO_stdout(),
2564 "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
2565 "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
2568 PerlIO_printf(PerlIO_stdout(),
2569 "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
2570 "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n");
2573 PerlIO_printf(PerlIO_stdout(),
2574 "atariST series port, ++jrb bammi@cadence.com\n");
2577 PerlIO_printf(PerlIO_stdout(),
2578 "BeOS port Copyright Tom Spindler, 1997-1999\n");
2581 PerlIO_printf(PerlIO_stdout(),
2582 "MPE/iX port Copyright by Mark Klein and Mark Bixby, 1996-2002\n");
2585 PerlIO_printf(PerlIO_stdout(),
2586 "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
2589 PerlIO_printf(PerlIO_stdout(),
2590 "Stratus VOS port by Paul.Green@stratus.com, 1997-2002\n");
2593 PerlIO_printf(PerlIO_stdout(),
2594 "VM/ESA port by Neale Ferguson, 1998-1999\n");
2597 PerlIO_printf(PerlIO_stdout(),
2598 "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
2601 PerlIO_printf(PerlIO_stdout(),
2602 "MiNT port by Guido Flohr, 1997-1999\n");
2605 PerlIO_printf(PerlIO_stdout(),
2606 "EPOC port by Olaf Flebbe, 1999-2002\n");
2609 printf("WINCE port by Rainer Keuchel, 2001-2002\n");
2610 printf("Built on " __DATE__ " " __TIME__ "\n\n");
2613 #ifdef BINARY_BUILD_NOTICE
2614 BINARY_BUILD_NOTICE;
2616 PerlIO_printf(PerlIO_stdout(),
2618 Perl may be copied only under the terms of either the Artistic License or the\n\
2619 GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
2620 Complete documentation for Perl, including FAQ lists, should be found on\n\
2621 this system using `man perl' or `perldoc perl'. If you have access to the\n\
2622 Internet, point your browser at http://www.perl.com/, the Perl Home Page.\n\n");
2625 if (! (PL_dowarn & G_WARN_ALL_MASK))
2626 PL_dowarn |= G_WARN_ON;
2630 PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
2631 if (!specialWARN(PL_compiling.cop_warnings))
2632 SvREFCNT_dec(PL_compiling.cop_warnings);
2633 PL_compiling.cop_warnings = pWARN_ALL ;
2637 PL_dowarn = G_WARN_ALL_OFF;
2638 if (!specialWARN(PL_compiling.cop_warnings))
2639 SvREFCNT_dec(PL_compiling.cop_warnings);
2640 PL_compiling.cop_warnings = pWARN_NONE ;
2645 if (s[1] == '-') /* Additional switches on #! line. */
2650 #if defined(WIN32) || !defined(PERL_STRICT_CR)
2656 #ifdef ALTERNATE_SHEBANG
2657 case 'S': /* OS/2 needs -S on "extproc" line. */
2665 Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
2670 /* compliments of Tom Christiansen */
2672 /* unexec() can be found in the Gnu emacs distribution */
2673 /* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
2676 Perl_my_unexec(pTHX)
2684 prog = newSVpv(BIN_EXP, 0);
2685 sv_catpv(prog, "/perl");
2686 file = newSVpv(PL_origfilename, 0);
2687 sv_catpv(file, ".perldump");
2689 unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
2690 /* unexec prints msg to stderr in case of failure */
2691 PerlProc_exit(status);
2694 # include <lib$routines.h>
2695 lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */
2697 ABORT(); /* for use with undump */
2702 /* initialize curinterp */
2708 # define PERLVAR(var,type)
2709 # define PERLVARA(var,n,type)
2710 # if defined(PERL_IMPLICIT_CONTEXT)
2711 # if defined(USE_5005THREADS)
2712 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2713 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2714 # else /* !USE_5005THREADS */
2715 # define PERLVARI(var,type,init) aTHX->var = init;
2716 # define PERLVARIC(var,type,init) aTHX->var = init;
2717 # endif /* USE_5005THREADS */
2719 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2720 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2722 # include "intrpvar.h"
2723 # ifndef USE_5005THREADS
2724 # include "thrdvar.h"
2731 # define PERLVAR(var,type)
2732 # define PERLVARA(var,n,type)
2733 # define PERLVARI(var,type,init) PL_##var = init;
2734 # define PERLVARIC(var,type,init) PL_##var = init;
2735 # include "intrpvar.h"
2736 # ifndef USE_5005THREADS
2737 # include "thrdvar.h"
2748 S_init_main_stash(pTHX)
2752 PL_curstash = PL_defstash = newHV();
2753 PL_curstname = newSVpvn("main",4);
2754 gv = gv_fetchpv("main::",TRUE, SVt_PVHV);
2755 SvREFCNT_dec(GvHV(gv));
2756 GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
2758 HvNAME(PL_defstash) = savepv("main");
2759 PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
2760 GvMULTI_on(PL_incgv);
2761 PL_hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */
2762 GvMULTI_on(PL_hintgv);
2763 PL_defgv = gv_fetchpv("_",TRUE, SVt_PVAV);
2764 PL_errgv = gv_HVadd(gv_fetchpv("@", TRUE, SVt_PV));
2765 GvMULTI_on(PL_errgv);
2766 PL_replgv = gv_fetchpv("\022", TRUE, SVt_PV); /* ^R */
2767 GvMULTI_on(PL_replgv);
2768 (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */
2769 sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */
2770 sv_setpvn(ERRSV, "", 0);
2771 PL_curstash = PL_defstash;
2772 CopSTASH_set(&PL_compiling, PL_defstash);
2773 PL_debstash = GvHV(gv_fetchpv("DB::", GV_ADDMULTI, SVt_PVHV));
2774 PL_globalstash = GvHV(gv_fetchpv("CORE::GLOBAL::", GV_ADDMULTI, SVt_PVHV));
2775 PL_nullstash = GvHV(gv_fetchpv("<none>::", GV_ADDMULTI, SVt_PVHV));
2776 /* We must init $/ before switches are processed. */
2777 sv_setpvn(get_sv("/", TRUE), "\n", 1);
2781 S_open_script(pTHX_ char *scriptname, bool dosearch, SV *sv, int *fdscript)
2785 char *cpp_discard_flag;
2791 PL_origfilename = savepv("-e");
2794 /* if find_script() returns, it returns a malloc()-ed value */
2795 PL_origfilename = scriptname = find_script(scriptname, dosearch, NULL, 1);
2797 if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) {
2798 char *s = scriptname + 8;
2799 *fdscript = atoi(s);
2803 scriptname = savepv(s + 1);
2804 Safefree(PL_origfilename);
2805 PL_origfilename = scriptname;
2810 CopFILE_free(PL_curcop);
2811 CopFILE_set(PL_curcop, PL_origfilename);
2812 if (strEQ(PL_origfilename,"-"))
2814 if (*fdscript >= 0) {
2815 PL_rsfp = PerlIO_fdopen(*fdscript,PERL_SCRIPT_MODE);
2816 # if defined(HAS_FCNTL) && defined(F_SETFD)
2818 /* ensure close-on-exec */
2819 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2822 else if (PL_preprocess) {
2823 char *cpp_cfg = CPPSTDIN;
2824 SV *cpp = newSVpvn("",0);
2825 SV *cmd = NEWSV(0,0);
2827 if (strEQ(cpp_cfg, "cppstdin"))
2828 Perl_sv_catpvf(aTHX_ cpp, "%s/", BIN_EXP);
2829 sv_catpv(cpp, cpp_cfg);
2832 sv_catpvn(sv, "-I", 2);
2833 sv_catpv(sv,PRIVLIB_EXP);
2836 DEBUG_P(PerlIO_printf(Perl_debug_log,
2837 "PL_preprocess: scriptname=\"%s\", cpp=\"%s\", sv=\"%s\", CPPMINUS=\"%s\"\n",
2838 scriptname, SvPVX (cpp), SvPVX (sv), CPPMINUS));
2840 # if defined(MSDOS) || defined(WIN32) || defined(VMS)
2847 cpp_discard_flag = "";
2849 cpp_discard_flag = "-C";
2853 perl = os2_execname(aTHX);
2855 perl = PL_origargv[0];
2859 /* This strips off Perl comments which might interfere with
2860 the C pre-processor, including #!. #line directives are
2861 deliberately stripped to avoid confusion with Perl's version
2862 of #line. FWP played some golf with it so it will fit
2863 into VMS's 255 character buffer.
2866 code = "(1../^#!.*perl/i)|/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2868 code = "/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2870 Perl_sv_setpvf(aTHX_ cmd, "\
2871 %s -ne%s%s%s %s | %"SVf" %s %"SVf" %s",
2872 perl, quote, code, quote, scriptname, cpp,
2873 cpp_discard_flag, sv, CPPMINUS);
2875 PL_doextract = FALSE;
2876 # ifdef IAMSUID /* actually, this is caught earlier */
2877 if (PL_euid != PL_uid && !PL_euid) { /* if running suidperl */
2879 (void)seteuid(PL_uid); /* musn't stay setuid root */
2881 # ifdef HAS_SETREUID
2882 (void)setreuid((Uid_t)-1, PL_uid);
2884 # ifdef HAS_SETRESUID
2885 (void)setresuid((Uid_t)-1, PL_uid, (Uid_t)-1);
2887 PerlProc_setuid(PL_uid);
2891 if (PerlProc_geteuid() != PL_uid)
2892 Perl_croak(aTHX_ "Can't do seteuid!\n");
2894 # endif /* IAMSUID */
2896 DEBUG_P(PerlIO_printf(Perl_debug_log,
2897 "PL_preprocess: cmd=\"%s\"\n",
2900 PL_rsfp = PerlProc_popen(SvPVX(cmd), "r");
2904 else if (!*scriptname) {
2905 forbid_setid("program input from stdin");
2906 PL_rsfp = PerlIO_stdin();
2909 PL_rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
2910 # if defined(HAS_FCNTL) && defined(F_SETFD)
2912 /* ensure close-on-exec */
2913 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2918 # ifndef IAMSUID /* in case script is not readable before setuid */
2920 PerlLIO_stat(CopFILE(PL_curcop),&PL_statbuf) >= 0 &&
2921 PL_statbuf.st_mode & (S_ISUID|S_ISGID))
2924 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT,
2925 BIN_EXP, (int)PERL_REVISION,
2927 (int)PERL_SUBVERSION), PL_origargv);
2928 Perl_croak(aTHX_ "Can't do setuid\n");
2934 Perl_croak(aTHX_ "Can't open perl script: %s\n",
2937 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
2938 CopFILE(PL_curcop), Strerror(errno));
2944 * I_SYSSTATVFS HAS_FSTATVFS
2946 * I_STATFS HAS_FSTATFS HAS_GETFSSTAT
2947 * I_MNTENT HAS_GETMNTENT HAS_HASMNTOPT
2948 * here so that metaconfig picks them up. */
2952 S_fd_on_nosuid_fs(pTHX_ int fd)
2954 int check_okay = 0; /* able to do all the required sys/libcalls */
2955 int on_nosuid = 0; /* the fd is on a nosuid fs */
2957 * Preferred order: fstatvfs(), fstatfs(), ustat()+getmnt(), getmntent().
2958 * fstatvfs() is UNIX98.
2959 * fstatfs() is 4.3 BSD.
2960 * ustat()+getmnt() is pre-4.3 BSD.
2961 * getmntent() is O(number-of-mounted-filesystems) and can hang on
2962 * an irrelevant filesystem while trying to reach the right one.
2965 #undef FD_ON_NOSUID_CHECK_OKAY /* found the syscalls to do the check? */
2967 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2968 defined(HAS_FSTATVFS)
2969 # define FD_ON_NOSUID_CHECK_OKAY
2970 struct statvfs stfs;
2972 check_okay = fstatvfs(fd, &stfs) == 0;
2973 on_nosuid = check_okay && (stfs.f_flag & ST_NOSUID);
2974 # endif /* fstatvfs */
2976 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2977 defined(PERL_MOUNT_NOSUID) && \
2978 defined(HAS_FSTATFS) && \
2979 defined(HAS_STRUCT_STATFS) && \
2980 defined(HAS_STRUCT_STATFS_F_FLAGS)
2981 # define FD_ON_NOSUID_CHECK_OKAY
2984 check_okay = fstatfs(fd, &stfs) == 0;
2985 on_nosuid = check_okay && (stfs.f_flags & PERL_MOUNT_NOSUID);
2986 # endif /* fstatfs */
2988 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2989 defined(PERL_MOUNT_NOSUID) && \
2990 defined(HAS_FSTAT) && \
2991 defined(HAS_USTAT) && \
2992 defined(HAS_GETMNT) && \
2993 defined(HAS_STRUCT_FS_DATA) && \
2995 # define FD_ON_NOSUID_CHECK_OKAY
2998 if (fstat(fd, &fdst) == 0) {
3000 if (ustat(fdst.st_dev, &us) == 0) {
3002 /* NOSTAT_ONE here because we're not examining fields which
3003 * vary between that case and STAT_ONE. */
3004 if (getmnt((int*)0, &fsd, (int)0, NOSTAT_ONE, us.f_fname) == 0) {
3005 size_t cmplen = sizeof(us.f_fname);
3006 if (sizeof(fsd.fd_req.path) < cmplen)
3007 cmplen = sizeof(fsd.fd_req.path);
3008 if (strnEQ(fsd.fd_req.path, us.f_fname, cmplen) &&
3009 fdst.st_dev == fsd.fd_req.dev) {
3011 on_nosuid = fsd.fd_req.flags & PERL_MOUNT_NOSUID;
3017 # endif /* fstat+ustat+getmnt */
3019 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
3020 defined(HAS_GETMNTENT) && \
3021 defined(HAS_HASMNTOPT) && \
3022 defined(MNTOPT_NOSUID)
3023 # define FD_ON_NOSUID_CHECK_OKAY
3024 FILE *mtab = fopen("/etc/mtab", "r");
3025 struct mntent *entry;
3028 if (mtab && (fstat(fd, &stb) == 0)) {
3029 while (entry = getmntent(mtab)) {
3030 if (stat(entry->mnt_dir, &fsb) == 0
3031 && fsb.st_dev == stb.st_dev)
3033 /* found the filesystem */
3035 if (hasmntopt(entry, MNTOPT_NOSUID))
3038 } /* A single fs may well fail its stat(). */
3043 # endif /* getmntent+hasmntopt */
3046 Perl_croak(aTHX_ "Can't check filesystem of script \"%s\" for nosuid", PL_origfilename);
3049 #endif /* IAMSUID */
3052 S_validate_suid(pTHX_ char *validarg, char *scriptname, int fdscript)
3058 /* do we need to emulate setuid on scripts? */
3060 /* This code is for those BSD systems that have setuid #! scripts disabled
3061 * in the kernel because of a security problem. Merely defining DOSUID
3062 * in perl will not fix that problem, but if you have disabled setuid
3063 * scripts in the kernel, this will attempt to emulate setuid and setgid
3064 * on scripts that have those now-otherwise-useless bits set. The setuid
3065 * root version must be called suidperl or sperlN.NNN. If regular perl
3066 * discovers that it has opened a setuid script, it calls suidperl with
3067 * the same argv that it had. If suidperl finds that the script it has
3068 * just opened is NOT setuid root, it sets the effective uid back to the
3069 * uid. We don't just make perl setuid root because that loses the
3070 * effective uid we had before invoking perl, if it was different from the
3073 * DOSUID must be defined in both perl and suidperl, and IAMSUID must
3074 * be defined in suidperl only. suidperl must be setuid root. The
3075 * Configure script will set this up for you if you want it.
3081 if (PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf) < 0) /* normal stat is insecure */
3082 Perl_croak(aTHX_ "Can't stat script \"%s\"",PL_origfilename);
3083 if (fdscript < 0 && PL_statbuf.st_mode & (S_ISUID|S_ISGID)) {
3088 #ifndef HAS_SETREUID
3089 /* On this access check to make sure the directories are readable,
3090 * there is actually a small window that the user could use to make
3091 * filename point to an accessible directory. So there is a faint
3092 * chance that someone could execute a setuid script down in a
3093 * non-accessible directory. I don't know what to do about that.
3094 * But I don't think it's too important. The manual lies when
3095 * it says access() is useful in setuid programs.
3097 if (PerlLIO_access(CopFILE(PL_curcop),1)) /*double check*/
3098 Perl_croak(aTHX_ "Permission denied");
3100 /* If we can swap euid and uid, then we can determine access rights
3101 * with a simple stat of the file, and then compare device and
3102 * inode to make sure we did stat() on the same file we opened.
3103 * Then we just have to make sure he or she can execute it.
3110 setreuid(PL_euid,PL_uid) < 0
3113 setresuid(PL_euid,PL_uid,(Uid_t)-1) < 0
3116 || PerlProc_getuid() != PL_euid || PerlProc_geteuid() != PL_uid)
3117 Perl_croak(aTHX_ "Can't swap uid and euid"); /* really paranoid */
3118 if (PerlLIO_stat(CopFILE(PL_curcop),&tmpstatbuf) < 0)
3119 Perl_croak(aTHX_ "Permission denied"); /* testing full pathname here */
3120 #if defined(IAMSUID) && !defined(NO_NOSUID_CHECK)
3121 if (fd_on_nosuid_fs(PerlIO_fileno(PL_rsfp)))
3122 Perl_croak(aTHX_ "Permission denied");
3124 if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
3125 tmpstatbuf.st_ino != PL_statbuf.st_ino) {
3126 (void)PerlIO_close(PL_rsfp);
3127 Perl_croak(aTHX_ "Permission denied\n");
3131 setreuid(PL_uid,PL_euid) < 0
3133 # if defined(HAS_SETRESUID)
3134 setresuid(PL_uid,PL_euid,(Uid_t)-1) < 0
3137 || PerlProc_getuid() != PL_uid || PerlProc_geteuid() != PL_euid)
3138 Perl_croak(aTHX_ "Can't reswap uid and euid");
3139 if (!cando(S_IXUSR,FALSE,&PL_statbuf)) /* can real uid exec? */
3140 Perl_croak(aTHX_ "Permission denied\n");
3142 #endif /* HAS_SETREUID */
3143 #endif /* IAMSUID */
3145 if (!S_ISREG(PL_statbuf.st_mode))
3146 Perl_croak(aTHX_ "Permission denied");
3147 if (PL_statbuf.st_mode & S_IWOTH)
3148 Perl_croak(aTHX_ "Setuid/gid script is writable by world");
3149 PL_doswitches = FALSE; /* -s is insecure in suid */
3150 CopLINE_inc(PL_curcop);
3151 if (sv_gets(PL_linestr, PL_rsfp, 0) == Nullch ||
3152 strnNE(SvPV(PL_linestr,n_a),"#!",2) ) /* required even on Sys V */
3153 Perl_croak(aTHX_ "No #! line");
3154 s = SvPV(PL_linestr,n_a)+2;
3156 while (!isSPACE(*s)) s++;
3157 for (s2 = s; (s2 > SvPV(PL_linestr,n_a)+2 &&
3158 (isDIGIT(s2[-1]) || strchr("._-", s2[-1]))); s2--) ;
3159 if (strnNE(s2-4,"perl",4) && strnNE(s-9,"perl",4)) /* sanity check */
3160 Perl_croak(aTHX_ "Not a perl script");
3161 while (*s == ' ' || *s == '\t') s++;
3163 * #! arg must be what we saw above. They can invoke it by
3164 * mentioning suidperl explicitly, but they may not add any strange
3165 * arguments beyond what #! says if they do invoke suidperl that way.
3167 len = strlen(validarg);
3168 if (strEQ(validarg," PHOOEY ") ||
3169 strnNE(s,validarg,len) || !isSPACE(s[len]))
3170 Perl_croak(aTHX_ "Args must match #! line");
3173 if (PL_euid != PL_uid && (PL_statbuf.st_mode & S_ISUID) &&
3174 PL_euid == PL_statbuf.st_uid)
3176 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3177 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3178 #endif /* IAMSUID */
3180 if (PL_euid) { /* oops, we're not the setuid root perl */
3181 (void)PerlIO_close(PL_rsfp);
3184 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT, BIN_EXP,
3185 (int)PERL_REVISION, (int)PERL_VERSION,
3186 (int)PERL_SUBVERSION), PL_origargv);
3188 Perl_croak(aTHX_ "Can't do setuid\n");
3191 if (PL_statbuf.st_mode & S_ISGID && PL_statbuf.st_gid != PL_egid) {
3193 (void)setegid(PL_statbuf.st_gid);
3196 (void)setregid((Gid_t)-1,PL_statbuf.st_gid);
3198 #ifdef HAS_SETRESGID
3199 (void)setresgid((Gid_t)-1,PL_statbuf.st_gid,(Gid_t)-1);
3201 PerlProc_setgid(PL_statbuf.st_gid);
3205 if (PerlProc_getegid() != PL_statbuf.st_gid)
3206 Perl_croak(aTHX_ "Can't do setegid!\n");
3208 if (PL_statbuf.st_mode & S_ISUID) {
3209 if (PL_statbuf.st_uid != PL_euid)
3211 (void)seteuid(PL_statbuf.st_uid); /* all that for this */
3214 (void)setreuid((Uid_t)-1,PL_statbuf.st_uid);
3216 #ifdef HAS_SETRESUID
3217 (void)setresuid((Uid_t)-1,PL_statbuf.st_uid,(Uid_t)-1);
3219 PerlProc_setuid(PL_statbuf.st_uid);
3223 if (PerlProc_geteuid() != PL_statbuf.st_uid)
3224 Perl_croak(aTHX_ "Can't do seteuid!\n");
3226 else if (PL_uid) { /* oops, mustn't run as root */
3228 (void)seteuid((Uid_t)PL_uid);
3231 (void)setreuid((Uid_t)-1,(Uid_t)PL_uid);
3233 #ifdef HAS_SETRESUID
3234 (void)setresuid((Uid_t)-1,(Uid_t)PL_uid,(Uid_t)-1);
3236 PerlProc_setuid((Uid_t)PL_uid);
3240 if (PerlProc_geteuid() != PL_uid)
3241 Perl_croak(aTHX_ "Can't do seteuid!\n");
3244 if (!cando(S_IXUSR,TRUE,&PL_statbuf))
3245 Perl_croak(aTHX_ "Permission denied\n"); /* they can't do this */
3248 else if (PL_preprocess)
3249 Perl_croak(aTHX_ "-P not allowed for setuid/setgid script\n");
3250 else if (fdscript >= 0)
3251 Perl_croak(aTHX_ "fd script not allowed in suidperl\n");
3253 Perl_croak(aTHX_ "Script is not setuid/setgid in suidperl\n");
3255 /* We absolutely must clear out any saved ids here, so we */
3256 /* exec the real perl, substituting fd script for scriptname. */
3257 /* (We pass script name as "subdir" of fd, which perl will grok.) */
3258 PerlIO_rewind(PL_rsfp);
3259 PerlLIO_lseek(PerlIO_fileno(PL_rsfp),(Off_t)0,0); /* just in case rewind didn't */
3260 for (which = 1; PL_origargv[which] && PL_origargv[which] != scriptname; which++) ;
3261 if (!PL_origargv[which])
3262 Perl_croak(aTHX_ "Permission denied");
3263 PL_origargv[which] = savepv(Perl_form(aTHX_ "/dev/fd/%d/%s",
3264 PerlIO_fileno(PL_rsfp), PL_origargv[which]));
3265 #if defined(HAS_FCNTL) && defined(F_SETFD)
3266 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,0); /* ensure no close-on-exec */
3268 PerlProc_execv(Perl_form(aTHX_ "%s/perl"PERL_FS_VER_FMT, BIN_EXP,
3269 (int)PERL_REVISION, (int)PERL_VERSION,
3270 (int)PERL_SUBVERSION), PL_origargv);/* try again */
3271 Perl_croak(aTHX_ "Can't do setuid\n");
3272 #endif /* IAMSUID */
3274 if (PL_euid != PL_uid || PL_egid != PL_gid) { /* (suidperl doesn't exist, in fact) */
3275 #ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
3276 PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf); /* may be either wrapped or real suid */
3277 if ((PL_euid != PL_uid && PL_euid == PL_statbuf.st_uid && PL_statbuf.st_mode & S_ISUID)
3279 (PL_egid != PL_gid && PL_egid == PL_statbuf.st_gid && PL_statbuf.st_mode & S_ISGID)
3282 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3283 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3284 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
3285 /* not set-id, must be wrapped */
3291 S_find_beginning(pTHX)
3293 register char *s, *s2;
3294 #ifdef MACOS_TRADITIONAL
3298 /* skip forward in input to the real script? */
3301 #ifdef MACOS_TRADITIONAL
3302 /* Since the Mac OS does not honor #! arguments for us, we do it ourselves */
3304 while (PL_doextract || gMacPerl_AlwaysExtract) {
3305 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
3306 if (!gMacPerl_AlwaysExtract)
3307 Perl_croak(aTHX_ "No Perl script found in input\n");
3309 if (PL_doextract) /* require explicit override ? */
3310 if (!OverrideExtract(PL_origfilename))
3311 Perl_croak(aTHX_ "User aborted script\n");
3313 PL_doextract = FALSE;
3315 /* Pater peccavi, file does not have #! */
3316 PerlIO_rewind(PL_rsfp);
3321 while (PL_doextract) {
3322 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch)
3323 Perl_croak(aTHX_ "No Perl script found in input\n");
3326 if (*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL")))) {
3327 PerlIO_ungetc(PL_rsfp, '\n'); /* to keep line count right */
3328 PL_doextract = FALSE;
3329 while (*s && !(isSPACE (*s) || *s == '#')) s++;
3331 while (*s == ' ' || *s == '\t') s++;
3333 while (isDIGIT(s2[-1]) || strchr("-._", s2[-1])) s2--;
3334 if (strnEQ(s2-4,"perl",4))
3336 while ((s = moreswitches(s)))
3339 #ifdef MACOS_TRADITIONAL
3340 /* We are always searching for the #!perl line in MacPerl,
3341 * so if we find it, still keep the line count correct
3342 * by counting lines we already skipped over
3344 for (; maclines > 0 ; maclines--)
3345 PerlIO_ungetc(PL_rsfp, '\n');
3349 /* gMacPerl_AlwaysExtract is false in MPW tool */
3350 } else if (gMacPerl_AlwaysExtract) {
3361 PL_uid = PerlProc_getuid();
3362 PL_euid = PerlProc_geteuid();
3363 PL_gid = PerlProc_getgid();
3364 PL_egid = PerlProc_getegid();
3366 PL_uid |= PL_gid << 16;
3367 PL_euid |= PL_egid << 16;
3369 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
3373 S_forbid_setid(pTHX_ char *s)
3375 if (PL_euid != PL_uid)
3376 Perl_croak(aTHX_ "No %s allowed while running setuid", s);
3377 if (PL_egid != PL_gid)
3378 Perl_croak(aTHX_ "No %s allowed while running setgid", s);
3382 Perl_init_debugger(pTHX)
3384 HV *ostash = PL_curstash;
3386 PL_curstash = PL_debstash;
3387 PL_dbargs = GvAV(gv_AVadd((gv_fetchpv("args", GV_ADDMULTI, SVt_PVAV))));
3388 AvREAL_off(PL_dbargs);
3389 PL_DBgv = gv_fetchpv("DB", GV_ADDMULTI, SVt_PVGV);
3390 PL_DBline = gv_fetchpv("dbline", GV_ADDMULTI, SVt_PVAV);
3391 PL_DBsub = gv_HVadd(gv_fetchpv("sub", GV_ADDMULTI, SVt_PVHV));
3392 sv_upgrade(GvSV(PL_DBsub), SVt_IV); /* IVX accessed if PERLDB_SUB_NN */
3393 PL_DBsingle = GvSV((gv_fetchpv("single", GV_ADDMULTI, SVt_PV)));
3394 sv_setiv(PL_DBsingle, 0);
3395 PL_DBtrace = GvSV((gv_fetchpv("trace", GV_ADDMULTI, SVt_PV)));
3396 sv_setiv(PL_DBtrace, 0);
3397 PL_DBsignal = GvSV((gv_fetchpv("signal", GV_ADDMULTI, SVt_PV)));
3398 sv_setiv(PL_DBsignal, 0);
3399 PL_curstash = ostash;
3402 #ifndef STRESS_REALLOC
3403 #define REASONABLE(size) (size)
3405 #define REASONABLE(size) (1) /* unreasonable */
3409 Perl_init_stacks(pTHX)
3411 /* start with 128-item stack and 8K cxstack */
3412 PL_curstackinfo = new_stackinfo(REASONABLE(128),
3413 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
3414 PL_curstackinfo->si_type = PERLSI_MAIN;
3415 PL_curstack = PL_curstackinfo->si_stack;
3416 PL_mainstack = PL_curstack; /* remember in case we switch stacks */
3418 PL_stack_base = AvARRAY(PL_curstack);
3419 PL_stack_sp = PL_stack_base;
3420 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
3422 New(50,PL_tmps_stack,REASONABLE(128),SV*);
3425 PL_tmps_max = REASONABLE(128);
3427 New(54,PL_markstack,REASONABLE(32),I32);
3428 PL_markstack_ptr = PL_markstack;
3429 PL_markstack_max = PL_markstack + REASONABLE(32);
3433 New(54,PL_scopestack,REASONABLE(32),I32);
3434 PL_scopestack_ix = 0;
3435 PL_scopestack_max = REASONABLE(32);
3437 New(54,PL_savestack,REASONABLE(128),ANY);
3438 PL_savestack_ix = 0;
3439 PL_savestack_max = REASONABLE(128);
3441 New(54,PL_retstack,REASONABLE(16),OP*);
3443 PL_retstack_max = REASONABLE(16);
3451 while (PL_curstackinfo->si_next)
3452 PL_curstackinfo = PL_curstackinfo->si_next;
3453 while (PL_curstackinfo) {
3454 PERL_SI *p = PL_curstackinfo->si_prev;
3455 /* curstackinfo->si_stack got nuked by sv_free_arenas() */
3456 Safefree(PL_curstackinfo->si_cxstack);
3457 Safefree(PL_curstackinfo);
3458 PL_curstackinfo = p;
3460 Safefree(PL_tmps_stack);
3461 Safefree(PL_markstack);
3462 Safefree(PL_scopestack);
3463 Safefree(PL_savestack);
3464 Safefree(PL_retstack);
3473 lex_start(PL_linestr);
3475 PL_subname = newSVpvn("main",4);
3479 S_init_predump_symbols(pTHX)
3484 sv_setpvn(get_sv("\"", TRUE), " ", 1);
3485 PL_stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
3486 GvMULTI_on(PL_stdingv);
3487 io = GvIOp(PL_stdingv);
3488 IoTYPE(io) = IoTYPE_RDONLY;
3489 IoIFP(io) = PerlIO_stdin();
3490 tmpgv = gv_fetchpv("stdin",TRUE, SVt_PV);
3492 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3494 tmpgv = gv_fetchpv("STDOUT",TRUE, SVt_PVIO);
3497 IoTYPE(io) = IoTYPE_WRONLY;
3498 IoOFP(io) = IoIFP(io) = PerlIO_stdout();
3500 tmpgv = gv_fetchpv("stdout",TRUE, SVt_PV);
3502 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3504 PL_stderrgv = gv_fetchpv("STDERR",TRUE, SVt_PVIO);
3505 GvMULTI_on(PL_stderrgv);
3506 io = GvIOp(PL_stderrgv);
3507 IoTYPE(io) = IoTYPE_WRONLY;
3508 IoOFP(io) = IoIFP(io) = PerlIO_stderr();
3509 tmpgv = gv_fetchpv("stderr",TRUE, SVt_PV);
3511 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3513 PL_statname = NEWSV(66,0); /* last filename we did stat on */
3516 Safefree(PL_osname);
3517 PL_osname = savepv(OSNAME);
3521 Perl_init_argv_symbols(pTHX_ register int argc, register char **argv)
3524 argc--,argv++; /* skip name of script */
3525 if (PL_doswitches) {
3526 for (; argc > 0 && **argv == '-'; argc--,argv++) {
3529 if (argv[0][1] == '-' && !argv[0][2]) {
3533 if ((s = strchr(argv[0], '='))) {
3535 sv_setpv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),s);
3538 sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),1);
3541 if ((PL_argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV))) {
3542 GvMULTI_on(PL_argvgv);
3543 (void)gv_AVadd(PL_argvgv);
3544 av_clear(GvAVn(PL_argvgv));
3545 for (; argc > 0; argc--,argv++) {
3546 SV *sv = newSVpv(argv[0],0);
3547 av_push(GvAVn(PL_argvgv),sv);
3548 if (PL_widesyscalls)
3549 (void)sv_utf8_decode(sv);
3554 #ifdef HAS_PROCSELFEXE
3555 /* This is a function so that we don't hold on to MAXPATHLEN
3556 bytes of stack longer than necessary
3559 S_procself_val(pTHX_ SV *sv, char *arg0)
3561 char buf[MAXPATHLEN];
3562 int len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
3564 /* On Playstation2 Linux V1.0 (kernel 2.2.1) readlink(/proc/self/exe)
3565 includes a spurious NUL which will cause $^X to fail in system
3566 or backticks (this will prevent extensions from being built and
3567 many tests from working). readlink is not meant to add a NUL.
3568 Normal readlink works fine.
3570 if (len > 0 && buf[len-1] == '\0') {
3574 /* FreeBSD's implementation is acknowledged to be imperfect, sometimes
3575 returning the text "unknown" from the readlink rather than the path
3576 to the executable (or returning an error from the readlink). Any valid
3577 path has a '/' in it somewhere, so use that to validate the result.
3578 See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703
3580 if (len > 0 && memchr(buf, '/', len)) {
3581 sv_setpvn(sv,buf,len);
3587 #endif /* HAS_PROCSELFEXE */
3590 S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register char **env)
3596 PL_toptarget = NEWSV(0,0);
3597 sv_upgrade(PL_toptarget, SVt_PVFM);
3598 sv_setpvn(PL_toptarget, "", 0);
3599 PL_bodytarget = NEWSV(0,0);
3600 sv_upgrade(PL_bodytarget, SVt_PVFM);
3601 sv_setpvn(PL_bodytarget, "", 0);
3602 PL_formtarget = PL_bodytarget;
3606 init_argv_symbols(argc,argv);
3608 if ((tmpgv = gv_fetchpv("0",TRUE, SVt_PV))) {
3609 #ifdef MACOS_TRADITIONAL
3610 /* $0 is not majick on a Mac */
3611 sv_setpv(GvSV(tmpgv),MacPerl_MPWFileName(PL_origfilename));
3613 sv_setpv(GvSV(tmpgv),PL_origfilename);
3614 magicname("0", "0", 1);
3617 if ((tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))) {/* $^X */
3618 #ifdef HAS_PROCSELFEXE
3619 S_procself_val(aTHX_ GvSV(tmpgv), PL_origargv[0]);
3622 sv_setpv(GvSV(tmpgv), os2_execname(aTHX));
3624 sv_setpv(GvSV(tmpgv),PL_origargv[0]);
3628 if ((PL_envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV))) {
3630 GvMULTI_on(PL_envgv);
3631 hv = GvHVn(PL_envgv);
3632 hv_magic(hv, Nullgv, PERL_MAGIC_env);
3633 #ifdef USE_ENVIRON_ARRAY
3634 /* Note that if the supplied env parameter is actually a copy
3635 of the global environ then it may now point to free'd memory
3636 if the environment has been modified since. To avoid this
3637 problem we treat env==NULL as meaning 'use the default'
3642 # ifdef USE_ITHREADS
3643 && PL_curinterp == aTHX
3647 environ[0] = Nullch;
3650 for (; *env; env++) {
3651 if (!(s = strchr(*env,'=')))
3658 sv = newSVpv(s+1, 0);
3659 (void)hv_store(hv, *env, s - *env, sv, 0);
3663 #endif /* USE_ENVIRON_ARRAY */
3666 if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) {
3667 SvREADONLY_off(GvSV(tmpgv));
3668 sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid());
3669 SvREADONLY_on(GvSV(tmpgv));
3671 #ifdef THREADS_HAVE_PIDS
3672 PL_ppid = (IV)getppid();
3675 /* touch @F array to prevent spurious warnings 20020415 MJD */
3677 (void) get_av("main::F", TRUE | GV_ADDMULTI);
3679 /* touch @- and @+ arrays to prevent spurious warnings 20020415 MJD */
3680 (void) get_av("main::-", TRUE | GV_ADDMULTI);
3681 (void) get_av("main::+", TRUE | GV_ADDMULTI);
3685 S_init_perllib(pTHX)
3690 s = PerlEnv_getenv("PERL5LIB");
3692 incpush(s, TRUE, TRUE);
3694 incpush(PerlEnv_getenv("PERLLIB"), FALSE, FALSE);
3696 /* Treat PERL5?LIB as a possible search list logical name -- the
3697 * "natural" VMS idiom for a Unix path string. We allow each
3698 * element to be a set of |-separated directories for compatibility.
3702 if (my_trnlnm("PERL5LIB",buf,0))
3703 do { incpush(buf,TRUE,TRUE); } while (my_trnlnm("PERL5LIB",buf,++idx));
3705 while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf,FALSE,FALSE);
3709 /* Use the ~-expanded versions of APPLLIB (undocumented),
3710 ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
3713 incpush(APPLLIB_EXP, TRUE, TRUE);
3717 incpush(ARCHLIB_EXP, FALSE, FALSE);
3719 #ifdef MACOS_TRADITIONAL
3722 SV * privdir = NEWSV(55, 0);
3723 char * macperl = PerlEnv_getenv("MACPERL");
3728 Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
3729 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3730 incpush(SvPVX(privdir), TRUE, FALSE);
3731 Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
3732 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3733 incpush(SvPVX(privdir), TRUE, FALSE);
3735 SvREFCNT_dec(privdir);
3738 incpush(":", FALSE, FALSE);
3741 # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
3744 incpush(PRIVLIB_EXP, TRUE, FALSE);
3746 incpush(PRIVLIB_EXP, FALSE, FALSE);
3750 /* sitearch is always relative to sitelib on Windows for
3751 * DLL-based path intuition to work correctly */
3752 # if !defined(WIN32)
3753 incpush(SITEARCH_EXP, FALSE, FALSE);
3759 incpush(SITELIB_EXP, TRUE, FALSE); /* this picks up sitearch as well */
3761 incpush(SITELIB_EXP, FALSE, FALSE);
3765 #ifdef SITELIB_STEM /* Search for version-specific dirs below here */
3766 incpush(SITELIB_STEM, FALSE, TRUE);
3769 #ifdef PERL_VENDORARCH_EXP
3770 /* vendorarch is always relative to vendorlib on Windows for
3771 * DLL-based path intuition to work correctly */
3772 # if !defined(WIN32)
3773 incpush(PERL_VENDORARCH_EXP, FALSE, FALSE);
3777 #ifdef PERL_VENDORLIB_EXP
3779 incpush(PERL_VENDORLIB_EXP, TRUE, FALSE); /* this picks up vendorarch as well */
3781 incpush(PERL_VENDORLIB_EXP, FALSE, FALSE);
3785 #ifdef PERL_VENDORLIB_STEM /* Search for version-specific dirs below here */
3786 incpush(PERL_VENDORLIB_STEM, FALSE, TRUE);
3789 #ifdef PERL_OTHERLIBDIRS
3790 incpush(PERL_OTHERLIBDIRS, TRUE, TRUE);
3794 incpush(".", FALSE, FALSE);
3795 #endif /* MACOS_TRADITIONAL */
3798 #if defined(DOSISH) || defined(EPOC)
3799 # define PERLLIB_SEP ';'
3802 # define PERLLIB_SEP '|'
3804 # if defined(MACOS_TRADITIONAL)
3805 # define PERLLIB_SEP ','
3807 # define PERLLIB_SEP ':'
3811 #ifndef PERLLIB_MANGLE
3812 # define PERLLIB_MANGLE(s,n) (s)
3816 S_incpush(pTHX_ char *p, int addsubdirs, int addoldvers)
3818 SV *subdir = Nullsv;
3823 if (addsubdirs || addoldvers) {
3824 subdir = sv_newmortal();
3827 /* Break at all separators */
3829 SV *libdir = NEWSV(55,0);
3832 /* skip any consecutive separators */
3833 while ( *p == PERLLIB_SEP ) {
3834 /* Uncomment the next line for PATH semantics */
3835 /* av_push(GvAVn(PL_incgv), newSVpvn(".", 1)); */
3839 if ( (s = strchr(p, PERLLIB_SEP)) != Nullch ) {
3840 sv_setpvn(libdir, PERLLIB_MANGLE(p, (STRLEN)(s - p)),
3845 sv_setpv(libdir, PERLLIB_MANGLE(p, 0));
3846 p = Nullch; /* break out */
3848 #ifdef MACOS_TRADITIONAL
3849 if (!strchr(SvPVX(libdir), ':')) {
3852 sv_setpv(libdir, MacPerl_CanonDir(SvPVX(libdir), buf, 0));
3854 if (SvPVX(libdir)[SvCUR(libdir)-1] != ':')
3855 sv_catpv(libdir, ":");
3859 * BEFORE pushing libdir onto @INC we may first push version- and
3860 * archname-specific sub-directories.
3862 if (addsubdirs || addoldvers) {
3863 #ifdef PERL_INC_VERSION_LIST
3864 /* Configure terminates PERL_INC_VERSION_LIST with a NULL */
3865 const char *incverlist[] = { PERL_INC_VERSION_LIST };
3866 const char **incver;
3873 if ((unix = tounixspec_ts(SvPV(libdir,len),Nullch)) != Nullch) {
3875 while (unix[len-1] == '/') len--; /* Cosmetic */
3876 sv_usepvn(libdir,unix,len);
3879 PerlIO_printf(Perl_error_log,
3880 "Failed to unixify @INC element \"%s\"\n",
3884 #ifdef MACOS_TRADITIONAL
3885 #define PERL_AV_SUFFIX_FMT ""
3886 #define PERL_ARCH_FMT "%s:"
3887 #define PERL_ARCH_FMT_PATH PERL_FS_VER_FMT PERL_AV_SUFFIX_FMT
3889 #define PERL_AV_SUFFIX_FMT "/"
3890 #define PERL_ARCH_FMT "/%s"
3891 #define PERL_ARCH_FMT_PATH PERL_AV_SUFFIX_FMT PERL_FS_VER_FMT
3893 /* .../version/archname if -d .../version/archname */
3894 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH PERL_ARCH_FMT,
3896 (int)PERL_REVISION, (int)PERL_VERSION,
3897 (int)PERL_SUBVERSION, ARCHNAME);
3898 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3899 S_ISDIR(tmpstatbuf.st_mode))
3900 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3902 /* .../version if -d .../version */
3903 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH, libdir,
3904 (int)PERL_REVISION, (int)PERL_VERSION,
3905 (int)PERL_SUBVERSION);
3906 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3907 S_ISDIR(tmpstatbuf.st_mode))
3908 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3910 /* .../archname if -d .../archname */
3911 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, ARCHNAME);
3912 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3913 S_ISDIR(tmpstatbuf.st_mode))
3914 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3917 #ifdef PERL_INC_VERSION_LIST
3919 for (incver = incverlist; *incver; incver++) {
3920 /* .../xxx if -d .../xxx */
3921 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, *incver);
3922 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3923 S_ISDIR(tmpstatbuf.st_mode))
3924 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3930 /* finally push this lib directory on the end of @INC */
3931 av_push(GvAVn(PL_incgv), libdir);
3935 #ifdef USE_5005THREADS
3936 STATIC struct perl_thread *
3937 S_init_main_thread(pTHX)
3939 #if !defined(PERL_IMPLICIT_CONTEXT)
3940 struct perl_thread *thr;
3944 Newz(53, thr, 1, struct perl_thread);
3945 PL_curcop = &PL_compiling;
3946 thr->interp = PERL_GET_INTERP;
3947 thr->cvcache = newHV();
3948 thr->threadsv = newAV();
3949 /* thr->threadsvp is set when find_threadsv is called */
3950 thr->specific = newAV();
3951 thr->flags = THRf_R_JOINABLE;
3952 MUTEX_INIT(&thr->mutex);
3953 /* Handcraft thrsv similarly to mess_sv */
3954 New(53, PL_thrsv, 1, SV);
3955 Newz(53, xpv, 1, XPV);
3956 SvFLAGS(PL_thrsv) = SVt_PV;
3957 SvANY(PL_thrsv) = (void*)xpv;
3958 SvREFCNT(PL_thrsv) = 1 << 30; /* practically infinite */
3959 SvPVX(PL_thrsv) = (char*)thr;
3960 SvCUR_set(PL_thrsv, sizeof(thr));
3961 SvLEN_set(PL_thrsv, sizeof(thr));
3962 *SvEND(PL_thrsv) = '\0'; /* in the trailing_nul field */
3963 thr->oursv = PL_thrsv;
3964 PL_chopset = " \n-";
3967 MUTEX_LOCK(&PL_threads_mutex);
3973 MUTEX_UNLOCK(&PL_threads_mutex);
3975 #ifdef HAVE_THREAD_INTERN
3976 Perl_init_thread_intern(thr);
3979 #ifdef SET_THREAD_SELF
3980 SET_THREAD_SELF(thr);
3982 thr->self = pthread_self();
3983 #endif /* SET_THREAD_SELF */
3987 * These must come after the thread self setting
3988 * because sv_setpvn does SvTAINT and the taint
3989 * fields thread selfness being set.
3991 PL_toptarget = NEWSV(0,0);
3992 sv_upgrade(PL_toptarget, SVt_PVFM);
3993 sv_setpvn(PL_toptarget, "", 0);
3994 PL_bodytarget = NEWSV(0,0);
3995 sv_upgrade(PL_bodytarget, SVt_PVFM);
3996 sv_setpvn(PL_bodytarget, "", 0);
3997 PL_formtarget = PL_bodytarget;
3998 thr->errsv = newSVpvn("", 0);
3999 (void) find_threadsv("@"); /* Ensure $@ is initialised early */
4002 PL_peepp = MEMBER_TO_FPTR(Perl_peep);
4003 PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
4004 PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
4005 PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);
4006 PL_regint_string = MEMBER_TO_FPTR(Perl_re_intuit_string);
4007 PL_regfree = MEMBER_TO_FPTR(Perl_pregfree);
4009 PL_reginterp_cnt = 0;
4013 #endif /* USE_5005THREADS */
4016 Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
4019 line_t oldline = CopLINE(PL_curcop);
4025 while (AvFILL(paramList) >= 0) {
4026 cv = (CV*)av_shift(paramList);
4028 if (paramList == PL_beginav) {
4029 /* save PL_beginav for compiler */
4030 if (! PL_beginav_save)
4031 PL_beginav_save = newAV();
4032 av_push(PL_beginav_save, (SV*)cv);
4034 else if (paramList == PL_checkav) {
4035 /* save PL_checkav for compiler */
4036 if (! PL_checkav_save)
4037 PL_checkav_save = newAV();
4038 av_push(PL_checkav_save, (SV*)cv);
4043 #ifdef PERL_FLEXIBLE_EXCEPTIONS
4044 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_list_body), cv);
4050 #ifndef PERL_FLEXIBLE_EXCEPTIONS
4054 (void)SvPV(atsv, len);
4057 PL_curcop = &PL_compiling;
4058 CopLINE_set(PL_curcop, oldline);
4059 if (paramList == PL_beginav)
4060 sv_catpv(atsv, "BEGIN failed--compilation aborted");
4062 Perl_sv_catpvf(aTHX_ atsv,
4063 "%s failed--call queue aborted",
4064 paramList == PL_checkav ? "CHECK"
4065 : paramList == PL_initav ? "INIT"
4067 while (PL_scopestack_ix > oldscope)
4070 Perl_croak(aTHX_ "%s", SvPVx(atsv, n_a));
4077 /* my_exit() was called */
4078 while (PL_scopestack_ix > oldscope)
4081 PL_curstash = PL_defstash;
4082 PL_curcop = &PL_compiling;
4083 CopLINE_set(PL_curcop, oldline);
4085 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED)) {
4086 if (paramList == PL_beginav)
4087 Perl_croak(aTHX_ "BEGIN failed--compilation aborted");
4089 Perl_croak(aTHX_ "%s failed--call queue aborted",
4090 paramList == PL_checkav ? "CHECK"
4091 : paramList == PL_initav ? "INIT"
4098 PL_curcop = &PL_compiling;
4099 CopLINE_set(PL_curcop, oldline);
4102 PerlIO_printf(Perl_error_log, "panic: restartop\n");
4110 #ifdef PERL_FLEXIBLE_EXCEPTIONS
4112 S_vcall_list_body(pTHX_ va_list args)
4114 CV *cv = va_arg(args, CV*);
4115 return call_list_body(cv);
4120 S_call_list_body(pTHX_ CV *cv)
4122 PUSHMARK(PL_stack_sp);
4123 call_sv((SV*)cv, G_EVAL|G_DISCARD);
4128 Perl_my_exit(pTHX_ U32 status)
4130 DEBUG_S(PerlIO_printf(Perl_debug_log, "my_exit: thread %p, status %lu\n",
4131 thr, (unsigned long) status));
4140 STATUS_NATIVE_SET(status);
4147 Perl_my_failure_exit(pTHX)
4150 if (vaxc$errno & 1) {
4151 if (STATUS_NATIVE & 1) /* fortuitiously includes "-1" */
4152 STATUS_NATIVE_SET(44);
4155 if (!vaxc$errno && errno) /* unlikely */
4156 STATUS_NATIVE_SET(44);
4158 STATUS_NATIVE_SET(vaxc$errno);
4163 STATUS_POSIX_SET(errno);
4165 exitstatus = STATUS_POSIX >> 8;
4166 if (exitstatus & 255)
4167 STATUS_POSIX_SET(exitstatus);
4169 STATUS_POSIX_SET(255);
4176 S_my_exit_jump(pTHX)
4178 register PERL_CONTEXT *cx;
4183 SvREFCNT_dec(PL_e_script);
4184 PL_e_script = Nullsv;
4187 POPSTACK_TO(PL_mainstack);
4188 if (cxstack_ix >= 0) {
4191 POPBLOCK(cx,PL_curpm);
4199 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen)
4202 p = SvPVX(PL_e_script);
4203 nl = strchr(p, '\n');
4204 nl = (nl) ? nl+1 : SvEND(PL_e_script);
4206 filter_del(read_e_script);
4209 sv_catpvn(buf_sv, p, nl-p);
4210 sv_chop(PL_e_script, nl);