3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Sam sat on the ground and put his head in his hands. 'I wish I had never
13 * come here, and I don't want to see no more magic,' he said, and fell silent.
15 * [p.363 of _The Lord of the Rings_, II/vii: "The Mirror of Galadriel"]
19 =head1 Magical Functions
21 "Magic" is special data attached to SV structures in order to give them
22 "magical" properties. When any Perl code tries to read from, or assign to,
23 an SV marked as magical, it calls the 'get' or 'set' function associated
24 with that SV's magic. A get is called prior to reading an SV, in order to
25 give it a chance to update its internal value (get on $. writes the line
26 number of the last read filehandle into to the SV's IV slot), while
27 set is called after an SV has been written to, in order to allow it to make
28 use of its changed value (set on $/ copies the SV's new value to the
29 PL_rs global variable).
31 Magic is implemented as a linked list of MAGIC structures attached to the
32 SV. Each MAGIC struct holds the type of the magic, a pointer to an array
33 of functions that implement the get(), set(), length() etc functions,
34 plus space for some flags and pointers. For example, a tied variable has
35 a MAGIC structure that contains a pointer to the object associated with the
44 #if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
50 #if defined(HAS_SETGROUPS)
57 # include <sys/pstat.h>
60 #ifdef HAS_PRCTL_SET_NAME
61 # include <sys/prctl.h>
64 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
65 Signal_t Perl_csighandler(int sig, siginfo_t *, void *);
67 Signal_t Perl_csighandler(int sig);
71 /* Missing protos on LynxOS */
72 void setruid(uid_t id);
73 void seteuid(uid_t id);
74 void setrgid(uid_t id);
75 void setegid(uid_t id);
79 * Pre-magic setup and post-magic takedown.
80 * Use the "DESTRUCTOR" scope cleanup to reinstate magic.
90 /* MGS is typedef'ed to struct magic_state in perl.h */
93 S_save_magic(pTHX_ I32 mgs_ix, SV *sv)
99 PERL_ARGS_ASSERT_SAVE_MAGIC;
101 assert(SvMAGICAL(sv));
103 /* we shouldn't really be called here with RC==0, but it can sometimes
104 * happen via mg_clear() (which also shouldn't be called when RC==0,
105 * but it can happen). Handle this case gracefully(ish) by not RC++
106 * and thus avoiding the resultant double free */
107 if (SvREFCNT(sv) > 0) {
108 /* guard against sv getting freed midway through the mg clearing,
109 * by holding a private reference for the duration. */
110 SvREFCNT_inc_simple_void_NN(sv);
114 /* Turning READONLY off for a copy-on-write scalar (including shared
115 hash keys) is a bad idea. */
117 sv_force_normal_flags(sv, 0);
119 SAVEDESTRUCTOR_X(S_restore_magic, INT2PTR(void*, (IV)mgs_ix));
121 mgs = SSPTR(mgs_ix, MGS*);
123 mgs->mgs_magical = SvMAGICAL(sv);
124 mgs->mgs_readonly = SvREADONLY(sv) != 0;
125 mgs->mgs_ss_ix = PL_savestack_ix; /* points after the saved destructor */
126 mgs->mgs_bumped = bumped;
133 =for apidoc mg_magical
135 Turns on the magical status of an SV. See C<sv_magic>.
141 Perl_mg_magical(pTHX_ SV *sv)
144 PERL_ARGS_ASSERT_MG_MAGICAL;
148 if ((mg = SvMAGIC(sv))) {
150 const MGVTBL* const vtbl = mg->mg_virtual;
152 if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP))
159 } while ((mg = mg->mg_moremagic));
160 if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG)))
168 Do magic before a value is retrieved from the SV. See C<sv_magic>.
174 Perl_mg_get(pTHX_ SV *sv)
177 const I32 mgs_ix = SSNEW(sizeof(MGS));
180 MAGIC *newmg, *head, *cur, *mg;
182 PERL_ARGS_ASSERT_MG_GET;
184 if (PL_localizing == 1 && sv == DEFSV) return 0;
186 /* We must call svt_get(sv, mg) for each valid entry in the linked
187 list of magic. svt_get() may delete the current entry, add new
188 magic to the head of the list, or upgrade the SV. AMS 20010810 */
190 newmg = cur = head = mg = SvMAGIC(sv);
192 const MGVTBL * const vtbl = mg->mg_virtual;
193 MAGIC * const nextmg = mg->mg_moremagic; /* it may delete itself */
195 if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) {
197 /* taint's mg get is so dumb it doesn't need flag saving */
198 if (!saved && mg->mg_type != PERL_MAGIC_taint) {
199 save_magic(mgs_ix, sv);
203 vtbl->svt_get(aTHX_ sv, mg);
205 /* guard against magic having been deleted - eg FETCH calling
208 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
212 /* recalculate flags if this entry was deleted. */
213 if (mg->mg_flags & MGf_GSKIP)
214 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0;
216 else if (vtbl == &PL_vtbl_utf8) {
217 /* get-magic can reallocate the PV */
218 magic_setutf8(sv, mg);
224 /* Have we finished with the new entries we saw? Start again
225 where we left off (unless there are more new entries). */
233 /* Were any new entries added? */
234 if (!have_new && (newmg = SvMAGIC(sv)) != head) {
238 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
243 restore_magic(INT2PTR(void *, (IV)mgs_ix));
251 Do magic after a value is assigned to the SV. See C<sv_magic>.
257 Perl_mg_set(pTHX_ SV *sv)
260 const I32 mgs_ix = SSNEW(sizeof(MGS));
264 PERL_ARGS_ASSERT_MG_SET;
266 if (PL_localizing == 2 && sv == DEFSV) return 0;
268 save_magic(mgs_ix, sv);
270 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
271 const MGVTBL* vtbl = mg->mg_virtual;
272 nextmg = mg->mg_moremagic; /* it may delete itself */
273 if (mg->mg_flags & MGf_GSKIP) {
274 mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */
275 (SSPTR(mgs_ix, MGS*))->mgs_magical = 0;
277 if (PL_localizing == 2
278 && PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
280 if (vtbl && vtbl->svt_set)
281 vtbl->svt_set(aTHX_ sv, mg);
284 restore_magic(INT2PTR(void*, (IV)mgs_ix));
289 =for apidoc mg_length
291 This function is deprecated.
293 It reports on the SV's length in bytes, calling length magic if available,
294 but does not set the UTF8 flag on the sv. It will fall back to 'get'
295 magic if there is no 'length' magic, but with no indication as to
296 whether it called 'get' magic. It assumes the sv is a PVMG or
297 higher. Use sv_len() instead.
303 Perl_mg_length(pTHX_ SV *sv)
309 PERL_ARGS_ASSERT_MG_LENGTH;
311 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
312 const MGVTBL * const vtbl = mg->mg_virtual;
313 if (vtbl && vtbl->svt_len) {
314 const I32 mgs_ix = SSNEW(sizeof(MGS));
315 save_magic(mgs_ix, sv);
316 /* omit MGf_GSKIP -- not changed here */
317 len = vtbl->svt_len(aTHX_ sv, mg);
318 restore_magic(INT2PTR(void*, (IV)mgs_ix));
323 (void)SvPV_const(sv, len);
328 Perl_mg_size(pTHX_ SV *sv)
332 PERL_ARGS_ASSERT_MG_SIZE;
334 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
335 const MGVTBL* const vtbl = mg->mg_virtual;
336 if (vtbl && vtbl->svt_len) {
337 const I32 mgs_ix = SSNEW(sizeof(MGS));
339 save_magic(mgs_ix, sv);
340 /* omit MGf_GSKIP -- not changed here */
341 len = vtbl->svt_len(aTHX_ sv, mg);
342 restore_magic(INT2PTR(void*, (IV)mgs_ix));
349 return AvFILLp((const AV *) sv); /* Fallback to non-tied array */
353 Perl_croak(aTHX_ "Size magic not implemented");
362 Clear something magical that the SV represents. See C<sv_magic>.
368 Perl_mg_clear(pTHX_ SV *sv)
370 const I32 mgs_ix = SSNEW(sizeof(MGS));
374 PERL_ARGS_ASSERT_MG_CLEAR;
376 save_magic(mgs_ix, sv);
378 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
379 const MGVTBL* const vtbl = mg->mg_virtual;
380 /* omit GSKIP -- never set here */
382 nextmg = mg->mg_moremagic; /* it may delete itself */
384 if (vtbl && vtbl->svt_clear)
385 vtbl->svt_clear(aTHX_ sv, mg);
388 restore_magic(INT2PTR(void*, (IV)mgs_ix));
393 S_mg_findext_flags(pTHX_ const SV *sv, int type, const MGVTBL *vtbl, U32 flags)
402 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
403 if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) {
415 Finds the magic pointer for type matching the SV. See C<sv_magic>.
421 Perl_mg_find(pTHX_ const SV *sv, int type)
423 return S_mg_findext_flags(aTHX_ sv, type, NULL, 0);
427 =for apidoc mg_findext
429 Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
436 Perl_mg_findext(pTHX_ const SV *sv, int type, const MGVTBL *vtbl)
438 return S_mg_findext_flags(aTHX_ sv, type, vtbl, 1);
444 Copies the magic from one SV to another. See C<sv_magic>.
450 Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
455 PERL_ARGS_ASSERT_MG_COPY;
457 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
458 const MGVTBL* const vtbl = mg->mg_virtual;
459 if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){
460 count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen);
463 const char type = mg->mg_type;
464 if (isUPPER(type) && type != PERL_MAGIC_uvar) {
466 (type == PERL_MAGIC_tied)
468 : (type == PERL_MAGIC_regdata && mg->mg_obj)
471 toLOWER(type), key, klen);
480 =for apidoc mg_localize
482 Copy some of the magic from an existing SV to new localized version of that
483 SV. Container magic (eg %ENV, $1, tie) gets copied, value magic doesn't (eg
486 If setmagic is false then no set magic will be called on the new (empty) SV.
487 This typically means that assignment will soon follow (e.g. 'local $x = $y'),
488 and that will handle the magic.
494 Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic)
499 PERL_ARGS_ASSERT_MG_LOCALIZE;
504 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
505 const MGVTBL* const vtbl = mg->mg_virtual;
506 if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
509 if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local)
510 (void)vtbl->svt_local(aTHX_ nsv, mg);
512 sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl,
513 mg->mg_ptr, mg->mg_len);
515 /* container types should remain read-only across localization */
516 if (!SvIsCOW(sv)) SvFLAGS(nsv) |= SvREADONLY(sv);
519 if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) {
520 SvFLAGS(nsv) |= SvMAGICAL(sv);
529 #define mg_free_struct(sv, mg) S_mg_free_struct(aTHX_ sv, mg)
531 S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg)
533 const MGVTBL* const vtbl = mg->mg_virtual;
534 if (vtbl && vtbl->svt_free)
535 vtbl->svt_free(aTHX_ sv, mg);
536 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
537 if (mg->mg_len > 0 || mg->mg_type == PERL_MAGIC_utf8)
538 Safefree(mg->mg_ptr);
539 else if (mg->mg_len == HEf_SVKEY)
540 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
542 if (mg->mg_flags & MGf_REFCOUNTED)
543 SvREFCNT_dec(mg->mg_obj);
550 Free any magic storage used by the SV. See C<sv_magic>.
556 Perl_mg_free(pTHX_ SV *sv)
561 PERL_ARGS_ASSERT_MG_FREE;
563 for (mg = SvMAGIC(sv); mg; mg = moremagic) {
564 moremagic = mg->mg_moremagic;
565 mg_free_struct(sv, mg);
566 SvMAGIC_set(sv, moremagic);
568 SvMAGIC_set(sv, NULL);
574 =for apidoc Am|void|mg_free_type|SV *sv|int how
576 Remove any magic of type I<how> from the SV I<sv>. See L</sv_magic>.
582 Perl_mg_free_type(pTHX_ SV *sv, int how)
584 MAGIC *mg, *prevmg, *moremg;
585 PERL_ARGS_ASSERT_MG_FREE_TYPE;
586 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
588 moremg = mg->mg_moremagic;
589 if (mg->mg_type == how) {
590 /* temporarily move to the head of the magic chain, in case
591 custom free code relies on this historical aspect of mg_free */
593 prevmg->mg_moremagic = moremg;
594 mg->mg_moremagic = SvMAGIC(sv);
597 newhead = mg->mg_moremagic;
598 mg_free_struct(sv, mg);
599 SvMAGIC_set(sv, newhead);
609 Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
614 PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT;
617 const REGEXP * const rx = PM_GETRE(PL_curpm);
619 if (mg->mg_obj) { /* @+ */
620 /* return the number possible */
621 return RX_NPARENS(rx);
623 I32 paren = RX_LASTPAREN(rx);
625 /* return the last filled */
627 && (RX_OFFS(rx)[paren].start == -1
628 || RX_OFFS(rx)[paren].end == -1) )
641 Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
645 PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET;
648 const REGEXP * const rx = PM_GETRE(PL_curpm);
650 const I32 paren = mg->mg_len;
655 if (paren <= (I32)RX_NPARENS(rx) &&
656 (s = RX_OFFS(rx)[paren].start) != -1 &&
657 (t = RX_OFFS(rx)[paren].end) != -1)
660 if (mg->mg_obj) /* @+ */
665 if (i > 0 && RX_MATCH_UTF8(rx)) {
666 const char * const b = RX_SUBBEG(rx);
668 i = RX_SUBCOFFSET(rx) +
670 (U8*)(b-RX_SUBOFFSET(rx)+i));
683 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
685 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
688 Perl_croak_no_modify(aTHX);
689 NORETURN_FUNCTION_END;
692 #define SvRTRIM(sv) STMT_START { \
694 STRLEN len = SvCUR(sv); \
695 char * const p = SvPVX(sv); \
696 while (len > 0 && isSPACE(p[len-1])) \
698 SvCUR_set(sv, len); \
704 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
706 PERL_ARGS_ASSERT_EMULATE_COP_IO;
708 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
709 sv_setsv(sv, &PL_sv_undef);
713 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
714 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
719 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
720 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
733 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
737 const char *s = NULL;
739 const char * const remaining = mg->mg_ptr + 1;
740 const char nextchar = *remaining;
742 PERL_ARGS_ASSERT_MAGIC_GET;
744 switch (*mg->mg_ptr) {
745 case '\001': /* ^A */
746 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
747 else sv_setsv(sv, &PL_sv_undef);
748 if (SvTAINTED(PL_bodytarget))
751 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
752 if (nextchar == '\0') {
753 sv_setiv(sv, (IV)PL_minus_c);
755 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
756 sv_setiv(sv, (IV)STATUS_NATIVE);
760 case '\004': /* ^D */
761 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
763 case '\005': /* ^E */
764 if (nextchar == '\0') {
768 $DESCRIPTOR(msgdsc,msg);
769 sv_setnv(sv,(NV) vaxc$errno);
770 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
771 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
776 if (!(_emx_env & 0x200)) { /* Under DOS */
777 sv_setnv(sv, (NV)errno);
778 sv_setpv(sv, errno ? Strerror(errno) : "");
780 if (errno != errno_isOS2) {
781 const int tmp = _syserrno();
782 if (tmp) /* 2nd call to _syserrno() makes it 0 */
785 sv_setnv(sv, (NV)Perl_rc);
786 sv_setpv(sv, os2error(Perl_rc));
790 const DWORD dwErr = GetLastError();
791 sv_setnv(sv, (NV)dwErr);
793 PerlProc_GetOSError(sv, dwErr);
802 sv_setnv(sv, (NV)errno);
803 sv_setpv(sv, errno ? Strerror(errno) : "");
808 SvNOK_on(sv); /* what a wonderful hack! */
810 else if (strEQ(remaining, "NCODING"))
811 sv_setsv(sv, PL_encoding);
813 case '\006': /* ^F */
814 sv_setiv(sv, (IV)PL_maxsysfd);
816 case '\007': /* ^GLOBAL_PHASE */
817 if (strEQ(remaining, "LOBAL_PHASE")) {
818 sv_setpvn(sv, PL_phase_names[PL_phase],
819 strlen(PL_phase_names[PL_phase]));
822 case '\010': /* ^H */
823 sv_setiv(sv, (IV)PL_hints);
825 case '\011': /* ^I */ /* NOT \t in EBCDIC */
826 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
828 case '\014': /* ^LAST_FH */
829 if (strEQ(remaining, "AST_FH")) {
831 assert(isGV_with_GP(PL_last_in_gv));
832 SV_CHECK_THINKFIRST_COW_DROP(sv);
833 prepare_SV_for_RV(sv);
835 SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv));
839 else sv_setsv_nomg(sv, NULL);
842 case '\017': /* ^O & ^OPEN */
843 if (nextchar == '\0') {
844 sv_setpv(sv, PL_osname);
847 else if (strEQ(remaining, "PEN")) {
848 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
852 if (nextchar == '\0') { /* ^P */
853 sv_setiv(sv, (IV)PL_perldb);
854 } else if (strEQ(remaining, "REMATCH")) { /* $^PREMATCH */
856 paren = RX_BUFF_IDX_CARET_PREMATCH;
857 goto do_numbuf_fetch;
858 } else if (strEQ(remaining, "OSTMATCH")) { /* $^POSTMATCH */
859 paren = RX_BUFF_IDX_CARET_POSTMATCH;
860 goto do_numbuf_fetch;
863 case '\023': /* ^S */
864 if (nextchar == '\0') {
865 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
868 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
873 case '\024': /* ^T */
874 if (nextchar == '\0') {
876 sv_setnv(sv, PL_basetime);
878 sv_setiv(sv, (IV)PL_basetime);
881 else if (strEQ(remaining, "AINT"))
882 sv_setiv(sv, PL_tainting
883 ? (PL_taint_warn || PL_unsafe ? -1 : 1)
886 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
887 if (strEQ(remaining, "NICODE"))
888 sv_setuv(sv, (UV) PL_unicode);
889 else if (strEQ(remaining, "TF8LOCALE"))
890 sv_setuv(sv, (UV) PL_utf8locale);
891 else if (strEQ(remaining, "TF8CACHE"))
892 sv_setiv(sv, (IV) PL_utf8cache);
894 case '\027': /* ^W & $^WARNING_BITS */
895 if (nextchar == '\0')
896 sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE));
897 else if (strEQ(remaining, "ARNING_BITS")) {
898 if (PL_compiling.cop_warnings == pWARN_NONE) {
899 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
901 else if (PL_compiling.cop_warnings == pWARN_STD) {
902 sv_setsv(sv, &PL_sv_undef);
905 else if (PL_compiling.cop_warnings == pWARN_ALL) {
906 /* Get the bit mask for $warnings::Bits{all}, because
907 * it could have been extended by warnings::register */
908 HV * const bits = get_hv("warnings::Bits", 0);
909 SV ** const bits_all = bits ? hv_fetchs(bits, "all", FALSE) : NULL;
911 sv_copypv(sv, *bits_all);
913 sv_setpvn(sv, WARN_ALLstring, WARNsize);
916 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
917 *PL_compiling.cop_warnings);
921 case '\015': /* $^MATCH */
922 if (strEQ(remaining, "ATCH")) {
923 paren = RX_BUFF_IDX_CARET_FULLMATCH;
924 goto do_numbuf_fetch;
927 case '1': case '2': case '3': case '4':
928 case '5': case '6': case '7': case '8': case '9': case '&':
930 * Pre-threads, this was paren = atoi(GvENAME((const GV *)mg->mg_obj));
931 * XXX Does the new way break anything?
933 paren = atoi(mg->mg_ptr); /* $& is in [0] */
935 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
936 CALLREG_NUMBUF_FETCH(rx,paren,sv);
939 sv_setsv(sv,&PL_sv_undef);
942 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
943 paren = RX_LASTPAREN(rx);
945 goto do_numbuf_fetch;
947 sv_setsv(sv,&PL_sv_undef);
949 case '\016': /* ^N */
950 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
951 paren = RX_LASTCLOSEPAREN(rx);
953 goto do_numbuf_fetch;
955 sv_setsv(sv,&PL_sv_undef);
958 paren = RX_BUFF_IDX_PREMATCH;
959 goto do_numbuf_fetch;
961 paren = RX_BUFF_IDX_POSTMATCH;
962 goto do_numbuf_fetch;
964 if (GvIO(PL_last_in_gv)) {
965 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
970 sv_setiv(sv, (IV)STATUS_CURRENT);
971 #ifdef COMPLEX_STATUS
972 SvUPGRADE(sv, SVt_PVLV);
973 LvTARGOFF(sv) = PL_statusvalue;
974 LvTARGLEN(sv) = PL_statusvalue_vms;
979 if (GvIOp(PL_defoutgv))
980 s = IoTOP_NAME(GvIOp(PL_defoutgv));
984 sv_setpv(sv,GvENAME(PL_defoutgv));
985 sv_catpvs(sv,"_TOP");
989 if (GvIOp(PL_defoutgv))
990 s = IoFMT_NAME(GvIOp(PL_defoutgv));
992 s = GvENAME(PL_defoutgv);
996 if (GvIO(PL_defoutgv))
997 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1000 if (GvIO(PL_defoutgv))
1001 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1004 if (GvIO(PL_defoutgv))
1005 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1015 if (GvIO(PL_defoutgv))
1016 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1020 sv_copypv(sv, PL_ors_sv);
1022 sv_setsv(sv, &PL_sv_undef);
1026 IV const pid = (IV)PerlProc_getpid();
1027 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1028 /* never set manually, or at least not since last fork */
1030 /* never unsafe, even if reading in a tainted expression */
1033 /* else a value has been assigned manually, so do nothing */
1041 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
1043 sv_setnv(sv, (NV)errno);
1046 if (errno == errno_isOS2 || errno == errno_isOS2_set)
1047 sv_setpv(sv, os2error(Perl_rc));
1050 sv_setpv(sv, errno ? Strerror(errno) : "");
1055 SvNOK_on(sv); /* what a wonderful hack! */
1058 sv_setiv(sv, (IV)PerlProc_getuid());
1061 sv_setiv(sv, (IV)PerlProc_geteuid());
1064 sv_setiv(sv, (IV)PerlProc_getgid());
1067 sv_setiv(sv, (IV)PerlProc_getegid());
1069 #ifdef HAS_GETGROUPS
1071 Groups_t *gary = NULL;
1072 I32 i, num_groups = getgroups(0, gary);
1073 Newx(gary, num_groups, Groups_t);
1074 num_groups = getgroups(num_groups, gary);
1075 for (i = 0; i < num_groups; i++)
1076 Perl_sv_catpvf(aTHX_ sv, " %"IVdf, (IV)gary[i]);
1079 (void)SvIOK_on(sv); /* what a wonderful hack! */
1089 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1091 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1093 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1095 if (uf && uf->uf_val)
1096 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1101 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1104 STRLEN len = 0, klen;
1105 const char * const key = MgPV_const(mg,klen);
1106 const char *s = NULL;
1108 PERL_ARGS_ASSERT_MAGIC_SETENV;
1112 /* defined environment variables are byte strings; unfortunately
1113 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1114 (void)SvPV_force_nomg_nolen(sv);
1115 sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1117 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1123 my_setenv(key, s); /* does the deed */
1125 #ifdef DYNAMIC_ENV_FETCH
1126 /* We just undefd an environment var. Is a replacement */
1127 /* waiting in the wings? */
1129 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1131 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1135 #if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
1136 /* And you'll never guess what the dog had */
1137 /* in its mouth... */
1139 MgTAINTEDDIR_off(mg);
1141 if (s && klen == 8 && strEQ(key, "DCL$PATH")) {
1142 char pathbuf[256], eltbuf[256], *cp, *elt;
1145 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1147 do { /* DCL$PATH may be a search list */
1148 while (1) { /* as may dev portion of any element */
1149 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1150 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1151 cando_by_name(S_IWUSR,0,elt) ) {
1152 MgTAINTEDDIR_on(mg);
1156 if ((cp = strchr(elt, ':')) != NULL)
1158 if (my_trnlnm(elt, eltbuf, j++))
1164 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1167 if (s && klen == 4 && strEQ(key,"PATH")) {
1168 const char * const strend = s + len;
1170 while (s < strend) {
1174 #ifdef VMS /* Hmm. How do we get $Config{path_sep} from C? */
1175 const char path_sep = '|';
1177 const char path_sep = ':';
1179 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf,
1180 s, strend, path_sep, &i);
1182 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1184 || !strchr(tmpbuf, ':') /* no colon thus no device name -- assume relative path */
1186 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1188 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1189 MgTAINTEDDIR_on(mg);
1195 #endif /* neither OS2 nor AMIGAOS nor WIN32 nor MSDOS */
1201 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1203 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1204 PERL_UNUSED_ARG(sv);
1205 my_setenv(MgPV_nolen_const(mg),NULL);
1210 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1213 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1214 PERL_UNUSED_ARG(mg);
1216 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1218 if (PL_localizing) {
1221 hv_iterinit(MUTABLE_HV(sv));
1222 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1224 my_setenv(hv_iterkey(entry, &keylen),
1225 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1233 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1236 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1237 PERL_UNUSED_ARG(sv);
1238 PERL_UNUSED_ARG(mg);
1240 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1248 #ifdef HAS_SIGPROCMASK
1250 restore_sigmask(pTHX_ SV *save_sv)
1252 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1253 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1257 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1260 /* Are we fetching a signal entry? */
1261 int i = (I16)mg->mg_private;
1263 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1267 const char * sig = MgPV_const(mg, siglen);
1268 mg->mg_private = i = whichsig_pvn(sig, siglen);
1273 sv_setsv(sv,PL_psig_ptr[i]);
1275 Sighandler_t sigstate = rsignal_state(i);
1276 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1277 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1280 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1281 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1284 /* cache state so we don't fetch it again */
1285 if(sigstate == (Sighandler_t) SIG_IGN)
1286 sv_setpvs(sv,"IGNORE");
1288 sv_setsv(sv,&PL_sv_undef);
1289 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1296 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1298 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1300 magic_setsig(NULL, mg);
1301 return sv_unmagic(sv, mg->mg_type);
1305 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1306 Perl_csighandler(int sig, siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1308 Perl_csighandler(int sig)
1311 #ifdef PERL_GET_SIG_CONTEXT
1312 dTHXa(PERL_GET_SIG_CONTEXT);
1316 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1317 (void) rsignal(sig, PL_csighandlerp);
1318 if (PL_sig_ignoring[sig]) return;
1320 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1321 if (PL_sig_defaulting[sig])
1322 #ifdef KILL_BY_SIGPRC
1323 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1338 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1339 /* Call the perl level handler now--
1340 * with risk we may be in malloc() or being destructed etc. */
1341 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1342 (*PL_sighandlerp)(sig, NULL, NULL);
1344 (*PL_sighandlerp)(sig);
1347 if (!PL_psig_pend) return;
1348 /* Set a flag to say this signal is pending, that is awaiting delivery after
1349 * the current Perl opcode completes */
1350 PL_psig_pend[sig]++;
1352 #ifndef SIG_PENDING_DIE_COUNT
1353 # define SIG_PENDING_DIE_COUNT 120
1355 /* Add one to say _a_ signal is pending */
1356 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1357 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1358 (unsigned long)SIG_PENDING_DIE_COUNT);
1362 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1364 Perl_csighandler_init(void)
1367 if (PL_sig_handlers_initted) return;
1369 for (sig = 1; sig < SIG_SIZE; sig++) {
1370 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1372 PL_sig_defaulting[sig] = 1;
1373 (void) rsignal(sig, PL_csighandlerp);
1375 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1376 PL_sig_ignoring[sig] = 0;
1379 PL_sig_handlers_initted = 1;
1383 #if defined HAS_SIGPROCMASK
1385 unblock_sigmask(pTHX_ void* newset)
1387 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1392 Perl_despatch_signals(pTHX)
1397 for (sig = 1; sig < SIG_SIZE; sig++) {
1398 if (PL_psig_pend[sig]) {
1400 #ifdef HAS_SIGPROCMASK
1401 /* From sigaction(2) (FreeBSD man page):
1402 * | Signal routines normally execute with the signal that
1403 * | caused their invocation blocked, but other signals may
1405 * Emulation of this behavior (from within Perl) is enabled
1409 sigset_t newset, oldset;
1411 sigemptyset(&newset);
1412 sigaddset(&newset, sig);
1413 sigprocmask(SIG_BLOCK, &newset, &oldset);
1414 was_blocked = sigismember(&oldset, sig);
1416 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1418 SAVEFREESV(save_sv);
1419 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1422 PL_psig_pend[sig] = 0;
1423 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1424 (*PL_sighandlerp)(sig, NULL, NULL);
1426 (*PL_sighandlerp)(sig);
1428 #ifdef HAS_SIGPROCMASK
1437 /* sv of NULL signifies that we're acting as magic_clearsig. */
1439 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1444 /* Need to be careful with SvREFCNT_dec(), because that can have side
1445 * effects (due to closures). We must make sure that the new disposition
1446 * is in place before it is called.
1450 #ifdef HAS_SIGPROCMASK
1454 const char *s = MgPV_const(mg,len);
1456 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1459 if (memEQs(s, len, "__DIE__"))
1461 else if (memEQs(s, len, "__WARN__")
1462 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1463 /* Merge the existing behaviours, which are as follows:
1464 magic_setsig, we always set svp to &PL_warnhook
1465 (hence we always change the warnings handler)
1466 For magic_clearsig, we don't change the warnings handler if it's
1467 set to the &PL_warnhook. */
1470 SV *tmp = sv_newmortal();
1471 Perl_croak(aTHX_ "No such hook: %s",
1472 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1476 if (*svp != PERL_WARNHOOK_FATAL)
1482 i = (I16)mg->mg_private;
1484 i = whichsig_pvn(s, len); /* ...no, a brick */
1485 mg->mg_private = (U16)i;
1489 SV *tmp = sv_newmortal();
1490 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1491 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1495 #ifdef HAS_SIGPROCMASK
1496 /* Avoid having the signal arrive at a bad time, if possible. */
1499 sigprocmask(SIG_BLOCK, &set, &save);
1501 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1502 SAVEFREESV(save_sv);
1503 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1506 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1507 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1509 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1510 PL_sig_ignoring[i] = 0;
1512 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1513 PL_sig_defaulting[i] = 0;
1515 to_dec = PL_psig_ptr[i];
1517 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1518 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1520 /* Signals don't change name during the program's execution, so once
1521 they're cached in the appropriate slot of PL_psig_name, they can
1524 Ideally we'd find some way of making SVs at (C) compile time, or
1525 at least, doing most of the work. */
1526 if (!PL_psig_name[i]) {
1527 PL_psig_name[i] = newSVpvn(s, len);
1528 SvREADONLY_on(PL_psig_name[i]);
1531 SvREFCNT_dec(PL_psig_name[i]);
1532 PL_psig_name[i] = NULL;
1533 PL_psig_ptr[i] = NULL;
1536 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1538 (void)rsignal(i, PL_csighandlerp);
1541 *svp = SvREFCNT_inc_simple_NN(sv);
1543 if (sv && SvOK(sv)) {
1544 s = SvPV_force(sv, len);
1548 if (sv && memEQs(s, len,"IGNORE")) {
1550 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1551 PL_sig_ignoring[i] = 1;
1552 (void)rsignal(i, PL_csighandlerp);
1554 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1558 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1560 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1561 PL_sig_defaulting[i] = 1;
1562 (void)rsignal(i, PL_csighandlerp);
1564 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1570 * We should warn if HINT_STRICT_REFS, but without
1571 * access to a known hint bit in a known OP, we can't
1572 * tell whether HINT_STRICT_REFS is in force or not.
1574 if (!strchr(s,':') && !strchr(s,'\''))
1575 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1578 (void)rsignal(i, PL_csighandlerp);
1580 *svp = SvREFCNT_inc_simple_NN(sv);
1584 #ifdef HAS_SIGPROCMASK
1588 SvREFCNT_dec(to_dec);
1591 #endif /* !PERL_MICRO */
1594 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1597 PERL_ARGS_ASSERT_MAGIC_SETISA;
1598 PERL_UNUSED_ARG(sv);
1600 /* Skip _isaelem because _isa will handle it shortly */
1601 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1604 return magic_clearisa(NULL, mg);
1607 /* sv of NULL signifies that we're acting as magic_setisa. */
1609 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1614 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1616 /* Bail out if destruction is going on */
1617 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1620 av_clear(MUTABLE_AV(sv));
1622 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1623 /* This occurs with setisa_elem magic, which calls this
1625 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1627 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1628 SV **svp = AvARRAY((AV *)mg->mg_obj);
1629 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1631 stash = GvSTASH((GV *)*svp++);
1632 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1639 (const GV *)mg->mg_obj
1642 /* The stash may have been detached from the symbol table, so check its
1643 name before doing anything. */
1644 if (stash && HvENAME_get(stash))
1645 mro_isa_changed_in(stash);
1651 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1653 HV * const hv = MUTABLE_HV(LvTARG(sv));
1656 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1657 PERL_UNUSED_ARG(mg);
1660 (void) hv_iterinit(hv);
1661 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1664 while (hv_iternext(hv))
1669 sv_setiv(sv, (IV)i);
1674 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1676 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1677 PERL_UNUSED_ARG(mg);
1679 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1685 =for apidoc magic_methcall
1687 Invoke a magic method (like FETCH).
1689 C<sv> and C<mg> are the tied thingy and the tie magic.
1691 C<meth> is the name of the method to call.
1693 C<argc> is the number of args (in addition to $self) to pass to the method.
1695 The C<flags> can be:
1697 G_DISCARD invoke method with G_DISCARD flag and don't
1699 G_UNDEF_FILL fill the stack with argc pointers to
1702 The arguments themselves are any values following the C<flags> argument.
1704 Returns the SV (if any) returned by the method, or NULL on failure.
1711 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, const char *meth, U32 flags,
1718 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1722 if (flags & G_WRITING_TO_STDERR) {
1726 SAVESPTR(PL_stderrgv);
1730 PUSHSTACKi(PERLSI_MAGIC);
1734 PUSHs(SvTIED_obj(sv, mg));
1735 if (flags & G_UNDEF_FILL) {
1737 PUSHs(&PL_sv_undef);
1739 } else if (argc > 0) {
1741 va_start(args, argc);
1744 SV *const sv = va_arg(args, SV *);
1751 if (flags & G_DISCARD) {
1752 call_method(meth, G_SCALAR|G_DISCARD);
1755 if (call_method(meth, G_SCALAR))
1756 ret = *PL_stack_sp--;
1759 if (flags & G_WRITING_TO_STDERR)
1766 /* wrapper for magic_methcall that creates the first arg */
1769 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, const char *meth, U32 flags,
1775 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
1778 if (mg->mg_len >= 0) {
1779 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
1781 else if (mg->mg_len == HEf_SVKEY)
1782 arg1 = MUTABLE_SV(mg->mg_ptr);
1784 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
1785 arg1 = newSViv((IV)(mg->mg_len));
1789 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
1791 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
1795 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, const char *meth)
1800 PERL_ARGS_ASSERT_MAGIC_METHPACK;
1802 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
1809 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
1811 PERL_ARGS_ASSERT_MAGIC_GETPACK;
1813 if (mg->mg_type == PERL_MAGIC_tiedelem)
1814 mg->mg_flags |= MGf_GSKIP;
1815 magic_methpack(sv,mg,"FETCH");
1820 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
1826 PERL_ARGS_ASSERT_MAGIC_SETPACK;
1828 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
1829 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
1830 * public flags indicate its value based on copying from $val. Doing
1831 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
1832 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
1833 * wrong if $val happened to be tainted, as sv hasn't got magic
1834 * enabled, even though taint magic is in the chain. In which case,
1835 * fake up a temporary tainted value (this is easier than temporarily
1836 * re-enabling magic on sv). */
1838 if (PL_tainting && (tmg = mg_find(sv, PERL_MAGIC_taint))
1839 && (tmg->mg_len & 1))
1841 val = sv_mortalcopy(sv);
1847 magic_methcall1(sv, mg, "STORE", G_DISCARD, 2, val);
1852 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
1854 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
1856 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
1857 return magic_methpack(sv,mg,"DELETE");
1862 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
1868 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
1870 retsv = magic_methcall1(sv, mg, "FETCHSIZE", 0, 1, NULL);
1872 retval = SvIV(retsv)-1;
1874 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
1876 return (U32) retval;
1880 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
1884 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
1886 Perl_magic_methcall(aTHX_ sv, mg, "CLEAR", G_DISCARD, 0);
1891 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
1896 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
1898 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, "NEXTKEY", 0, 1, key)
1899 : Perl_magic_methcall(aTHX_ sv, mg, "FIRSTKEY", 0, 0);
1906 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
1908 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
1910 return magic_methpack(sv,mg,"EXISTS");
1914 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
1918 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
1919 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
1921 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
1923 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
1925 if (HvEITER_get(hv))
1926 /* we are in an iteration so the hash cannot be empty */
1928 /* no xhv_eiter so now use FIRSTKEY */
1929 key = sv_newmortal();
1930 magic_nextpack(MUTABLE_SV(hv), mg, key);
1931 HvEITER_set(hv, NULL); /* need to reset iterator */
1932 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
1935 /* there is a SCALAR method that we can call */
1936 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, "SCALAR", 0, 0);
1938 retval = &PL_sv_undef;
1943 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
1946 GV * const gv = PL_DBline;
1947 const I32 i = SvTRUE(sv);
1948 SV ** const svp = av_fetch(GvAV(gv),
1949 atoi(MgPV_nolen_const(mg)), FALSE);
1951 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
1953 if (svp && SvIOKp(*svp)) {
1954 OP * const o = INT2PTR(OP*,SvIVX(*svp));
1956 #ifdef PERL_DEBUG_READONLY_OPS
1957 Slab_to_rw(OpSLAB(o));
1959 /* set or clear breakpoint in the relevant control op */
1961 o->op_flags |= OPf_SPECIAL;
1963 o->op_flags &= ~OPf_SPECIAL;
1964 #ifdef PERL_DEBUG_READONLY_OPS
1965 Slab_to_ro(OpSLAB(o));
1973 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
1976 AV * const obj = MUTABLE_AV(mg->mg_obj);
1978 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
1981 sv_setiv(sv, AvFILL(obj));
1989 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
1992 AV * const obj = MUTABLE_AV(mg->mg_obj);
1994 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
1997 av_fill(obj, SvIV(sv));
1999 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2000 "Attempt to set length of freed array");
2006 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2010 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2011 PERL_UNUSED_ARG(sv);
2013 /* Reset the iterator when the array is cleared */
2014 #if IVSIZE == I32SIZE
2015 *((IV *) &(mg->mg_len)) = 0;
2018 *((IV *) mg->mg_ptr) = 0;
2025 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2029 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2030 PERL_UNUSED_ARG(sv);
2032 /* during global destruction, mg_obj may already have been freed */
2033 if (PL_in_clean_all)
2036 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2039 /* arylen scalar holds a pointer back to the array, but doesn't own a
2040 reference. Hence the we (the array) are about to go away with it
2041 still pointing at us. Clear its pointer, else it would be pointing
2042 at free memory. See the comment in sv_magic about reference loops,
2043 and why it can't own a reference to us. */
2050 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2053 SV* const lsv = LvTARG(sv);
2055 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2056 PERL_UNUSED_ARG(mg);
2058 if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv)) {
2059 MAGIC * const found = mg_find(lsv, PERL_MAGIC_regex_global);
2060 if (found && found->mg_len >= 0) {
2061 I32 i = found->mg_len;
2063 sv_pos_b2u(lsv, &i);
2073 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2076 SV* const lsv = LvTARG(sv);
2083 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2084 PERL_UNUSED_ARG(mg);
2086 if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv))
2087 found = mg_find(lsv, PERL_MAGIC_regex_global);
2093 #ifdef PERL_OLD_COPY_ON_WRITE
2095 sv_force_normal_flags(lsv, 0);
2097 found = sv_magicext(lsv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
2100 else if (!SvOK(sv)) {
2104 s = SvPV_const(lsv, len);
2109 ulen = sv_or_pv_len_utf8(lsv, s, len);
2119 else if (pos > (SSize_t)len)
2123 pos = sv_or_pv_pos_u2b(lsv, s, pos, 0);
2126 found->mg_len = pos;
2127 found->mg_flags &= ~MGf_MINMATCH;
2133 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2136 SV * const lsv = LvTARG(sv);
2137 const char * const tmps = SvPV_const(lsv,len);
2138 STRLEN offs = LvTARGOFF(sv);
2139 STRLEN rem = LvTARGLEN(sv);
2140 const bool negoff = LvFLAGS(sv) & 1;
2141 const bool negrem = LvFLAGS(sv) & 2;
2143 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2144 PERL_UNUSED_ARG(mg);
2146 if (!translate_substr_offsets(
2147 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2148 negoff ? -(IV)offs : (IV)offs, !negoff,
2149 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2151 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2152 sv_setsv_nomg(sv, &PL_sv_undef);
2157 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2158 sv_setpvn(sv, tmps + offs, rem);
2165 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2168 STRLEN len, lsv_len, oldtarglen, newtarglen;
2169 const char * const tmps = SvPV_const(sv, len);
2170 SV * const lsv = LvTARG(sv);
2171 STRLEN lvoff = LvTARGOFF(sv);
2172 STRLEN lvlen = LvTARGLEN(sv);
2173 const bool negoff = LvFLAGS(sv) & 1;
2174 const bool neglen = LvFLAGS(sv) & 2;
2176 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2177 PERL_UNUSED_ARG(mg);
2181 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2182 "Attempt to use reference as lvalue in substr"
2184 SvPV_force_nomg(lsv,lsv_len);
2185 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2186 if (!translate_substr_offsets(
2188 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2189 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2191 Perl_croak(aTHX_ "substr outside of string");
2194 sv_utf8_upgrade_nomg(lsv);
2195 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2196 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2197 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2200 else if (SvUTF8(lsv)) {
2202 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2204 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2205 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2209 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2212 if (!neglen) LvTARGLEN(sv) = newtarglen;
2213 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2219 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2223 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2224 PERL_UNUSED_ARG(sv);
2226 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
2231 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2235 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2236 PERL_UNUSED_ARG(sv);
2238 /* update taint status */
2247 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2249 SV * const lsv = LvTARG(sv);
2251 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2252 PERL_UNUSED_ARG(mg);
2255 sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2263 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2265 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2266 PERL_UNUSED_ARG(mg);
2267 do_vecset(sv); /* XXX slurp this routine */
2272 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2277 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2279 if (LvTARGLEN(sv)) {
2281 SV * const ahv = LvTARG(sv);
2282 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2287 AV *const av = MUTABLE_AV(LvTARG(sv));
2288 if ((I32)LvTARGOFF(sv) <= AvFILL(av))
2289 targ = AvARRAY(av)[LvTARGOFF(sv)];
2291 if (targ && (targ != &PL_sv_undef)) {
2292 /* somebody else defined it for us */
2293 SvREFCNT_dec(LvTARG(sv));
2294 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2296 SvREFCNT_dec(mg->mg_obj);
2298 mg->mg_flags &= ~MGf_REFCOUNTED;
2303 sv_setsv(sv, targ ? targ : &PL_sv_undef);
2308 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2310 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2311 PERL_UNUSED_ARG(mg);
2315 sv_setsv(LvTARG(sv), sv);
2316 SvSETMAGIC(LvTARG(sv));
2322 Perl_vivify_defelem(pTHX_ SV *sv)
2328 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2330 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2333 SV * const ahv = LvTARG(sv);
2334 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2337 if (!value || value == &PL_sv_undef)
2338 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2341 AV *const av = MUTABLE_AV(LvTARG(sv));
2342 if ((I32)LvTARGLEN(sv) < 0 && (I32)LvTARGOFF(sv) > AvFILL(av))
2343 LvTARG(sv) = NULL; /* array can't be extended */
2345 SV* const * const svp = av_fetch(av, LvTARGOFF(sv), TRUE);
2346 if (!svp || (value = *svp) == &PL_sv_undef)
2347 Perl_croak(aTHX_ PL_no_aelem, (I32)LvTARGOFF(sv));
2350 SvREFCNT_inc_simple_void(value);
2351 SvREFCNT_dec(LvTARG(sv));
2354 SvREFCNT_dec(mg->mg_obj);
2356 mg->mg_flags &= ~MGf_REFCOUNTED;
2360 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2362 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2363 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2368 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2370 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2371 PERL_UNUSED_CONTEXT;
2372 PERL_UNUSED_ARG(sv);
2378 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2380 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2382 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2384 if (uf && uf->uf_set)
2385 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2390 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2392 const char type = mg->mg_type;
2394 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2396 if (type == PERL_MAGIC_qr) {
2397 } else if (type == PERL_MAGIC_bm) {
2401 assert(type == PERL_MAGIC_fm);
2403 return sv_unmagic(sv, type);
2406 #ifdef USE_LOCALE_COLLATE
2408 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2410 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2413 * RenE<eacute> Descartes said "I think not."
2414 * and vanished with a faint plop.
2416 PERL_UNUSED_CONTEXT;
2417 PERL_UNUSED_ARG(sv);
2419 Safefree(mg->mg_ptr);
2425 #endif /* USE_LOCALE_COLLATE */
2427 /* Just clear the UTF-8 cache data. */
2429 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2431 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2432 PERL_UNUSED_CONTEXT;
2433 PERL_UNUSED_ARG(sv);
2434 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2436 mg->mg_len = -1; /* The mg_len holds the len cache. */
2441 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2447 const char * const remaining = mg->mg_ptr + 1;
2452 PERL_ARGS_ASSERT_MAGIC_SET;
2454 switch (*mg->mg_ptr) {
2455 case '\015': /* $^MATCH */
2456 if (strEQ(remaining, "ATCH"))
2458 case '`': /* ${^PREMATCH} caught below */
2460 paren = RX_BUFF_IDX_PREMATCH;
2462 case '\'': /* ${^POSTMATCH} caught below */
2464 paren = RX_BUFF_IDX_POSTMATCH;
2468 paren = RX_BUFF_IDX_FULLMATCH;
2470 case '1': case '2': case '3': case '4':
2471 case '5': case '6': case '7': case '8': case '9':
2472 paren = atoi(mg->mg_ptr);
2474 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2476 CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv);
2478 /* Croak with a READONLY error when a numbered match var is
2479 * set without a previous pattern match. Unless it's C<local $1>
2482 if (!PL_localizing) {
2483 Perl_croak_no_modify(aTHX);
2487 case '\001': /* ^A */
2488 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2489 else SvOK_off(PL_bodytarget);
2490 FmLINES(PL_bodytarget) = 0;
2491 if (SvPOK(PL_bodytarget)) {
2492 char *s = SvPVX(PL_bodytarget);
2493 while ( ((s = strchr(s, '\n'))) ) {
2494 FmLINES(PL_bodytarget)++;
2498 /* mg_set() has temporarily made sv non-magical */
2500 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2501 SvTAINTED_on(PL_bodytarget);
2503 SvTAINTED_off(PL_bodytarget);
2506 case '\003': /* ^C */
2507 PL_minus_c = cBOOL(SvIV(sv));
2510 case '\004': /* ^D */
2512 s = SvPV_nolen_const(sv);
2513 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2514 if (DEBUG_x_TEST || DEBUG_B_TEST)
2515 dump_all_perl(!DEBUG_B_TEST);
2517 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2520 case '\005': /* ^E */
2521 if (*(mg->mg_ptr+1) == '\0') {
2523 set_vaxc_errno(SvIV(sv));
2526 SetLastError( SvIV(sv) );
2529 os2_setsyserrno(SvIV(sv));
2531 /* will anyone ever use this? */
2532 SETERRNO(SvIV(sv), 4);
2537 else if (strEQ(mg->mg_ptr+1, "NCODING")) {
2538 SvREFCNT_dec(PL_encoding);
2539 if (SvOK(sv) || SvGMAGICAL(sv)) {
2540 PL_encoding = newSVsv(sv);
2547 case '\006': /* ^F */
2548 PL_maxsysfd = SvIV(sv);
2550 case '\010': /* ^H */
2551 PL_hints = SvIV(sv);
2553 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2554 Safefree(PL_inplace);
2555 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2557 case '\016': /* ^N */
2558 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2559 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2561 case '\017': /* ^O */
2562 if (*(mg->mg_ptr+1) == '\0') {
2563 Safefree(PL_osname);
2566 TAINT_PROPER("assigning to $^O");
2567 PL_osname = savesvpv(sv);
2570 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2572 const char *const start = SvPV(sv, len);
2573 const char *out = (const char*)memchr(start, '\0', len);
2577 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2578 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2580 /* Opening for input is more common than opening for output, so
2581 ensure that hints for input are sooner on linked list. */
2582 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2584 : newSVpvs_flags("", SvUTF8(sv));
2585 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2588 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2590 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2594 case '\020': /* ^P */
2595 if (*remaining == '\0') { /* ^P */
2596 PL_perldb = SvIV(sv);
2597 if (PL_perldb && !PL_DBsingle)
2600 } else if (strEQ(remaining, "REMATCH")) { /* $^PREMATCH */
2602 } else if (strEQ(remaining, "OSTMATCH")) { /* $^POSTMATCH */
2606 case '\024': /* ^T */
2608 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2610 PL_basetime = (Time_t)SvIV(sv);
2613 case '\025': /* ^UTF8CACHE */
2614 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
2615 PL_utf8cache = (signed char) sv_2iv(sv);
2618 case '\027': /* ^W & $^WARNING_BITS */
2619 if (*(mg->mg_ptr+1) == '\0') {
2620 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2622 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
2623 | (i ? G_WARN_ON : G_WARN_OFF) ;
2626 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
2627 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2629 PL_compiling.cop_warnings = pWARN_STD;
2634 int accumulate = 0 ;
2635 int any_fatals = 0 ;
2636 const char * const ptr = SvPV_const(sv, len) ;
2637 for (i = 0 ; i < len ; ++i) {
2638 accumulate |= ptr[i] ;
2639 any_fatals |= (ptr[i] & 0xAA) ;
2642 if (!specialWARN(PL_compiling.cop_warnings))
2643 PerlMemShared_free(PL_compiling.cop_warnings);
2644 PL_compiling.cop_warnings = pWARN_NONE;
2646 /* Yuck. I can't see how to abstract this: */
2647 else if (isWARN_on(((STRLEN *)SvPV_nolen_const(sv)) - 1,
2648 WARN_ALL) && !any_fatals) {
2649 if (!specialWARN(PL_compiling.cop_warnings))
2650 PerlMemShared_free(PL_compiling.cop_warnings);
2651 PL_compiling.cop_warnings = pWARN_ALL;
2652 PL_dowarn |= G_WARN_ONCE ;
2656 const char *const p = SvPV_const(sv, len);
2658 PL_compiling.cop_warnings
2659 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
2662 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
2663 PL_dowarn |= G_WARN_ONCE ;
2671 if (PL_localizing) {
2672 if (PL_localizing == 1)
2673 SAVESPTR(PL_last_in_gv);
2675 else if (SvOK(sv) && GvIO(PL_last_in_gv))
2676 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
2679 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
2680 s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2681 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2684 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
2685 s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2686 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2689 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
2692 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
2693 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
2694 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
2697 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
2701 IO * const io = GvIO(PL_defoutgv);
2704 if ((SvIV(sv)) == 0)
2705 IoFLAGS(io) &= ~IOf_FLUSH;
2707 if (!(IoFLAGS(io) & IOf_FLUSH)) {
2708 PerlIO *ofp = IoOFP(io);
2710 (void)PerlIO_flush(ofp);
2711 IoFLAGS(io) |= IOf_FLUSH;
2717 SvREFCNT_dec(PL_rs);
2718 PL_rs = newSVsv(sv);
2721 SvREFCNT_dec(PL_ors_sv);
2723 PL_ors_sv = newSVsv(sv);
2731 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
2734 #ifdef COMPLEX_STATUS
2735 if (PL_localizing == 2) {
2736 SvUPGRADE(sv, SVt_PVLV);
2737 PL_statusvalue = LvTARGOFF(sv);
2738 PL_statusvalue_vms = LvTARGLEN(sv);
2742 #ifdef VMSISH_STATUS
2744 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
2747 STATUS_UNIX_EXIT_SET(SvIV(sv));
2752 # define PERL_VMS_BANG vaxc$errno
2754 # define PERL_VMS_BANG 0
2756 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
2757 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2762 const IV new_uid = SvIV(sv);
2763 PL_delaymagic_uid = new_uid;
2764 if (PL_delaymagic) {
2765 PL_delaymagic |= DM_RUID;
2766 break; /* don't do magic till later */
2769 (void)setruid((Uid_t)new_uid);
2772 (void)setreuid((Uid_t)new_uid, (Uid_t)-1);
2774 #ifdef HAS_SETRESUID
2775 (void)setresuid((Uid_t)new_uid, (Uid_t)-1, (Uid_t)-1);
2777 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
2779 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
2780 if (new_uid != 0 && PerlProc_getuid() == 0)
2781 (void)PerlProc_setuid(0);
2783 (void)PerlProc_setuid(new_uid);
2785 Perl_croak(aTHX_ "setruid() not implemented");
2794 const UV new_euid = SvIV(sv);
2795 PL_delaymagic_euid = new_euid;
2796 if (PL_delaymagic) {
2797 PL_delaymagic |= DM_EUID;
2798 break; /* don't do magic till later */
2801 (void)seteuid((Uid_t)new_euid);
2804 (void)setreuid((Uid_t)-1, (Uid_t)new_euid);
2806 #ifdef HAS_SETRESUID
2807 (void)setresuid((Uid_t)-1, (Uid_t)new_euid, (Uid_t)-1);
2809 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
2810 PerlProc_setuid(new_euid);
2812 Perl_croak(aTHX_ "seteuid() not implemented");
2821 const UV new_gid = SvIV(sv);
2822 PL_delaymagic_gid = new_gid;
2823 if (PL_delaymagic) {
2824 PL_delaymagic |= DM_RGID;
2825 break; /* don't do magic till later */
2828 (void)setrgid((Gid_t)new_gid);
2831 (void)setregid((Gid_t)new_gid, (Gid_t)-1);
2833 #ifdef HAS_SETRESGID
2834 (void)setresgid((Gid_t)new_gid, (Gid_t)-1, (Gid_t) -1);
2836 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
2837 (void)PerlProc_setgid(new_gid);
2839 Perl_croak(aTHX_ "setrgid() not implemented");
2849 #ifdef HAS_SETGROUPS
2851 const char *p = SvPV_const(sv, len);
2852 Groups_t *gary = NULL;
2853 #ifdef _SC_NGROUPS_MAX
2854 int maxgrp = sysconf(_SC_NGROUPS_MAX);
2859 int maxgrp = NGROUPS;
2865 for (i = 0; i < maxgrp; ++i) {
2866 while (*p && !isSPACE(*p))
2873 Newx(gary, i + 1, Groups_t);
2875 Renew(gary, i + 1, Groups_t);
2879 (void)setgroups(i, gary);
2882 #else /* HAS_SETGROUPS */
2883 new_egid = SvIV(sv);
2884 #endif /* HAS_SETGROUPS */
2885 PL_delaymagic_egid = new_egid;
2886 if (PL_delaymagic) {
2887 PL_delaymagic |= DM_EGID;
2888 break; /* don't do magic till later */
2891 (void)setegid((Gid_t)new_egid);
2894 (void)setregid((Gid_t)-1, (Gid_t)new_egid);
2896 #ifdef HAS_SETRESGID
2897 (void)setresgid((Gid_t)-1, (Gid_t)new_egid, (Gid_t)-1);
2899 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
2900 (void)PerlProc_setgid(new_egid);
2902 Perl_croak(aTHX_ "setegid() not implemented");
2910 PL_chopset = SvPV_force(sv,len);
2913 /* Store the pid in mg->mg_obj so we can tell when a fork has
2914 occurred. mg->mg_obj points to *$ by default, so clear it. */
2915 if (isGV(mg->mg_obj)) {
2916 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
2917 SvREFCNT_dec(mg->mg_obj);
2918 mg->mg_flags |= MGf_REFCOUNTED;
2919 mg->mg_obj = newSViv((IV)PerlProc_getpid());
2921 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
2924 LOCK_DOLLARZERO_MUTEX;
2925 #ifdef HAS_SETPROCTITLE
2926 /* The BSDs don't show the argv[] in ps(1) output, they
2927 * show a string from the process struct and provide
2928 * the setproctitle() routine to manipulate that. */
2929 if (PL_origalen != 1) {
2930 s = SvPV_const(sv, len);
2931 # if __FreeBSD_version > 410001
2932 /* The leading "-" removes the "perl: " prefix,
2933 * but not the "(perl) suffix from the ps(1)
2934 * output, because that's what ps(1) shows if the
2935 * argv[] is modified. */
2936 setproctitle("-%s", s);
2937 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2938 /* This doesn't really work if you assume that
2939 * $0 = 'foobar'; will wipe out 'perl' from the $0
2940 * because in ps(1) output the result will be like
2941 * sprintf("perl: %s (perl)", s)
2942 * I guess this is a security feature:
2943 * one (a user process) cannot get rid of the original name.
2945 setproctitle("%s", s);
2948 #elif defined(__hpux) && defined(PSTAT_SETCMD)
2949 if (PL_origalen != 1) {
2951 s = SvPV_const(sv, len);
2952 un.pst_command = (char *)s;
2953 pstat(PSTAT_SETCMD, un, len, 0, 0);
2956 if (PL_origalen > 1) {
2957 /* PL_origalen is set in perl_parse(). */
2958 s = SvPV_force(sv,len);
2959 if (len >= (STRLEN)PL_origalen-1) {
2960 /* Longer than original, will be truncated. We assume that
2961 * PL_origalen bytes are available. */
2962 Copy(s, PL_origargv[0], PL_origalen-1, char);
2965 /* Shorter than original, will be padded. */
2967 /* Special case for Mac OS X: see [perl #38868] */
2970 /* Is the space counterintuitive? Yes.
2971 * (You were expecting \0?)
2972 * Does it work? Seems to. (In Linux 2.4.20 at least.)
2974 const int pad = ' ';
2976 Copy(s, PL_origargv[0], len, char);
2977 PL_origargv[0][len] = 0;
2978 memset(PL_origargv[0] + len + 1,
2979 pad, PL_origalen - len - 1);
2981 PL_origargv[0][PL_origalen-1] = 0;
2982 for (i = 1; i < PL_origargc; i++)
2984 #ifdef HAS_PRCTL_SET_NAME
2985 /* Set the legacy process name in addition to the POSIX name on Linux */
2986 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
2987 /* diag_listed_as: SKIPME */
2988 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
2993 UNLOCK_DOLLARZERO_MUTEX;
3000 Perl_whichsig_sv(pTHX_ SV *sigsv)
3004 PERL_ARGS_ASSERT_WHICHSIG_SV;
3005 PERL_UNUSED_CONTEXT;
3006 sigpv = SvPV_const(sigsv, siglen);
3007 return whichsig_pvn(sigpv, siglen);
3011 Perl_whichsig_pv(pTHX_ const char *sig)
3013 PERL_ARGS_ASSERT_WHICHSIG_PV;
3014 PERL_UNUSED_CONTEXT;
3015 return whichsig_pvn(sig, strlen(sig));
3019 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3023 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3024 PERL_UNUSED_CONTEXT;
3026 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3027 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3028 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3030 if (memEQs(sig, len, "CHLD"))
3034 if (memEQs(sig, len, "CLD"))
3041 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3042 Perl_sighandler(int sig, siginfo_t *sip, void *uap)
3044 Perl_sighandler(int sig)
3047 #ifdef PERL_GET_SIG_CONTEXT
3048 dTHXa(PERL_GET_SIG_CONTEXT);
3055 SV * const tSv = PL_Sv;
3059 XPV * const tXpv = PL_Xpv;
3060 I32 old_ss_ix = PL_savestack_ix;
3061 SV *errsv_save = NULL;
3064 if (!PL_psig_ptr[sig]) {
3065 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3070 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3071 /* Max number of items pushed there is 3*n or 4. We cannot fix
3072 infinity, so we fix 4 (in fact 5): */
3073 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3075 PL_savestack_ix += 5; /* Protect save in progress. */
3076 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3079 /* sv_2cv is too complicated, try a simpler variant first: */
3080 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3081 || SvTYPE(cv) != SVt_PVCV) {
3083 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3086 if (!cv || !CvROOT(cv)) {
3087 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "SIG%s handler \"%s\" not defined.\n",
3088 PL_sig_name[sig], (gv ? GvENAME(gv)
3095 sv = PL_psig_name[sig]
3096 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3097 : newSVpv(PL_sig_name[sig],0);
3101 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3102 /* make sure our assumption about the size of the SAVEs are correct:
3103 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3104 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3107 PUSHSTACKi(PERLSI_SIGNAL);
3110 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3112 struct sigaction oact;
3114 if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3117 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3118 /* The siginfo fields signo, code, errno, pid, uid,
3119 * addr, status, and band are defined by POSIX/SUSv3. */
3120 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3121 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3122 #if 0 /* XXX TODO: Configure scan for the existence of these, but even that does not help if the SA_SIGINFO is not implemented according to the spec. */
3123 hv_stores(sih, "errno", newSViv(sip->si_errno));
3124 hv_stores(sih, "status", newSViv(sip->si_status));
3125 hv_stores(sih, "uid", newSViv(sip->si_uid));
3126 hv_stores(sih, "pid", newSViv(sip->si_pid));
3127 hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3128 hv_stores(sih, "band", newSViv(sip->si_band));
3132 mPUSHp((char *)sip, sizeof(*sip));
3140 errsv_save = newSVsv(ERRSV);
3142 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3145 if (SvTRUE(ERRSV)) {
3146 SvREFCNT_dec(errsv_save);
3148 /* Handler "died", for example to get out of a restart-able read().
3149 * Before we re-do that on its behalf re-enable the signal which was
3150 * blocked by the system when we entered.
3152 #ifdef HAS_SIGPROCMASK
3153 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3159 sigaddset(&set,sig);
3160 sigprocmask(SIG_UNBLOCK, &set, NULL);
3163 /* Not clear if this will work */
3164 (void)rsignal(sig, SIG_IGN);
3165 (void)rsignal(sig, PL_csighandlerp);
3167 #endif /* !PERL_MICRO */
3171 sv_setsv(ERRSV, errsv_save);
3172 SvREFCNT_dec(errsv_save);
3176 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3177 PL_savestack_ix = old_ss_ix;
3180 PL_op = myop; /* Apparently not needed... */
3182 PL_Sv = tSv; /* Restore global temporaries. */
3189 S_restore_magic(pTHX_ const void *p)
3192 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3193 SV* const sv = mgs->mgs_sv;
3199 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3200 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3201 #ifdef PERL_OLD_COPY_ON_WRITE
3202 /* While magic was saved (and off) sv_setsv may well have seen
3203 this SV as a prime candidate for COW. */
3205 sv_force_normal_flags(sv, 0);
3207 if (mgs->mgs_readonly)
3209 if (mgs->mgs_magical)
3210 SvFLAGS(sv) |= mgs->mgs_magical;
3215 bumped = mgs->mgs_bumped;
3216 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3218 /* If we're still on top of the stack, pop us off. (That condition
3219 * will be satisfied if restore_magic was called explicitly, but *not*
3220 * if it's being called via leave_scope.)
3221 * The reason for doing this is that otherwise, things like sv_2cv()
3222 * may leave alloc gunk on the savestack, and some code
3223 * (e.g. sighandler) doesn't expect that...
3225 if (PL_savestack_ix == mgs->mgs_ss_ix)
3227 UV popval = SSPOPUV;
3228 assert(popval == SAVEt_DESTRUCTOR_X);
3229 PL_savestack_ix -= 2;
3231 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3232 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3235 if (SvREFCNT(sv) == 1) {
3236 /* We hold the last reference to this SV, which implies that the
3237 SV was deleted as a side effect of the routines we called.
3238 So artificially keep it alive a bit longer.
3239 We avoid turning on the TEMP flag, which can cause the SV's
3240 buffer to get stolen (and maybe other stuff). */
3245 SvREFCNT_dec(sv); /* undo the inc in S_save_magic() */
3249 /* clean up the mess created by Perl_sighandler().
3250 * Note that this is only called during an exit in a signal handler;
3251 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3255 S_unwind_handler_stack(pTHX_ const void *p)
3260 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3264 =for apidoc magic_sethint
3266 Triggered by a store to %^H, records the key/value pair to
3267 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3268 anything that would need a deep copy. Maybe we should warn if we find a
3274 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3277 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3278 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3280 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3282 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3283 an alternative leaf in there, with PL_compiling.cop_hints being used if
3284 it's NULL. If needed for threads, the alternative could lock a mutex,
3285 or take other more complex action. */
3287 /* Something changed in %^H, so it will need to be restored on scope exit.
3288 Doing this here saves a lot of doing it manually in perl code (and
3289 forgetting to do it, and consequent subtle errors. */
3290 PL_hints |= HINT_LOCALIZE_HH;
3291 CopHINTHASH_set(&PL_compiling,
3292 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3297 =for apidoc magic_clearhint
3299 Triggered by a delete from %^H, records the key to
3300 C<PL_compiling.cop_hints_hash>.
3305 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3309 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3310 PERL_UNUSED_ARG(sv);
3312 PL_hints |= HINT_LOCALIZE_HH;
3313 CopHINTHASH_set(&PL_compiling,
3314 mg->mg_len == HEf_SVKEY
3315 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3316 MUTABLE_SV(mg->mg_ptr), 0, 0)
3317 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3318 mg->mg_ptr, mg->mg_len, 0, 0));
3323 =for apidoc magic_clearhints
3325 Triggered by clearing %^H, resets C<PL_compiling.cop_hints_hash>.
3330 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3332 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3333 PERL_UNUSED_ARG(sv);
3334 PERL_UNUSED_ARG(mg);
3335 cophh_free(CopHINTHASH_get(&PL_compiling));
3336 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3341 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3342 const char *name, I32 namlen)
3346 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3347 PERL_UNUSED_ARG(sv);
3348 PERL_UNUSED_ARG(name);
3349 PERL_UNUSED_ARG(namlen);
3351 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3352 nmg = mg_find(nsv, mg->mg_type);
3353 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3354 nmg->mg_ptr = mg->mg_ptr;
3355 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3356 nmg->mg_flags |= MGf_REFCOUNTED;
3362 * c-indentation-style: bsd
3364 * indent-tabs-mode: nil
3367 * ex: set ts=8 sts=4 sw=4 et: