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 */
19 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
24 #if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE) && !defined(PERL_MICRO)
25 char *getenv (char *); /* Usually in <stdlib.h> */
28 static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
36 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
42 #if defined(USE_5005THREADS)
43 # define INIT_TLS_AND_INTERP \
45 if (!PL_curinterp) { \
46 PERL_SET_INTERP(my_perl); \
52 # if defined(USE_ITHREADS)
53 # define INIT_TLS_AND_INTERP \
55 if (!PL_curinterp) { \
56 PERL_SET_INTERP(my_perl); \
59 PERL_SET_THX(my_perl); \
63 PERL_SET_THX(my_perl); \
67 # define INIT_TLS_AND_INTERP \
69 if (!PL_curinterp) { \
70 PERL_SET_INTERP(my_perl); \
72 PERL_SET_THX(my_perl); \
77 #ifdef PERL_IMPLICIT_SYS
79 perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
80 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
81 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
82 struct IPerlDir* ipD, struct IPerlSock* ipS,
83 struct IPerlProc* ipP)
85 PerlInterpreter *my_perl;
86 /* New() needs interpreter, so call malloc() instead */
87 my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
89 Zero(my_perl, 1, PerlInterpreter);
105 =head1 Embedding Functions
107 =for apidoc perl_alloc
109 Allocates a new Perl interpreter. See L<perlembed>.
117 PerlInterpreter *my_perl;
118 #ifdef USE_5005THREADS
122 /* New() needs interpreter, so call malloc() instead */
123 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
126 Zero(my_perl, 1, PerlInterpreter);
129 #endif /* PERL_IMPLICIT_SYS */
132 =for apidoc perl_construct
134 Initializes a new Perl interpreter. See L<perlembed>.
140 perl_construct(pTHXx)
142 #ifdef USE_5005THREADS
144 struct perl_thread *thr = NULL;
145 #endif /* FAKE_THREADS */
146 #endif /* USE_5005THREADS */
150 PL_perl_destruct_level = 1;
152 if (PL_perl_destruct_level > 0)
156 /* Init the real globals (and main thread)? */
158 #ifdef USE_5005THREADS
159 MUTEX_INIT(&PL_sv_mutex);
161 * Safe to use basic SV functions from now on (though
162 * not things like mortals or tainting yet).
164 MUTEX_INIT(&PL_eval_mutex);
165 COND_INIT(&PL_eval_cond);
166 MUTEX_INIT(&PL_threads_mutex);
167 COND_INIT(&PL_nthreads_cond);
168 # ifdef EMULATE_ATOMIC_REFCOUNTS
169 MUTEX_INIT(&PL_svref_mutex);
170 # endif /* EMULATE_ATOMIC_REFCOUNTS */
172 MUTEX_INIT(&PL_cred_mutex);
173 MUTEX_INIT(&PL_sv_lock_mutex);
174 MUTEX_INIT(&PL_fdpid_mutex);
176 thr = init_main_thread();
177 #endif /* USE_5005THREADS */
179 #ifdef PERL_FLEXIBLE_EXCEPTIONS
180 PL_protect = MEMBER_TO_FPTR(Perl_default_protect); /* for exceptions */
183 PL_curcop = &PL_compiling; /* needed by ckWARN, right away */
185 PL_linestr = NEWSV(65,79);
186 sv_upgrade(PL_linestr,SVt_PVIV);
188 if (!SvREADONLY(&PL_sv_undef)) {
189 /* set read-only and try to insure than we wont see REFCNT==0
192 SvREADONLY_on(&PL_sv_undef);
193 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
195 sv_setpv(&PL_sv_no,PL_No);
197 SvREADONLY_on(&PL_sv_no);
198 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
200 sv_setpv(&PL_sv_yes,PL_Yes);
202 SvREADONLY_on(&PL_sv_yes);
203 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
206 PL_sighandlerp = Perl_sighandler;
207 PL_pidstatus = newHV();
210 PL_rs = newSVpvn("\n", 1);
215 PL_lex_state = LEX_NOTPARSING;
221 SET_NUMERIC_STANDARD();
225 PL_patchlevel = NEWSV(0,4);
226 (void)SvUPGRADE(PL_patchlevel, SVt_PVNV);
227 if (PERL_REVISION > 127 || PERL_VERSION > 127 || PERL_SUBVERSION > 127)
228 SvGROW(PL_patchlevel, UTF8_MAXLEN*3+1);
229 s = (U8*)SvPVX(PL_patchlevel);
230 /* Build version strings using "native" characters */
231 s = uvchr_to_utf8(s, (UV)PERL_REVISION);
232 s = uvchr_to_utf8(s, (UV)PERL_VERSION);
233 s = uvchr_to_utf8(s, (UV)PERL_SUBVERSION);
235 SvCUR_set(PL_patchlevel, s - (U8*)SvPVX(PL_patchlevel));
236 SvPOK_on(PL_patchlevel);
237 SvNVX(PL_patchlevel) = (NV)PERL_REVISION
238 + ((NV)PERL_VERSION / (NV)1000)
239 #if defined(PERL_SUBVERSION) && PERL_SUBVERSION > 0
240 + ((NV)PERL_SUBVERSION / (NV)1000000)
243 SvNOK_on(PL_patchlevel); /* dual valued */
244 SvUTF8_on(PL_patchlevel);
245 SvREADONLY_on(PL_patchlevel);
248 #if defined(LOCAL_PATCH_COUNT)
249 PL_localpatches = local_patches; /* For possible -v */
252 #ifdef HAVE_INTERP_INTERN
256 PerlIO_init(aTHX); /* Hook to IO system */
258 PL_fdpid = newAV(); /* for remembering popen pids by fd */
259 PL_modglobal = newHV(); /* pointers to per-interpreter module globals */
260 PL_errors = newSVpvn("",0);
261 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
262 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
263 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
265 PL_regex_padav = newAV();
266 av_push(PL_regex_padav,(SV*)newAV()); /* First entry is an array of empty elements */
267 PL_regex_pad = AvARRAY(PL_regex_padav);
269 #ifdef USE_REENTRANT_API
270 Perl_reentrant_init(aTHX);
273 /* Note that strtab is a rather special HV. Assumptions are made
274 about not iterating on it, and not adding tie magic to it.
275 It is properly deallocated in perl_destruct() */
278 #ifdef USE_5005THREADS
279 MUTEX_INIT(&PL_strtab_mutex);
281 HvSHAREKEYS_off(PL_strtab); /* mandatory */
282 hv_ksplit(PL_strtab, 512);
284 #if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
285 _dyld_lookup_and_bind
286 ("__environ", (unsigned long *) &environ_pointer, NULL);
289 #ifdef USE_ENVIRON_ARRAY
290 PL_origenviron = environ;
297 =for apidoc nothreadhook
299 Stub that provides thread hook for perl_destruct when there are
306 Perl_nothreadhook(pTHX)
312 =for apidoc perl_destruct
314 Shuts down a Perl interpreter. See L<perlembed>.
322 volatile int destruct_level; /* 0=none, 1=full, 2=full with checks */
324 #ifdef USE_5005THREADS
327 #endif /* USE_5005THREADS */
329 /* wait for all pseudo-forked children to finish */
330 PERL_WAIT_FOR_CHILDREN;
332 #ifdef USE_5005THREADS
334 /* Pass 1 on any remaining threads: detach joinables, join zombies */
336 MUTEX_LOCK(&PL_threads_mutex);
337 DEBUG_S(PerlIO_printf(Perl_debug_log,
338 "perl_destruct: waiting for %d threads...\n",
340 for (t = thr->next; t != thr; t = t->next) {
341 MUTEX_LOCK(&t->mutex);
342 switch (ThrSTATE(t)) {
345 DEBUG_S(PerlIO_printf(Perl_debug_log,
346 "perl_destruct: joining zombie %p\n", t));
347 ThrSETSTATE(t, THRf_DEAD);
348 MUTEX_UNLOCK(&t->mutex);
351 * The SvREFCNT_dec below may take a long time (e.g. av
352 * may contain an object scalar whose destructor gets
353 * called) so we have to unlock threads_mutex and start
356 MUTEX_UNLOCK(&PL_threads_mutex);
358 SvREFCNT_dec((SV*)av);
359 DEBUG_S(PerlIO_printf(Perl_debug_log,
360 "perl_destruct: joined zombie %p OK\n", t));
362 case THRf_R_JOINABLE:
363 DEBUG_S(PerlIO_printf(Perl_debug_log,
364 "perl_destruct: detaching thread %p\n", t));
365 ThrSETSTATE(t, THRf_R_DETACHED);
367 * We unlock threads_mutex and t->mutex in the opposite order
368 * from which we locked them just so that DETACH won't
369 * deadlock if it panics. It's only a breach of good style
370 * not a bug since they are unlocks not locks.
372 MUTEX_UNLOCK(&PL_threads_mutex);
374 MUTEX_UNLOCK(&t->mutex);
377 DEBUG_S(PerlIO_printf(Perl_debug_log,
378 "perl_destruct: ignoring %p (state %u)\n",
380 MUTEX_UNLOCK(&t->mutex);
381 /* fall through and out */
384 /* We leave the above "Pass 1" loop with threads_mutex still locked */
386 /* Pass 2 on remaining threads: wait for the thread count to drop to one */
387 while (PL_nthreads > 1)
389 DEBUG_S(PerlIO_printf(Perl_debug_log,
390 "perl_destruct: final wait for %d threads\n",
392 COND_WAIT(&PL_nthreads_cond, &PL_threads_mutex);
394 /* At this point, we're the last thread */
395 MUTEX_UNLOCK(&PL_threads_mutex);
396 DEBUG_S(PerlIO_printf(Perl_debug_log, "perl_destruct: armageddon has arrived\n"));
397 MUTEX_DESTROY(&PL_threads_mutex);
398 COND_DESTROY(&PL_nthreads_cond);
400 #endif /* !defined(FAKE_THREADS) */
401 #endif /* USE_5005THREADS */
403 destruct_level = PL_perl_destruct_level;
407 if ((s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"))) {
409 if (destruct_level < i)
416 if(PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
421 if (PL_endav && !PL_minus_c)
422 call_list(PL_scopestack_ix, PL_endav);
428 if (CALL_FPTR(PL_threadhook)(aTHX)) {
429 /* Threads hook has vetoed further cleanup */
430 return STATUS_NATIVE_EXPORT;;
433 /* We must account for everything. */
435 /* Destroy the main CV and syntax tree */
437 PL_curpad = AvARRAY(PL_comppad);
438 op_free(PL_main_root);
439 PL_main_root = Nullop;
441 PL_curcop = &PL_compiling;
442 PL_main_start = Nullop;
443 SvREFCNT_dec(PL_main_cv);
447 /* Tell PerlIO we are about to tear things apart in case
448 we have layers which are using resources that should
452 PerlIO_destruct(aTHX);
454 if (PL_sv_objcount) {
456 * Try to destruct global references. We do this first so that the
457 * destructors and destructees still exist. Some sv's might remain.
458 * Non-referenced objects are on their own.
463 /* unhook hooks which will soon be, or use, destroyed data */
464 SvREFCNT_dec(PL_warnhook);
465 PL_warnhook = Nullsv;
466 SvREFCNT_dec(PL_diehook);
469 /* call exit list functions */
470 while (PL_exitlistlen-- > 0)
471 PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr);
473 Safefree(PL_exitlist);
475 if (destruct_level == 0){
477 DEBUG_P(debprofdump());
479 #if defined(PERLIO_LAYERS)
480 /* No more IO - including error messages ! */
481 PerlIO_cleanup(aTHX);
484 /* The exit() function will do everything that needs doing. */
485 return STATUS_NATIVE_EXPORT;;
488 /* jettison our possibly duplicated environment */
489 /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied
490 * so we certainly shouldn't free it here
492 #if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV)
493 if (environ != PL_origenviron) {
496 for (i = 0; environ[i]; i++)
497 safesysfree(environ[i]);
499 /* Must use safesysfree() when working with environ. */
500 safesysfree(environ);
502 environ = PL_origenviron;
507 /* the syntax tree is shared between clones
508 * so op_free(PL_main_root) only ReREFCNT_dec's
509 * REGEXPs in the parent interpreter
510 * we need to manually ReREFCNT_dec for the clones
513 I32 i = AvFILLp(PL_regex_padav) + 1;
514 SV **ary = AvARRAY(PL_regex_padav);
518 REGEXP *re = INT2PTR(REGEXP *,SvIVX(resv));
520 if (SvFLAGS(resv) & SVf_BREAK) {
521 /* this is PL_reg_curpm, already freed
522 * flag is set in regexec.c:S_regtry
524 SvFLAGS(resv) &= ~SVf_BREAK;
526 else if(SvREPADTMP(resv)) {
527 SvREPADTMP_off(resv);
534 SvREFCNT_dec(PL_regex_padav);
535 PL_regex_padav = Nullav;
539 /* loosen bonds of global variables */
542 (void)PerlIO_close(PL_rsfp);
546 /* Filters for program text */
547 SvREFCNT_dec(PL_rsfp_filters);
548 PL_rsfp_filters = Nullav;
551 PL_preprocess = FALSE;
557 PL_doswitches = FALSE;
558 PL_dowarn = G_WARN_OFF;
559 PL_doextract = FALSE;
560 PL_sawampersand = FALSE; /* must save all match strings */
563 Safefree(PL_inplace);
565 SvREFCNT_dec(PL_patchlevel);
568 SvREFCNT_dec(PL_e_script);
569 PL_e_script = Nullsv;
572 while (--PL_origargc >= 0) {
573 Safefree(PL_origargv[PL_origargc]);
575 Safefree(PL_origargv);
577 /* magical thingies */
579 SvREFCNT_dec(PL_ofs_sv); /* $, */
582 SvREFCNT_dec(PL_ors_sv); /* $\ */
585 SvREFCNT_dec(PL_rs); /* $/ */
588 PL_multiline = 0; /* $* */
589 Safefree(PL_osname); /* $^O */
592 SvREFCNT_dec(PL_statname);
593 PL_statname = Nullsv;
596 /* defgv, aka *_ should be taken care of elsewhere */
598 /* clean up after study() */
599 SvREFCNT_dec(PL_lastscream);
600 PL_lastscream = Nullsv;
601 Safefree(PL_screamfirst);
603 Safefree(PL_screamnext);
607 Safefree(PL_efloatbuf);
608 PL_efloatbuf = Nullch;
611 /* startup and shutdown function lists */
612 SvREFCNT_dec(PL_beginav);
613 SvREFCNT_dec(PL_beginav_save);
614 SvREFCNT_dec(PL_endav);
615 SvREFCNT_dec(PL_checkav);
616 SvREFCNT_dec(PL_initav);
618 PL_beginav_save = Nullav;
623 /* shortcuts just get cleared */
629 PL_argvoutgv = Nullgv;
631 PL_stderrgv = Nullgv;
632 PL_last_in_gv = Nullgv;
634 PL_debstash = Nullhv;
636 /* reset so print() ends up where we expect */
639 SvREFCNT_dec(PL_argvout_stack);
640 PL_argvout_stack = Nullav;
642 SvREFCNT_dec(PL_modglobal);
643 PL_modglobal = Nullhv;
644 SvREFCNT_dec(PL_preambleav);
645 PL_preambleav = Nullav;
646 SvREFCNT_dec(PL_subname);
648 SvREFCNT_dec(PL_linestr);
650 SvREFCNT_dec(PL_pidstatus);
651 PL_pidstatus = Nullhv;
652 SvREFCNT_dec(PL_toptarget);
653 PL_toptarget = Nullsv;
654 SvREFCNT_dec(PL_bodytarget);
655 PL_bodytarget = Nullsv;
656 PL_formtarget = Nullsv;
658 /* free locale stuff */
659 #ifdef USE_LOCALE_COLLATE
660 Safefree(PL_collation_name);
661 PL_collation_name = Nullch;
664 #ifdef USE_LOCALE_NUMERIC
665 Safefree(PL_numeric_name);
666 PL_numeric_name = Nullch;
667 SvREFCNT_dec(PL_numeric_radix_sv);
670 /* clear utf8 character classes */
671 SvREFCNT_dec(PL_utf8_alnum);
672 SvREFCNT_dec(PL_utf8_alnumc);
673 SvREFCNT_dec(PL_utf8_ascii);
674 SvREFCNT_dec(PL_utf8_alpha);
675 SvREFCNT_dec(PL_utf8_space);
676 SvREFCNT_dec(PL_utf8_cntrl);
677 SvREFCNT_dec(PL_utf8_graph);
678 SvREFCNT_dec(PL_utf8_digit);
679 SvREFCNT_dec(PL_utf8_upper);
680 SvREFCNT_dec(PL_utf8_lower);
681 SvREFCNT_dec(PL_utf8_print);
682 SvREFCNT_dec(PL_utf8_punct);
683 SvREFCNT_dec(PL_utf8_xdigit);
684 SvREFCNT_dec(PL_utf8_mark);
685 SvREFCNT_dec(PL_utf8_toupper);
686 SvREFCNT_dec(PL_utf8_totitle);
687 SvREFCNT_dec(PL_utf8_tolower);
688 SvREFCNT_dec(PL_utf8_tofold);
689 SvREFCNT_dec(PL_utf8_idstart);
690 SvREFCNT_dec(PL_utf8_idcont);
691 PL_utf8_alnum = Nullsv;
692 PL_utf8_alnumc = Nullsv;
693 PL_utf8_ascii = Nullsv;
694 PL_utf8_alpha = Nullsv;
695 PL_utf8_space = Nullsv;
696 PL_utf8_cntrl = Nullsv;
697 PL_utf8_graph = Nullsv;
698 PL_utf8_digit = Nullsv;
699 PL_utf8_upper = Nullsv;
700 PL_utf8_lower = Nullsv;
701 PL_utf8_print = Nullsv;
702 PL_utf8_punct = Nullsv;
703 PL_utf8_xdigit = Nullsv;
704 PL_utf8_mark = Nullsv;
705 PL_utf8_toupper = Nullsv;
706 PL_utf8_totitle = Nullsv;
707 PL_utf8_tolower = Nullsv;
708 PL_utf8_tofold = Nullsv;
709 PL_utf8_idstart = Nullsv;
710 PL_utf8_idcont = Nullsv;
712 if (!specialWARN(PL_compiling.cop_warnings))
713 SvREFCNT_dec(PL_compiling.cop_warnings);
714 PL_compiling.cop_warnings = Nullsv;
715 if (!specialCopIO(PL_compiling.cop_io))
716 SvREFCNT_dec(PL_compiling.cop_io);
717 PL_compiling.cop_io = Nullsv;
718 CopFILE_free(&PL_compiling);
719 CopSTASH_free(&PL_compiling);
721 /* Prepare to destruct main symbol table. */
726 SvREFCNT_dec(PL_curstname);
727 PL_curstname = Nullsv;
729 /* clear queued errors */
730 SvREFCNT_dec(PL_errors);
734 if (destruct_level >= 2 && ckWARN_d(WARN_INTERNAL)) {
735 if (PL_scopestack_ix != 0)
736 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
737 "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
738 (long)PL_scopestack_ix);
739 if (PL_savestack_ix != 0)
740 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
741 "Unbalanced saves: %ld more saves than restores\n",
742 (long)PL_savestack_ix);
743 if (PL_tmps_floor != -1)
744 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n",
745 (long)PL_tmps_floor + 1);
746 if (cxstack_ix != -1)
747 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n",
748 (long)cxstack_ix + 1);
751 /* Now absolutely destruct everything, somehow or other, loops or no. */
752 SvFLAGS(PL_fdpid) |= SVTYPEMASK; /* don't clean out pid table now */
753 SvFLAGS(PL_strtab) |= SVTYPEMASK; /* don't clean out strtab now */
755 /* the 2 is for PL_fdpid and PL_strtab */
756 while (PL_sv_count > 2 && sv_clean_all())
759 SvFLAGS(PL_fdpid) &= ~SVTYPEMASK;
760 SvFLAGS(PL_fdpid) |= SVt_PVAV;
761 SvFLAGS(PL_strtab) &= ~SVTYPEMASK;
762 SvFLAGS(PL_strtab) |= SVt_PVHV;
764 AvREAL_off(PL_fdpid); /* no surviving entries */
765 SvREFCNT_dec(PL_fdpid); /* needed in io_close() */
768 #ifdef HAVE_INTERP_INTERN
772 /* Destruct the global string table. */
774 /* Yell and reset the HeVAL() slots that are still holding refcounts,
775 * so that sv_free() won't fail on them.
783 max = HvMAX(PL_strtab);
784 array = HvARRAY(PL_strtab);
787 if (hent && ckWARN_d(WARN_INTERNAL)) {
788 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
789 "Unbalanced string table refcount: (%d) for \"%s\"",
790 HeVAL(hent) - Nullsv, HeKEY(hent));
791 HeVAL(hent) = Nullsv;
801 SvREFCNT_dec(PL_strtab);
804 /* free the pointer table used for cloning */
805 ptr_table_free(PL_ptr_table);
808 /* free special SVs */
810 SvREFCNT(&PL_sv_yes) = 0;
811 sv_clear(&PL_sv_yes);
812 SvANY(&PL_sv_yes) = NULL;
813 SvFLAGS(&PL_sv_yes) = 0;
815 SvREFCNT(&PL_sv_no) = 0;
817 SvANY(&PL_sv_no) = NULL;
818 SvFLAGS(&PL_sv_no) = 0;
820 SvREFCNT(&PL_sv_undef) = 0;
821 SvREADONLY_off(&PL_sv_undef);
825 for (i=0; i<=2; i++) {
826 SvREFCNT(PERL_DEBUG_PAD(i)) = 0;
827 sv_clear(PERL_DEBUG_PAD(i));
828 SvANY(PERL_DEBUG_PAD(i)) = NULL;
829 SvFLAGS(PERL_DEBUG_PAD(i)) = 0;
833 if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
834 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count);
836 #if defined(PERLIO_LAYERS)
837 /* No more IO - including error messages ! */
838 PerlIO_cleanup(aTHX);
841 Safefree(PL_origfilename);
842 Safefree(PL_reg_start_tmp);
844 Safefree(PL_reg_curpm);
845 Safefree(PL_reg_poscache);
846 Safefree(HeKEY_hek(&PL_hv_fetch_ent_mh));
847 Safefree(PL_op_mask);
848 Safefree(PL_psig_ptr);
849 Safefree(PL_psig_name);
850 Safefree(PL_bitcount);
851 Safefree(PL_psig_pend);
853 PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
855 DEBUG_P(debprofdump());
856 #ifdef USE_5005THREADS
857 MUTEX_DESTROY(&PL_strtab_mutex);
858 MUTEX_DESTROY(&PL_sv_mutex);
859 MUTEX_DESTROY(&PL_eval_mutex);
860 MUTEX_DESTROY(&PL_cred_mutex);
861 MUTEX_DESTROY(&PL_fdpid_mutex);
862 COND_DESTROY(&PL_eval_cond);
863 #ifdef EMULATE_ATOMIC_REFCOUNTS
864 MUTEX_DESTROY(&PL_svref_mutex);
865 #endif /* EMULATE_ATOMIC_REFCOUNTS */
867 /* As the penultimate thing, free the non-arena SV for thrsv */
868 Safefree(SvPVX(PL_thrsv));
869 Safefree(SvANY(PL_thrsv));
872 #endif /* USE_5005THREADS */
874 #ifdef USE_REENTRANT_API
875 Perl_reentrant_free(aTHX);
880 /* As the absolutely last thing, free the non-arena SV for mess() */
883 /* it could have accumulated taint magic */
884 if (SvTYPE(PL_mess_sv) >= SVt_PVMG) {
887 for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
888 moremagic = mg->mg_moremagic;
889 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global
891 Safefree(mg->mg_ptr);
895 /* we know that type >= SVt_PV */
896 (void)SvOOK_off(PL_mess_sv);
897 Safefree(SvPVX(PL_mess_sv));
898 Safefree(SvANY(PL_mess_sv));
899 Safefree(PL_mess_sv);
902 return STATUS_NATIVE_EXPORT;
906 =for apidoc perl_free
908 Releases a Perl interpreter. See L<perlembed>.
916 #if defined(WIN32) || defined(NETWARE)
917 # if defined(PERL_IMPLICIT_SYS)
919 void *host = nw_internal_host;
921 void *host = w32_internal_host;
925 nw5_delete_internal_host(host);
927 win32_delete_internal_host(host);
938 Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
940 Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
941 PL_exitlist[PL_exitlistlen].fn = fn;
942 PL_exitlist[PL_exitlistlen].ptr = ptr;
947 =for apidoc perl_parse
949 Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
955 perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
960 #ifdef USE_5005THREADS
964 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
967 Perl_croak(aTHX_ "suidperl is no longer needed since the kernel can now execute\n\
968 setuid perl scripts securely.\n");
974 /* we copy rather than point to argv
975 * since perl_clone will copy and perl_destruct
976 * has no way of knowing if we've made a copy or
980 New(0, PL_origargv, i+1, char*);
981 PL_origargv[i] = '\0';
983 PL_origargv[i] = savepv(argv[i]);
991 /* Come here if running an undumped a.out. */
993 PL_origfilename = savepv(argv[0]);
994 PL_do_undump = FALSE;
995 cxstack_ix = -1; /* start label stack again */
997 init_postdump_symbols(argc,argv,env);
1002 PL_curpad = AvARRAY(PL_comppad);
1003 op_free(PL_main_root);
1004 PL_main_root = Nullop;
1006 PL_main_start = Nullop;
1007 SvREFCNT_dec(PL_main_cv);
1008 PL_main_cv = Nullcv;
1011 oldscope = PL_scopestack_ix;
1012 PL_dowarn = G_WARN_OFF;
1014 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1015 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vparse_body), env, xsinit);
1021 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1022 parse_body(env,xsinit);
1025 call_list(oldscope, PL_checkav);
1032 /* my_exit() was called */
1033 while (PL_scopestack_ix > oldscope)
1036 PL_curstash = PL_defstash;
1038 call_list(oldscope, PL_checkav);
1039 ret = STATUS_NATIVE_EXPORT;
1042 PerlIO_printf(Perl_error_log, "panic: top_env\n");
1050 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1052 S_vparse_body(pTHX_ va_list args)
1054 char **env = va_arg(args, char**);
1055 XSINIT_t xsinit = va_arg(args, XSINIT_t);
1057 return parse_body(env, xsinit);
1062 S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
1064 int argc = PL_origargc;
1065 char **argv = PL_origargv;
1066 char *scriptname = NULL;
1068 VOL bool dosearch = FALSE;
1069 char *validarg = "";
1073 char *cddir = Nullch;
1075 sv_setpvn(PL_linestr,"",0);
1076 sv = newSVpvn("",0); /* first used for -I flags */
1080 for (argc--,argv++; argc > 0; argc--,argv++) {
1081 if (argv[0][0] != '-' || !argv[0][1])
1085 validarg = " PHOOEY ";
1094 win32_argv2utf8(argc-1, argv+1);
1097 #ifndef PERL_STRICT_CR
1121 if ((s = moreswitches(s)))
1126 if( !PL_tainting ) {
1127 PL_taint_warn = TRUE;
1134 PL_taint_warn = FALSE;
1139 #ifdef MACOS_TRADITIONAL
1140 /* ignore -e for Dev:Pseudo argument */
1141 if (argv[1] && !strcmp(argv[1], "Dev:Pseudo"))
1144 if (PL_euid != PL_uid || PL_egid != PL_gid)
1145 Perl_croak(aTHX_ "No -e allowed in setuid scripts");
1147 PL_e_script = newSVpvn("",0);
1148 filter_add(read_e_script, NULL);
1151 sv_catpv(PL_e_script, s);
1153 sv_catpv(PL_e_script, argv[1]);
1157 Perl_croak(aTHX_ "No code specified for -e");
1158 sv_catpv(PL_e_script, "\n");
1161 case 'I': /* -I handled both here and in moreswitches() */
1163 if (!*++s && (s=argv[1]) != Nullch) {
1168 STRLEN len = strlen(s);
1169 p = savepvn(s, len);
1170 incpush(p, TRUE, TRUE);
1171 sv_catpvn(sv, "-I", 2);
1172 sv_catpvn(sv, p, len);
1173 sv_catpvn(sv, " ", 1);
1177 Perl_croak(aTHX_ "No directory specified for -I");
1181 PL_preprocess = TRUE;
1191 PL_preambleav = newAV();
1192 av_push(PL_preambleav, newSVpv("use Config qw(myconfig config_vars)",0));
1194 PL_Sv = newSVpv("print myconfig();",0);
1196 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
1198 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
1200 sv_catpv(PL_Sv,"\" Compile-time options:");
1202 sv_catpv(PL_Sv," DEBUGGING");
1204 # ifdef MULTIPLICITY
1205 sv_catpv(PL_Sv," MULTIPLICITY");
1207 # ifdef USE_5005THREADS
1208 sv_catpv(PL_Sv," USE_5005THREADS");
1210 # ifdef USE_ITHREADS
1211 sv_catpv(PL_Sv," USE_ITHREADS");
1213 # ifdef USE_64_BIT_INT
1214 sv_catpv(PL_Sv," USE_64_BIT_INT");
1216 # ifdef USE_64_BIT_ALL
1217 sv_catpv(PL_Sv," USE_64_BIT_ALL");
1219 # ifdef USE_LONG_DOUBLE
1220 sv_catpv(PL_Sv," USE_LONG_DOUBLE");
1222 # ifdef USE_LARGE_FILES
1223 sv_catpv(PL_Sv," USE_LARGE_FILES");
1226 sv_catpv(PL_Sv," USE_SOCKS");
1228 # ifdef PERL_IMPLICIT_CONTEXT
1229 sv_catpv(PL_Sv," PERL_IMPLICIT_CONTEXT");
1231 # ifdef PERL_IMPLICIT_SYS
1232 sv_catpv(PL_Sv," PERL_IMPLICIT_SYS");
1234 sv_catpv(PL_Sv,"\\n\",");
1236 #if defined(LOCAL_PATCH_COUNT)
1237 if (LOCAL_PATCH_COUNT > 0) {
1239 sv_catpv(PL_Sv,"\" Locally applied patches:\\n\",");
1240 for (i = 1; i <= LOCAL_PATCH_COUNT; i++) {
1241 if (PL_localpatches[i])
1242 Perl_sv_catpvf(aTHX_ PL_Sv,"q\" \t%s\n\",",PL_localpatches[i]);
1246 Perl_sv_catpvf(aTHX_ PL_Sv,"\" Built under %s\\n\"",OSNAME);
1249 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled at %s %s\\n\"",__DATE__,__TIME__);
1251 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled on %s\\n\"",__DATE__);
1254 sv_catpv(PL_Sv, "; \
1256 @env = map { \"$_=\\\"$ENV{$_}\\\"\" } sort grep {/^PERL/} keys %ENV; ");
1259 push @env, \"CYGWIN=\\\"$ENV{CYGWIN}\\\"\";");
1262 print \" \\%ENV:\\n @env\\n\" if @env; \
1263 print \" \\@INC:\\n @INC\\n\";");
1266 PL_Sv = newSVpv("config_vars(qw(",0);
1267 sv_catpv(PL_Sv, ++s);
1268 sv_catpv(PL_Sv, "))");
1271 av_push(PL_preambleav, PL_Sv);
1272 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1275 PL_doextract = TRUE;
1283 if (!*++s || isSPACE(*s)) {
1287 /* catch use of gnu style long options */
1288 if (strEQ(s, "version")) {
1292 if (strEQ(s, "help")) {
1299 Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s);
1305 #ifndef SECURE_INTERNAL_GETENV
1308 (s = PerlEnv_getenv("PERL5OPT")))
1313 if (*s == '-' && *(s+1) == 'T') {
1315 PL_taint_warn = FALSE;
1318 char *popt_copy = Nullch;
1331 if (!strchr("DIMUdmtw", *s))
1332 Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
1336 popt_copy = SvPVX(sv_2mortal(newSVpv(popt,0)));
1337 s = popt_copy + (s - popt);
1338 d = popt_copy + (d - popt);
1345 if( !PL_tainting ) {
1346 PL_taint_warn = TRUE;
1356 if (PL_taint_warn && PL_dowarn != G_WARN_ALL_OFF) {
1357 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
1361 scriptname = argv[0];
1364 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1366 else if (scriptname == Nullch) {
1368 if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
1376 open_script(scriptname,dosearch,sv,&fdscript);
1378 validate_suid(validarg, scriptname,fdscript);
1381 #if defined(SIGCHLD) || defined(SIGCLD)
1384 # define SIGCHLD SIGCLD
1386 Sighandler_t sigstate = rsignal_state(SIGCHLD);
1387 if (sigstate == SIG_IGN) {
1388 if (ckWARN(WARN_SIGNAL))
1389 Perl_warner(aTHX_ packWARN(WARN_SIGNAL),
1390 "Can't ignore signal CHLD, forcing to default");
1391 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
1397 #ifdef MACOS_TRADITIONAL
1398 if (PL_doextract || gMacPerl_AlwaysExtract) {
1403 if (cddir && PerlDir_chdir(cddir) < 0)
1404 Perl_croak(aTHX_ "Can't chdir to %s",cddir);
1408 PL_main_cv = PL_compcv = (CV*)NEWSV(1104,0);
1409 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
1410 CvUNIQUE_on(PL_compcv);
1412 PL_comppad = newAV();
1413 av_push(PL_comppad, Nullsv);
1414 PL_curpad = AvARRAY(PL_comppad);
1415 PL_comppad_name = newAV();
1416 PL_comppad_name_fill = 0;
1417 PL_min_intro_pending = 0;
1419 #ifdef USE_5005THREADS
1420 av_store(PL_comppad_name, 0, newSVpvn("@_", 2));
1421 PL_curpad[0] = (SV*)newAV();
1422 SvPADMY_on(PL_curpad[0]); /* XXX Needed? */
1423 CvOWNER(PL_compcv) = 0;
1424 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
1425 MUTEX_INIT(CvMUTEXP(PL_compcv));
1426 #endif /* USE_5005THREADS */
1428 comppadlist = newAV();
1429 AvREAL_off(comppadlist);
1430 av_store(comppadlist, 0, (SV*)PL_comppad_name);
1431 av_store(comppadlist, 1, (SV*)PL_comppad);
1432 CvPADLIST(PL_compcv) = comppadlist;
1435 boot_core_UNIVERSAL();
1437 boot_core_xsutils();
1441 (*xsinit)(aTHX); /* in case linked C routines want magical variables */
1443 #if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC)
1449 # ifdef HAS_SOCKS5_INIT
1450 socks5_init(argv[0]);
1456 init_predump_symbols();
1457 /* init_postdump_symbols not currently designed to be called */
1458 /* more than once (ENV isn't cleared first, for example) */
1459 /* But running with -u leaves %ENV & @ARGV undefined! XXX */
1461 init_postdump_symbols(argc,argv,env);
1463 if (PL_wantutf8) { /* Requires init_predump_symbols(). */
1467 if (PL_stdingv && (io = GvIO(PL_stdingv)) && (fp = IoIFP(io)))
1468 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1469 if (PL_defoutgv && (io = GvIO(PL_defoutgv)) && (fp = IoOFP(io)))
1470 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1471 if (PL_stderrgv && (io = GvIO(PL_stderrgv)) && (fp = IoOFP(io)))
1472 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1473 if ((sv = GvSV(gv_fetchpv("\017PEN", TRUE, SVt_PV)))) {
1474 sv_setpvn(sv, ":utf8\0:utf8", 11);
1481 /* now parse the script */
1483 SETERRNO(0,SS$_NORMAL);
1485 #ifdef MACOS_TRADITIONAL
1486 if (gMacPerl_SyntaxError = (yyparse() || PL_error_count)) {
1488 Perl_croak(aTHX_ "%s had compilation errors.\n", MacPerl_MPWFileName(PL_origfilename));
1490 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1491 MacPerl_MPWFileName(PL_origfilename));
1495 if (yyparse() || PL_error_count) {
1497 Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
1499 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1504 CopLINE_set(PL_curcop, 0);
1505 PL_curstash = PL_defstash;
1506 PL_preprocess = FALSE;
1508 SvREFCNT_dec(PL_e_script);
1509 PL_e_script = Nullsv;
1513 Not sure that this is still the right place to do this now that we
1514 no longer use PL_nrs. HVDS 2001/09/09
1516 sv_setsv(get_sv("/", TRUE), PL_rs);
1522 SAVECOPFILE(PL_curcop);
1523 SAVECOPLINE(PL_curcop);
1524 gv_check(PL_defstash);
1531 if ((s=PerlEnv_getenv("PERL_DEBUG_MSTATS")) && atoi(s) >= 2)
1532 dump_mstats("after compilation:");
1541 =for apidoc perl_run
1543 Tells a Perl interpreter to run. See L<perlembed>.
1554 #ifdef USE_5005THREADS
1558 oldscope = PL_scopestack_ix;
1563 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1565 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vrun_body), oldscope);
1571 cxstack_ix = -1; /* start context stack again */
1573 case 0: /* normal completion */
1574 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1579 case 2: /* my_exit() */
1580 while (PL_scopestack_ix > oldscope)
1583 PL_curstash = PL_defstash;
1584 if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) &&
1585 PL_endav && !PL_minus_c)
1586 call_list(oldscope, PL_endav);
1588 if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
1589 dump_mstats("after execution: ");
1591 ret = STATUS_NATIVE_EXPORT;
1595 POPSTACK_TO(PL_mainstack);
1598 PerlIO_printf(Perl_error_log, "panic: restartop\n");
1608 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1610 S_vrun_body(pTHX_ va_list args)
1612 I32 oldscope = va_arg(args, I32);
1614 return run_body(oldscope);
1620 S_run_body(pTHX_ I32 oldscope)
1622 DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
1623 PL_sawampersand ? "Enabling" : "Omitting"));
1625 if (!PL_restartop) {
1626 DEBUG_x(dump_all());
1627 DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
1628 DEBUG_S(PerlIO_printf(Perl_debug_log, "main thread is 0x%"UVxf"\n",
1632 #ifdef MACOS_TRADITIONAL
1633 PerlIO_printf(Perl_error_log, "# %s syntax OK\n", MacPerl_MPWFileName(PL_origfilename));
1635 PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
1639 if (PERLDB_SINGLE && PL_DBsingle)
1640 sv_setiv(PL_DBsingle, 1);
1642 call_list(oldscope, PL_initav);
1648 PL_op = PL_restartop;
1652 else if (PL_main_start) {
1653 CvDEPTH(PL_main_cv) = 1;
1654 PL_op = PL_main_start;
1664 =head1 SV Manipulation Functions
1666 =for apidoc p||get_sv
1668 Returns the SV of the specified Perl scalar. If C<create> is set and the
1669 Perl variable does not exist then it will be created. If C<create> is not
1670 set and the variable does not exist then NULL is returned.
1676 Perl_get_sv(pTHX_ const char *name, I32 create)
1679 #ifdef USE_5005THREADS
1680 if (name[1] == '\0' && !isALPHA(name[0])) {
1681 PADOFFSET tmp = find_threadsv(name);
1682 if (tmp != NOT_IN_PAD)
1683 return THREADSV(tmp);
1685 #endif /* USE_5005THREADS */
1686 gv = gv_fetchpv(name, create, SVt_PV);
1693 =head1 Array Manipulation Functions
1695 =for apidoc p||get_av
1697 Returns the AV of the specified Perl array. If C<create> is set and the
1698 Perl variable does not exist then it will be created. If C<create> is not
1699 set and the variable does not exist then NULL is returned.
1705 Perl_get_av(pTHX_ const char *name, I32 create)
1707 GV* gv = gv_fetchpv(name, create, SVt_PVAV);
1716 =head1 Hash Manipulation Functions
1718 =for apidoc p||get_hv
1720 Returns the HV of the specified Perl hash. If C<create> is set and the
1721 Perl variable does not exist then it will be created. If C<create> is not
1722 set and the variable does not exist then NULL is returned.
1728 Perl_get_hv(pTHX_ const char *name, I32 create)
1730 GV* gv = gv_fetchpv(name, create, SVt_PVHV);
1739 =head1 CV Manipulation Functions
1741 =for apidoc p||get_cv
1743 Returns the CV of the specified Perl subroutine. If C<create> is set and
1744 the Perl subroutine does not exist then it will be declared (which has the
1745 same effect as saying C<sub name;>). If C<create> is not set and the
1746 subroutine does not exist then NULL is returned.
1752 Perl_get_cv(pTHX_ const char *name, I32 create)
1754 GV* gv = gv_fetchpv(name, create, SVt_PVCV);
1755 /* XXX unsafe for threads if eval_owner isn't held */
1756 /* XXX this is probably not what they think they're getting.
1757 * It has the same effect as "sub name;", i.e. just a forward
1759 if (create && !GvCVu(gv))
1760 return newSUB(start_subparse(FALSE, 0),
1761 newSVOP(OP_CONST, 0, newSVpv(name,0)),
1769 /* Be sure to refetch the stack pointer after calling these routines. */
1773 =head1 Callback Functions
1775 =for apidoc p||call_argv
1777 Performs a callback to the specified Perl sub. See L<perlcall>.
1783 Perl_call_argv(pTHX_ const char *sub_name, I32 flags, register char **argv)
1785 /* See G_* flags in cop.h */
1786 /* null terminated arg list */
1793 XPUSHs(sv_2mortal(newSVpv(*argv,0)));
1798 return call_pv(sub_name, flags);
1802 =for apidoc p||call_pv
1804 Performs a callback to the specified Perl sub. See L<perlcall>.
1810 Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
1811 /* name of the subroutine */
1812 /* See G_* flags in cop.h */
1814 return call_sv((SV*)get_cv(sub_name, TRUE), flags);
1818 =for apidoc p||call_method
1820 Performs a callback to the specified Perl method. The blessed object must
1821 be on the stack. See L<perlcall>.
1827 Perl_call_method(pTHX_ const char *methname, I32 flags)
1828 /* name of the subroutine */
1829 /* See G_* flags in cop.h */
1831 return call_sv(sv_2mortal(newSVpv(methname,0)), flags | G_METHOD);
1834 /* May be called with any of a CV, a GV, or an SV containing the name. */
1836 =for apidoc p||call_sv
1838 Performs a callback to the Perl sub whose name is in the SV. See
1845 Perl_call_sv(pTHX_ SV *sv, I32 flags)
1846 /* See G_* flags in cop.h */
1849 LOGOP myop; /* fake syntax tree node */
1852 volatile I32 retval = 0;
1854 bool oldcatch = CATCH_GET;
1859 if (flags & G_DISCARD) {
1864 Zero(&myop, 1, LOGOP);
1865 myop.op_next = Nullop;
1866 if (!(flags & G_NOARGS))
1867 myop.op_flags |= OPf_STACKED;
1868 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
1869 (flags & G_ARRAY) ? OPf_WANT_LIST :
1874 EXTEND(PL_stack_sp, 1);
1875 *++PL_stack_sp = sv;
1877 oldscope = PL_scopestack_ix;
1879 if (PERLDB_SUB && PL_curstash != PL_debstash
1880 /* Handle first BEGIN of -d. */
1881 && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
1882 /* Try harder, since this may have been a sighandler, thus
1883 * curstash may be meaningless. */
1884 && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != PL_debstash)
1885 && !(flags & G_NODEBUG))
1886 PL_op->op_private |= OPpENTERSUB_DB;
1888 if (flags & G_METHOD) {
1889 Zero(&method_op, 1, UNOP);
1890 method_op.op_next = PL_op;
1891 method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
1892 myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
1893 PL_op = (OP*)&method_op;
1896 if (!(flags & G_EVAL)) {
1898 call_body((OP*)&myop, FALSE);
1899 retval = PL_stack_sp - (PL_stack_base + oldmark);
1900 CATCH_SET(oldcatch);
1903 myop.op_other = (OP*)&myop;
1905 /* we're trying to emulate pp_entertry() here */
1907 register PERL_CONTEXT *cx;
1908 I32 gimme = GIMME_V;
1913 push_return(Nullop);
1914 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
1916 PL_eval_root = PL_op; /* Only needed so that goto works right. */
1918 PL_in_eval = EVAL_INEVAL;
1919 if (flags & G_KEEPERR)
1920 PL_in_eval |= EVAL_KEEPERR;
1926 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1928 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
1935 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1937 call_body((OP*)&myop, FALSE);
1939 retval = PL_stack_sp - (PL_stack_base + oldmark);
1940 if (!(flags & G_KEEPERR))
1947 /* my_exit() was called */
1948 PL_curstash = PL_defstash;
1951 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
1952 Perl_croak(aTHX_ "Callback called exit");
1957 PL_op = PL_restartop;
1961 PL_stack_sp = PL_stack_base + oldmark;
1962 if (flags & G_ARRAY)
1966 *++PL_stack_sp = &PL_sv_undef;
1971 if (PL_scopestack_ix > oldscope) {
1975 register PERL_CONTEXT *cx;
1987 if (flags & G_DISCARD) {
1988 PL_stack_sp = PL_stack_base + oldmark;
1997 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1999 S_vcall_body(pTHX_ va_list args)
2001 OP *myop = va_arg(args, OP*);
2002 int is_eval = va_arg(args, int);
2004 call_body(myop, is_eval);
2010 S_call_body(pTHX_ OP *myop, int is_eval)
2012 if (PL_op == myop) {
2014 PL_op = Perl_pp_entereval(aTHX); /* this doesn't do a POPMARK */
2016 PL_op = Perl_pp_entersub(aTHX); /* this does */
2022 /* Eval a string. The G_EVAL flag is always assumed. */
2025 =for apidoc p||eval_sv
2027 Tells Perl to C<eval> the string in the SV.
2033 Perl_eval_sv(pTHX_ SV *sv, I32 flags)
2035 /* See G_* flags in cop.h */
2038 UNOP myop; /* fake syntax tree node */
2039 volatile I32 oldmark = SP - PL_stack_base;
2040 volatile I32 retval = 0;
2046 if (flags & G_DISCARD) {
2053 Zero(PL_op, 1, UNOP);
2054 EXTEND(PL_stack_sp, 1);
2055 *++PL_stack_sp = sv;
2056 oldscope = PL_scopestack_ix;
2058 if (!(flags & G_NOARGS))
2059 myop.op_flags = OPf_STACKED;
2060 myop.op_next = Nullop;
2061 myop.op_type = OP_ENTEREVAL;
2062 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
2063 (flags & G_ARRAY) ? OPf_WANT_LIST :
2065 if (flags & G_KEEPERR)
2066 myop.op_flags |= OPf_SPECIAL;
2068 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2070 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
2077 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2079 call_body((OP*)&myop,TRUE);
2081 retval = PL_stack_sp - (PL_stack_base + oldmark);
2082 if (!(flags & G_KEEPERR))
2089 /* my_exit() was called */
2090 PL_curstash = PL_defstash;
2093 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
2094 Perl_croak(aTHX_ "Callback called exit");
2099 PL_op = PL_restartop;
2103 PL_stack_sp = PL_stack_base + oldmark;
2104 if (flags & G_ARRAY)
2108 *++PL_stack_sp = &PL_sv_undef;
2114 if (flags & G_DISCARD) {
2115 PL_stack_sp = PL_stack_base + oldmark;
2125 =for apidoc p||eval_pv
2127 Tells Perl to C<eval> the given string and return an SV* result.
2133 Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
2136 SV* sv = newSVpv(p, 0);
2138 eval_sv(sv, G_SCALAR);
2145 if (croak_on_error && SvTRUE(ERRSV)) {
2147 Perl_croak(aTHX_ SvPVx(ERRSV, n_a));
2153 /* Require a module. */
2156 =head1 Embedding Functions
2158 =for apidoc p||require_pv
2160 Tells Perl to C<require> the file named by the string argument. It is
2161 analogous to the Perl code C<eval "require '$file'">. It's even
2162 implemented that way; consider using Perl_load_module instead.
2167 Perl_require_pv(pTHX_ const char *pv)
2171 PUSHSTACKi(PERLSI_REQUIRE);
2173 sv = sv_newmortal();
2174 sv_setpv(sv, "require '");
2177 eval_sv(sv, G_DISCARD);
2183 Perl_magicname(pTHX_ char *sym, char *name, I32 namlen)
2187 if ((gv = gv_fetchpv(sym,TRUE, SVt_PV)))
2188 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, namlen);
2192 S_usage(pTHX_ char *name) /* XXX move this out into a module ? */
2194 /* This message really ought to be max 23 lines.
2195 * Removed -h because the user already knows that option. Others? */
2197 static char *usage_msg[] = {
2198 "-0[octal] specify record separator (\\0, if no argument)",
2199 "-a autosplit mode with -n or -p (splits $_ into @F)",
2200 "-C enable native wide character system interfaces",
2201 "-c check syntax only (runs BEGIN and CHECK blocks)",
2202 "-d[:debugger] run program under debugger",
2203 "-D[number/list] set debugging flags (argument is a bit mask or alphabets)",
2204 "-e 'command' one line of program (several -e's allowed, omit programfile)",
2205 "-F/pattern/ split() pattern for -a switch (//'s are optional)",
2206 "-i[extension] edit <> files in place (makes backup if extension supplied)",
2207 "-Idirectory specify @INC/#include directory (several -I's allowed)",
2208 "-l[octal] enable line ending processing, specifies line terminator",
2209 "-[mM][-]module execute `use/no module...' before executing program",
2210 "-n assume 'while (<>) { ... }' loop around program",
2211 "-p assume loop like -n but print line also, like sed",
2212 "-P run program through C preprocessor before compilation",
2213 "-s enable rudimentary parsing for switches after programfile",
2214 "-S look for programfile using PATH environment variable",
2215 "-T enable tainting checks",
2216 "-t enable tainting warnings",
2217 "-u dump core after parsing program",
2218 "-U allow unsafe operations",
2219 "-v print version, subversion (includes VERY IMPORTANT perl info)",
2220 "-V[:variable] print configuration summary (or a single Config.pm variable)",
2221 "-w enable many useful warnings (RECOMMENDED)",
2222 "-W enable all warnings",
2223 "-X disable all warnings",
2224 "-x[directory] strip off text before #!perl line and perhaps cd to directory",
2228 char **p = usage_msg;
2230 PerlIO_printf(PerlIO_stdout(),
2231 "\nUsage: %s [switches] [--] [programfile] [arguments]",
2234 PerlIO_printf(PerlIO_stdout(), "\n %s", *p++);
2237 /* This routine handles any switches that can be given during run */
2240 Perl_moreswitches(pTHX_ char *s)
2250 rschar = (U32)grok_oct(s, &numlen, &flags, NULL);
2251 SvREFCNT_dec(PL_rs);
2252 if (rschar & ~((U8)~0))
2253 PL_rs = &PL_sv_undef;
2254 else if (!rschar && numlen >= 2)
2255 PL_rs = newSVpvn("", 0);
2258 PL_rs = newSVpvn(&ch, 1);
2263 PL_widesyscalls = TRUE;
2269 while (*s && !isSPACE(*s)) ++s;
2271 PL_splitstr = savepv(PL_splitstr);
2284 /* The following permits -d:Mod to accepts arguments following an =
2285 in the fashion that -MSome::Mod does. */
2286 if (*s == ':' || *s == '=') {
2289 sv = newSVpv("use Devel::", 0);
2291 /* We now allow -d:Module=Foo,Bar */
2292 while(isALNUM(*s) || *s==':') ++s;
2294 sv_catpv(sv, start);
2296 sv_catpvn(sv, start, s-start);
2297 sv_catpv(sv, " split(/,/,q{");
2302 my_setenv("PERL5DB", SvPV(sv, PL_na));
2305 PL_perldb = PERLDB_ALL;
2313 if (isALPHA(s[1])) {
2314 /* if adding extra options, remember to update DEBUG_MASK */
2315 static char debopts[] = "psltocPmfrxuLHXDSTRJ";
2318 for (s++; *s && (d = strchr(debopts,*s)); s++)
2319 PL_debug |= 1 << (d - debopts);
2322 PL_debug = atoi(s+1);
2323 for (s++; isDIGIT(*s); s++) ;
2326 if (DEBUG_p_TEST_ && ckWARN_d(WARN_DEBUGGING))
2327 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2328 "-Dp not implemented on this platform\n");
2330 PL_debug |= DEBUG_TOP_FLAG;
2331 #else /* !DEBUGGING */
2332 if (ckWARN_d(WARN_DEBUGGING))
2333 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2334 "Recompile perl with -DDEBUGGING to use -D switch\n");
2335 for (s++; isALNUM(*s); s++) ;
2341 usage(PL_origargv[0]);
2345 Safefree(PL_inplace);
2346 PL_inplace = savepv(s+1);
2348 for (s = PL_inplace; *s && !isSPACE(*s); s++) ;
2351 if (*s == '-') /* Additional switches on #! line. */
2355 case 'I': /* -I handled both here and in parse_body() */
2358 while (*s && isSPACE(*s))
2363 /* ignore trailing spaces (possibly followed by other switches) */
2365 for (e = p; *e && !isSPACE(*e); e++) ;
2369 } while (*p && *p != '-');
2370 e = savepvn(s, e-s);
2371 incpush(e, TRUE, TRUE);
2378 Perl_croak(aTHX_ "No directory specified for -I");
2384 SvREFCNT_dec(PL_ors_sv);
2389 PL_ors_sv = newSVpvn("\n",1);
2390 numlen = 3 + (*s == '0');
2391 *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL);
2395 if (RsPARA(PL_rs)) {
2396 PL_ors_sv = newSVpvn("\n\n",2);
2399 PL_ors_sv = newSVsv(PL_rs);
2404 forbid_setid("-M"); /* XXX ? */
2407 forbid_setid("-m"); /* XXX ? */
2412 /* -M-foo == 'no foo' */
2413 if (*s == '-') { use = "no "; ++s; }
2414 sv = newSVpv(use,0);
2416 /* We allow -M'Module qw(Foo Bar)' */
2417 while(isALNUM(*s) || *s==':') ++s;
2419 sv_catpv(sv, start);
2420 if (*(start-1) == 'm') {
2422 Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
2423 sv_catpv( sv, " ()");
2427 Perl_croak(aTHX_ "Module name required with -%c option",
2429 sv_catpvn(sv, start, s-start);
2430 sv_catpv(sv, " split(/,/,q{");
2436 PL_preambleav = newAV();
2437 av_push(PL_preambleav, sv);
2440 Perl_croak(aTHX_ "No space allowed after -%c", *(s-1));
2452 PL_doswitches = TRUE;
2457 Perl_croak(aTHX_ "Too late for \"-t\" option");
2462 Perl_croak(aTHX_ "Too late for \"-T\" option");
2466 #ifdef MACOS_TRADITIONAL
2467 Perl_croak(aTHX_ "Believe me, you don't want to use \"-u\" on a Macintosh");
2469 PL_do_undump = TRUE;
2478 PerlIO_printf(PerlIO_stdout(),
2479 Perl_form(aTHX_ "\nThis is perl, v%"VDf" built for %s",
2480 PL_patchlevel, ARCHNAME));
2482 /* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */
2483 PerlIO_printf(PerlIO_stdout(),
2484 Perl_form(aTHX_ "\nThis is perl, version %vd\n", PL_patchlevel));
2485 PerlIO_printf(PerlIO_stdout(),
2486 Perl_form(aTHX_ " built under %s at %s %s\n",
2487 OSNAME, __DATE__, __TIME__));
2488 PerlIO_printf(PerlIO_stdout(),
2489 Perl_form(aTHX_ " OS Specific Release: %s\n",
2493 #if defined(LOCAL_PATCH_COUNT)
2494 if (LOCAL_PATCH_COUNT > 0)
2495 PerlIO_printf(PerlIO_stdout(),
2496 "\n(with %d registered patch%s, "
2497 "see perl -V for more detail)",
2498 (int)LOCAL_PATCH_COUNT,
2499 (LOCAL_PATCH_COUNT!=1) ? "es" : "");
2502 PerlIO_printf(PerlIO_stdout(),
2503 "\n\nCopyright 1987-2002, Larry Wall\n");
2504 #ifdef MACOS_TRADITIONAL
2505 PerlIO_printf(PerlIO_stdout(),
2506 "\nMac OS port Copyright 1991-2002, Matthias Neeracher;\n"
2507 "maintained by Chris Nandor\n");
2510 PerlIO_printf(PerlIO_stdout(),
2511 "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
2514 PerlIO_printf(PerlIO_stdout(),
2515 "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
2516 "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
2519 PerlIO_printf(PerlIO_stdout(),
2520 "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
2521 "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n");
2524 PerlIO_printf(PerlIO_stdout(),
2525 "atariST series port, ++jrb bammi@cadence.com\n");
2528 PerlIO_printf(PerlIO_stdout(),
2529 "BeOS port Copyright Tom Spindler, 1997-1999\n");
2532 PerlIO_printf(PerlIO_stdout(),
2533 "MPE/iX port Copyright by Mark Klein and Mark Bixby, 1996-2002\n");
2536 PerlIO_printf(PerlIO_stdout(),
2537 "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
2540 PerlIO_printf(PerlIO_stdout(),
2541 "Stratus VOS port by Paul.Green@stratus.com, 1997-2002\n");
2544 PerlIO_printf(PerlIO_stdout(),
2545 "VM/ESA port by Neale Ferguson, 1998-1999\n");
2548 PerlIO_printf(PerlIO_stdout(),
2549 "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
2552 PerlIO_printf(PerlIO_stdout(),
2553 "MiNT port by Guido Flohr, 1997-1999\n");
2556 PerlIO_printf(PerlIO_stdout(),
2557 "EPOC port by Olaf Flebbe, 1999-2002\n");
2560 printf("WINCE port by Rainer Keuchel, 2001-2002\n");
2561 printf("Built on " __DATE__ " " __TIME__ "\n\n");
2564 #ifdef BINARY_BUILD_NOTICE
2565 BINARY_BUILD_NOTICE;
2567 PerlIO_printf(PerlIO_stdout(),
2569 Perl may be copied only under the terms of either the Artistic License or the\n\
2570 GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
2571 Complete documentation for Perl, including FAQ lists, should be found on\n\
2572 this system using `man perl' or `perldoc perl'. If you have access to the\n\
2573 Internet, point your browser at http://www.perl.com/, the Perl Home Page.\n\n");
2576 if (! (PL_dowarn & G_WARN_ALL_MASK))
2577 PL_dowarn |= G_WARN_ON;
2581 PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
2582 if (!specialWARN(PL_compiling.cop_warnings))
2583 SvREFCNT_dec(PL_compiling.cop_warnings);
2584 PL_compiling.cop_warnings = pWARN_ALL ;
2588 PL_dowarn = G_WARN_ALL_OFF;
2589 if (!specialWARN(PL_compiling.cop_warnings))
2590 SvREFCNT_dec(PL_compiling.cop_warnings);
2591 PL_compiling.cop_warnings = pWARN_NONE ;
2596 if (s[1] == '-') /* Additional switches on #! line. */
2601 #if defined(WIN32) || !defined(PERL_STRICT_CR)
2607 #ifdef ALTERNATE_SHEBANG
2608 case 'S': /* OS/2 needs -S on "extproc" line. */
2616 Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
2621 /* compliments of Tom Christiansen */
2623 /* unexec() can be found in the Gnu emacs distribution */
2624 /* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
2627 Perl_my_unexec(pTHX)
2635 prog = newSVpv(BIN_EXP, 0);
2636 sv_catpv(prog, "/perl");
2637 file = newSVpv(PL_origfilename, 0);
2638 sv_catpv(file, ".perldump");
2640 unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
2641 /* unexec prints msg to stderr in case of failure */
2642 PerlProc_exit(status);
2645 # include <lib$routines.h>
2646 lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */
2648 ABORT(); /* for use with undump */
2653 /* initialize curinterp */
2659 # define PERLVAR(var,type)
2660 # define PERLVARA(var,n,type)
2661 # if defined(PERL_IMPLICIT_CONTEXT)
2662 # if defined(USE_5005THREADS)
2663 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2664 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2665 # else /* !USE_5005THREADS */
2666 # define PERLVARI(var,type,init) aTHX->var = init;
2667 # define PERLVARIC(var,type,init) aTHX->var = init;
2668 # endif /* USE_5005THREADS */
2670 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2671 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2673 # include "intrpvar.h"
2674 # ifndef USE_5005THREADS
2675 # include "thrdvar.h"
2682 # define PERLVAR(var,type)
2683 # define PERLVARA(var,n,type)
2684 # define PERLVARI(var,type,init) PL_##var = init;
2685 # define PERLVARIC(var,type,init) PL_##var = init;
2686 # include "intrpvar.h"
2687 # ifndef USE_5005THREADS
2688 # include "thrdvar.h"
2699 S_init_main_stash(pTHX)
2703 PL_curstash = PL_defstash = newHV();
2704 PL_curstname = newSVpvn("main",4);
2705 gv = gv_fetchpv("main::",TRUE, SVt_PVHV);
2706 SvREFCNT_dec(GvHV(gv));
2707 GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
2709 HvNAME(PL_defstash) = savepv("main");
2710 PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
2711 GvMULTI_on(PL_incgv);
2712 PL_hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */
2713 GvMULTI_on(PL_hintgv);
2714 PL_defgv = gv_fetchpv("_",TRUE, SVt_PVAV);
2715 PL_errgv = gv_HVadd(gv_fetchpv("@", TRUE, SVt_PV));
2716 GvMULTI_on(PL_errgv);
2717 PL_replgv = gv_fetchpv("\022", TRUE, SVt_PV); /* ^R */
2718 GvMULTI_on(PL_replgv);
2719 (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */
2720 sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */
2721 sv_setpvn(ERRSV, "", 0);
2722 PL_curstash = PL_defstash;
2723 CopSTASH_set(&PL_compiling, PL_defstash);
2724 PL_debstash = GvHV(gv_fetchpv("DB::", GV_ADDMULTI, SVt_PVHV));
2725 PL_globalstash = GvHV(gv_fetchpv("CORE::GLOBAL::", GV_ADDMULTI, SVt_PVHV));
2726 PL_nullstash = GvHV(gv_fetchpv("<none>::", GV_ADDMULTI, SVt_PVHV));
2727 /* We must init $/ before switches are processed. */
2728 sv_setpvn(get_sv("/", TRUE), "\n", 1);
2732 S_open_script(pTHX_ char *scriptname, bool dosearch, SV *sv, int *fdscript)
2736 char *cpp_discard_flag;
2742 PL_origfilename = savepv("-e");
2745 /* if find_script() returns, it returns a malloc()-ed value */
2746 PL_origfilename = scriptname = find_script(scriptname, dosearch, NULL, 1);
2748 if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) {
2749 char *s = scriptname + 8;
2750 *fdscript = atoi(s);
2754 scriptname = savepv(s + 1);
2755 Safefree(PL_origfilename);
2756 PL_origfilename = scriptname;
2761 CopFILE_free(PL_curcop);
2762 CopFILE_set(PL_curcop, PL_origfilename);
2763 if (strEQ(PL_origfilename,"-"))
2765 if (*fdscript >= 0) {
2766 PL_rsfp = PerlIO_fdopen(*fdscript,PERL_SCRIPT_MODE);
2767 # if defined(HAS_FCNTL) && defined(F_SETFD)
2769 /* ensure close-on-exec */
2770 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2773 else if (PL_preprocess) {
2774 char *cpp_cfg = CPPSTDIN;
2775 SV *cpp = newSVpvn("",0);
2776 SV *cmd = NEWSV(0,0);
2778 if (strEQ(cpp_cfg, "cppstdin"))
2779 Perl_sv_catpvf(aTHX_ cpp, "%s/", BIN_EXP);
2780 sv_catpv(cpp, cpp_cfg);
2783 sv_catpvn(sv, "-I", 2);
2784 sv_catpv(sv,PRIVLIB_EXP);
2787 DEBUG_P(PerlIO_printf(Perl_debug_log,
2788 "PL_preprocess: scriptname=\"%s\", cpp=\"%s\", sv=\"%s\", CPPMINUS=\"%s\"\n",
2789 scriptname, SvPVX (cpp), SvPVX (sv), CPPMINUS));
2791 # if defined(MSDOS) || defined(WIN32) || defined(VMS)
2798 cpp_discard_flag = "";
2800 cpp_discard_flag = "-C";
2804 perl = os2_execname(aTHX);
2806 perl = PL_origargv[0];
2810 /* This strips off Perl comments which might interfere with
2811 the C pre-processor, including #!. #line directives are
2812 deliberately stripped to avoid confusion with Perl's version
2813 of #line. FWP played some golf with it so it will fit
2814 into VMS's 255 character buffer.
2817 code = "(1../^#!.*perl/i)|/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2819 code = "/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2821 Perl_sv_setpvf(aTHX_ cmd, "\
2822 %s -ne%s%s%s %s | %"SVf" %s %"SVf" %s",
2823 perl, quote, code, quote, scriptname, cpp,
2824 cpp_discard_flag, sv, CPPMINUS);
2826 PL_doextract = FALSE;
2827 # ifdef IAMSUID /* actually, this is caught earlier */
2828 if (PL_euid != PL_uid && !PL_euid) { /* if running suidperl */
2830 (void)seteuid(PL_uid); /* musn't stay setuid root */
2832 # ifdef HAS_SETREUID
2833 (void)setreuid((Uid_t)-1, PL_uid);
2835 # ifdef HAS_SETRESUID
2836 (void)setresuid((Uid_t)-1, PL_uid, (Uid_t)-1);
2838 PerlProc_setuid(PL_uid);
2842 if (PerlProc_geteuid() != PL_uid)
2843 Perl_croak(aTHX_ "Can't do seteuid!\n");
2845 # endif /* IAMSUID */
2847 DEBUG_P(PerlIO_printf(Perl_debug_log,
2848 "PL_preprocess: cmd=\"%s\"\n",
2851 PL_rsfp = PerlProc_popen(SvPVX(cmd), "r");
2855 else if (!*scriptname) {
2856 forbid_setid("program input from stdin");
2857 PL_rsfp = PerlIO_stdin();
2860 PL_rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
2861 # if defined(HAS_FCNTL) && defined(F_SETFD)
2863 /* ensure close-on-exec */
2864 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2869 # ifndef IAMSUID /* in case script is not readable before setuid */
2871 PerlLIO_stat(CopFILE(PL_curcop),&PL_statbuf) >= 0 &&
2872 PL_statbuf.st_mode & (S_ISUID|S_ISGID))
2875 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT,
2876 BIN_EXP, (int)PERL_REVISION,
2878 (int)PERL_SUBVERSION), PL_origargv);
2879 Perl_croak(aTHX_ "Can't do setuid\n");
2885 Perl_croak(aTHX_ "Can't open perl script: %s\n",
2888 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
2889 CopFILE(PL_curcop), Strerror(errno));
2895 * I_SYSSTATVFS HAS_FSTATVFS
2897 * I_STATFS HAS_FSTATFS HAS_GETFSSTAT
2898 * I_MNTENT HAS_GETMNTENT HAS_HASMNTOPT
2899 * here so that metaconfig picks them up. */
2903 S_fd_on_nosuid_fs(pTHX_ int fd)
2905 int check_okay = 0; /* able to do all the required sys/libcalls */
2906 int on_nosuid = 0; /* the fd is on a nosuid fs */
2908 * Preferred order: fstatvfs(), fstatfs(), ustat()+getmnt(), getmntent().
2909 * fstatvfs() is UNIX98.
2910 * fstatfs() is 4.3 BSD.
2911 * ustat()+getmnt() is pre-4.3 BSD.
2912 * getmntent() is O(number-of-mounted-filesystems) and can hang on
2913 * an irrelevant filesystem while trying to reach the right one.
2916 #undef FD_ON_NOSUID_CHECK_OKAY /* found the syscalls to do the check? */
2918 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2919 defined(HAS_FSTATVFS)
2920 # define FD_ON_NOSUID_CHECK_OKAY
2921 struct statvfs stfs;
2923 check_okay = fstatvfs(fd, &stfs) == 0;
2924 on_nosuid = check_okay && (stfs.f_flag & ST_NOSUID);
2925 # endif /* fstatvfs */
2927 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2928 defined(PERL_MOUNT_NOSUID) && \
2929 defined(HAS_FSTATFS) && \
2930 defined(HAS_STRUCT_STATFS) && \
2931 defined(HAS_STRUCT_STATFS_F_FLAGS)
2932 # define FD_ON_NOSUID_CHECK_OKAY
2935 check_okay = fstatfs(fd, &stfs) == 0;
2936 on_nosuid = check_okay && (stfs.f_flags & PERL_MOUNT_NOSUID);
2937 # endif /* fstatfs */
2939 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2940 defined(PERL_MOUNT_NOSUID) && \
2941 defined(HAS_FSTAT) && \
2942 defined(HAS_USTAT) && \
2943 defined(HAS_GETMNT) && \
2944 defined(HAS_STRUCT_FS_DATA) && \
2946 # define FD_ON_NOSUID_CHECK_OKAY
2949 if (fstat(fd, &fdst) == 0) {
2951 if (ustat(fdst.st_dev, &us) == 0) {
2953 /* NOSTAT_ONE here because we're not examining fields which
2954 * vary between that case and STAT_ONE. */
2955 if (getmnt((int*)0, &fsd, (int)0, NOSTAT_ONE, us.f_fname) == 0) {
2956 size_t cmplen = sizeof(us.f_fname);
2957 if (sizeof(fsd.fd_req.path) < cmplen)
2958 cmplen = sizeof(fsd.fd_req.path);
2959 if (strnEQ(fsd.fd_req.path, us.f_fname, cmplen) &&
2960 fdst.st_dev == fsd.fd_req.dev) {
2962 on_nosuid = fsd.fd_req.flags & PERL_MOUNT_NOSUID;
2968 # endif /* fstat+ustat+getmnt */
2970 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2971 defined(HAS_GETMNTENT) && \
2972 defined(HAS_HASMNTOPT) && \
2973 defined(MNTOPT_NOSUID)
2974 # define FD_ON_NOSUID_CHECK_OKAY
2975 FILE *mtab = fopen("/etc/mtab", "r");
2976 struct mntent *entry;
2977 struct stat stb, fsb;
2979 if (mtab && (fstat(fd, &stb) == 0)) {
2980 while (entry = getmntent(mtab)) {
2981 if (stat(entry->mnt_dir, &fsb) == 0
2982 && fsb.st_dev == stb.st_dev)
2984 /* found the filesystem */
2986 if (hasmntopt(entry, MNTOPT_NOSUID))
2989 } /* A single fs may well fail its stat(). */
2994 # endif /* getmntent+hasmntopt */
2997 Perl_croak(aTHX_ "Can't check filesystem of script \"%s\" for nosuid", PL_origfilename);
3000 #endif /* IAMSUID */
3003 S_validate_suid(pTHX_ char *validarg, char *scriptname, int fdscript)
3009 /* do we need to emulate setuid on scripts? */
3011 /* This code is for those BSD systems that have setuid #! scripts disabled
3012 * in the kernel because of a security problem. Merely defining DOSUID
3013 * in perl will not fix that problem, but if you have disabled setuid
3014 * scripts in the kernel, this will attempt to emulate setuid and setgid
3015 * on scripts that have those now-otherwise-useless bits set. The setuid
3016 * root version must be called suidperl or sperlN.NNN. If regular perl
3017 * discovers that it has opened a setuid script, it calls suidperl with
3018 * the same argv that it had. If suidperl finds that the script it has
3019 * just opened is NOT setuid root, it sets the effective uid back to the
3020 * uid. We don't just make perl setuid root because that loses the
3021 * effective uid we had before invoking perl, if it was different from the
3024 * DOSUID must be defined in both perl and suidperl, and IAMSUID must
3025 * be defined in suidperl only. suidperl must be setuid root. The
3026 * Configure script will set this up for you if you want it.
3032 if (PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf) < 0) /* normal stat is insecure */
3033 Perl_croak(aTHX_ "Can't stat script \"%s\"",PL_origfilename);
3034 if (fdscript < 0 && PL_statbuf.st_mode & (S_ISUID|S_ISGID)) {
3039 #ifndef HAS_SETREUID
3040 /* On this access check to make sure the directories are readable,
3041 * there is actually a small window that the user could use to make
3042 * filename point to an accessible directory. So there is a faint
3043 * chance that someone could execute a setuid script down in a
3044 * non-accessible directory. I don't know what to do about that.
3045 * But I don't think it's too important. The manual lies when
3046 * it says access() is useful in setuid programs.
3048 if (PerlLIO_access(CopFILE(PL_curcop),1)) /*double check*/
3049 Perl_croak(aTHX_ "Permission denied");
3051 /* If we can swap euid and uid, then we can determine access rights
3052 * with a simple stat of the file, and then compare device and
3053 * inode to make sure we did stat() on the same file we opened.
3054 * Then we just have to make sure he or she can execute it.
3057 struct stat tmpstatbuf;
3061 setreuid(PL_euid,PL_uid) < 0
3064 setresuid(PL_euid,PL_uid,(Uid_t)-1) < 0
3067 || PerlProc_getuid() != PL_euid || PerlProc_geteuid() != PL_uid)
3068 Perl_croak(aTHX_ "Can't swap uid and euid"); /* really paranoid */
3069 if (PerlLIO_stat(CopFILE(PL_curcop),&tmpstatbuf) < 0)
3070 Perl_croak(aTHX_ "Permission denied"); /* testing full pathname here */
3071 #if defined(IAMSUID) && !defined(NO_NOSUID_CHECK)
3072 if (fd_on_nosuid_fs(PerlIO_fileno(PL_rsfp)))
3073 Perl_croak(aTHX_ "Permission denied");
3075 if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
3076 tmpstatbuf.st_ino != PL_statbuf.st_ino) {
3077 (void)PerlIO_close(PL_rsfp);
3078 Perl_croak(aTHX_ "Permission denied\n");
3082 setreuid(PL_uid,PL_euid) < 0
3084 # if defined(HAS_SETRESUID)
3085 setresuid(PL_uid,PL_euid,(Uid_t)-1) < 0
3088 || PerlProc_getuid() != PL_uid || PerlProc_geteuid() != PL_euid)
3089 Perl_croak(aTHX_ "Can't reswap uid and euid");
3090 if (!cando(S_IXUSR,FALSE,&PL_statbuf)) /* can real uid exec? */
3091 Perl_croak(aTHX_ "Permission denied\n");
3093 #endif /* HAS_SETREUID */
3094 #endif /* IAMSUID */
3096 if (!S_ISREG(PL_statbuf.st_mode))
3097 Perl_croak(aTHX_ "Permission denied");
3098 if (PL_statbuf.st_mode & S_IWOTH)
3099 Perl_croak(aTHX_ "Setuid/gid script is writable by world");
3100 PL_doswitches = FALSE; /* -s is insecure in suid */
3101 CopLINE_inc(PL_curcop);
3102 if (sv_gets(PL_linestr, PL_rsfp, 0) == Nullch ||
3103 strnNE(SvPV(PL_linestr,n_a),"#!",2) ) /* required even on Sys V */
3104 Perl_croak(aTHX_ "No #! line");
3105 s = SvPV(PL_linestr,n_a)+2;
3107 while (!isSPACE(*s)) s++;
3108 for (s2 = s; (s2 > SvPV(PL_linestr,n_a)+2 &&
3109 (isDIGIT(s2[-1]) || strchr("._-", s2[-1]))); s2--) ;
3110 if (strnNE(s2-4,"perl",4) && strnNE(s-9,"perl",4)) /* sanity check */
3111 Perl_croak(aTHX_ "Not a perl script");
3112 while (*s == ' ' || *s == '\t') s++;
3114 * #! arg must be what we saw above. They can invoke it by
3115 * mentioning suidperl explicitly, but they may not add any strange
3116 * arguments beyond what #! says if they do invoke suidperl that way.
3118 len = strlen(validarg);
3119 if (strEQ(validarg," PHOOEY ") ||
3120 strnNE(s,validarg,len) || !isSPACE(s[len]))
3121 Perl_croak(aTHX_ "Args must match #! line");
3124 if (PL_euid != PL_uid && (PL_statbuf.st_mode & S_ISUID) &&
3125 PL_euid == PL_statbuf.st_uid)
3127 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3128 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3129 #endif /* IAMSUID */
3131 if (PL_euid) { /* oops, we're not the setuid root perl */
3132 (void)PerlIO_close(PL_rsfp);
3135 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT, BIN_EXP,
3136 (int)PERL_REVISION, (int)PERL_VERSION,
3137 (int)PERL_SUBVERSION), PL_origargv);
3139 Perl_croak(aTHX_ "Can't do setuid\n");
3142 if (PL_statbuf.st_mode & S_ISGID && PL_statbuf.st_gid != PL_egid) {
3144 (void)setegid(PL_statbuf.st_gid);
3147 (void)setregid((Gid_t)-1,PL_statbuf.st_gid);
3149 #ifdef HAS_SETRESGID
3150 (void)setresgid((Gid_t)-1,PL_statbuf.st_gid,(Gid_t)-1);
3152 PerlProc_setgid(PL_statbuf.st_gid);
3156 if (PerlProc_getegid() != PL_statbuf.st_gid)
3157 Perl_croak(aTHX_ "Can't do setegid!\n");
3159 if (PL_statbuf.st_mode & S_ISUID) {
3160 if (PL_statbuf.st_uid != PL_euid)
3162 (void)seteuid(PL_statbuf.st_uid); /* all that for this */
3165 (void)setreuid((Uid_t)-1,PL_statbuf.st_uid);
3167 #ifdef HAS_SETRESUID
3168 (void)setresuid((Uid_t)-1,PL_statbuf.st_uid,(Uid_t)-1);
3170 PerlProc_setuid(PL_statbuf.st_uid);
3174 if (PerlProc_geteuid() != PL_statbuf.st_uid)
3175 Perl_croak(aTHX_ "Can't do seteuid!\n");
3177 else if (PL_uid) { /* oops, mustn't run as root */
3179 (void)seteuid((Uid_t)PL_uid);
3182 (void)setreuid((Uid_t)-1,(Uid_t)PL_uid);
3184 #ifdef HAS_SETRESUID
3185 (void)setresuid((Uid_t)-1,(Uid_t)PL_uid,(Uid_t)-1);
3187 PerlProc_setuid((Uid_t)PL_uid);
3191 if (PerlProc_geteuid() != PL_uid)
3192 Perl_croak(aTHX_ "Can't do seteuid!\n");
3195 if (!cando(S_IXUSR,TRUE,&PL_statbuf))
3196 Perl_croak(aTHX_ "Permission denied\n"); /* they can't do this */
3199 else if (PL_preprocess)
3200 Perl_croak(aTHX_ "-P not allowed for setuid/setgid script\n");
3201 else if (fdscript >= 0)
3202 Perl_croak(aTHX_ "fd script not allowed in suidperl\n");
3204 Perl_croak(aTHX_ "Script is not setuid/setgid in suidperl\n");
3206 /* We absolutely must clear out any saved ids here, so we */
3207 /* exec the real perl, substituting fd script for scriptname. */
3208 /* (We pass script name as "subdir" of fd, which perl will grok.) */
3209 PerlIO_rewind(PL_rsfp);
3210 PerlLIO_lseek(PerlIO_fileno(PL_rsfp),(Off_t)0,0); /* just in case rewind didn't */
3211 for (which = 1; PL_origargv[which] && PL_origargv[which] != scriptname; which++) ;
3212 if (!PL_origargv[which])
3213 Perl_croak(aTHX_ "Permission denied");
3214 PL_origargv[which] = savepv(Perl_form(aTHX_ "/dev/fd/%d/%s",
3215 PerlIO_fileno(PL_rsfp), PL_origargv[which]));
3216 #if defined(HAS_FCNTL) && defined(F_SETFD)
3217 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,0); /* ensure no close-on-exec */
3219 PerlProc_execv(Perl_form(aTHX_ "%s/perl"PERL_FS_VER_FMT, BIN_EXP,
3220 (int)PERL_REVISION, (int)PERL_VERSION,
3221 (int)PERL_SUBVERSION), PL_origargv);/* try again */
3222 Perl_croak(aTHX_ "Can't do setuid\n");
3223 #endif /* IAMSUID */
3225 if (PL_euid != PL_uid || PL_egid != PL_gid) { /* (suidperl doesn't exist, in fact) */
3226 #ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
3227 PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf); /* may be either wrapped or real suid */
3228 if ((PL_euid != PL_uid && PL_euid == PL_statbuf.st_uid && PL_statbuf.st_mode & S_ISUID)
3230 (PL_egid != PL_gid && PL_egid == PL_statbuf.st_gid && PL_statbuf.st_mode & S_ISGID)
3233 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3234 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3235 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
3236 /* not set-id, must be wrapped */
3242 S_find_beginning(pTHX)
3244 register char *s, *s2;
3246 /* skip forward in input to the real script? */
3249 #ifdef MACOS_TRADITIONAL
3250 /* Since the Mac OS does not honor #! arguments for us, we do it ourselves */
3252 while (PL_doextract || gMacPerl_AlwaysExtract) {
3253 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
3254 if (!gMacPerl_AlwaysExtract)
3255 Perl_croak(aTHX_ "No Perl script found in input\n");
3257 if (PL_doextract) /* require explicit override ? */
3258 if (!OverrideExtract(PL_origfilename))
3259 Perl_croak(aTHX_ "User aborted script\n");
3261 PL_doextract = FALSE;
3263 /* Pater peccavi, file does not have #! */
3264 PerlIO_rewind(PL_rsfp);
3269 while (PL_doextract) {
3270 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch)
3271 Perl_croak(aTHX_ "No Perl script found in input\n");
3274 if (*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL")))) {
3275 PerlIO_ungetc(PL_rsfp, '\n'); /* to keep line count right */
3276 PL_doextract = FALSE;
3277 while (*s && !(isSPACE (*s) || *s == '#')) s++;
3279 while (*s == ' ' || *s == '\t') s++;
3281 while (isDIGIT(s2[-1]) || strchr("-._", s2[-1])) s2--;
3282 if (strnEQ(s2-4,"perl",4))
3284 while ((s = moreswitches(s)))
3287 #ifdef MACOS_TRADITIONAL
3298 PL_uid = PerlProc_getuid();
3299 PL_euid = PerlProc_geteuid();
3300 PL_gid = PerlProc_getgid();
3301 PL_egid = PerlProc_getegid();
3303 PL_uid |= PL_gid << 16;
3304 PL_euid |= PL_egid << 16;
3306 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
3310 S_forbid_setid(pTHX_ char *s)
3312 if (PL_euid != PL_uid)
3313 Perl_croak(aTHX_ "No %s allowed while running setuid", s);
3314 if (PL_egid != PL_gid)
3315 Perl_croak(aTHX_ "No %s allowed while running setgid", s);
3319 Perl_init_debugger(pTHX)
3321 HV *ostash = PL_curstash;
3323 PL_curstash = PL_debstash;
3324 PL_dbargs = GvAV(gv_AVadd((gv_fetchpv("args", GV_ADDMULTI, SVt_PVAV))));
3325 AvREAL_off(PL_dbargs);
3326 PL_DBgv = gv_fetchpv("DB", GV_ADDMULTI, SVt_PVGV);
3327 PL_DBline = gv_fetchpv("dbline", GV_ADDMULTI, SVt_PVAV);
3328 PL_DBsub = gv_HVadd(gv_fetchpv("sub", GV_ADDMULTI, SVt_PVHV));
3329 sv_upgrade(GvSV(PL_DBsub), SVt_IV); /* IVX accessed if PERLDB_SUB_NN */
3330 PL_DBsingle = GvSV((gv_fetchpv("single", GV_ADDMULTI, SVt_PV)));
3331 sv_setiv(PL_DBsingle, 0);
3332 PL_DBtrace = GvSV((gv_fetchpv("trace", GV_ADDMULTI, SVt_PV)));
3333 sv_setiv(PL_DBtrace, 0);
3334 PL_DBsignal = GvSV((gv_fetchpv("signal", GV_ADDMULTI, SVt_PV)));
3335 sv_setiv(PL_DBsignal, 0);
3336 PL_curstash = ostash;
3339 #ifndef STRESS_REALLOC
3340 #define REASONABLE(size) (size)
3342 #define REASONABLE(size) (1) /* unreasonable */
3346 Perl_init_stacks(pTHX)
3348 /* start with 128-item stack and 8K cxstack */
3349 PL_curstackinfo = new_stackinfo(REASONABLE(128),
3350 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
3351 PL_curstackinfo->si_type = PERLSI_MAIN;
3352 PL_curstack = PL_curstackinfo->si_stack;
3353 PL_mainstack = PL_curstack; /* remember in case we switch stacks */
3355 PL_stack_base = AvARRAY(PL_curstack);
3356 PL_stack_sp = PL_stack_base;
3357 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
3359 New(50,PL_tmps_stack,REASONABLE(128),SV*);
3362 PL_tmps_max = REASONABLE(128);
3364 New(54,PL_markstack,REASONABLE(32),I32);
3365 PL_markstack_ptr = PL_markstack;
3366 PL_markstack_max = PL_markstack + REASONABLE(32);
3370 New(54,PL_scopestack,REASONABLE(32),I32);
3371 PL_scopestack_ix = 0;
3372 PL_scopestack_max = REASONABLE(32);
3374 New(54,PL_savestack,REASONABLE(128),ANY);
3375 PL_savestack_ix = 0;
3376 PL_savestack_max = REASONABLE(128);
3378 New(54,PL_retstack,REASONABLE(16),OP*);
3380 PL_retstack_max = REASONABLE(16);
3388 while (PL_curstackinfo->si_next)
3389 PL_curstackinfo = PL_curstackinfo->si_next;
3390 while (PL_curstackinfo) {
3391 PERL_SI *p = PL_curstackinfo->si_prev;
3392 /* curstackinfo->si_stack got nuked by sv_free_arenas() */
3393 Safefree(PL_curstackinfo->si_cxstack);
3394 Safefree(PL_curstackinfo);
3395 PL_curstackinfo = p;
3397 Safefree(PL_tmps_stack);
3398 Safefree(PL_markstack);
3399 Safefree(PL_scopestack);
3400 Safefree(PL_savestack);
3401 Safefree(PL_retstack);
3410 lex_start(PL_linestr);
3412 PL_subname = newSVpvn("main",4);
3416 S_init_predump_symbols(pTHX)
3421 sv_setpvn(get_sv("\"", TRUE), " ", 1);
3422 PL_stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
3423 GvMULTI_on(PL_stdingv);
3424 io = GvIOp(PL_stdingv);
3425 IoTYPE(io) = IoTYPE_RDONLY;
3426 IoIFP(io) = PerlIO_stdin();
3427 tmpgv = gv_fetchpv("stdin",TRUE, SVt_PV);
3429 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3431 tmpgv = gv_fetchpv("STDOUT",TRUE, SVt_PVIO);
3434 IoTYPE(io) = IoTYPE_WRONLY;
3435 IoOFP(io) = IoIFP(io) = PerlIO_stdout();
3437 tmpgv = gv_fetchpv("stdout",TRUE, SVt_PV);
3439 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3441 PL_stderrgv = gv_fetchpv("STDERR",TRUE, SVt_PVIO);
3442 GvMULTI_on(PL_stderrgv);
3443 io = GvIOp(PL_stderrgv);
3444 IoTYPE(io) = IoTYPE_WRONLY;
3445 IoOFP(io) = IoIFP(io) = PerlIO_stderr();
3446 tmpgv = gv_fetchpv("stderr",TRUE, SVt_PV);
3448 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3450 PL_statname = NEWSV(66,0); /* last filename we did stat on */
3453 Safefree(PL_osname);
3454 PL_osname = savepv(OSNAME);
3458 Perl_init_argv_symbols(pTHX_ register int argc, register char **argv)
3461 argc--,argv++; /* skip name of script */
3462 if (PL_doswitches) {
3463 for (; argc > 0 && **argv == '-'; argc--,argv++) {
3466 if (argv[0][1] == '-' && !argv[0][2]) {
3470 if ((s = strchr(argv[0], '='))) {
3472 sv_setpv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),s);
3475 sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),1);
3478 if ((PL_argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV))) {
3479 GvMULTI_on(PL_argvgv);
3480 (void)gv_AVadd(PL_argvgv);
3481 av_clear(GvAVn(PL_argvgv));
3482 for (; argc > 0; argc--,argv++) {
3483 SV *sv = newSVpv(argv[0],0);
3484 av_push(GvAVn(PL_argvgv),sv);
3485 if (PL_widesyscalls)
3486 (void)sv_utf8_decode(sv);
3491 #ifdef HAS_PROCSELFEXE
3492 /* This is a function so that we don't hold on to MAXPATHLEN
3493 bytes of stack longer than necessary
3496 S_procself_val(pTHX_ SV *sv, char *arg0)
3498 char buf[MAXPATHLEN];
3499 int len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
3500 /* FreeBSD's implementation is acknowledged to be imperfect, sometimes
3501 returning the text "unknown" from the readlink rather than the path
3502 to the executable (or returning an error from the readlink). Any valid
3503 path has a '/' in it somewhere, so use that to validate the result.
3504 See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703
3506 if (len > 0 && memchr(buf, '/', len)) {
3507 sv_setpvn(sv,buf,len);
3513 #endif /* HAS_PROCSELFEXE */
3516 S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register char **env)
3522 PL_toptarget = NEWSV(0,0);
3523 sv_upgrade(PL_toptarget, SVt_PVFM);
3524 sv_setpvn(PL_toptarget, "", 0);
3525 PL_bodytarget = NEWSV(0,0);
3526 sv_upgrade(PL_bodytarget, SVt_PVFM);
3527 sv_setpvn(PL_bodytarget, "", 0);
3528 PL_formtarget = PL_bodytarget;
3532 init_argv_symbols(argc,argv);
3534 if ((tmpgv = gv_fetchpv("0",TRUE, SVt_PV))) {
3535 #ifdef MACOS_TRADITIONAL
3536 /* $0 is not majick on a Mac */
3537 sv_setpv(GvSV(tmpgv),MacPerl_MPWFileName(PL_origfilename));
3539 sv_setpv(GvSV(tmpgv),PL_origfilename);
3540 magicname("0", "0", 1);
3543 if ((tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))) {/* $^X */
3544 #ifdef HAS_PROCSELFEXE
3545 S_procself_val(aTHX_ GvSV(tmpgv), PL_origargv[0]);
3548 sv_setpv(GvSV(tmpgv), os2_execname(aTHX));
3550 sv_setpv(GvSV(tmpgv),PL_origargv[0]);
3554 if ((PL_envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV))) {
3556 GvMULTI_on(PL_envgv);
3557 hv = GvHVn(PL_envgv);
3558 hv_magic(hv, Nullgv, PERL_MAGIC_env);
3559 #ifdef USE_ENVIRON_ARRAY
3560 /* Note that if the supplied env parameter is actually a copy
3561 of the global environ then it may now point to free'd memory
3562 if the environment has been modified since. To avoid this
3563 problem we treat env==NULL as meaning 'use the default'
3568 environ[0] = Nullch;
3570 for (; *env; env++) {
3571 if (!(s = strchr(*env,'=')))
3578 sv = newSVpv(s+1, 0);
3579 (void)hv_store(hv, *env, s - *env, sv, 0);
3583 #endif /* USE_ENVIRON_ARRAY */
3586 if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) {
3587 SvREADONLY_off(GvSV(tmpgv));
3588 sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid());
3589 SvREADONLY_on(GvSV(tmpgv));
3592 /* touch @F array to prevent spurious warnings 20020415 MJD */
3594 (void) get_av("main::F", TRUE | GV_ADDMULTI);
3596 /* touch @- and @+ arrays to prevent spurious warnings 20020415 MJD */
3597 (void) get_av("main::-", TRUE | GV_ADDMULTI);
3598 (void) get_av("main::+", TRUE | GV_ADDMULTI);
3602 S_init_perllib(pTHX)
3607 s = PerlEnv_getenv("PERL5LIB");
3609 incpush(s, TRUE, TRUE);
3611 incpush(PerlEnv_getenv("PERLLIB"), FALSE, FALSE);
3613 /* Treat PERL5?LIB as a possible search list logical name -- the
3614 * "natural" VMS idiom for a Unix path string. We allow each
3615 * element to be a set of |-separated directories for compatibility.
3619 if (my_trnlnm("PERL5LIB",buf,0))
3620 do { incpush(buf,TRUE,TRUE); } while (my_trnlnm("PERL5LIB",buf,++idx));
3622 while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf,FALSE,FALSE);
3626 /* Use the ~-expanded versions of APPLLIB (undocumented),
3627 ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
3630 incpush(APPLLIB_EXP, TRUE, TRUE);
3634 incpush(ARCHLIB_EXP, FALSE, FALSE);
3636 #ifdef MACOS_TRADITIONAL
3638 struct stat tmpstatbuf;
3639 SV * privdir = NEWSV(55, 0);
3640 char * macperl = PerlEnv_getenv("MACPERL");
3645 Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
3646 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3647 incpush(SvPVX(privdir), TRUE, FALSE);
3648 Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
3649 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3650 incpush(SvPVX(privdir), TRUE, FALSE);
3652 SvREFCNT_dec(privdir);
3655 incpush(":", FALSE, FALSE);
3658 # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
3661 incpush(PRIVLIB_EXP, TRUE, FALSE);
3663 incpush(PRIVLIB_EXP, FALSE, FALSE);
3667 /* sitearch is always relative to sitelib on Windows for
3668 * DLL-based path intuition to work correctly */
3669 # if !defined(WIN32)
3670 incpush(SITEARCH_EXP, FALSE, FALSE);
3676 incpush(SITELIB_EXP, TRUE, FALSE); /* this picks up sitearch as well */
3678 incpush(SITELIB_EXP, FALSE, FALSE);
3682 #ifdef SITELIB_STEM /* Search for version-specific dirs below here */
3683 incpush(SITELIB_STEM, FALSE, TRUE);
3686 #ifdef PERL_VENDORARCH_EXP
3687 /* vendorarch is always relative to vendorlib on Windows for
3688 * DLL-based path intuition to work correctly */
3689 # if !defined(WIN32)
3690 incpush(PERL_VENDORARCH_EXP, FALSE, FALSE);
3694 #ifdef PERL_VENDORLIB_EXP
3696 incpush(PERL_VENDORLIB_EXP, TRUE, FALSE); /* this picks up vendorarch as well */
3698 incpush(PERL_VENDORLIB_EXP, FALSE, FALSE);
3702 #ifdef PERL_VENDORLIB_STEM /* Search for version-specific dirs below here */
3703 incpush(PERL_VENDORLIB_STEM, FALSE, TRUE);
3706 #ifdef PERL_OTHERLIBDIRS
3707 incpush(PERL_OTHERLIBDIRS, TRUE, TRUE);
3711 incpush(".", FALSE, FALSE);
3712 #endif /* MACOS_TRADITIONAL */
3715 #if defined(DOSISH) || defined(EPOC)
3716 # define PERLLIB_SEP ';'
3719 # define PERLLIB_SEP '|'
3721 # if defined(MACOS_TRADITIONAL)
3722 # define PERLLIB_SEP ','
3724 # define PERLLIB_SEP ':'
3728 #ifndef PERLLIB_MANGLE
3729 # define PERLLIB_MANGLE(s,n) (s)
3733 S_incpush(pTHX_ char *p, int addsubdirs, int addoldvers)
3735 SV *subdir = Nullsv;
3740 if (addsubdirs || addoldvers) {
3741 subdir = sv_newmortal();
3744 /* Break at all separators */
3746 SV *libdir = NEWSV(55,0);
3749 /* skip any consecutive separators */
3750 while ( *p == PERLLIB_SEP ) {
3751 /* Uncomment the next line for PATH semantics */
3752 /* av_push(GvAVn(PL_incgv), newSVpvn(".", 1)); */
3756 if ( (s = strchr(p, PERLLIB_SEP)) != Nullch ) {
3757 sv_setpvn(libdir, PERLLIB_MANGLE(p, (STRLEN)(s - p)),
3762 sv_setpv(libdir, PERLLIB_MANGLE(p, 0));
3763 p = Nullch; /* break out */
3765 #ifdef MACOS_TRADITIONAL
3766 if (!strchr(SvPVX(libdir), ':'))
3767 sv_insert(libdir, 0, 0, ":", 1);
3768 if (SvPVX(libdir)[SvCUR(libdir)-1] != ':')
3769 sv_catpv(libdir, ":");
3773 * BEFORE pushing libdir onto @INC we may first push version- and
3774 * archname-specific sub-directories.
3776 if (addsubdirs || addoldvers) {
3777 #ifdef PERL_INC_VERSION_LIST
3778 /* Configure terminates PERL_INC_VERSION_LIST with a NULL */
3779 const char *incverlist[] = { PERL_INC_VERSION_LIST };
3780 const char **incver;
3782 struct stat tmpstatbuf;
3787 if ((unix = tounixspec_ts(SvPV(libdir,len),Nullch)) != Nullch) {
3789 while (unix[len-1] == '/') len--; /* Cosmetic */
3790 sv_usepvn(libdir,unix,len);
3793 PerlIO_printf(Perl_error_log,
3794 "Failed to unixify @INC element \"%s\"\n",
3798 #ifdef MACOS_TRADITIONAL
3799 #define PERL_AV_SUFFIX_FMT ""
3800 #define PERL_ARCH_FMT "%s:"
3801 #define PERL_ARCH_FMT_PATH PERL_FS_VER_FMT PERL_AV_SUFFIX_FMT
3803 #define PERL_AV_SUFFIX_FMT "/"
3804 #define PERL_ARCH_FMT "/%s"
3805 #define PERL_ARCH_FMT_PATH PERL_AV_SUFFIX_FMT PERL_FS_VER_FMT
3807 /* .../version/archname if -d .../version/archname */
3808 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH PERL_ARCH_FMT,
3810 (int)PERL_REVISION, (int)PERL_VERSION,
3811 (int)PERL_SUBVERSION, ARCHNAME);
3812 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3813 S_ISDIR(tmpstatbuf.st_mode))
3814 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3816 /* .../version if -d .../version */
3817 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH, libdir,
3818 (int)PERL_REVISION, (int)PERL_VERSION,
3819 (int)PERL_SUBVERSION);
3820 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3821 S_ISDIR(tmpstatbuf.st_mode))
3822 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3824 /* .../archname if -d .../archname */
3825 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, ARCHNAME);
3826 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3827 S_ISDIR(tmpstatbuf.st_mode))
3828 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3831 #ifdef PERL_INC_VERSION_LIST
3833 for (incver = incverlist; *incver; incver++) {
3834 /* .../xxx if -d .../xxx */
3835 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, *incver);
3836 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3837 S_ISDIR(tmpstatbuf.st_mode))
3838 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3844 /* finally push this lib directory on the end of @INC */
3845 av_push(GvAVn(PL_incgv), libdir);
3849 #ifdef USE_5005THREADS
3850 STATIC struct perl_thread *
3851 S_init_main_thread(pTHX)
3853 #if !defined(PERL_IMPLICIT_CONTEXT)
3854 struct perl_thread *thr;
3858 Newz(53, thr, 1, struct perl_thread);
3859 PL_curcop = &PL_compiling;
3860 thr->interp = PERL_GET_INTERP;
3861 thr->cvcache = newHV();
3862 thr->threadsv = newAV();
3863 /* thr->threadsvp is set when find_threadsv is called */
3864 thr->specific = newAV();
3865 thr->flags = THRf_R_JOINABLE;
3866 MUTEX_INIT(&thr->mutex);
3867 /* Handcraft thrsv similarly to mess_sv */
3868 New(53, PL_thrsv, 1, SV);
3869 Newz(53, xpv, 1, XPV);
3870 SvFLAGS(PL_thrsv) = SVt_PV;
3871 SvANY(PL_thrsv) = (void*)xpv;
3872 SvREFCNT(PL_thrsv) = 1 << 30; /* practically infinite */
3873 SvPVX(PL_thrsv) = (char*)thr;
3874 SvCUR_set(PL_thrsv, sizeof(thr));
3875 SvLEN_set(PL_thrsv, sizeof(thr));
3876 *SvEND(PL_thrsv) = '\0'; /* in the trailing_nul field */
3877 thr->oursv = PL_thrsv;
3878 PL_chopset = " \n-";
3881 MUTEX_LOCK(&PL_threads_mutex);
3887 MUTEX_UNLOCK(&PL_threads_mutex);
3889 #ifdef HAVE_THREAD_INTERN
3890 Perl_init_thread_intern(thr);
3893 #ifdef SET_THREAD_SELF
3894 SET_THREAD_SELF(thr);
3896 thr->self = pthread_self();
3897 #endif /* SET_THREAD_SELF */
3901 * These must come after the thread self setting
3902 * because sv_setpvn does SvTAINT and the taint
3903 * fields thread selfness being set.
3905 PL_toptarget = NEWSV(0,0);
3906 sv_upgrade(PL_toptarget, SVt_PVFM);
3907 sv_setpvn(PL_toptarget, "", 0);
3908 PL_bodytarget = NEWSV(0,0);
3909 sv_upgrade(PL_bodytarget, SVt_PVFM);
3910 sv_setpvn(PL_bodytarget, "", 0);
3911 PL_formtarget = PL_bodytarget;
3912 thr->errsv = newSVpvn("", 0);
3913 (void) find_threadsv("@"); /* Ensure $@ is initialised early */
3916 PL_peepp = MEMBER_TO_FPTR(Perl_peep);
3917 PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
3918 PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
3919 PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);
3920 PL_regint_string = MEMBER_TO_FPTR(Perl_re_intuit_string);
3921 PL_regfree = MEMBER_TO_FPTR(Perl_pregfree);
3923 PL_reginterp_cnt = 0;
3927 #endif /* USE_5005THREADS */
3930 Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
3933 line_t oldline = CopLINE(PL_curcop);
3939 while (AvFILL(paramList) >= 0) {
3940 cv = (CV*)av_shift(paramList);
3941 if (PL_savebegin && (paramList == PL_beginav)) {
3942 /* save PL_beginav for compiler */
3943 if (! PL_beginav_save)
3944 PL_beginav_save = newAV();
3945 av_push(PL_beginav_save, (SV*)cv);
3949 #ifdef PERL_FLEXIBLE_EXCEPTIONS
3950 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_list_body), cv);
3956 #ifndef PERL_FLEXIBLE_EXCEPTIONS
3960 (void)SvPV(atsv, len);
3963 PL_curcop = &PL_compiling;
3964 CopLINE_set(PL_curcop, oldline);
3965 if (paramList == PL_beginav)
3966 sv_catpv(atsv, "BEGIN failed--compilation aborted");
3968 Perl_sv_catpvf(aTHX_ atsv,
3969 "%s failed--call queue aborted",
3970 paramList == PL_checkav ? "CHECK"
3971 : paramList == PL_initav ? "INIT"
3973 while (PL_scopestack_ix > oldscope)
3976 Perl_croak(aTHX_ "%s", SvPVx(atsv, n_a));
3983 /* my_exit() was called */
3984 while (PL_scopestack_ix > oldscope)
3987 PL_curstash = PL_defstash;
3988 PL_curcop = &PL_compiling;
3989 CopLINE_set(PL_curcop, oldline);
3991 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED)) {
3992 if (paramList == PL_beginav)
3993 Perl_croak(aTHX_ "BEGIN failed--compilation aborted");
3995 Perl_croak(aTHX_ "%s failed--call queue aborted",
3996 paramList == PL_checkav ? "CHECK"
3997 : paramList == PL_initav ? "INIT"
4004 PL_curcop = &PL_compiling;
4005 CopLINE_set(PL_curcop, oldline);
4008 PerlIO_printf(Perl_error_log, "panic: restartop\n");
4016 #ifdef PERL_FLEXIBLE_EXCEPTIONS
4018 S_vcall_list_body(pTHX_ va_list args)
4020 CV *cv = va_arg(args, CV*);
4021 return call_list_body(cv);
4026 S_call_list_body(pTHX_ CV *cv)
4028 PUSHMARK(PL_stack_sp);
4029 call_sv((SV*)cv, G_EVAL|G_DISCARD);
4034 Perl_my_exit(pTHX_ U32 status)
4036 DEBUG_S(PerlIO_printf(Perl_debug_log, "my_exit: thread %p, status %lu\n",
4037 thr, (unsigned long) status));
4046 STATUS_NATIVE_SET(status);
4053 Perl_my_failure_exit(pTHX)
4056 if (vaxc$errno & 1) {
4057 if (STATUS_NATIVE & 1) /* fortuitiously includes "-1" */
4058 STATUS_NATIVE_SET(44);
4061 if (!vaxc$errno && errno) /* unlikely */
4062 STATUS_NATIVE_SET(44);
4064 STATUS_NATIVE_SET(vaxc$errno);
4069 STATUS_POSIX_SET(errno);
4071 exitstatus = STATUS_POSIX >> 8;
4072 if (exitstatus & 255)
4073 STATUS_POSIX_SET(exitstatus);
4075 STATUS_POSIX_SET(255);
4082 S_my_exit_jump(pTHX)
4084 register PERL_CONTEXT *cx;
4089 SvREFCNT_dec(PL_e_script);
4090 PL_e_script = Nullsv;
4093 POPSTACK_TO(PL_mainstack);
4094 if (cxstack_ix >= 0) {
4097 POPBLOCK(cx,PL_curpm);
4105 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen)
4108 p = SvPVX(PL_e_script);
4109 nl = strchr(p, '\n');
4110 nl = (nl) ? nl+1 : SvEND(PL_e_script);
4112 filter_del(read_e_script);
4115 sv_catpvn(buf_sv, p, nl-p);
4116 sv_chop(PL_e_script, nl);