3 * Copyright (c) 1991-2002, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * 'Mercy!' cried Gandalf. 'If the giving of information is to be the cure
12 * of your inquisitiveness, I shall spend all the rest of my days answering
13 * you. What more do you want to know?'
14 * 'The names of all the stars, and of all living things, and the whole
15 * history of Middle-earth and Over-heaven and of the Sundering Seas,'
28 Perl_gv_AVadd(pTHX_ register GV *gv)
30 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
31 Perl_croak(aTHX_ "Bad symbol for array");
38 Perl_gv_HVadd(pTHX_ register GV *gv)
40 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
41 Perl_croak(aTHX_ "Bad symbol for hash");
48 Perl_gv_IOadd(pTHX_ register GV *gv)
50 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
51 Perl_croak(aTHX_ "Bad symbol for filehandle");
53 #ifdef GV_UNIQUE_CHECK
55 Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
64 Perl_gv_fetchfile(pTHX_ const char *name)
74 tmplen = strlen(name) + 2;
75 if (tmplen < sizeof smallbuf)
78 New(603, tmpbuf, tmplen + 1, char);
79 /* This is where the debugger's %{"::_<$filename"} hash is created */
82 strcpy(tmpbuf + 2, name);
83 gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
85 gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
86 sv_setpv(GvSV(gv), name);
88 hv_magic(GvHVn(gv_AVadd(gv)), Nullgv, PERL_MAGIC_dbfile);
90 if (tmpbuf != smallbuf)
96 Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
99 bool doproto = SvTYPE(gv) > SVt_NULL;
100 char *proto = (doproto && SvPOK(gv)) ? SvPVX(gv) : NULL;
102 sv_upgrade((SV*)gv, SVt_PVGV);
111 Newz(602, gp, 1, GP);
112 GvGP(gv) = gp_ref(gp);
113 GvSV(gv) = NEWSV(72,0);
114 GvLINE(gv) = CopLINE(PL_curcop);
115 GvFILE(gv) = CopFILE(PL_curcop) ? CopFILE(PL_curcop) : "";
118 sv_magic((SV*)gv, (SV*)gv, PERL_MAGIC_glob, Nullch, 0);
119 GvSTASH(gv) = (HV*)SvREFCNT_inc(stash);
120 GvNAME(gv) = savepvn(name, len);
122 if (multi || doproto) /* doproto means it _was_ mentioned */
124 if (doproto) { /* Replicate part of newSUB here. */
127 /* XXX unsafe for threads if eval_owner isn't held */
128 start_subparse(0,0); /* Create CV in compcv. */
129 GvCV(gv) = PL_compcv;
134 CvFILE_set_from_cop(GvCV(gv), PL_curcop);
135 CvSTASH(GvCV(gv)) = PL_curstash;
136 #ifdef USE_5005THREADS
137 CvOWNER(GvCV(gv)) = 0;
138 if (!CvMUTEXP(GvCV(gv))) {
139 New(666, CvMUTEXP(GvCV(gv)), 1, perl_mutex);
140 MUTEX_INIT(CvMUTEXP(GvCV(gv)));
142 #endif /* USE_5005THREADS */
144 sv_setpv((SV*)GvCV(gv), proto);
151 S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
167 =for apidoc gv_fetchmeth
169 Returns the glob with the given C<name> and a defined subroutine or
170 C<NULL>. The glob lives in the given C<stash>, or in the stashes
171 accessible via @ISA and UNIVERSAL::.
173 The argument C<level> should be either 0 or -1. If C<level==0>, as a
174 side-effect creates a glob with the given C<name> in the given C<stash>
175 which in the case of success contains an alias for the subroutine, and sets
176 up caching info for this glob. Similarly for all the searched stashes.
178 This function grants C<"SUPER"> token as a postfix of the stash name. The
179 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
180 visible to Perl code. So when calling C<call_sv>, you should not use
181 the GV directly; instead, you should use the method's CV, which can be
182 obtained from the GV with the C<GvCV> macro.
188 Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
196 /* UNIVERSAL methods should be callable without a stash */
198 level = -1; /* probably appropriate */
199 if(!(stash = gv_stashpvn("UNIVERSAL", 9, FALSE)))
203 if ((level > 100) || (level < -100))
204 Perl_croak(aTHX_ "Recursive inheritance detected while looking for method '%s' in package '%s'",
205 name, HvNAME(stash));
207 DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,HvNAME(stash)) );
209 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
214 if (SvTYPE(topgv) != SVt_PVGV)
215 gv_init(topgv, stash, name, len, TRUE);
216 if ((cv = GvCV(topgv))) {
217 /* If genuine method or valid cache entry, use it */
218 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
220 /* Stale cached entry: junk it */
222 GvCV(topgv) = cv = Nullcv;
225 else if (GvCVGEN(topgv) == PL_sub_generation)
226 return 0; /* cache indicates sub doesn't exist */
229 gvp = (GV**)hv_fetch(stash, "ISA", 3, FALSE);
230 av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : Nullav;
232 /* create and re-create @.*::SUPER::ISA on demand */
233 if (!av || !SvMAGIC(av)) {
234 char* packname = HvNAME(stash);
235 STRLEN packlen = strlen(packname);
237 if (packlen >= 7 && strEQ(packname + packlen - 7, "::SUPER")) {
241 basestash = gv_stashpvn(packname, packlen, TRUE);
242 gvp = (GV**)hv_fetch(basestash, "ISA", 3, FALSE);
243 if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
244 gvp = (GV**)hv_fetch(stash, "ISA", 3, TRUE);
245 if (!gvp || !(gv = *gvp))
246 Perl_croak(aTHX_ "Cannot create %s::ISA", HvNAME(stash));
247 if (SvTYPE(gv) != SVt_PVGV)
248 gv_init(gv, stash, "ISA", 3, TRUE);
249 SvREFCNT_dec(GvAV(gv));
250 GvAV(gv) = (AV*)SvREFCNT_inc(av);
256 SV** svp = AvARRAY(av);
257 /* NOTE: No support for tied ISA */
258 I32 items = AvFILLp(av) + 1;
261 HV* basestash = gv_stashsv(sv, FALSE);
263 if (ckWARN(WARN_MISC))
264 Perl_warner(aTHX_ packWARN(WARN_MISC), "Can't locate package %s for @%s::ISA",
265 SvPVX(sv), HvNAME(stash));
268 gv = gv_fetchmeth(basestash, name, len,
269 (level >= 0) ? level + 1 : level - 1);
275 /* if at top level, try UNIVERSAL */
277 if (level == 0 || level == -1) {
280 if ((lastchance = gv_stashpvn("UNIVERSAL", 9, FALSE))) {
281 if ((gv = gv_fetchmeth(lastchance, name, len,
282 (level >= 0) ? level + 1 : level - 1)))
286 * Cache method in topgv if:
287 * 1. topgv has no synonyms (else inheritance crosses wires)
288 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
291 GvREFCNT(topgv) == 1 &&
293 (CvROOT(cv) || CvXSUB(cv)))
295 if ((cv = GvCV(topgv)))
297 GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
298 GvCVGEN(topgv) = PL_sub_generation;
302 else if (topgv && GvREFCNT(topgv) == 1) {
303 /* cache the fact that the method is not defined */
304 GvCVGEN(topgv) = PL_sub_generation;
313 =for apidoc gv_fetchmeth_autoload
315 Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
316 Returns a glob for the subroutine.
318 For an autoloaded subroutine without a GV, will create a GV even
319 if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
320 of the result may be zero.
326 Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
328 GV *gv = gv_fetchmeth(stash, name, len, level);
331 char autoload[] = "AUTOLOAD";
332 STRLEN autolen = sizeof(autoload)-1;
337 return Nullgv; /* UNIVERSAL::AUTOLOAD could cause trouble */
338 if (len == autolen && strnEQ(name, autoload, autolen))
340 if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
343 if (!(CvROOT(cv) || CvXSUB(cv)))
345 /* Have an autoload */
346 if (level < 0) /* Cannot do without a stub */
347 gv_fetchmeth(stash, name, len, 0);
348 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
357 =for apidoc gv_fetchmethod
359 See L<gv_fetchmethod_autoload>.
365 Perl_gv_fetchmethod(pTHX_ HV *stash, const char *name)
367 return gv_fetchmethod_autoload(stash, name, TRUE);
371 =for apidoc gv_fetchmethod_autoload
373 Returns the glob which contains the subroutine to call to invoke the method
374 on the C<stash>. In fact in the presence of autoloading this may be the
375 glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
378 The third parameter of C<gv_fetchmethod_autoload> determines whether
379 AUTOLOAD lookup is performed if the given method is not present: non-zero
380 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
381 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
382 with a non-zero C<autoload> parameter.
384 These functions grant C<"SUPER"> token as a prefix of the method name. Note
385 that if you want to keep the returned glob for a long time, you need to
386 check for it being "AUTOLOAD", since at the later time the call may load a
387 different subroutine due to $AUTOLOAD changing its value. Use the glob
388 created via a side effect to do this.
390 These functions have the same side-effects and as C<gv_fetchmeth> with
391 C<level==0>. C<name> should be writable if contains C<':'> or C<'
392 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
393 C<call_sv> apply equally to these functions.
399 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
401 register const char *nend;
402 const char *nsplit = 0;
405 for (nend = name; *nend; nend++) {
408 else if (*nend == ':' && *(nend + 1) == ':')
412 const char *origname = name;
416 if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
417 /* ->SUPER::method should really be looked up in original stash */
418 SV *tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
419 CopSTASHPV(PL_curcop)));
420 /* __PACKAGE__::SUPER stash should be autovivified */
421 stash = gv_stashpvn(SvPVX(tmpstr), SvCUR(tmpstr), TRUE);
422 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
423 origname, HvNAME(stash), name) );
426 /* don't autovifify if ->NoSuchStash::method */
427 stash = gv_stashpvn(origname, nsplit - origname, FALSE);
430 gv = gv_fetchmeth(stash, name, nend - name, 0);
432 if (strEQ(name,"import") || strEQ(name,"unimport"))
433 gv = (GV*)&PL_sv_yes;
435 gv = gv_autoload4(stash, name, nend - name, TRUE);
439 if (!CvROOT(cv) && !CvXSUB(cv)) {
447 if (GvCV(stubgv) != cv) /* orphaned import */
450 autogv = gv_autoload4(GvSTASH(stubgv),
451 GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
461 Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
463 char autoload[] = "AUTOLOAD";
464 STRLEN autolen = sizeof(autoload)-1;
472 return Nullgv; /* UNIVERSAL::AUTOLOAD could cause trouble */
473 if (len == autolen && strnEQ(name, autoload, autolen))
475 if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE)))
479 if (!(CvROOT(cv) || CvXSUB(cv)))
483 * Inheriting AUTOLOAD for non-methods works ... for now.
485 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && !method &&
486 (GvCVGEN(gv) || GvSTASH(gv) != stash))
487 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
488 "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
489 HvNAME(stash), (int)len, name);
491 #ifndef USE_5005THREADS
493 /* rather than lookup/init $AUTOLOAD here
494 * only to have the XSUB do another lookup for $AUTOLOAD
495 * and split that value on the last '::',
496 * pass along the same data via some unused fields in the CV
499 SvPVX(cv) = (char *)name; /* cast to lose constness warning */
506 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
507 * The subroutine's original name may not be "AUTOLOAD", so we don't
508 * use that, but for lack of anything better we will use the sub's
509 * original package to look up $AUTOLOAD.
511 varstash = GvSTASH(CvGV(cv));
512 vargv = *(GV**)hv_fetch(varstash, autoload, autolen, TRUE);
515 #ifdef USE_5005THREADS
516 sv_lock((SV *)varstash);
519 gv_init(vargv, varstash, autoload, autolen, FALSE);
522 #ifdef USE_5005THREADS
525 sv_setpv(varsv, HvNAME(stash));
526 sv_catpvn(varsv, "::", 2);
527 sv_catpvn(varsv, name, len);
528 SvTAINTED_off(varsv);
532 /* The "gv" parameter should be the glob known to Perl code as *!
533 * The scalar must already have been magicalized.
536 S_require_errno(pTHX_ GV *gv)
538 HV* stash = gv_stashpvn("Errno",5,FALSE);
540 if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
544 save_scalar(gv); /* keep the value of $! */
545 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
546 newSVpvn("Errno",5), Nullsv);
549 stash = gv_stashpvn("Errno",5,FALSE);
550 if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
551 Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
556 =for apidoc gv_stashpv
558 Returns a pointer to the stash for a specified package. C<name> should
559 be a valid UTF-8 string. If C<create> is set then the package will be
560 created if it does not already exist. If C<create> is not set and the
561 package does not exist then NULL is returned.
567 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
569 return gv_stashpvn(name, strlen(name), create);
573 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
580 if (namelen + 3 < sizeof smallbuf)
583 New(606, tmpbuf, namelen + 3, char);
584 Copy(name,tmpbuf,namelen,char);
585 tmpbuf[namelen++] = ':';
586 tmpbuf[namelen++] = ':';
587 tmpbuf[namelen] = '\0';
588 tmpgv = gv_fetchpv(tmpbuf, create, SVt_PVHV);
589 if (tmpbuf != smallbuf)
594 GvHV(tmpgv) = newHV();
597 HvNAME(stash) = savepv(name);
602 =for apidoc gv_stashsv
604 Returns a pointer to the stash for a specified package, which must be a
605 valid UTF-8 string. See C<gv_stashpv>.
611 Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
616 return gv_stashpvn(ptr, len, create);
621 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
623 register const char *name = nambeg;
627 register const char *namend;
630 if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
633 for (namend = name; *namend; namend++) {
634 if ((*namend == ':' && namend[1] == ':')
635 || (*namend == '\'' && namend[1]))
639 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
647 if (len + 3 < sizeof smallbuf)
650 New(601, tmpbuf, len+3, char);
651 Copy(name, tmpbuf, len, char);
655 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
656 gv = gvp ? *gvp : Nullgv;
657 if (gv && gv != (GV*)&PL_sv_undef) {
658 if (SvTYPE(gv) != SVt_PVGV)
659 gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
663 if (tmpbuf != smallbuf)
665 if (!gv || gv == (GV*)&PL_sv_undef)
668 if (!(stash = GvHV(gv)))
669 stash = GvHV(gv) = newHV();
672 HvNAME(stash) = savepvn(nambeg, namend - nambeg);
680 return gv ? gv : (GV*)*hv_fetch(PL_defstash, "main::", 6, TRUE);
687 /* No stash in name, so see how we can default */
690 if (isIDFIRST_lazy(name)) {
693 if (isUPPER(*name)) {
694 if (*name == 'S' && (
695 strEQ(name, "SIG") ||
696 strEQ(name, "STDIN") ||
697 strEQ(name, "STDOUT") ||
698 strEQ(name, "STDERR")))
700 else if (*name == 'I' && strEQ(name, "INC"))
702 else if (*name == 'E' && strEQ(name, "ENV"))
704 else if (*name == 'A' && (
705 strEQ(name, "ARGV") ||
706 strEQ(name, "ARGVOUT")))
709 else if (*name == '_' && !name[1])
714 else if ((COP*)PL_curcop == &PL_compiling) {
716 if (add && (PL_hints & HINT_STRICT_VARS) &&
717 sv_type != SVt_PVCV &&
718 sv_type != SVt_PVGV &&
719 sv_type != SVt_PVFM &&
720 sv_type != SVt_PVIO &&
721 !(len == 1 && sv_type == SVt_PV && strchr("ab",*name)) )
723 gvp = (GV**)hv_fetch(stash,name,len,0);
725 *gvp == (GV*)&PL_sv_undef ||
726 SvTYPE(*gvp) != SVt_PVGV)
730 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
731 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
732 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
734 Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
735 sv_type == SVt_PVAV ? '@' :
736 sv_type == SVt_PVHV ? '%' : '$',
739 Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
745 stash = CopSTASH(PL_curcop);
751 /* By this point we should have a stash and a name */
755 qerror(Perl_mess(aTHX_
756 "Global symbol \"%s%s\" requires explicit package name",
757 (sv_type == SVt_PV ? "$"
758 : sv_type == SVt_PVAV ? "@"
759 : sv_type == SVt_PVHV ? "%"
761 stash = PL_nullstash;
767 if (!SvREFCNT(stash)) /* symbol table under destruction */
770 gvp = (GV**)hv_fetch(stash,name,len,add);
771 if (!gvp || *gvp == (GV*)&PL_sv_undef)
774 if (SvTYPE(gv) == SVt_PVGV) {
777 gv_init_sv(gv, sv_type);
778 if (*name=='!' && sv_type == SVt_PVHV && len==1)
782 } else if (add & GV_NOINIT) {
786 /* Adding a new symbol */
788 if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
789 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
790 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
791 gv_init_sv(gv, sv_type);
793 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
794 : (PL_dowarn & G_WARN_ON ) ) )
797 /* set up magic where warranted */
800 if (strEQ(name, "ARGV")) {
801 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
805 if (strnEQ(name, "EXPORT", 6))
809 if (strEQ(name, "ISA")) {
812 sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, Nullch, 0);
813 /* NOTE: No support for tied ISA */
814 if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
815 && AvFILLp(av) == -1)
818 av_push(av, newSVpvn(pname = "NDBM_File",9));
819 gv_stashpvn(pname, 9, TRUE);
820 av_push(av, newSVpvn(pname = "DB_File",7));
821 gv_stashpvn(pname, 7, TRUE);
822 av_push(av, newSVpvn(pname = "GDBM_File",9));
823 gv_stashpvn(pname, 9, TRUE);
824 av_push(av, newSVpvn(pname = "SDBM_File",9));
825 gv_stashpvn(pname, 9, TRUE);
826 av_push(av, newSVpvn(pname = "ODBM_File",9));
827 gv_stashpvn(pname, 9, TRUE);
832 if (strEQ(name, "OVERLOAD")) {
835 hv_magic(hv, Nullgv, PERL_MAGIC_overload);
839 if (strEQ(name, "SIG")) {
843 Newz(73, PL_psig_ptr, SIG_SIZE, SV*);
844 Newz(73, PL_psig_name, SIG_SIZE, SV*);
845 Newz(73, PL_psig_pend, SIG_SIZE, int);
849 hv_magic(hv, Nullgv, PERL_MAGIC_sig);
850 for (i = 1; i < SIG_SIZE; i++) {
852 init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
854 sv_setsv(*init, &PL_sv_undef);
862 if (strEQ(name, "VERSION"))
871 sv_type == SVt_PVAV ||
872 sv_type == SVt_PVHV ||
873 sv_type == SVt_PVCV ||
874 sv_type == SVt_PVFM ||
877 PL_sawampersand = TRUE;
883 sv_setpv(GvSV(gv),PL_chopset);
889 #ifdef COMPLEX_STATUS
890 (void)SvUPGRADE(GvSV(gv), SVt_PVLV);
898 /* If %! has been used, automatically load Errno.pm.
899 The require will itself set errno, so in order to
900 preserve its value we have to set up the magic
901 now (rather than going to magicalize)
904 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
906 if (sv_type == SVt_PVHV)
915 sv_magic((SV*)av, Nullsv, PERL_MAGIC_regdata, Nullch, 0);
921 if (ckWARN2(WARN_DEPRECATED, WARN_SYNTAX) && len == 1 && sv_type == SVt_PV)
922 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX), "Use of $%s is deprecated", name);
937 case '\001': /* $^A */
938 case '\003': /* $^C */
939 case '\004': /* $^D */
940 case '\006': /* $^F */
941 case '\010': /* $^H */
942 case '\011': /* $^I, NOT \t in EBCDIC */
943 case '\016': /* $^N */
944 case '\020': /* $^P */
951 sv_setiv(GvSV(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
953 case '\005': /* $^E && $^ENCODING */
954 if (len > 1 && strNE(name, "\005NCODING"))
958 case '\017': /* $^O & $^OPEN */
959 if (len > 1 && strNE(name, "\017PEN"))
962 case '\023': /* $^S */
966 case '\024': /* $^T, ${^TAINT} */
969 else if (strEQ(name, "\024AINT"))
973 case '\027': /* $^W & $^WARNING_BITS */
974 if (len > 1 && strNE(name, "\027ARNING_BITS")
975 && strNE(name, "\027IDE_SYSTEM_CALLS"))
984 sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, Nullch, 0);
997 /* ensures variable is only digits */
998 /* ${"1foo"} fails this test (and is thus writeable) */
999 /* added by japhy, but borrowed from is_gv_magical */
1002 const char *end = name + len;
1003 while (--end > name) {
1004 if (!isDIGIT(*end)) return gv;
1009 SvREADONLY_on(GvSV(gv));
1011 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1014 case '\014': /* $^L */
1017 sv_setpv(GvSV(gv),"\f");
1018 PL_formfeed = GvSV(gv);
1023 sv_setpv(GvSV(gv),"\034");
1028 (void)SvUPGRADE(sv, SVt_PVNV);
1029 Perl_sv_setpvf(aTHX_ sv,
1030 #if defined(PERL_SUBVERSION) && (PERL_SUBVERSION > 0)
1036 SvNVX(PL_patchlevel));
1037 SvNVX(sv) = SvNVX(PL_patchlevel);
1042 case '\026': /* $^V */
1045 GvSV(gv) = SvREFCNT_inc(PL_patchlevel);
1054 Perl_gv_fullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1056 HV *hv = GvSTASH(gv);
1061 sv_setpv(sv, prefix ? prefix : "");
1062 if (keepmain || strNE(HvNAME(hv), "main")) {
1063 sv_catpv(sv,HvNAME(hv));
1064 sv_catpvn(sv,"::", 2);
1066 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1070 Perl_gv_fullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1072 HV *hv = GvSTASH(gv);
1077 sv_setpv(sv, prefix ? prefix : "");
1078 sv_catpv(sv,HvNAME(hv));
1079 sv_catpvn(sv,"::", 2);
1080 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1084 Perl_gv_efullname4(pTHX_ SV *sv, GV *gv, const char *prefix, bool keepmain)
1086 GV *egv = GvEGV(gv);
1089 gv_fullname4(sv, egv, prefix, keepmain);
1093 Perl_gv_efullname3(pTHX_ SV *sv, GV *gv, const char *prefix)
1095 GV *egv = GvEGV(gv);
1098 gv_fullname3(sv, egv, prefix);
1101 /* XXX compatibility with versions <= 5.003. */
1103 Perl_gv_fullname(pTHX_ SV *sv, GV *gv)
1105 gv_fullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1108 /* XXX compatibility with versions <= 5.003. */
1110 Perl_gv_efullname(pTHX_ SV *sv, GV *gv)
1112 gv_efullname3(sv, gv, sv == (SV*)gv ? "*" : "");
1121 io = (IO*)NEWSV(0,0);
1122 sv_upgrade((SV *)io,SVt_PVIO);
1125 iogv = gv_fetchpv("FileHandle::", FALSE, SVt_PVHV);
1126 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1127 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1128 iogv = gv_fetchpv("IO::Handle::", TRUE, SVt_PVHV);
1129 SvSTASH(io) = (HV*)SvREFCNT_inc(GvHV(iogv));
1134 Perl_gv_check(pTHX_ HV *stash)
1141 if (!HvARRAY(stash))
1143 for (i = 0; i <= (I32) HvMAX(stash); i++) {
1144 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1145 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1146 (gv = (GV*)HeVAL(entry)) && (hv = GvHV(gv)))
1148 if (hv != PL_defstash && hv != stash)
1149 gv_check(hv); /* nested package */
1151 else if (isALPHA(*HeKEY(entry))) {
1153 gv = (GV*)HeVAL(entry);
1154 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1157 /* performance hack: if filename is absolute and it's a standard
1158 * module, don't bother warning */
1160 && PERL_FILE_IS_ABSOLUTE(file)
1161 #ifdef MACOS_TRADITIONAL
1162 && (instr(file, ":lib:")
1164 && (instr(file, "/lib/")
1166 || instr(file, ".pm")))
1170 CopLINE_set(PL_curcop, GvLINE(gv));
1172 CopFILE(PL_curcop) = file; /* set for warning */
1174 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1176 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1177 "Name \"%s::%s\" used only once: possible typo",
1178 HvNAME(stash), GvNAME(gv));
1185 Perl_newGVgen(pTHX_ char *pack)
1187 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1191 /* hopefully this is only called on local symbol table entries */
1194 Perl_gp_ref(pTHX_ GP *gp)
1201 /* multi-named GPs cannot be used for method cache */
1202 SvREFCNT_dec(gp->gp_cv);
1207 /* Adding a new name to a subroutine invalidates method cache */
1208 PL_sub_generation++;
1215 Perl_gp_free(pTHX_ GV *gv)
1219 if (!gv || !(gp = GvGP(gv)))
1221 if (gp->gp_refcnt == 0) {
1222 if (ckWARN_d(WARN_INTERNAL))
1223 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1224 "Attempt to free unreferenced glob pointers");
1228 /* Deleting the name of a subroutine invalidates method cache */
1229 PL_sub_generation++;
1231 if (--gp->gp_refcnt > 0) {
1232 if (gp->gp_egv == gv)
1237 SvREFCNT_dec(gp->gp_sv);
1238 SvREFCNT_dec(gp->gp_av);
1239 SvREFCNT_dec(gp->gp_hv);
1240 SvREFCNT_dec(gp->gp_io);
1241 SvREFCNT_dec(gp->gp_cv);
1242 SvREFCNT_dec(gp->gp_form);
1248 #if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
1252 #ifdef MICROPORT /* Microport 2.4 hack */
1256 if (GvGP(gv)->gp_av)
1257 return GvGP(gv)->gp_av;
1259 return GvGP(gv_AVadd(gv))->gp_av;
1265 if (GvGP(gv)->gp_hv)
1266 return GvGP(gv)->gp_hv;
1268 return GvGP(gv_HVadd(gv))->gp_hv;
1270 #endif /* Microport 2.4 hack */
1273 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1275 AMT *amtp = (AMT*)mg->mg_ptr;
1276 if (amtp && AMT_AMAGIC(amtp)) {
1278 for (i = 1; i < NofAMmeth; i++) {
1279 CV *cv = amtp->table[i];
1281 SvREFCNT_dec((SV *) cv);
1282 amtp->table[i] = Nullcv;
1289 /* Updates and caches the CV's */
1292 Perl_Gv_AMupdate(pTHX_ HV *stash)
1296 MAGIC* mg=mg_find((SV*)stash, PERL_MAGIC_overload_table);
1297 AMT *amtp = (mg) ? (AMT*)mg->mg_ptr: (AMT *) NULL;
1300 if (mg && amtp->was_ok_am == PL_amagic_generation
1301 && amtp->was_ok_sub == PL_sub_generation)
1302 return AMT_OVERLOADED(amtp);
1303 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1305 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
1308 amt.was_ok_am = PL_amagic_generation;
1309 amt.was_ok_sub = PL_sub_generation;
1310 amt.fallback = AMGfallNO;
1314 int filled = 0, have_ovl = 0;
1318 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1320 /* Try to find via inheritance. */
1321 gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1326 lim = DESTROY_amg; /* Skip overloading entries. */
1327 else if (SvTRUE(sv))
1328 amt.fallback=AMGfallYES;
1330 amt.fallback=AMGfallNEVER;
1332 for (i = 1; i < lim; i++)
1333 amt.table[i] = Nullcv;
1334 for (; i < NofAMmeth; i++) {
1335 char *cooky = (char*)PL_AMG_names[i];
1336 /* Human-readable form, for debugging: */
1337 char *cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1338 STRLEN l = strlen(cooky);
1340 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of `%s' in package `%.256s'\n",
1341 cp, HvNAME(stash)) );
1342 /* don't fill the cache while looking up!
1343 Creation of inheritance stubs in intermediate packages may
1344 conflict with the logic of runtime method substitution.
1345 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1346 then we could have created stubs for "(+0" in A and C too.
1347 But if B overloads "bool", we may want to use it for
1348 numifying instead of C's "+0". */
1349 if (i >= DESTROY_amg)
1350 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1351 else /* Autoload taken care of below */
1352 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1354 if (gv && (cv = GvCV(gv))) {
1355 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1356 && strEQ(HvNAME(GvSTASH(CvGV(cv))), "overload")) {
1357 /* This is a hack to support autoloading..., while
1358 knowing *which* methods were declared as overloaded. */
1359 /* GvSV contains the name of the method. */
1362 DEBUG_o( Perl_deb(aTHX_ "Resolving method `%.256s' for overloaded `%s' in package `%.256s'\n",
1363 SvPV_nolen(GvSV(gv)), cp, HvNAME(stash)) );
1364 if (!SvPOK(GvSV(gv))
1365 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX(GvSV(gv)),
1368 /* Can be an import stub (created by `can'). */
1370 Perl_croak(aTHX_ "Stub found while resolving method `%.256s' overloading `%s' in package `%.256s'",
1371 (SvPOK(GvSV(gv)) ? SvPVX(GvSV(gv)) : "???" ),
1374 Perl_croak(aTHX_ "Can't resolve method `%.256s' overloading `%s' in package `%.256s'",
1375 (SvPOK(GvSV(gv)) ? SvPVX(GvSV(gv)) : "???" ),
1378 cv = GvCV(gv = ngv);
1380 DEBUG_o( Perl_deb(aTHX_ "Overloading `%s' in package `%.256s' via `%.256s::%.256s' \n",
1381 cp, HvNAME(stash), HvNAME(GvSTASH(CvGV(cv))),
1382 GvNAME(CvGV(cv))) );
1384 if (i < DESTROY_amg)
1386 } else if (gv) { /* Autoloaded... */
1390 amt.table[i]=(CV*)SvREFCNT_inc(cv);
1393 AMT_AMAGIC_on(&amt);
1395 AMT_OVERLOADED_on(&amt);
1396 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1397 (char*)&amt, sizeof(AMT));
1401 /* Here we have no table: */
1403 AMT_AMAGIC_off(&amt);
1404 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1405 (char*)&amt, sizeof(AMTS));
1411 Perl_gv_handler(pTHX_ HV *stash, I32 id)
1418 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1422 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1424 amtp = (AMT*)mg->mg_ptr;
1425 if ( amtp->was_ok_am != PL_amagic_generation
1426 || amtp->was_ok_sub != PL_sub_generation )
1428 if (AMT_AMAGIC(amtp))
1429 return amtp->table[id];
1435 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1439 CV **cvp=NULL, **ocvp=NULL;
1440 AMT *amtp=NULL, *oamtp=NULL;
1441 int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
1442 int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
1447 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1448 && (stash = SvSTASH(SvRV(left)))
1449 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1450 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1451 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1453 && ((cv = cvp[off=method+assignshift])
1454 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1460 cv = cvp[off=method])))) {
1461 lr = -1; /* Call method for left argument */
1463 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1466 /* look for substituted methods */
1467 /* In all the covered cases we should be called with assign==0. */
1471 if ((cv = cvp[off=add_ass_amg])
1472 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1473 right = &PL_sv_yes; lr = -1; assign = 1;
1478 if ((cv = cvp[off = subtr_ass_amg])
1479 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1480 right = &PL_sv_yes; lr = -1; assign = 1;
1484 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1487 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1490 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1493 (void)((cv = cvp[off=bool__amg])
1494 || (cv = cvp[off=numer_amg])
1495 || (cv = cvp[off=string_amg]));
1501 * SV* ref causes confusion with the interpreter variable of
1504 SV* tmpRef=SvRV(left);
1505 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1507 * Just to be extra cautious. Maybe in some
1508 * additional cases sv_setsv is safe, too.
1510 SV* newref = newSVsv(tmpRef);
1511 SvOBJECT_on(newref);
1512 SvSTASH(newref) = (HV*)SvREFCNT_inc(SvSTASH(tmpRef));
1518 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1519 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1520 SV* nullsv=sv_2mortal(newSViv(0));
1522 SV* lessp = amagic_call(left,nullsv,
1523 lt_amg,AMGf_noright);
1524 logic = SvTRUE(lessp);
1526 SV* lessp = amagic_call(left,nullsv,
1527 ncmp_amg,AMGf_noright);
1528 logic = (SvNV(lessp) < 0);
1531 if (off==subtr_amg) {
1542 if ((cv = cvp[off=subtr_amg])) {
1544 left = sv_2mortal(newSViv(0));
1549 case iter_amg: /* XXXX Eventually should do to_gv. */
1551 return NULL; /* Delegate operation to standard mechanisms. */
1559 return left; /* Delegate operation to standard mechanisms. */
1564 if (!cv) goto not_found;
1565 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1566 && (stash = SvSTASH(SvRV(right)))
1567 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1568 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1569 ? (amtp = (AMT*)mg->mg_ptr)->table
1571 && (cv = cvp[off=method])) { /* Method for right
1574 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1575 && (cvp=ocvp) && (lr = -1))
1576 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1577 && !(flags & AMGf_unary)) {
1578 /* We look for substitution for
1579 * comparison operations and
1581 if (method==concat_amg || method==concat_ass_amg
1582 || method==repeat_amg || method==repeat_ass_amg) {
1583 return NULL; /* Delegate operation to string conversion */
1593 postpr = 1; off=ncmp_amg; break;
1600 postpr = 1; off=scmp_amg; break;
1602 if (off != -1) cv = cvp[off];
1607 not_found: /* No method found, either report or croak */
1615 return left; /* Delegate operation to standard mechanisms. */
1618 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1619 notfound = 1; lr = -1;
1620 } else if (cvp && (cv=cvp[nomethod_amg])) {
1621 notfound = 1; lr = 1;
1624 if (off==-1) off=method;
1625 msg = sv_2mortal(Perl_newSVpvf(aTHX_
1626 "Operation `%s': no method found,%sargument %s%s%s%s",
1627 AMG_id2name(method + assignshift),
1628 (flags & AMGf_unary ? " " : "\n\tleft "),
1630 "in overloaded package ":
1631 "has no overloaded magic",
1633 HvNAME(SvSTASH(SvRV(left))):
1636 ",\n\tright argument in overloaded package ":
1639 : ",\n\tright argument has no overloaded magic"),
1641 HvNAME(SvSTASH(SvRV(right))):
1643 if (amtp && amtp->fallback >= AMGfallYES) {
1644 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX(msg)) );
1646 Perl_croak(aTHX_ "%"SVf, msg);
1650 force_cpy = force_cpy || assign;
1655 DEBUG_o(Perl_deb(aTHX_
1656 "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1658 method+assignshift==off? "" :
1660 method+assignshift==off? "" :
1661 AMG_id2name(method+assignshift),
1662 method+assignshift==off? "" : "')",
1663 flags & AMGf_unary? "" :
1664 lr==1 ? " for right argument": " for left argument",
1665 flags & AMGf_unary? " for argument" : "",
1666 stash ? HvNAME(stash) : "null",
1667 fl? ",\n\tassignment variant used": "") );
1670 /* Since we use shallow copy during assignment, we need
1671 * to dublicate the contents, probably calling user-supplied
1672 * version of copy operator
1674 /* We need to copy in following cases:
1675 * a) Assignment form was called.
1676 * assignshift==1, assign==T, method + 1 == off
1677 * b) Increment or decrement, called directly.
1678 * assignshift==0, assign==0, method + 0 == off
1679 * c) Increment or decrement, translated to assignment add/subtr.
1680 * assignshift==0, assign==T,
1682 * d) Increment or decrement, translated to nomethod.
1683 * assignshift==0, assign==0,
1685 * e) Assignment form translated to nomethod.
1686 * assignshift==1, assign==T, method + 1 != off
1689 /* off is method, method+assignshift, or a result of opcode substitution.
1690 * In the latter case assignshift==0, so only notfound case is important.
1692 if (( (method + assignshift == off)
1693 && (assign || (method == inc_amg) || (method == dec_amg)))
1700 bool oldcatch = CATCH_GET;
1703 Zero(&myop, 1, BINOP);
1704 myop.op_last = (OP *) &myop;
1705 myop.op_next = Nullop;
1706 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1708 PUSHSTACKi(PERLSI_OVERLOAD);
1711 PL_op = (OP *) &myop;
1712 if (PERLDB_SUB && PL_curstash != PL_debstash)
1713 PL_op->op_private |= OPpENTERSUB_DB;
1717 EXTEND(SP, notfound + 5);
1718 PUSHs(lr>0? right: left);
1719 PUSHs(lr>0? left: right);
1720 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1722 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1727 if ((PL_op = Perl_pp_entersub(aTHX)))
1735 CATCH_SET(oldcatch);
1742 ans=SvIV(res)<=0; break;
1745 ans=SvIV(res)<0; break;
1748 ans=SvIV(res)>=0; break;
1751 ans=SvIV(res)>0; break;
1754 ans=SvIV(res)==0; break;
1757 ans=SvIV(res)!=0; break;
1760 SvSetSV(left,res); return left;
1762 ans=!SvTRUE(res); break;
1765 } else if (method==copy_amg) {
1767 Perl_croak(aTHX_ "Copy method did not return a reference");
1769 return SvREFCNT_inc(SvRV(res));
1777 =for apidoc is_gv_magical
1779 Returns C<TRUE> if given the name of a magical GV.
1781 Currently only useful internally when determining if a GV should be
1782 created even in rvalue contexts.
1784 C<flags> is not used at present but available for future extension to
1785 allow selecting particular classes of magical variable.
1790 Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags)
1797 if (len == 3 && strEQ(name, "ISA"))
1801 if (len == 8 && strEQ(name, "OVERLOAD"))
1805 if (len == 3 && strEQ(name, "SIG"))
1808 case '\017': /* $^O & $^OPEN */
1810 || (len == 4 && strEQ(name, "\027PEN")))
1815 case '\027': /* $^W & $^WARNING_BITS */
1817 || (len == 12 && strEQ(name, "\027ARNING_BITS"))
1818 || (len == 17 && strEQ(name, "\027IDE_SYSTEM_CALLS")))
1850 case '\001': /* $^A */
1851 case '\003': /* $^C */
1852 case '\004': /* $^D */
1853 case '\005': /* $^E */
1854 case '\006': /* $^F */
1855 case '\010': /* $^H */
1856 case '\011': /* $^I, NOT \t in EBCDIC */
1857 case '\014': /* $^L */
1858 case '\016': /* $^N */
1859 case '\020': /* $^P */
1860 case '\023': /* $^S */
1861 case '\026': /* $^V */
1865 case '\024': /* $^T, ${^TAINT} */
1866 if (len == 1 || strEQ(name, "\024AINT"))
1879 char *end = name + len;
1880 while (--end > name) {