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 after 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 Report on the SV's length. See C<sv_magic>.
297 Perl_mg_length(pTHX_ SV *sv)
303 PERL_ARGS_ASSERT_MG_LENGTH;
305 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
306 const MGVTBL * const vtbl = mg->mg_virtual;
307 if (vtbl && vtbl->svt_len) {
308 const I32 mgs_ix = SSNEW(sizeof(MGS));
309 save_magic(mgs_ix, sv);
310 /* omit MGf_GSKIP -- not changed here */
311 len = vtbl->svt_len(aTHX_ sv, mg);
312 restore_magic(INT2PTR(void*, (IV)mgs_ix));
318 /* You can't know whether it's UTF-8 until you get the string again...
320 const U8 *s = (U8*)SvPV_const(sv, len);
323 len = utf8_length(s, s + len);
330 Perl_mg_size(pTHX_ SV *sv)
334 PERL_ARGS_ASSERT_MG_SIZE;
336 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
337 const MGVTBL* const vtbl = mg->mg_virtual;
338 if (vtbl && vtbl->svt_len) {
339 const I32 mgs_ix = SSNEW(sizeof(MGS));
341 save_magic(mgs_ix, sv);
342 /* omit MGf_GSKIP -- not changed here */
343 len = vtbl->svt_len(aTHX_ sv, mg);
344 restore_magic(INT2PTR(void*, (IV)mgs_ix));
351 return AvFILLp((const AV *) sv); /* Fallback to non-tied array */
355 Perl_croak(aTHX_ "Size magic not implemented");
364 Clear something magical that the SV represents. See C<sv_magic>.
370 Perl_mg_clear(pTHX_ SV *sv)
372 const I32 mgs_ix = SSNEW(sizeof(MGS));
376 PERL_ARGS_ASSERT_MG_CLEAR;
378 save_magic(mgs_ix, sv);
380 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
381 const MGVTBL* const vtbl = mg->mg_virtual;
382 /* omit GSKIP -- never set here */
384 nextmg = mg->mg_moremagic; /* it may delete itself */
386 if (vtbl && vtbl->svt_clear)
387 vtbl->svt_clear(aTHX_ sv, mg);
390 restore_magic(INT2PTR(void*, (IV)mgs_ix));
395 S_mg_findext_flags(pTHX_ const SV *sv, int type, const MGVTBL *vtbl, U32 flags)
404 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
405 if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) {
417 Finds the magic pointer for type matching the SV. See C<sv_magic>.
423 Perl_mg_find(pTHX_ const SV *sv, int type)
425 return S_mg_findext_flags(aTHX_ sv, type, NULL, 0);
429 =for apidoc mg_findext
431 Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
438 Perl_mg_findext(pTHX_ const SV *sv, int type, const MGVTBL *vtbl)
440 return S_mg_findext_flags(aTHX_ sv, type, vtbl, 1);
446 Copies the magic from one SV to another. See C<sv_magic>.
452 Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
457 PERL_ARGS_ASSERT_MG_COPY;
459 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
460 const MGVTBL* const vtbl = mg->mg_virtual;
461 if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){
462 count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen);
465 const char type = mg->mg_type;
466 if (isUPPER(type) && type != PERL_MAGIC_uvar) {
468 (type == PERL_MAGIC_tied)
470 : (type == PERL_MAGIC_regdata && mg->mg_obj)
473 toLOWER(type), key, klen);
482 =for apidoc mg_localize
484 Copy some of the magic from an existing SV to new localized version of that
485 SV. Container magic (eg %ENV, $1, tie) gets copied, value magic doesn't (eg
488 If setmagic is false then no set magic will be called on the new (empty) SV.
489 This typically means that assignment will soon follow (e.g. 'local $x = $y'),
490 and that will handle the magic.
496 Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic)
501 PERL_ARGS_ASSERT_MG_LOCALIZE;
506 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
507 const MGVTBL* const vtbl = mg->mg_virtual;
508 if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
511 if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local)
512 (void)vtbl->svt_local(aTHX_ nsv, mg);
514 sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl,
515 mg->mg_ptr, mg->mg_len);
517 /* container types should remain read-only across localization */
518 if (!SvIsCOW(sv)) SvFLAGS(nsv) |= SvREADONLY(sv);
521 if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) {
522 SvFLAGS(nsv) |= SvMAGICAL(sv);
531 #define mg_free_struct(sv, mg) S_mg_free_struct(aTHX_ sv, mg)
533 S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg)
535 const MGVTBL* const vtbl = mg->mg_virtual;
536 if (vtbl && vtbl->svt_free)
537 vtbl->svt_free(aTHX_ sv, mg);
538 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
539 if (mg->mg_len > 0 || mg->mg_type == PERL_MAGIC_utf8)
540 Safefree(mg->mg_ptr);
541 else if (mg->mg_len == HEf_SVKEY)
542 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
544 if (mg->mg_flags & MGf_REFCOUNTED)
545 SvREFCNT_dec(mg->mg_obj);
552 Free any magic storage used by the SV. See C<sv_magic>.
558 Perl_mg_free(pTHX_ SV *sv)
563 PERL_ARGS_ASSERT_MG_FREE;
565 for (mg = SvMAGIC(sv); mg; mg = moremagic) {
566 moremagic = mg->mg_moremagic;
567 mg_free_struct(sv, mg);
568 SvMAGIC_set(sv, moremagic);
570 SvMAGIC_set(sv, NULL);
576 =for apidoc Am|void|mg_free_type|SV *sv|int how
578 Remove any magic of type I<how> from the SV I<sv>. See L</sv_magic>.
584 Perl_mg_free_type(pTHX_ SV *sv, int how)
586 MAGIC *mg, *prevmg, *moremg;
587 PERL_ARGS_ASSERT_MG_FREE_TYPE;
588 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
590 moremg = mg->mg_moremagic;
591 if (mg->mg_type == how) {
592 /* temporarily move to the head of the magic chain, in case
593 custom free code relies on this historical aspect of mg_free */
595 prevmg->mg_moremagic = moremg;
596 mg->mg_moremagic = SvMAGIC(sv);
599 newhead = mg->mg_moremagic;
600 mg_free_struct(sv, mg);
601 SvMAGIC_set(sv, newhead);
611 Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
616 PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT;
619 const REGEXP * const rx = PM_GETRE(PL_curpm);
621 if (mg->mg_obj) { /* @+ */
622 /* return the number possible */
623 return RX_NPARENS(rx);
625 I32 paren = RX_LASTPAREN(rx);
627 /* return the last filled */
629 && (RX_OFFS(rx)[paren].start == -1
630 || RX_OFFS(rx)[paren].end == -1) )
643 Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
647 PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET;
650 const REGEXP * const rx = PM_GETRE(PL_curpm);
652 const I32 paren = mg->mg_len;
657 if (paren <= (I32)RX_NPARENS(rx) &&
658 (s = RX_OFFS(rx)[paren].start) != -1 &&
659 (t = RX_OFFS(rx)[paren].end) != -1)
662 if (mg->mg_obj) /* @+ */
667 if (i > 0 && RX_MATCH_UTF8(rx)) {
668 const char * const b = RX_SUBBEG(rx);
670 i = RX_SUBCOFFSET(rx) +
672 (U8*)(b-RX_SUBOFFSET(rx)+i));
685 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
687 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
690 Perl_croak_no_modify(aTHX);
691 NORETURN_FUNCTION_END;
695 Perl_magic_len(pTHX_ SV *sv, MAGIC *mg)
701 const char * const remaining = mg->mg_ptr + 1;
703 PERL_ARGS_ASSERT_MAGIC_LEN;
705 switch (*mg->mg_ptr) {
707 if (*remaining == '\0') { /* ^P */
709 } else if (strEQ(remaining, "REMATCH")) { /* $^PREMATCH */
711 } else if (strEQ(remaining, "OSTMATCH")) { /* $^POSTMATCH */
715 case '\015': /* $^MATCH */
716 if (strEQ(remaining, "ATCH")) {
723 paren = RX_BUFF_IDX_PREMATCH;
727 paren = RX_BUFF_IDX_POSTMATCH;
731 paren = RX_BUFF_IDX_FULLMATCH;
733 case '1': case '2': case '3': case '4':
734 case '5': case '6': case '7': case '8': case '9':
735 paren = atoi(mg->mg_ptr);
737 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
739 i = CALLREG_NUMBUF_LENGTH((REGEXP * const)rx, sv, paren);
742 Perl_croak(aTHX_ "panic: magic_len: %"IVdf, (IV)i);
745 if (ckWARN(WARN_UNINITIALIZED))
750 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
751 paren = RX_LASTPAREN(rx);
756 case '\016': /* ^N */
757 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
758 paren = RX_LASTCLOSEPAREN(rx);
765 if (!SvPOK(sv) && SvNIOK(sv)) {
773 #define SvRTRIM(sv) STMT_START { \
775 STRLEN len = SvCUR(sv); \
776 char * const p = SvPVX(sv); \
777 while (len > 0 && isSPACE(p[len-1])) \
779 SvCUR_set(sv, len); \
785 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
787 PERL_ARGS_ASSERT_EMULATE_COP_IO;
789 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
790 sv_setsv(sv, &PL_sv_undef);
794 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
795 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
800 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
801 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
814 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
818 const char *s = NULL;
820 const char * const remaining = mg->mg_ptr + 1;
821 const char nextchar = *remaining;
823 PERL_ARGS_ASSERT_MAGIC_GET;
825 switch (*mg->mg_ptr) {
826 case '\001': /* ^A */
827 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
828 else sv_setsv(sv, &PL_sv_undef);
829 if (SvTAINTED(PL_bodytarget))
832 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
833 if (nextchar == '\0') {
834 sv_setiv(sv, (IV)PL_minus_c);
836 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
837 sv_setiv(sv, (IV)STATUS_NATIVE);
841 case '\004': /* ^D */
842 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
844 case '\005': /* ^E */
845 if (nextchar == '\0') {
849 $DESCRIPTOR(msgdsc,msg);
850 sv_setnv(sv,(NV) vaxc$errno);
851 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
852 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
857 if (!(_emx_env & 0x200)) { /* Under DOS */
858 sv_setnv(sv, (NV)errno);
859 sv_setpv(sv, errno ? Strerror(errno) : "");
861 if (errno != errno_isOS2) {
862 const int tmp = _syserrno();
863 if (tmp) /* 2nd call to _syserrno() makes it 0 */
866 sv_setnv(sv, (NV)Perl_rc);
867 sv_setpv(sv, os2error(Perl_rc));
871 const DWORD dwErr = GetLastError();
872 sv_setnv(sv, (NV)dwErr);
874 PerlProc_GetOSError(sv, dwErr);
883 sv_setnv(sv, (NV)errno);
884 sv_setpv(sv, errno ? Strerror(errno) : "");
889 SvNOK_on(sv); /* what a wonderful hack! */
891 else if (strEQ(remaining, "NCODING"))
892 sv_setsv(sv, PL_encoding);
894 case '\006': /* ^F */
895 sv_setiv(sv, (IV)PL_maxsysfd);
897 case '\007': /* ^GLOBAL_PHASE */
898 if (strEQ(remaining, "LOBAL_PHASE")) {
899 sv_setpvn(sv, PL_phase_names[PL_phase],
900 strlen(PL_phase_names[PL_phase]));
903 case '\010': /* ^H */
904 sv_setiv(sv, (IV)PL_hints);
906 case '\011': /* ^I */ /* NOT \t in EBCDIC */
907 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
909 case '\014': /* ^LAST_FH */
910 if (strEQ(remaining, "AST_FH")) {
912 assert(isGV_with_GP(PL_last_in_gv));
913 SV_CHECK_THINKFIRST_COW_DROP(sv);
914 prepare_SV_for_RV(sv);
916 SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv));
920 else sv_setsv_nomg(sv, NULL);
923 case '\017': /* ^O & ^OPEN */
924 if (nextchar == '\0') {
925 sv_setpv(sv, PL_osname);
928 else if (strEQ(remaining, "PEN")) {
929 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
933 if (nextchar == '\0') { /* ^P */
934 sv_setiv(sv, (IV)PL_perldb);
935 } else if (strEQ(remaining, "REMATCH")) { /* $^PREMATCH */
937 paren = RX_BUFF_IDX_CARET_PREMATCH;
938 goto do_numbuf_fetch;
939 } else if (strEQ(remaining, "OSTMATCH")) { /* $^POSTMATCH */
940 paren = RX_BUFF_IDX_CARET_POSTMATCH;
941 goto do_numbuf_fetch;
944 case '\023': /* ^S */
945 if (nextchar == '\0') {
946 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
949 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
954 case '\024': /* ^T */
955 if (nextchar == '\0') {
957 sv_setnv(sv, PL_basetime);
959 sv_setiv(sv, (IV)PL_basetime);
962 else if (strEQ(remaining, "AINT"))
963 sv_setiv(sv, PL_tainting
964 ? (PL_taint_warn || PL_unsafe ? -1 : 1)
967 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
968 if (strEQ(remaining, "NICODE"))
969 sv_setuv(sv, (UV) PL_unicode);
970 else if (strEQ(remaining, "TF8LOCALE"))
971 sv_setuv(sv, (UV) PL_utf8locale);
972 else if (strEQ(remaining, "TF8CACHE"))
973 sv_setiv(sv, (IV) PL_utf8cache);
975 case '\027': /* ^W & $^WARNING_BITS */
976 if (nextchar == '\0')
977 sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE));
978 else if (strEQ(remaining, "ARNING_BITS")) {
979 if (PL_compiling.cop_warnings == pWARN_NONE) {
980 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
982 else if (PL_compiling.cop_warnings == pWARN_STD) {
983 sv_setsv(sv, &PL_sv_undef);
986 else if (PL_compiling.cop_warnings == pWARN_ALL) {
987 /* Get the bit mask for $warnings::Bits{all}, because
988 * it could have been extended by warnings::register */
989 HV * const bits = get_hv("warnings::Bits", 0);
990 SV ** const bits_all = bits ? hv_fetchs(bits, "all", FALSE) : NULL;
992 sv_copypv(sv, *bits_all);
994 sv_setpvn(sv, WARN_ALLstring, WARNsize);
997 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
998 *PL_compiling.cop_warnings);
1002 case '\015': /* $^MATCH */
1003 if (strEQ(remaining, "ATCH")) {
1004 paren = RX_BUFF_IDX_CARET_FULLMATCH;
1005 goto do_numbuf_fetch;
1008 case '1': case '2': case '3': case '4':
1009 case '5': case '6': case '7': case '8': case '9': case '&':
1011 * Pre-threads, this was paren = atoi(GvENAME((const GV *)mg->mg_obj));
1012 * XXX Does the new way break anything?
1014 paren = atoi(mg->mg_ptr); /* $& is in [0] */
1016 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1017 CALLREG_NUMBUF_FETCH(rx,paren,sv);
1020 sv_setsv(sv,&PL_sv_undef);
1023 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1024 paren = RX_LASTPAREN(rx);
1026 goto do_numbuf_fetch;
1028 sv_setsv(sv,&PL_sv_undef);
1030 case '\016': /* ^N */
1031 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1032 paren = RX_LASTCLOSEPAREN(rx);
1034 goto do_numbuf_fetch;
1036 sv_setsv(sv,&PL_sv_undef);
1039 paren = RX_BUFF_IDX_PREMATCH;
1040 goto do_numbuf_fetch;
1042 paren = RX_BUFF_IDX_POSTMATCH;
1043 goto do_numbuf_fetch;
1045 if (GvIO(PL_last_in_gv)) {
1046 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1051 sv_setiv(sv, (IV)STATUS_CURRENT);
1052 #ifdef COMPLEX_STATUS
1053 SvUPGRADE(sv, SVt_PVLV);
1054 LvTARGOFF(sv) = PL_statusvalue;
1055 LvTARGLEN(sv) = PL_statusvalue_vms;
1060 if (GvIOp(PL_defoutgv))
1061 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1065 sv_setpv(sv,GvENAME(PL_defoutgv));
1066 sv_catpvs(sv,"_TOP");
1070 if (GvIOp(PL_defoutgv))
1071 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1073 s = GvENAME(PL_defoutgv);
1077 if (GvIO(PL_defoutgv))
1078 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1081 if (GvIO(PL_defoutgv))
1082 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1085 if (GvIO(PL_defoutgv))
1086 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1096 if (GvIO(PL_defoutgv))
1097 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1101 sv_copypv(sv, PL_ors_sv);
1103 sv_setsv(sv, &PL_sv_undef);
1107 IV const pid = (IV)PerlProc_getpid();
1108 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1109 /* never set manually, or at least not since last fork */
1111 /* never unsafe, even if reading in a tainted expression */
1114 /* else a value has been assigned manually, so do nothing */
1122 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
1124 sv_setnv(sv, (NV)errno);
1127 if (errno == errno_isOS2 || errno == errno_isOS2_set)
1128 sv_setpv(sv, os2error(Perl_rc));
1131 sv_setpv(sv, errno ? Strerror(errno) : "");
1136 SvNOK_on(sv); /* what a wonderful hack! */
1139 sv_setiv(sv, (IV)PerlProc_getuid());
1142 sv_setiv(sv, (IV)PerlProc_geteuid());
1145 sv_setiv(sv, (IV)PerlProc_getgid());
1148 sv_setiv(sv, (IV)PerlProc_getegid());
1150 #ifdef HAS_GETGROUPS
1152 Groups_t *gary = NULL;
1153 I32 i, num_groups = getgroups(0, gary);
1154 Newx(gary, num_groups, Groups_t);
1155 num_groups = getgroups(num_groups, gary);
1156 for (i = 0; i < num_groups; i++)
1157 Perl_sv_catpvf(aTHX_ sv, " %"IVdf, (IV)gary[i]);
1160 (void)SvIOK_on(sv); /* what a wonderful hack! */
1170 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1172 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1174 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1176 if (uf && uf->uf_val)
1177 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1182 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1185 STRLEN len = 0, klen;
1186 const char * const key = MgPV_const(mg,klen);
1187 const char *s = NULL;
1189 PERL_ARGS_ASSERT_MAGIC_SETENV;
1193 /* defined environment variables are byte strings; unfortunately
1194 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1195 (void)SvPV_force_nomg_nolen(sv);
1196 sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1198 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1204 my_setenv(key, s); /* does the deed */
1206 #ifdef DYNAMIC_ENV_FETCH
1207 /* We just undefd an environment var. Is a replacement */
1208 /* waiting in the wings? */
1210 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1212 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1216 #if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
1217 /* And you'll never guess what the dog had */
1218 /* in its mouth... */
1220 MgTAINTEDDIR_off(mg);
1222 if (s && klen == 8 && strEQ(key, "DCL$PATH")) {
1223 char pathbuf[256], eltbuf[256], *cp, *elt;
1226 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1228 do { /* DCL$PATH may be a search list */
1229 while (1) { /* as may dev portion of any element */
1230 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1231 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1232 cando_by_name(S_IWUSR,0,elt) ) {
1233 MgTAINTEDDIR_on(mg);
1237 if ((cp = strchr(elt, ':')) != NULL)
1239 if (my_trnlnm(elt, eltbuf, j++))
1245 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1248 if (s && klen == 4 && strEQ(key,"PATH")) {
1249 const char * const strend = s + len;
1251 while (s < strend) {
1255 #ifdef VMS /* Hmm. How do we get $Config{path_sep} from C? */
1256 const char path_sep = '|';
1258 const char path_sep = ':';
1260 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf,
1261 s, strend, path_sep, &i);
1263 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1265 || !strchr(tmpbuf, ':') /* no colon thus no device name -- assume relative path */
1267 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1269 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1270 MgTAINTEDDIR_on(mg);
1276 #endif /* neither OS2 nor AMIGAOS nor WIN32 nor MSDOS */
1282 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1284 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1285 PERL_UNUSED_ARG(sv);
1286 my_setenv(MgPV_nolen_const(mg),NULL);
1291 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1294 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1295 PERL_UNUSED_ARG(mg);
1297 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1299 if (PL_localizing) {
1302 hv_iterinit(MUTABLE_HV(sv));
1303 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1305 my_setenv(hv_iterkey(entry, &keylen),
1306 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1314 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1317 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1318 PERL_UNUSED_ARG(sv);
1319 PERL_UNUSED_ARG(mg);
1321 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1329 #ifdef HAS_SIGPROCMASK
1331 restore_sigmask(pTHX_ SV *save_sv)
1333 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1334 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1338 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1341 /* Are we fetching a signal entry? */
1342 int i = (I16)mg->mg_private;
1344 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1348 const char * sig = MgPV_const(mg, siglen);
1349 mg->mg_private = i = whichsig_pvn(sig, siglen);
1354 sv_setsv(sv,PL_psig_ptr[i]);
1356 Sighandler_t sigstate = rsignal_state(i);
1357 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1358 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1361 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1362 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1365 /* cache state so we don't fetch it again */
1366 if(sigstate == (Sighandler_t) SIG_IGN)
1367 sv_setpvs(sv,"IGNORE");
1369 sv_setsv(sv,&PL_sv_undef);
1370 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1377 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1379 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1381 magic_setsig(NULL, mg);
1382 return sv_unmagic(sv, mg->mg_type);
1386 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1387 Perl_csighandler(int sig, siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1389 Perl_csighandler(int sig)
1392 #ifdef PERL_GET_SIG_CONTEXT
1393 dTHXa(PERL_GET_SIG_CONTEXT);
1397 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1398 (void) rsignal(sig, PL_csighandlerp);
1399 if (PL_sig_ignoring[sig]) return;
1401 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1402 if (PL_sig_defaulting[sig])
1403 #ifdef KILL_BY_SIGPRC
1404 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1419 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1420 /* Call the perl level handler now--
1421 * with risk we may be in malloc() or being destructed etc. */
1422 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1423 (*PL_sighandlerp)(sig, NULL, NULL);
1425 (*PL_sighandlerp)(sig);
1428 if (!PL_psig_pend) return;
1429 /* Set a flag to say this signal is pending, that is awaiting delivery after
1430 * the current Perl opcode completes */
1431 PL_psig_pend[sig]++;
1433 #ifndef SIG_PENDING_DIE_COUNT
1434 # define SIG_PENDING_DIE_COUNT 120
1436 /* Add one to say _a_ signal is pending */
1437 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1438 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1439 (unsigned long)SIG_PENDING_DIE_COUNT);
1443 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1445 Perl_csighandler_init(void)
1448 if (PL_sig_handlers_initted) return;
1450 for (sig = 1; sig < SIG_SIZE; sig++) {
1451 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1453 PL_sig_defaulting[sig] = 1;
1454 (void) rsignal(sig, PL_csighandlerp);
1456 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1457 PL_sig_ignoring[sig] = 0;
1460 PL_sig_handlers_initted = 1;
1464 #if defined HAS_SIGPROCMASK
1466 unblock_sigmask(pTHX_ void* newset)
1468 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1473 Perl_despatch_signals(pTHX)
1478 for (sig = 1; sig < SIG_SIZE; sig++) {
1479 if (PL_psig_pend[sig]) {
1481 #ifdef HAS_SIGPROCMASK
1482 /* From sigaction(2) (FreeBSD man page):
1483 * | Signal routines normally execute with the signal that
1484 * | caused their invocation blocked, but other signals may
1486 * Emulation of this behavior (from within Perl) is enabled
1490 sigset_t newset, oldset;
1492 sigemptyset(&newset);
1493 sigaddset(&newset, sig);
1494 sigprocmask(SIG_BLOCK, &newset, &oldset);
1495 was_blocked = sigismember(&oldset, sig);
1497 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1499 SAVEFREESV(save_sv);
1500 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1503 PL_psig_pend[sig] = 0;
1504 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1505 (*PL_sighandlerp)(sig, NULL, NULL);
1507 (*PL_sighandlerp)(sig);
1509 #ifdef HAS_SIGPROCMASK
1518 /* sv of NULL signifies that we're acting as magic_clearsig. */
1520 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1525 /* Need to be careful with SvREFCNT_dec(), because that can have side
1526 * effects (due to closures). We must make sure that the new disposition
1527 * is in place before it is called.
1531 #ifdef HAS_SIGPROCMASK
1535 const char *s = MgPV_const(mg,len);
1537 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1540 if (memEQs(s, len, "__DIE__"))
1542 else if (memEQs(s, len, "__WARN__")
1543 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1544 /* Merge the existing behaviours, which are as follows:
1545 magic_setsig, we always set svp to &PL_warnhook
1546 (hence we always change the warnings handler)
1547 For magic_clearsig, we don't change the warnings handler if it's
1548 set to the &PL_warnhook. */
1551 SV *tmp = sv_newmortal();
1552 Perl_croak(aTHX_ "No such hook: %s",
1553 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1557 if (*svp != PERL_WARNHOOK_FATAL)
1563 i = (I16)mg->mg_private;
1565 i = whichsig_pvn(s, len); /* ...no, a brick */
1566 mg->mg_private = (U16)i;
1570 SV *tmp = sv_newmortal();
1571 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1572 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1576 #ifdef HAS_SIGPROCMASK
1577 /* Avoid having the signal arrive at a bad time, if possible. */
1580 sigprocmask(SIG_BLOCK, &set, &save);
1582 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1583 SAVEFREESV(save_sv);
1584 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1587 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1588 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1590 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1591 PL_sig_ignoring[i] = 0;
1593 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1594 PL_sig_defaulting[i] = 0;
1596 to_dec = PL_psig_ptr[i];
1598 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1599 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1601 /* Signals don't change name during the program's execution, so once
1602 they're cached in the appropriate slot of PL_psig_name, they can
1605 Ideally we'd find some way of making SVs at (C) compile time, or
1606 at least, doing most of the work. */
1607 if (!PL_psig_name[i]) {
1608 PL_psig_name[i] = newSVpvn(s, len);
1609 SvREADONLY_on(PL_psig_name[i]);
1612 SvREFCNT_dec(PL_psig_name[i]);
1613 PL_psig_name[i] = NULL;
1614 PL_psig_ptr[i] = NULL;
1617 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1619 (void)rsignal(i, PL_csighandlerp);
1622 *svp = SvREFCNT_inc_simple_NN(sv);
1624 if (sv && SvOK(sv)) {
1625 s = SvPV_force(sv, len);
1629 if (sv && memEQs(s, len,"IGNORE")) {
1631 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1632 PL_sig_ignoring[i] = 1;
1633 (void)rsignal(i, PL_csighandlerp);
1635 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1639 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1641 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1642 PL_sig_defaulting[i] = 1;
1643 (void)rsignal(i, PL_csighandlerp);
1645 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1651 * We should warn if HINT_STRICT_REFS, but without
1652 * access to a known hint bit in a known OP, we can't
1653 * tell whether HINT_STRICT_REFS is in force or not.
1655 if (!strchr(s,':') && !strchr(s,'\''))
1656 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1659 (void)rsignal(i, PL_csighandlerp);
1661 *svp = SvREFCNT_inc_simple_NN(sv);
1665 #ifdef HAS_SIGPROCMASK
1669 SvREFCNT_dec(to_dec);
1672 #endif /* !PERL_MICRO */
1675 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1678 PERL_ARGS_ASSERT_MAGIC_SETISA;
1679 PERL_UNUSED_ARG(sv);
1681 /* Skip _isaelem because _isa will handle it shortly */
1682 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1685 return magic_clearisa(NULL, mg);
1688 /* sv of NULL signifies that we're acting as magic_setisa. */
1690 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1695 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1697 /* Bail out if destruction is going on */
1698 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1701 av_clear(MUTABLE_AV(sv));
1703 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1704 /* This occurs with setisa_elem magic, which calls this
1706 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1708 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1709 SV **svp = AvARRAY((AV *)mg->mg_obj);
1710 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1712 stash = GvSTASH((GV *)*svp++);
1713 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1720 (const GV *)mg->mg_obj
1723 /* The stash may have been detached from the symbol table, so check its
1724 name before doing anything. */
1725 if (stash && HvENAME_get(stash))
1726 mro_isa_changed_in(stash);
1732 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1734 HV * const hv = MUTABLE_HV(LvTARG(sv));
1737 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1738 PERL_UNUSED_ARG(mg);
1741 (void) hv_iterinit(hv);
1742 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1745 while (hv_iternext(hv))
1750 sv_setiv(sv, (IV)i);
1755 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1757 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1758 PERL_UNUSED_ARG(mg);
1760 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1766 =for apidoc magic_methcall
1768 Invoke a magic method (like FETCH).
1770 C<sv> and C<mg> are the tied thingy and the tie magic.
1772 C<meth> is the name of the method to call.
1774 C<argc> is the number of args (in addition to $self) to pass to the method.
1776 The C<flags> can be:
1778 G_DISCARD invoke method with G_DISCARD flag and don't
1780 G_UNDEF_FILL fill the stack with argc pointers to
1783 The arguments themselves are any values following the C<flags> argument.
1785 Returns the SV (if any) returned by the method, or NULL on failure.
1792 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, const char *meth, U32 flags,
1799 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1803 if (flags & G_WRITING_TO_STDERR) {
1807 SAVESPTR(PL_stderrgv);
1811 PUSHSTACKi(PERLSI_MAGIC);
1815 PUSHs(SvTIED_obj(sv, mg));
1816 if (flags & G_UNDEF_FILL) {
1818 PUSHs(&PL_sv_undef);
1820 } else if (argc > 0) {
1822 va_start(args, argc);
1825 SV *const sv = va_arg(args, SV *);
1832 if (flags & G_DISCARD) {
1833 call_method(meth, G_SCALAR|G_DISCARD);
1836 if (call_method(meth, G_SCALAR))
1837 ret = *PL_stack_sp--;
1840 if (flags & G_WRITING_TO_STDERR)
1847 /* wrapper for magic_methcall that creates the first arg */
1850 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, const char *meth, U32 flags,
1856 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
1859 if (mg->mg_len >= 0) {
1860 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
1862 else if (mg->mg_len == HEf_SVKEY)
1863 arg1 = MUTABLE_SV(mg->mg_ptr);
1865 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
1866 arg1 = newSViv((IV)(mg->mg_len));
1870 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
1872 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
1876 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, const char *meth)
1881 PERL_ARGS_ASSERT_MAGIC_METHPACK;
1883 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
1890 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
1892 PERL_ARGS_ASSERT_MAGIC_GETPACK;
1894 if (mg->mg_type == PERL_MAGIC_tiedelem)
1895 mg->mg_flags |= MGf_GSKIP;
1896 magic_methpack(sv,mg,"FETCH");
1901 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
1907 PERL_ARGS_ASSERT_MAGIC_SETPACK;
1909 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
1910 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
1911 * public flags indicate its value based on copying from $val. Doing
1912 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
1913 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
1914 * wrong if $val happened to be tainted, as sv hasn't got magic
1915 * enabled, even though taint magic is in the chain. In which case,
1916 * fake up a temporary tainted value (this is easier than temporarily
1917 * re-enabling magic on sv). */
1919 if (PL_tainting && (tmg = mg_find(sv, PERL_MAGIC_taint))
1920 && (tmg->mg_len & 1))
1922 val = sv_mortalcopy(sv);
1928 magic_methcall1(sv, mg, "STORE", G_DISCARD, 2, val);
1933 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
1935 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
1937 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
1938 return magic_methpack(sv,mg,"DELETE");
1943 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
1949 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
1951 retsv = magic_methcall1(sv, mg, "FETCHSIZE", 0, 1, NULL);
1953 retval = SvIV(retsv)-1;
1955 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
1957 return (U32) retval;
1961 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
1965 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
1967 Perl_magic_methcall(aTHX_ sv, mg, "CLEAR", G_DISCARD, 0);
1972 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
1977 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
1979 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, "NEXTKEY", 0, 1, key)
1980 : Perl_magic_methcall(aTHX_ sv, mg, "FIRSTKEY", 0, 0);
1987 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
1989 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
1991 return magic_methpack(sv,mg,"EXISTS");
1995 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
1999 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
2000 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
2002 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
2004 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
2006 if (HvEITER_get(hv))
2007 /* we are in an iteration so the hash cannot be empty */
2009 /* no xhv_eiter so now use FIRSTKEY */
2010 key = sv_newmortal();
2011 magic_nextpack(MUTABLE_SV(hv), mg, key);
2012 HvEITER_set(hv, NULL); /* need to reset iterator */
2013 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
2016 /* there is a SCALAR method that we can call */
2017 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, "SCALAR", 0, 0);
2019 retval = &PL_sv_undef;
2024 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
2027 GV * const gv = PL_DBline;
2028 const I32 i = SvTRUE(sv);
2029 SV ** const svp = av_fetch(GvAV(gv),
2030 atoi(MgPV_nolen_const(mg)), FALSE);
2032 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
2034 if (svp && SvIOKp(*svp)) {
2035 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2037 #ifdef PERL_DEBUG_READONLY_OPS
2038 Slab_to_rw(OpSLAB(o));
2040 /* set or clear breakpoint in the relevant control op */
2042 o->op_flags |= OPf_SPECIAL;
2044 o->op_flags &= ~OPf_SPECIAL;
2045 #ifdef PERL_DEBUG_READONLY_OPS
2046 Slab_to_ro(OpSLAB(o));
2054 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2057 AV * const obj = MUTABLE_AV(mg->mg_obj);
2059 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2062 sv_setiv(sv, AvFILL(obj));
2070 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2073 AV * const obj = MUTABLE_AV(mg->mg_obj);
2075 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2078 av_fill(obj, SvIV(sv));
2080 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2081 "Attempt to set length of freed array");
2087 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2091 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2092 PERL_UNUSED_ARG(sv);
2094 /* Reset the iterator when the array is cleared */
2095 #if IVSIZE == I32SIZE
2096 *((IV *) &(mg->mg_len)) = 0;
2099 *((IV *) mg->mg_ptr) = 0;
2106 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2110 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2111 PERL_UNUSED_ARG(sv);
2113 /* during global destruction, mg_obj may already have been freed */
2114 if (PL_in_clean_all)
2117 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2120 /* arylen scalar holds a pointer back to the array, but doesn't own a
2121 reference. Hence the we (the array) are about to go away with it
2122 still pointing at us. Clear its pointer, else it would be pointing
2123 at free memory. See the comment in sv_magic about reference loops,
2124 and why it can't own a reference to us. */
2131 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2134 SV* const lsv = LvTARG(sv);
2136 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2137 PERL_UNUSED_ARG(mg);
2139 if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv)) {
2140 MAGIC * const found = mg_find(lsv, PERL_MAGIC_regex_global);
2141 if (found && found->mg_len >= 0) {
2142 I32 i = found->mg_len;
2144 sv_pos_b2u(lsv, &i);
2154 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2157 SV* const lsv = LvTARG(sv);
2163 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2164 PERL_UNUSED_ARG(mg);
2166 if (SvTYPE(lsv) >= SVt_PVMG && SvMAGIC(lsv))
2167 found = mg_find(lsv, PERL_MAGIC_regex_global);
2173 #ifdef PERL_OLD_COPY_ON_WRITE
2175 sv_force_normal_flags(lsv, 0);
2177 found = sv_magicext(lsv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
2180 else if (!SvOK(sv)) {
2184 len = SvPOK_nog(lsv) ? SvCUR(lsv) : sv_len(lsv);
2189 ulen = sv_len_utf8_nomg(lsv);
2199 else if (pos > (SSize_t)len)
2203 pos = sv_pos_u2b_flags(lsv, pos, 0, 0);
2206 found->mg_len = pos;
2207 found->mg_flags &= ~MGf_MINMATCH;
2213 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2216 SV * const lsv = LvTARG(sv);
2217 const char * const tmps = SvPV_const(lsv,len);
2218 STRLEN offs = LvTARGOFF(sv);
2219 STRLEN rem = LvTARGLEN(sv);
2220 const bool negoff = LvFLAGS(sv) & 1;
2221 const bool negrem = LvFLAGS(sv) & 2;
2223 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2224 PERL_UNUSED_ARG(mg);
2226 if (!translate_substr_offsets(
2227 SvUTF8(lsv) ? sv_len_utf8_nomg(lsv) : len,
2228 negoff ? -(IV)offs : (IV)offs, !negoff,
2229 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2231 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2232 sv_setsv_nomg(sv, &PL_sv_undef);
2237 offs = sv_pos_u2b_flags(lsv, offs, &rem, SV_CONST_RETURN);
2238 sv_setpvn(sv, tmps + offs, rem);
2245 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2248 STRLEN len, lsv_len, oldtarglen, newtarglen;
2249 const char * const tmps = SvPV_const(sv, len);
2250 SV * const lsv = LvTARG(sv);
2251 STRLEN lvoff = LvTARGOFF(sv);
2252 STRLEN lvlen = LvTARGLEN(sv);
2253 const bool negoff = LvFLAGS(sv) & 1;
2254 const bool neglen = LvFLAGS(sv) & 2;
2256 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2257 PERL_UNUSED_ARG(mg);
2261 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2262 "Attempt to use reference as lvalue in substr"
2264 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2265 else (void)SvPV_nomg(lsv,lsv_len);
2266 if (!translate_substr_offsets(
2268 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2269 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2271 Perl_croak(aTHX_ "substr outside of string");
2274 sv_utf8_upgrade(lsv);
2275 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2276 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2277 newtarglen = sv_len_utf8(sv);
2280 else if (lsv && SvUTF8(lsv)) {
2282 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2284 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2285 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2289 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2292 if (!neglen) LvTARGLEN(sv) = newtarglen;
2293 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2299 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2303 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2304 PERL_UNUSED_ARG(sv);
2306 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
2311 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2315 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2316 PERL_UNUSED_ARG(sv);
2318 /* update taint status */
2327 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2329 SV * const lsv = LvTARG(sv);
2331 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2332 PERL_UNUSED_ARG(mg);
2335 sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2343 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2345 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2346 PERL_UNUSED_ARG(mg);
2347 do_vecset(sv); /* XXX slurp this routine */
2352 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2357 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2359 if (LvTARGLEN(sv)) {
2361 SV * const ahv = LvTARG(sv);
2362 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2367 AV *const av = MUTABLE_AV(LvTARG(sv));
2368 if ((I32)LvTARGOFF(sv) <= AvFILL(av))
2369 targ = AvARRAY(av)[LvTARGOFF(sv)];
2371 if (targ && (targ != &PL_sv_undef)) {
2372 /* somebody else defined it for us */
2373 SvREFCNT_dec(LvTARG(sv));
2374 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2376 SvREFCNT_dec(mg->mg_obj);
2378 mg->mg_flags &= ~MGf_REFCOUNTED;
2383 sv_setsv(sv, targ ? targ : &PL_sv_undef);
2388 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2390 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2391 PERL_UNUSED_ARG(mg);
2395 sv_setsv(LvTARG(sv), sv);
2396 SvSETMAGIC(LvTARG(sv));
2402 Perl_vivify_defelem(pTHX_ SV *sv)
2408 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2410 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2413 SV * const ahv = LvTARG(sv);
2414 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2417 if (!value || value == &PL_sv_undef)
2418 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2421 AV *const av = MUTABLE_AV(LvTARG(sv));
2422 if ((I32)LvTARGLEN(sv) < 0 && (I32)LvTARGOFF(sv) > AvFILL(av))
2423 LvTARG(sv) = NULL; /* array can't be extended */
2425 SV* const * const svp = av_fetch(av, LvTARGOFF(sv), TRUE);
2426 if (!svp || (value = *svp) == &PL_sv_undef)
2427 Perl_croak(aTHX_ PL_no_aelem, (I32)LvTARGOFF(sv));
2430 SvREFCNT_inc_simple_void(value);
2431 SvREFCNT_dec(LvTARG(sv));
2434 SvREFCNT_dec(mg->mg_obj);
2436 mg->mg_flags &= ~MGf_REFCOUNTED;
2440 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2442 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2443 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2448 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2450 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2451 PERL_UNUSED_CONTEXT;
2452 PERL_UNUSED_ARG(sv);
2458 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2460 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2462 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2464 if (uf && uf->uf_set)
2465 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2470 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2472 const char type = mg->mg_type;
2474 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2476 if (type == PERL_MAGIC_qr) {
2477 } else if (type == PERL_MAGIC_bm) {
2481 assert(type == PERL_MAGIC_fm);
2483 return sv_unmagic(sv, type);
2486 #ifdef USE_LOCALE_COLLATE
2488 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2490 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2493 * RenE<eacute> Descartes said "I think not."
2494 * and vanished with a faint plop.
2496 PERL_UNUSED_CONTEXT;
2497 PERL_UNUSED_ARG(sv);
2499 Safefree(mg->mg_ptr);
2505 #endif /* USE_LOCALE_COLLATE */
2507 /* Just clear the UTF-8 cache data. */
2509 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2511 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2512 PERL_UNUSED_CONTEXT;
2513 PERL_UNUSED_ARG(sv);
2514 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2516 mg->mg_len = -1; /* The mg_len holds the len cache. */
2521 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2527 const char * const remaining = mg->mg_ptr + 1;
2532 PERL_ARGS_ASSERT_MAGIC_SET;
2534 switch (*mg->mg_ptr) {
2535 case '\015': /* $^MATCH */
2536 if (strEQ(remaining, "ATCH"))
2538 case '`': /* ${^PREMATCH} caught below */
2540 paren = RX_BUFF_IDX_PREMATCH;
2542 case '\'': /* ${^POSTMATCH} caught below */
2544 paren = RX_BUFF_IDX_POSTMATCH;
2548 paren = RX_BUFF_IDX_FULLMATCH;
2550 case '1': case '2': case '3': case '4':
2551 case '5': case '6': case '7': case '8': case '9':
2552 paren = atoi(mg->mg_ptr);
2554 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2556 CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv);
2558 /* Croak with a READONLY error when a numbered match var is
2559 * set without a previous pattern match. Unless it's C<local $1>
2562 if (!PL_localizing) {
2563 Perl_croak_no_modify(aTHX);
2567 case '\001': /* ^A */
2568 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2569 else SvOK_off(PL_bodytarget);
2570 FmLINES(PL_bodytarget) = 0;
2571 if (SvPOK(PL_bodytarget)) {
2572 char *s = SvPVX(PL_bodytarget);
2573 while ( ((s = strchr(s, '\n'))) ) {
2574 FmLINES(PL_bodytarget)++;
2578 /* mg_set() has temporarily made sv non-magical */
2580 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2581 SvTAINTED_on(PL_bodytarget);
2583 SvTAINTED_off(PL_bodytarget);
2586 case '\003': /* ^C */
2587 PL_minus_c = cBOOL(SvIV(sv));
2590 case '\004': /* ^D */
2592 s = SvPV_nolen_const(sv);
2593 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2594 if (DEBUG_x_TEST || DEBUG_B_TEST)
2595 dump_all_perl(!DEBUG_B_TEST);
2597 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2600 case '\005': /* ^E */
2601 if (*(mg->mg_ptr+1) == '\0') {
2603 set_vaxc_errno(SvIV(sv));
2606 SetLastError( SvIV(sv) );
2609 os2_setsyserrno(SvIV(sv));
2611 /* will anyone ever use this? */
2612 SETERRNO(SvIV(sv), 4);
2617 else if (strEQ(mg->mg_ptr+1, "NCODING")) {
2618 SvREFCNT_dec(PL_encoding);
2619 if (SvOK(sv) || SvGMAGICAL(sv)) {
2620 PL_encoding = newSVsv(sv);
2627 case '\006': /* ^F */
2628 PL_maxsysfd = SvIV(sv);
2630 case '\010': /* ^H */
2631 PL_hints = SvIV(sv);
2633 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2634 Safefree(PL_inplace);
2635 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2637 case '\016': /* ^N */
2638 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2639 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2641 case '\017': /* ^O */
2642 if (*(mg->mg_ptr+1) == '\0') {
2643 Safefree(PL_osname);
2646 TAINT_PROPER("assigning to $^O");
2647 PL_osname = savesvpv(sv);
2650 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2652 const char *const start = SvPV(sv, len);
2653 const char *out = (const char*)memchr(start, '\0', len);
2657 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2658 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2660 /* Opening for input is more common than opening for output, so
2661 ensure that hints for input are sooner on linked list. */
2662 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2664 : newSVpvs_flags("", SvUTF8(sv));
2665 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2668 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2670 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2674 case '\020': /* ^P */
2675 if (*remaining == '\0') { /* ^P */
2676 PL_perldb = SvIV(sv);
2677 if (PL_perldb && !PL_DBsingle)
2680 } else if (strEQ(remaining, "REMATCH")) { /* $^PREMATCH */
2682 } else if (strEQ(remaining, "OSTMATCH")) { /* $^POSTMATCH */
2686 case '\024': /* ^T */
2688 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2690 PL_basetime = (Time_t)SvIV(sv);
2693 case '\025': /* ^UTF8CACHE */
2694 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
2695 PL_utf8cache = (signed char) sv_2iv(sv);
2698 case '\027': /* ^W & $^WARNING_BITS */
2699 if (*(mg->mg_ptr+1) == '\0') {
2700 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2702 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
2703 | (i ? G_WARN_ON : G_WARN_OFF) ;
2706 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
2707 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2709 PL_compiling.cop_warnings = pWARN_STD;
2714 int accumulate = 0 ;
2715 int any_fatals = 0 ;
2716 const char * const ptr = SvPV_const(sv, len) ;
2717 for (i = 0 ; i < len ; ++i) {
2718 accumulate |= ptr[i] ;
2719 any_fatals |= (ptr[i] & 0xAA) ;
2722 if (!specialWARN(PL_compiling.cop_warnings))
2723 PerlMemShared_free(PL_compiling.cop_warnings);
2724 PL_compiling.cop_warnings = pWARN_NONE;
2726 /* Yuck. I can't see how to abstract this: */
2727 else if (isWARN_on(((STRLEN *)SvPV_nolen_const(sv)) - 1,
2728 WARN_ALL) && !any_fatals) {
2729 if (!specialWARN(PL_compiling.cop_warnings))
2730 PerlMemShared_free(PL_compiling.cop_warnings);
2731 PL_compiling.cop_warnings = pWARN_ALL;
2732 PL_dowarn |= G_WARN_ONCE ;
2736 const char *const p = SvPV_const(sv, len);
2738 PL_compiling.cop_warnings
2739 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
2742 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
2743 PL_dowarn |= G_WARN_ONCE ;
2751 if (PL_localizing) {
2752 if (PL_localizing == 1)
2753 SAVESPTR(PL_last_in_gv);
2755 else if (SvOK(sv) && GvIO(PL_last_in_gv))
2756 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
2759 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
2760 s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2761 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2764 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
2765 s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2766 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2769 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
2772 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
2773 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
2774 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
2777 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
2781 IO * const io = GvIO(PL_defoutgv);
2784 if ((SvIV(sv)) == 0)
2785 IoFLAGS(io) &= ~IOf_FLUSH;
2787 if (!(IoFLAGS(io) & IOf_FLUSH)) {
2788 PerlIO *ofp = IoOFP(io);
2790 (void)PerlIO_flush(ofp);
2791 IoFLAGS(io) |= IOf_FLUSH;
2797 SvREFCNT_dec(PL_rs);
2798 PL_rs = newSVsv(sv);
2801 SvREFCNT_dec(PL_ors_sv);
2803 PL_ors_sv = newSVsv(sv);
2811 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
2814 #ifdef COMPLEX_STATUS
2815 if (PL_localizing == 2) {
2816 SvUPGRADE(sv, SVt_PVLV);
2817 PL_statusvalue = LvTARGOFF(sv);
2818 PL_statusvalue_vms = LvTARGLEN(sv);
2822 #ifdef VMSISH_STATUS
2824 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
2827 STATUS_UNIX_EXIT_SET(SvIV(sv));
2832 # define PERL_VMS_BANG vaxc$errno
2834 # define PERL_VMS_BANG 0
2836 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
2837 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2842 const IV new_uid = SvIV(sv);
2843 PL_delaymagic_uid = new_uid;
2844 if (PL_delaymagic) {
2845 PL_delaymagic |= DM_RUID;
2846 break; /* don't do magic till later */
2849 (void)setruid((Uid_t)new_uid);
2852 (void)setreuid((Uid_t)new_uid, (Uid_t)-1);
2854 #ifdef HAS_SETRESUID
2855 (void)setresuid((Uid_t)new_uid, (Uid_t)-1, (Uid_t)-1);
2857 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
2859 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
2860 if (new_uid != 0 && PerlProc_getuid() == 0)
2861 (void)PerlProc_setuid(0);
2863 (void)PerlProc_setuid(new_uid);
2865 Perl_croak(aTHX_ "setruid() not implemented");
2874 const UV new_euid = SvIV(sv);
2875 PL_delaymagic_euid = new_euid;
2876 if (PL_delaymagic) {
2877 PL_delaymagic |= DM_EUID;
2878 break; /* don't do magic till later */
2881 (void)seteuid((Uid_t)new_euid);
2884 (void)setreuid((Uid_t)-1, (Uid_t)new_euid);
2886 #ifdef HAS_SETRESUID
2887 (void)setresuid((Uid_t)-1, (Uid_t)new_euid, (Uid_t)-1);
2889 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
2890 PerlProc_setuid(new_euid);
2892 Perl_croak(aTHX_ "seteuid() not implemented");
2901 const UV new_gid = SvIV(sv);
2902 PL_delaymagic_gid = new_gid;
2903 if (PL_delaymagic) {
2904 PL_delaymagic |= DM_RGID;
2905 break; /* don't do magic till later */
2908 (void)setrgid((Gid_t)new_gid);
2911 (void)setregid((Gid_t)new_gid, (Gid_t)-1);
2913 #ifdef HAS_SETRESGID
2914 (void)setresgid((Gid_t)new_gid, (Gid_t)-1, (Gid_t) -1);
2916 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
2917 (void)PerlProc_setgid(new_gid);
2919 Perl_croak(aTHX_ "setrgid() not implemented");
2929 #ifdef HAS_SETGROUPS
2931 const char *p = SvPV_const(sv, len);
2932 Groups_t *gary = NULL;
2933 #ifdef _SC_NGROUPS_MAX
2934 int maxgrp = sysconf(_SC_NGROUPS_MAX);
2939 int maxgrp = NGROUPS;
2945 for (i = 0; i < maxgrp; ++i) {
2946 while (*p && !isSPACE(*p))
2953 Newx(gary, i + 1, Groups_t);
2955 Renew(gary, i + 1, Groups_t);
2959 (void)setgroups(i, gary);
2962 #else /* HAS_SETGROUPS */
2963 new_egid = SvIV(sv);
2964 #endif /* HAS_SETGROUPS */
2965 PL_delaymagic_egid = new_egid;
2966 if (PL_delaymagic) {
2967 PL_delaymagic |= DM_EGID;
2968 break; /* don't do magic till later */
2971 (void)setegid((Gid_t)new_egid);
2974 (void)setregid((Gid_t)-1, (Gid_t)new_egid);
2976 #ifdef HAS_SETRESGID
2977 (void)setresgid((Gid_t)-1, (Gid_t)new_egid, (Gid_t)-1);
2979 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
2980 (void)PerlProc_setgid(new_egid);
2982 Perl_croak(aTHX_ "setegid() not implemented");
2990 PL_chopset = SvPV_force(sv,len);
2993 /* Store the pid in mg->mg_obj so we can tell when a fork has
2994 occurred. mg->mg_obj points to *$ by default, so clear it. */
2995 if (isGV(mg->mg_obj)) {
2996 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
2997 SvREFCNT_dec(mg->mg_obj);
2998 mg->mg_flags |= MGf_REFCOUNTED;
2999 mg->mg_obj = newSViv((IV)PerlProc_getpid());
3001 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
3004 LOCK_DOLLARZERO_MUTEX;
3005 #ifdef HAS_SETPROCTITLE
3006 /* The BSDs don't show the argv[] in ps(1) output, they
3007 * show a string from the process struct and provide
3008 * the setproctitle() routine to manipulate that. */
3009 if (PL_origalen != 1) {
3010 s = SvPV_const(sv, len);
3011 # if __FreeBSD_version > 410001
3012 /* The leading "-" removes the "perl: " prefix,
3013 * but not the "(perl) suffix from the ps(1)
3014 * output, because that's what ps(1) shows if the
3015 * argv[] is modified. */
3016 setproctitle("-%s", s);
3017 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
3018 /* This doesn't really work if you assume that
3019 * $0 = 'foobar'; will wipe out 'perl' from the $0
3020 * because in ps(1) output the result will be like
3021 * sprintf("perl: %s (perl)", s)
3022 * I guess this is a security feature:
3023 * one (a user process) cannot get rid of the original name.
3025 setproctitle("%s", s);
3028 #elif defined(__hpux) && defined(PSTAT_SETCMD)
3029 if (PL_origalen != 1) {
3031 s = SvPV_const(sv, len);
3032 un.pst_command = (char *)s;
3033 pstat(PSTAT_SETCMD, un, len, 0, 0);
3036 if (PL_origalen > 1) {
3037 /* PL_origalen is set in perl_parse(). */
3038 s = SvPV_force(sv,len);
3039 if (len >= (STRLEN)PL_origalen-1) {
3040 /* Longer than original, will be truncated. We assume that
3041 * PL_origalen bytes are available. */
3042 Copy(s, PL_origargv[0], PL_origalen-1, char);
3045 /* Shorter than original, will be padded. */
3047 /* Special case for Mac OS X: see [perl #38868] */
3050 /* Is the space counterintuitive? Yes.
3051 * (You were expecting \0?)
3052 * Does it work? Seems to. (In Linux 2.4.20 at least.)
3054 const int pad = ' ';
3056 Copy(s, PL_origargv[0], len, char);
3057 PL_origargv[0][len] = 0;
3058 memset(PL_origargv[0] + len + 1,
3059 pad, PL_origalen - len - 1);
3061 PL_origargv[0][PL_origalen-1] = 0;
3062 for (i = 1; i < PL_origargc; i++)
3064 #ifdef HAS_PRCTL_SET_NAME
3065 /* Set the legacy process name in addition to the POSIX name on Linux */
3066 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
3067 /* diag_listed_as: SKIPME */
3068 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
3073 UNLOCK_DOLLARZERO_MUTEX;
3080 Perl_whichsig_sv(pTHX_ SV *sigsv)
3084 PERL_ARGS_ASSERT_WHICHSIG_SV;
3085 PERL_UNUSED_CONTEXT;
3086 sigpv = SvPV_const(sigsv, siglen);
3087 return whichsig_pvn(sigpv, siglen);
3091 Perl_whichsig_pv(pTHX_ const char *sig)
3093 PERL_ARGS_ASSERT_WHICHSIG_PV;
3094 PERL_UNUSED_CONTEXT;
3095 return whichsig_pvn(sig, strlen(sig));
3099 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3103 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3104 PERL_UNUSED_CONTEXT;
3106 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3107 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3108 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3110 if (memEQs(sig, len, "CHLD"))
3114 if (memEQs(sig, len, "CLD"))
3121 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3122 Perl_sighandler(int sig, siginfo_t *sip, void *uap)
3124 Perl_sighandler(int sig)
3127 #ifdef PERL_GET_SIG_CONTEXT
3128 dTHXa(PERL_GET_SIG_CONTEXT);
3135 SV * const tSv = PL_Sv;
3139 XPV * const tXpv = PL_Xpv;
3140 I32 old_ss_ix = PL_savestack_ix;
3141 SV *errsv_save = NULL;
3144 if (!PL_psig_ptr[sig]) {
3145 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3150 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3151 /* Max number of items pushed there is 3*n or 4. We cannot fix
3152 infinity, so we fix 4 (in fact 5): */
3153 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3155 PL_savestack_ix += 5; /* Protect save in progress. */
3156 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3159 /* sv_2cv is too complicated, try a simpler variant first: */
3160 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3161 || SvTYPE(cv) != SVt_PVCV) {
3163 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3166 if (!cv || !CvROOT(cv)) {
3167 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "SIG%s handler \"%s\" not defined.\n",
3168 PL_sig_name[sig], (gv ? GvENAME(gv)
3175 sv = PL_psig_name[sig]
3176 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3177 : newSVpv(PL_sig_name[sig],0);
3181 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3182 /* make sure our assumption about the size of the SAVEs are correct:
3183 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3184 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3187 PUSHSTACKi(PERLSI_SIGNAL);
3190 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3192 struct sigaction oact;
3194 if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3197 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3198 /* The siginfo fields signo, code, errno, pid, uid,
3199 * addr, status, and band are defined by POSIX/SUSv3. */
3200 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3201 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3202 #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. */
3203 hv_stores(sih, "errno", newSViv(sip->si_errno));
3204 hv_stores(sih, "status", newSViv(sip->si_status));
3205 hv_stores(sih, "uid", newSViv(sip->si_uid));
3206 hv_stores(sih, "pid", newSViv(sip->si_pid));
3207 hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3208 hv_stores(sih, "band", newSViv(sip->si_band));
3212 mPUSHp((char *)sip, sizeof(*sip));
3220 errsv_save = newSVsv(ERRSV);
3222 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3225 if (SvTRUE(ERRSV)) {
3226 SvREFCNT_dec(errsv_save);
3228 /* Handler "died", for example to get out of a restart-able read().
3229 * Before we re-do that on its behalf re-enable the signal which was
3230 * blocked by the system when we entered.
3232 #ifdef HAS_SIGPROCMASK
3233 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3239 sigaddset(&set,sig);
3240 sigprocmask(SIG_UNBLOCK, &set, NULL);
3243 /* Not clear if this will work */
3244 (void)rsignal(sig, SIG_IGN);
3245 (void)rsignal(sig, PL_csighandlerp);
3247 #endif /* !PERL_MICRO */
3251 sv_setsv(ERRSV, errsv_save);
3252 SvREFCNT_dec(errsv_save);
3256 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3257 PL_savestack_ix = old_ss_ix;
3260 PL_op = myop; /* Apparently not needed... */
3262 PL_Sv = tSv; /* Restore global temporaries. */
3269 S_restore_magic(pTHX_ const void *p)
3272 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3273 SV* const sv = mgs->mgs_sv;
3279 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3280 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3281 #ifdef PERL_OLD_COPY_ON_WRITE
3282 /* While magic was saved (and off) sv_setsv may well have seen
3283 this SV as a prime candidate for COW. */
3285 sv_force_normal_flags(sv, 0);
3287 if (mgs->mgs_readonly)
3289 if (mgs->mgs_magical)
3290 SvFLAGS(sv) |= mgs->mgs_magical;
3295 bumped = mgs->mgs_bumped;
3296 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3298 /* If we're still on top of the stack, pop us off. (That condition
3299 * will be satisfied if restore_magic was called explicitly, but *not*
3300 * if it's being called via leave_scope.)
3301 * The reason for doing this is that otherwise, things like sv_2cv()
3302 * may leave alloc gunk on the savestack, and some code
3303 * (e.g. sighandler) doesn't expect that...
3305 if (PL_savestack_ix == mgs->mgs_ss_ix)
3307 UV popval = SSPOPUV;
3308 assert(popval == SAVEt_DESTRUCTOR_X);
3309 PL_savestack_ix -= 2;
3311 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3312 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3315 if (SvREFCNT(sv) == 1) {
3316 /* We hold the last reference to this SV, which implies that the
3317 SV was deleted as a side effect of the routines we called.
3318 So artificially keep it alive a bit longer.
3319 We avoid turning on the TEMP flag, which can cause the SV's
3320 buffer to get stolen (and maybe other stuff). */
3325 SvREFCNT_dec(sv); /* undo the inc in S_save_magic() */
3329 /* clean up the mess created by Perl_sighandler().
3330 * Note that this is only called during an exit in a signal handler;
3331 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3335 S_unwind_handler_stack(pTHX_ const void *p)
3340 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3344 =for apidoc magic_sethint
3346 Triggered by a store to %^H, records the key/value pair to
3347 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3348 anything that would need a deep copy. Maybe we should warn if we find a
3354 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3357 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3358 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3360 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3362 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3363 an alternative leaf in there, with PL_compiling.cop_hints being used if
3364 it's NULL. If needed for threads, the alternative could lock a mutex,
3365 or take other more complex action. */
3367 /* Something changed in %^H, so it will need to be restored on scope exit.
3368 Doing this here saves a lot of doing it manually in perl code (and
3369 forgetting to do it, and consequent subtle errors. */
3370 PL_hints |= HINT_LOCALIZE_HH;
3371 CopHINTHASH_set(&PL_compiling,
3372 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3377 =for apidoc magic_clearhint
3379 Triggered by a delete from %^H, records the key to
3380 C<PL_compiling.cop_hints_hash>.
3385 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3389 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3390 PERL_UNUSED_ARG(sv);
3392 PL_hints |= HINT_LOCALIZE_HH;
3393 CopHINTHASH_set(&PL_compiling,
3394 mg->mg_len == HEf_SVKEY
3395 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3396 MUTABLE_SV(mg->mg_ptr), 0, 0)
3397 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3398 mg->mg_ptr, mg->mg_len, 0, 0));
3403 =for apidoc magic_clearhints
3405 Triggered by clearing %^H, resets C<PL_compiling.cop_hints_hash>.
3410 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3412 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3413 PERL_UNUSED_ARG(sv);
3414 PERL_UNUSED_ARG(mg);
3415 cophh_free(CopHINTHASH_get(&PL_compiling));
3416 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3421 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3422 const char *name, I32 namlen)
3426 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3427 PERL_UNUSED_ARG(sv);
3428 PERL_UNUSED_ARG(name);
3429 PERL_UNUSED_ARG(namlen);
3431 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3432 nmg = mg_find(nsv, mg->mg_type);
3433 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3434 nmg->mg_ptr = mg->mg_ptr;
3435 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3436 nmg->mg_flags |= MGf_REFCOUNTED;
3442 * c-indentation-style: bsd
3444 * indent-tabs-mode: nil
3447 * ex: set ts=8 sts=4 sw=4 et: