3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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 * 'Mercy!' cried Gandalf. 'If the giving of information is to be the cure
13 * of your inquisitiveness, I shall spend all the rest of my days answering
14 * you. What more do you want to know?'
15 * 'The names of all the stars, and of all living things, and the whole
16 * history of Middle-earth and Over-heaven and of the Sundering Seas,'
23 A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
24 It is a structure that holds a pointer to a scalar, an array, a hash etc,
25 corresponding to $foo, @foo, %foo.
27 GVs are usually found as values in stashes (symbol table hashes) where
28 Perl stores its global variables.
37 static const char S_autoload[] = "AUTOLOAD";
38 static const STRLEN S_autolen = sizeof(S_autoload)-1;
41 #ifdef PERL_DONT_CREATE_GVSV
43 Perl_gv_SVadd(pTHX_ GV *gv)
45 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
46 Perl_croak(aTHX_ "Bad symbol for scalar");
54 Perl_gv_AVadd(pTHX_ register GV *gv)
56 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
57 Perl_croak(aTHX_ "Bad symbol for array");
64 Perl_gv_HVadd(pTHX_ register GV *gv)
66 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
67 Perl_croak(aTHX_ "Bad symbol for hash");
74 Perl_gv_IOadd(pTHX_ register GV *gv)
77 if (!gv || SvTYPE((SV*)gv) != SVt_PVGV) {
80 * if it walks like a dirhandle, then let's assume that
81 * this is a dirhandle.
83 const char * const fh =
85 (PL_op->op_type == OP_READDIR ||
86 PL_op->op_type == OP_TELLDIR ||
87 PL_op->op_type == OP_SEEKDIR ||
88 PL_op->op_type == OP_REWINDDIR ||
89 PL_op->op_type == OP_CLOSEDIR ?
90 "dirhandle" : "filehandle");
91 Perl_croak(aTHX_ "Bad symbol for %s", fh);
95 #ifdef GV_UNIQUE_CHECK
97 Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
106 Perl_gv_fetchfile(pTHX_ const char *name)
117 tmplen = strlen(name) + 2;
118 if (tmplen < sizeof smallbuf)
121 Newx(tmpbuf, tmplen + 1, char);
122 /* This is where the debugger's %{"::_<$filename"} hash is created */
125 memcpy(tmpbuf + 2, name, tmplen - 1);
126 gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
128 gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
129 #ifdef PERL_DONT_CREATE_GVSV
130 GvSV(gv) = newSVpvn(name, tmplen - 2);
132 sv_setpvn(GvSV(gv), name, tmplen - 2);
135 hv_magic(GvHVn(gv_AVadd(gv)), NULL, PERL_MAGIC_dbfile);
137 if (tmpbuf != smallbuf)
143 =for apidoc gv_const_sv
145 If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
146 inlining, or C<gv> is a placeholder reference that would be promoted to such
147 a typeglob, then returns the value returned by the sub. Otherwise, returns
154 Perl_gv_const_sv(pTHX_ GV *gv)
156 if (SvTYPE(gv) == SVt_PVGV)
157 return cv_const_sv(GvCVu(gv));
158 return SvROK(gv) ? SvRV(gv) : NULL;
162 Perl_newGP(pTHX_ GV *const gv)
165 const char *const file =
166 CopFILE(PL_curcop) ? CopFILE(PL_curcop) : (const char *)"";
167 STRLEN len = strlen(file);
170 PERL_HASH(hash, file, len);
174 #ifndef PERL_DONT_CREATE_GVSV
175 gp->gv_sv = newSV(0);
178 gp->gp_line = CopLINE(PL_curcop);
179 /* XXX Ideally this cast would be replaced with a change to const char*
181 gp->gp_file_hek = share_hek(file, len, hash);
189 Perl_gv_init(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, int multi)
192 const U32 old_type = SvTYPE(gv);
193 const bool doproto = old_type > SVt_NULL;
194 const char * const proto = (doproto && SvPOK(gv)) ? SvPVX_const(gv) : NULL;
195 SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL;
197 assert (!(proto && has_constant));
200 /* The constant has to be a simple scalar type. */
201 switch (SvTYPE(has_constant)) {
207 Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob",
208 sv_reftype(has_constant, 0));
216 if (old_type < SVt_PVGV) {
217 if (old_type >= SVt_PV)
219 sv_upgrade((SV*)gv, SVt_PVGV);
227 Safefree(SvPVX_mutable(gv));
231 GvGP(gv) = Perl_newGP(aTHX_ gv);
234 Perl_sv_add_backref(aTHX_ (SV*)stash, (SV*)gv);
235 gv_name_set(gv, name, len, GV_ADD);
236 if (multi || doproto) /* doproto means it _was_ mentioned */
238 if (doproto) { /* Replicate part of newSUB here. */
242 /* newCONSTSUB takes ownership of the reference from us. */
243 GvCV(gv) = newCONSTSUB(stash, name, has_constant);
245 /* XXX unsafe for threads if eval_owner isn't held */
246 (void) start_subparse(0,0); /* Create empty CV in compcv. */
247 GvCV(gv) = PL_compcv;
253 CvFILE_set_from_cop(GvCV(gv), PL_curcop);
254 CvSTASH(GvCV(gv)) = PL_curstash;
256 sv_setpv((SV*)GvCV(gv), proto);
263 S_gv_init_sv(pTHX_ GV *gv, I32 sv_type)
275 #ifdef PERL_DONT_CREATE_GVSV
288 =for apidoc gv_fetchmeth
290 Returns the glob with the given C<name> and a defined subroutine or
291 C<NULL>. The glob lives in the given C<stash>, or in the stashes
292 accessible via @ISA and UNIVERSAL::.
294 The argument C<level> should be either 0 or -1. If C<level==0>, as a
295 side-effect creates a glob with the given C<name> in the given C<stash>
296 which in the case of success contains an alias for the subroutine, and sets
297 up caching info for this glob. Similarly for all the searched stashes.
299 This function grants C<"SUPER"> token as a postfix of the stash name. The
300 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
301 visible to Perl code. So when calling C<call_sv>, you should not use
302 the GV directly; instead, you should use the method's CV, which can be
303 obtained from the GV with the C<GvCV> macro.
309 Perl_gv_fetchmeth(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
318 HV* lastchance = NULL;
320 /* UNIVERSAL methods should be callable without a stash */
322 level = -1; /* probably appropriate */
323 if(!(stash = gv_stashpvs("UNIVERSAL", FALSE)))
327 hvname = HvNAME_get(stash);
330 "Can't use anonymous symbol table for method lookup");
332 if ((level > 100) || (level < -100))
333 Perl_croak(aTHX_ "Recursive inheritance detected while looking for method '%s' in package '%s'",
336 DEBUG_o( Perl_deb(aTHX_ "Looking for method %s in package %s\n",name,hvname) );
338 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
343 if (SvTYPE(topgv) != SVt_PVGV)
344 gv_init(topgv, stash, name, len, TRUE);
345 if ((cv = GvCV(topgv))) {
346 /* If genuine method or valid cache entry, use it */
347 if (!GvCVGEN(topgv) || GvCVGEN(topgv) == PL_sub_generation)
349 /* Stale cached entry: junk it */
351 GvCV(topgv) = cv = NULL;
354 else if (GvCVGEN(topgv) == PL_sub_generation)
355 return 0; /* cache indicates sub doesn't exist */
358 gvp = (GV**)hv_fetchs(stash, "ISA", FALSE);
359 av = (gvp && (gv = *gvp) && gv != (GV*)&PL_sv_undef) ? GvAV(gv) : NULL;
361 /* create and re-create @.*::SUPER::ISA on demand */
362 if (!av || !SvMAGIC(av)) {
363 STRLEN packlen = HvNAMELEN_get(stash);
365 if (packlen >= 7 && strEQ(hvname + packlen - 7, "::SUPER")) {
369 basestash = gv_stashpvn(hvname, packlen, TRUE);
370 gvp = (GV**)hv_fetchs(basestash, "ISA", FALSE);
371 if (gvp && (gv = *gvp) != (GV*)&PL_sv_undef && (av = GvAV(gv))) {
372 gvp = (GV**)hv_fetchs(stash, "ISA", TRUE);
373 if (!gvp || !(gv = *gvp))
374 Perl_croak(aTHX_ "Cannot create %s::ISA", hvname);
375 if (SvTYPE(gv) != SVt_PVGV)
376 gv_init(gv, stash, "ISA", 3, TRUE);
377 SvREFCNT_dec(GvAV(gv));
378 GvAV(gv) = (AV*)SvREFCNT_inc_simple(av);
384 SV** svp = AvARRAY(av);
385 /* NOTE: No support for tied ISA */
386 I32 items = AvFILLp(av) + 1;
388 SV* const sv = *svp++;
389 HV* const basestash = gv_stashsv(sv, FALSE);
391 if (ckWARN(WARN_MISC))
392 Perl_warner(aTHX_ packWARN(WARN_MISC), "Can't locate package %"SVf" for @%s::ISA",
396 gv = gv_fetchmeth(basestash, name, len,
397 (level >= 0) ? level + 1 : level - 1);
403 /* if at top level, try UNIVERSAL */
405 if (level == 0 || level == -1) {
406 lastchance = gv_stashpvs("UNIVERSAL", FALSE);
409 if ((gv = gv_fetchmeth(lastchance, name, len,
410 (level >= 0) ? level + 1 : level - 1)))
414 * Cache method in topgv if:
415 * 1. topgv has no synonyms (else inheritance crosses wires)
416 * 2. method isn't a stub (else AUTOLOAD fails spectacularly)
419 GvREFCNT(topgv) == 1 &&
421 (CvROOT(cv) || CvXSUB(cv)))
423 if ((cv = GvCV(topgv)))
425 GvCV(topgv) = (CV*)SvREFCNT_inc(GvCV(gv));
426 GvCVGEN(topgv) = PL_sub_generation;
430 else if (topgv && GvREFCNT(topgv) == 1) {
431 /* cache the fact that the method is not defined */
432 GvCVGEN(topgv) = PL_sub_generation;
441 =for apidoc gv_fetchmeth_autoload
443 Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
444 Returns a glob for the subroutine.
446 For an autoloaded subroutine without a GV, will create a GV even
447 if C<level < 0>. For an autoloaded subroutine without a stub, GvCV()
448 of the result may be zero.
454 Perl_gv_fetchmeth_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I32 level)
456 GV *gv = gv_fetchmeth(stash, name, len, level);
463 return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */
464 if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
466 if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
469 if (!(CvROOT(cv) || CvXSUB(cv)))
471 /* Have an autoload */
472 if (level < 0) /* Cannot do without a stub */
473 gv_fetchmeth(stash, name, len, 0);
474 gvp = (GV**)hv_fetch(stash, name, len, (level >= 0));
483 =for apidoc gv_fetchmethod_autoload
485 Returns the glob which contains the subroutine to call to invoke the method
486 on the C<stash>. In fact in the presence of autoloading this may be the
487 glob for "AUTOLOAD". In this case the corresponding variable $AUTOLOAD is
490 The third parameter of C<gv_fetchmethod_autoload> determines whether
491 AUTOLOAD lookup is performed if the given method is not present: non-zero
492 means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
493 Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
494 with a non-zero C<autoload> parameter.
496 These functions grant C<"SUPER"> token as a prefix of the method name. Note
497 that if you want to keep the returned glob for a long time, you need to
498 check for it being "AUTOLOAD", since at the later time the call may load a
499 different subroutine due to $AUTOLOAD changing its value. Use the glob
500 created via a side effect to do this.
502 These functions have the same side-effects and as C<gv_fetchmeth> with
503 C<level==0>. C<name> should be writable if contains C<':'> or C<'
504 ''>. The warning against passing the GV returned by C<gv_fetchmeth> to
505 C<call_sv> apply equally to these functions.
511 Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
514 register const char *nend;
515 const char *nsplit = NULL;
519 if (stash && SvTYPE(stash) < SVt_PVHV)
522 for (nend = name; *nend; nend++) {
525 else if (*nend == ':' && *(nend + 1) == ':')
529 const char * const origname = name;
533 if ((nsplit - origname) == 5 && strnEQ(origname, "SUPER", 5)) {
534 /* ->SUPER::method should really be looked up in original stash */
535 SV * const tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",
536 CopSTASHPV(PL_curcop)));
537 /* __PACKAGE__::SUPER stash should be autovivified */
538 stash = gv_stashpvn(SvPVX_const(tmpstr), SvCUR(tmpstr), TRUE);
539 DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n",
540 origname, HvNAME_get(stash), name) );
543 /* don't autovifify if ->NoSuchStash::method */
544 stash = gv_stashpvn(origname, nsplit - origname, FALSE);
546 /* however, explicit calls to Pkg::SUPER::method may
547 happen, and may require autovivification to work */
548 if (!stash && (nsplit - origname) >= 7 &&
549 strnEQ(nsplit - 7, "::SUPER", 7) &&
550 gv_stashpvn(origname, nsplit - origname - 7, FALSE))
551 stash = gv_stashpvn(origname, nsplit - origname, TRUE);
556 gv = gv_fetchmeth(stash, name, nend - name, 0);
558 if (strEQ(name,"import") || strEQ(name,"unimport"))
559 gv = (GV*)&PL_sv_yes;
561 gv = gv_autoload4(ostash, name, nend - name, TRUE);
564 CV* const cv = GvCV(gv);
565 if (!CvROOT(cv) && !CvXSUB(cv)) {
573 if (GvCV(stubgv) != cv) /* orphaned import */
576 autogv = gv_autoload4(GvSTASH(stubgv),
577 GvNAME(stubgv), GvNAMELEN(stubgv), TRUE);
587 Perl_gv_autoload4(pTHX_ HV *stash, const char *name, STRLEN len, I32 method)
595 const char *packname = "";
596 STRLEN packname_len = 0;
598 if (len == S_autolen && strnEQ(name, S_autoload, S_autolen))
601 if (SvTYPE(stash) < SVt_PVHV) {
602 packname = SvPV_const((SV*)stash, packname_len);
606 packname = HvNAME_get(stash);
607 packname_len = HvNAMELEN_get(stash);
610 if (!(gv = gv_fetchmeth(stash, S_autoload, S_autolen, FALSE)))
614 if (!(CvROOT(cv) || CvXSUB(cv)))
618 * Inheriting AUTOLOAD for non-methods works ... for now.
620 if (!method && (GvCVGEN(gv) || GvSTASH(gv) != stash)
621 && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX)
623 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
624 "Use of inherited AUTOLOAD for non-method %s::%.*s() is deprecated",
625 packname, (int)len, name);
628 /* rather than lookup/init $AUTOLOAD here
629 * only to have the XSUB do another lookup for $AUTOLOAD
630 * and split that value on the last '::',
631 * pass along the same data via some unused fields in the CV
634 SvPV_set(cv, (char *)name); /* cast to lose constness warning */
640 * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name.
641 * The subroutine's original name may not be "AUTOLOAD", so we don't
642 * use that, but for lack of anything better we will use the sub's
643 * original package to look up $AUTOLOAD.
645 varstash = GvSTASH(CvGV(cv));
646 vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
650 gv_init(vargv, varstash, S_autoload, S_autolen, FALSE);
651 #ifdef PERL_DONT_CREATE_GVSV
652 GvSV(vargv) = newSV(0);
656 varsv = GvSVn(vargv);
657 sv_setpvn(varsv, packname, packname_len);
658 sv_catpvs(varsv, "::");
659 sv_catpvn(varsv, name, len);
663 /* The "gv" parameter should be the glob known to Perl code as *!
664 * The scalar must already have been magicalized.
667 S_require_errno(pTHX_ GV *gv)
670 HV* stash = gv_stashpvs("Errno", FALSE);
672 if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
676 save_scalar(gv); /* keep the value of $! */
677 Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT,
678 newSVpvs("Errno"), NULL);
681 stash = gv_stashpvs("Errno", FALSE);
682 if (!stash || !(gv_fetchmethod(stash, "TIEHASH")))
683 Perl_croak(aTHX_ "Can't use %%! because Errno.pm is not available");
688 =for apidoc gv_stashpv
690 Returns a pointer to the stash for a specified package. C<name> should
691 be a valid UTF-8 string and must be null-terminated. If C<create> is set
692 then the package will be created if it does not already exist. If C<create>
693 is not set and the package does not exist then NULL is returned.
699 Perl_gv_stashpv(pTHX_ const char *name, I32 create)
701 return gv_stashpvn(name, strlen(name), create);
705 =for apidoc gv_stashpvn
707 Returns a pointer to the stash for a specified package. C<name> should
708 be a valid UTF-8 string. The C<namelen> parameter indicates the length of
709 the C<name>, in bytes. If C<create> is set then the package will be
710 created if it does not already exist. If C<create> is not set and the
711 package does not exist then NULL is returned.
717 Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 create)
724 if (namelen + 3 < sizeof smallbuf)
727 Newx(tmpbuf, namelen + 3, char);
728 Copy(name,tmpbuf,namelen,char);
729 tmpbuf[namelen++] = ':';
730 tmpbuf[namelen++] = ':';
731 tmpbuf[namelen] = '\0';
732 tmpgv = gv_fetchpvn_flags(tmpbuf, namelen, create, SVt_PVHV);
733 if (tmpbuf != smallbuf)
738 GvHV(tmpgv) = newHV();
740 if (!HvNAME_get(stash))
741 hv_name_set(stash, name, namelen, 0);
746 =for apidoc gv_stashsv
748 Returns a pointer to the stash for a specified package, which must be a
749 valid UTF-8 string. See C<gv_stashpv>.
755 Perl_gv_stashsv(pTHX_ SV *sv, I32 create)
758 const char * const ptr = SvPV_const(sv,len);
759 return gv_stashpvn(ptr, len, create);
764 Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type) {
765 return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type);
769 Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, I32 sv_type) {
771 const char * const nambeg = SvPV_const(name, len);
772 return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type);
776 Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags,
780 register const char *name = nambeg;
781 register GV *gv = NULL;
784 register const char *name_cursor;
786 const I32 no_init = flags & (GV_NOADD_NOINIT | GV_NOINIT);
787 const I32 no_expand = flags & GV_NOEXPAND;
789 flags & ~SVf_UTF8 & ~GV_NOADD_NOINIT & ~GV_NOEXPAND & ~GV_NOTQUAL;
790 const char *const name_end = nambeg + full_len;
791 const char *const name_em1 = name_end - 1;
793 if (flags & GV_NOTQUAL) {
794 /* Caller promised that there is no stash, so we can skip the check. */
799 if (full_len > 2 && *name == '*' && isALPHA(name[1])) {
800 /* accidental stringify on a GV? */
804 for (name_cursor = name; name_cursor < name_end; name_cursor++) {
805 if ((*name_cursor == ':' && name_cursor < name_em1
806 && name_cursor[1] == ':')
807 || (*name_cursor == '\'' && name_cursor[1]))
811 if (!stash || !SvREFCNT(stash)) /* symbol table under destruction */
814 len = name_cursor - name;
819 if (len + 3 < (I32)sizeof (smallbuf))
822 Newx(tmpbuf, len+3, char);
823 Copy(name, tmpbuf, len, char);
827 gvp = (GV**)hv_fetch(stash,tmpbuf,len,add);
828 gv = gvp ? *gvp : NULL;
829 if (gv && gv != (GV*)&PL_sv_undef) {
830 if (SvTYPE(gv) != SVt_PVGV)
831 gv_init(gv, stash, tmpbuf, len, (add & GV_ADDMULTI));
835 if (tmpbuf != smallbuf)
837 if (!gv || gv == (GV*)&PL_sv_undef)
840 if (!(stash = GvHV(gv)))
841 stash = GvHV(gv) = newHV();
843 if (!HvNAME_get(stash))
844 hv_name_set(stash, nambeg, name_cursor - nambeg, 0);
847 if (*name_cursor == ':')
851 if (name == name_end)
852 return gv ? gv : (GV*)*hv_fetchs(PL_defstash, "main::", TRUE);
855 len = name_cursor - name;
857 /* No stash in name, so see how we can default */
861 if (len && isIDFIRST_lazy(name)) {
870 if ((name[0] == 'I' && name[1] == 'N' && name[2] == 'C')
871 || (name[0] == 'E' && name[1] == 'N' && name[2] == 'V')
872 || (name[0] == 'S' && name[1] == 'I' && name[2] == 'G'))
876 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
881 if (name[0] == 'S' && name[1] == 'T' && name[2] == 'D'
882 && name[3] == 'I' && name[4] == 'N')
886 if ((name[0] == 'S' && name[1] == 'T' && name[2] == 'D')
887 &&((name[3] == 'O' && name[4] == 'U' && name[5] == 'T')
888 ||(name[3] == 'E' && name[4] == 'R' && name[5] == 'R')))
892 if (name[0] == 'A' && name[1] == 'R' && name[2] == 'G'
893 && name[3] == 'V' && name[4] == 'O' && name[5] == 'U'
901 else if (IN_PERL_COMPILETIME) {
903 if (add && (PL_hints & HINT_STRICT_VARS) &&
904 sv_type != SVt_PVCV &&
905 sv_type != SVt_PVGV &&
906 sv_type != SVt_PVFM &&
907 sv_type != SVt_PVIO &&
908 !(len == 1 && sv_type == SVt_PV &&
909 (*name == 'a' || *name == 'b')) )
911 gvp = (GV**)hv_fetch(stash,name,len,0);
913 *gvp == (GV*)&PL_sv_undef ||
914 SvTYPE(*gvp) != SVt_PVGV)
918 else if ((sv_type == SVt_PV && !GvIMPORTED_SV(*gvp)) ||
919 (sv_type == SVt_PVAV && !GvIMPORTED_AV(*gvp)) ||
920 (sv_type == SVt_PVHV && !GvIMPORTED_HV(*gvp)) )
922 Perl_warn(aTHX_ "Variable \"%c%s\" is not imported",
923 sv_type == SVt_PVAV ? '@' :
924 sv_type == SVt_PVHV ? '%' : '$',
927 Perl_warn(aTHX_ "\t(Did you mean &%s instead?)\n", name);
933 stash = CopSTASH(PL_curcop);
939 /* By this point we should have a stash and a name */
943 SV * const err = Perl_mess(aTHX_
944 "Global symbol \"%s%s\" requires explicit package name",
945 (sv_type == SVt_PV ? "$"
946 : sv_type == SVt_PVAV ? "@"
947 : sv_type == SVt_PVHV ? "%"
950 if (USE_UTF8_IN_NAMES)
953 gv = gv_fetchpvn_flags("<none>::", 8, GV_ADDMULTI, SVt_PVHV);
955 /* symbol table under destruction */
964 if (!SvREFCNT(stash)) /* symbol table under destruction */
967 gvp = (GV**)hv_fetch(stash,name,len,add);
968 if (!gvp || *gvp == (GV*)&PL_sv_undef)
971 if (SvTYPE(gv) == SVt_PVGV) {
974 gv_init_sv(gv, sv_type);
975 if (*name=='!' && sv_type == SVt_PVHV && len==1)
979 } else if (no_init) {
981 } else if (no_expand && SvROK(gv)) {
985 /* Adding a new symbol */
987 if (add & GV_ADDWARN && ckWARN_d(WARN_INTERNAL))
988 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "Had to create %s unexpectedly", nambeg);
989 gv_init(gv, stash, name, len, add & GV_ADDMULTI);
990 gv_init_sv(gv, sv_type);
992 if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
993 : (PL_dowarn & G_WARN_ON ) ) )
996 /* set up magic where warranted */
1001 /* Nothing else to do.
1002 The compiler will probably turn the switch statement into a
1003 branch table. Make sure we avoid even that small overhead for
1004 the common case of lower case variable names. */
1008 const char * const name2 = name + 1;
1011 if (strEQ(name2, "RGV")) {
1012 IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START;
1014 else if (strEQ(name2, "RGVOUT")) {
1019 if (strnEQ(name2, "XPORT", 5))
1023 if (strEQ(name2, "SA")) {
1024 AV* const av = GvAVn(gv);
1026 sv_magic((SV*)av, (SV*)gv, PERL_MAGIC_isa, NULL, 0);
1027 /* NOTE: No support for tied ISA */
1028 if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA")
1029 && AvFILLp(av) == -1)
1032 av_push(av, newSVpvn(pname = "NDBM_File",9));
1033 gv_stashpvn(pname, 9, TRUE);
1034 av_push(av, newSVpvn(pname = "DB_File",7));
1035 gv_stashpvn(pname, 7, TRUE);
1036 av_push(av, newSVpvn(pname = "GDBM_File",9));
1037 gv_stashpvn(pname, 9, TRUE);
1038 av_push(av, newSVpvn(pname = "SDBM_File",9));
1039 gv_stashpvn(pname, 9, TRUE);
1040 av_push(av, newSVpvn(pname = "ODBM_File",9));
1041 gv_stashpvn(pname, 9, TRUE);
1046 if (strEQ(name2, "VERLOAD")) {
1047 HV* const hv = GvHVn(gv);
1049 hv_magic(hv, NULL, PERL_MAGIC_overload);
1053 if (strEQ(name2, "IG")) {
1057 Newxz(PL_psig_ptr, SIG_SIZE, SV*);
1058 Newxz(PL_psig_name, SIG_SIZE, SV*);
1059 Newxz(PL_psig_pend, SIG_SIZE, int);
1063 hv_magic(hv, NULL, PERL_MAGIC_sig);
1064 for (i = 1; i < SIG_SIZE; i++) {
1065 SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
1067 sv_setsv(*init, &PL_sv_undef);
1069 PL_psig_name[i] = 0;
1070 PL_psig_pend[i] = 0;
1075 if (strEQ(name2, "ERSION"))
1078 case '\003': /* $^CHILD_ERROR_NATIVE */
1079 if (strEQ(name2, "HILD_ERROR_NATIVE"))
1082 case '\005': /* $^ENCODING */
1083 if (strEQ(name2, "NCODING"))
1086 case '\017': /* $^OPEN */
1087 if (strEQ(name2, "PEN"))
1090 case '\024': /* ${^TAINT} */
1091 if (strEQ(name2, "AINT"))
1094 case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */
1095 if (strEQ(name2, "NICODE"))
1097 if (strEQ(name2, "TF8LOCALE"))
1099 if (strEQ(name2, "TF8CACHE"))
1102 case '\027': /* $^WARNING_BITS */
1103 if (strEQ(name2, "ARNING_BITS"))
1116 /* ensures variable is only digits */
1117 /* ${"1foo"} fails this test (and is thus writeable) */
1118 /* added by japhy, but borrowed from is_gv_magical */
1119 const char *end = name + len;
1120 while (--end > name) {
1121 if (!isDIGIT(*end)) return gv;
1128 /* Names of length 1. (Or 0. But name is NUL terminated, so that will
1129 be case '\0' in this switch statement (ie a default case) */
1135 sv_type == SVt_PVAV ||
1136 sv_type == SVt_PVHV ||
1137 sv_type == SVt_PVCV ||
1138 sv_type == SVt_PVFM ||
1141 PL_sawampersand = TRUE;
1145 sv_setpv(GvSVn(gv),PL_chopset);
1149 #ifdef COMPLEX_STATUS
1150 SvUPGRADE(GvSVn(gv), SVt_PVLV);
1156 /* If %! has been used, automatically load Errno.pm.
1157 The require will itself set errno, so in order to
1158 preserve its value we have to set up the magic
1159 now (rather than going to magicalize)
1162 sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1164 if (sv_type == SVt_PVHV)
1170 AV* const av = GvAVn(gv);
1171 sv_magic((SV*)av, NULL, PERL_MAGIC_regdata, NULL, 0);
1177 if (sv_type == SVt_PV && ckWARN2(WARN_DEPRECATED, WARN_SYNTAX))
1178 Perl_warner(aTHX_ packWARN2(WARN_DEPRECATED, WARN_SYNTAX),
1179 "$%c is no longer supported", *name);
1182 sv_setiv(GvSVn(gv), (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0);
1185 case '\010': /* $^H */
1187 HV *const hv = GvHVn(gv);
1188 hv_magic(hv, NULL, PERL_MAGIC_hints);
1194 AV* const av = GvAVn(gv);
1195 sv_magic((SV*)av, (SV*)av, PERL_MAGIC_regdata, NULL, 0);
1199 case '\023': /* $^S */
1210 SvREADONLY_on(GvSVn(gv));
1225 case '\001': /* $^A */
1226 case '\003': /* $^C */
1227 case '\004': /* $^D */
1228 case '\005': /* $^E */
1229 case '\006': /* $^F */
1230 case '\011': /* $^I, NOT \t in EBCDIC */
1231 case '\016': /* $^N */
1232 case '\017': /* $^O */
1233 case '\020': /* $^P */
1234 case '\024': /* $^T */
1235 case '\027': /* $^W */
1237 sv_magic(GvSVn(gv), (SV*)gv, PERL_MAGIC_sv, name, len);
1240 case '\014': /* $^L */
1241 sv_setpvn(GvSVn(gv),"\f",1);
1242 PL_formfeed = GvSVn(gv);
1245 sv_setpvn(GvSVn(gv),"\034",1);
1249 SV * const sv = GvSVn(gv);
1250 if (!sv_derived_from(PL_patchlevel, "version"))
1251 upg_version(PL_patchlevel);
1252 GvSV(gv) = vnumify(PL_patchlevel);
1253 SvREADONLY_on(GvSV(gv));
1257 case '\026': /* $^V */
1259 SV * const sv = GvSVn(gv);
1260 GvSV(gv) = new_version(PL_patchlevel);
1261 SvREADONLY_on(GvSV(gv));
1271 Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1275 const HV * const hv = GvSTASH(gv);
1280 sv_setpv(sv, prefix ? prefix : (const char *)"");
1282 name = HvNAME_get(hv);
1284 namelen = HvNAMELEN_get(hv);
1290 if (keepmain || strNE(name, "main")) {
1291 sv_catpvn(sv,name,namelen);
1294 sv_catpvn(sv,GvNAME(gv),GvNAMELEN(gv));
1298 Perl_gv_efullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain)
1300 const GV * const egv = GvEGV(gv);
1301 gv_fullname4(sv, egv ? egv : gv, prefix, keepmain);
1309 IO * const io = (IO*)newSV(0);
1311 sv_upgrade((SV *)io,SVt_PVIO);
1312 /* This used to read SvREFCNT(io) = 1;
1313 It's not clear why the reference count needed an explicit reset. NWC
1315 assert (SvREFCNT(io) == 1);
1317 /* Clear the stashcache because a new IO could overrule a package name */
1318 hv_clear(PL_stashcache);
1319 iogv = gv_fetchpvs("FileHandle::", 0, SVt_PVHV);
1320 /* unless exists($main::{FileHandle}) and defined(%main::FileHandle::) */
1321 if (!(iogv && GvHV(iogv) && HvARRAY(GvHV(iogv))))
1322 iogv = gv_fetchpvs("IO::Handle::", GV_ADD, SVt_PVHV);
1323 SvSTASH_set(io, (HV*)SvREFCNT_inc(GvHV(iogv)));
1328 Perl_gv_check(pTHX_ const HV *stash)
1333 if (!HvARRAY(stash))
1335 for (i = 0; i <= (I32) HvMAX(stash); i++) {
1337 for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) {
1340 if (HeKEY(entry)[HeKLEN(entry)-1] == ':' &&
1341 (gv = (GV*)HeVAL(entry)) && isGV(gv) && (hv = GvHV(gv)))
1343 if (hv != PL_defstash && hv != stash)
1344 gv_check(hv); /* nested package */
1346 else if (isALPHA(*HeKEY(entry))) {
1348 gv = (GV*)HeVAL(entry);
1349 if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv))
1352 /* performance hack: if filename is absolute and it's a standard
1353 * module, don't bother warning */
1354 #ifdef MACOS_TRADITIONAL
1355 # define LIB_COMPONENT ":lib:"
1357 # define LIB_COMPONENT "/lib/"
1360 && PERL_FILE_IS_ABSOLUTE(file)
1361 && (instr(file, LIB_COMPONENT) || instr(file, ".pm")))
1365 CopLINE_set(PL_curcop, GvLINE(gv));
1367 CopFILE(PL_curcop) = (char *)file; /* set for warning */
1369 CopFILEGV(PL_curcop) = gv_fetchfile(file);
1371 Perl_warner(aTHX_ packWARN(WARN_ONCE),
1372 "Name \"%s::%s\" used only once: possible typo",
1373 HvNAME_get(stash), GvNAME(gv));
1380 Perl_newGVgen(pTHX_ const char *pack)
1383 return gv_fetchpv(Perl_form(aTHX_ "%s::_GEN_%ld", pack, (long)PL_gensym++),
1387 /* hopefully this is only called on local symbol table entries */
1390 Perl_gp_ref(pTHX_ GP *gp)
1398 /* multi-named GPs cannot be used for method cache */
1399 SvREFCNT_dec(gp->gp_cv);
1404 /* Adding a new name to a subroutine invalidates method cache */
1405 PL_sub_generation++;
1412 Perl_gp_free(pTHX_ GV *gv)
1417 if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv)))
1419 if (gp->gp_refcnt == 0) {
1420 if (ckWARN_d(WARN_INTERNAL))
1421 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1422 "Attempt to free unreferenced glob pointers"
1423 pTHX__FORMAT pTHX__VALUE);
1427 /* Deleting the name of a subroutine invalidates method cache */
1428 PL_sub_generation++;
1430 if (--gp->gp_refcnt > 0) {
1431 if (gp->gp_egv == gv)
1437 unshare_hek(gp->gp_file_hek);
1438 SvREFCNT_dec(gp->gp_sv);
1439 SvREFCNT_dec(gp->gp_av);
1440 /* FIXME - another reference loop GV -> symtab -> GV ?
1441 Somehow gp->gp_hv can end up pointing at freed garbage. */
1442 if (gp->gp_hv && SvTYPE(gp->gp_hv) == SVt_PVHV) {
1443 const char *hvname = HvNAME_get(gp->gp_hv);
1444 if (PL_stashcache && hvname)
1445 hv_delete(PL_stashcache, hvname, HvNAMELEN_get(gp->gp_hv),
1447 SvREFCNT_dec(gp->gp_hv);
1449 SvREFCNT_dec(gp->gp_io);
1450 SvREFCNT_dec(gp->gp_cv);
1451 SvREFCNT_dec(gp->gp_form);
1458 Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
1460 AMT * const amtp = (AMT*)mg->mg_ptr;
1461 PERL_UNUSED_ARG(sv);
1463 if (amtp && AMT_AMAGIC(amtp)) {
1465 for (i = 1; i < NofAMmeth; i++) {
1466 CV * const cv = amtp->table[i];
1468 SvREFCNT_dec((SV *) cv);
1469 amtp->table[i] = NULL;
1476 /* Updates and caches the CV's */
1479 Perl_Gv_AMupdate(pTHX_ HV *stash)
1482 MAGIC* const mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1486 const AMT * const amtp = (AMT*)mg->mg_ptr;
1487 if (amtp->was_ok_am == PL_amagic_generation
1488 && amtp->was_ok_sub == PL_sub_generation) {
1489 return (bool)AMT_OVERLOADED(amtp);
1491 sv_unmagic((SV*)stash, PERL_MAGIC_overload_table);
1494 DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME_get(stash)) );
1497 amt.was_ok_am = PL_amagic_generation;
1498 amt.was_ok_sub = PL_sub_generation;
1499 amt.fallback = AMGfallNO;
1503 int filled = 0, have_ovl = 0;
1506 /* Work with "fallback" key, which we assume to be first in PL_AMG_names */
1508 /* Try to find via inheritance. */
1509 GV *gv = gv_fetchmeth(stash, PL_AMG_names[0], 2, -1);
1510 SV * const sv = gv ? GvSV(gv) : NULL;
1514 lim = DESTROY_amg; /* Skip overloading entries. */
1515 #ifdef PERL_DONT_CREATE_GVSV
1517 NOOP; /* Equivalent to !SvTRUE and !SvOK */
1520 else if (SvTRUE(sv))
1521 amt.fallback=AMGfallYES;
1523 amt.fallback=AMGfallNEVER;
1525 for (i = 1; i < lim; i++)
1526 amt.table[i] = NULL;
1527 for (; i < NofAMmeth; i++) {
1528 const char * const cooky = PL_AMG_names[i];
1529 /* Human-readable form, for debugging: */
1530 const char * const cp = (i >= DESTROY_amg ? cooky : AMG_id2name(i));
1531 const STRLEN l = strlen(cooky);
1533 DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n",
1534 cp, HvNAME_get(stash)) );
1535 /* don't fill the cache while looking up!
1536 Creation of inheritance stubs in intermediate packages may
1537 conflict with the logic of runtime method substitution.
1538 Indeed, for inheritance A -> B -> C, if C overloads "+0",
1539 then we could have created stubs for "(+0" in A and C too.
1540 But if B overloads "bool", we may want to use it for
1541 numifying instead of C's "+0". */
1542 if (i >= DESTROY_amg)
1543 gv = Perl_gv_fetchmeth_autoload(aTHX_ stash, cooky, l, 0);
1544 else /* Autoload taken care of below */
1545 gv = Perl_gv_fetchmeth(aTHX_ stash, cooky, l, -1);
1547 if (gv && (cv = GvCV(gv))) {
1549 if (GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")
1550 && strEQ(hvname = HvNAME_get(GvSTASH(CvGV(cv))), "overload")) {
1551 /* This is a hack to support autoloading..., while
1552 knowing *which* methods were declared as overloaded. */
1553 /* GvSV contains the name of the method. */
1555 SV *gvsv = GvSV(gv);
1557 DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%"SVf256\
1558 "\" for overloaded \"%s\" in package \"%.256s\"\n",
1559 (void*)GvSV(gv), cp, hvname) );
1560 if (!gvsv || !SvPOK(gvsv)
1561 || !(ngv = gv_fetchmethod_autoload(stash, SvPVX_const(gvsv),
1564 /* Can be an import stub (created by "can"). */
1565 const char * const name =
1567 ((gvsv && SvPOK(gvsv)) ? SvPVX_const(gvsv) : "???");
1568 Perl_croak(aTHX_ "%s method \"%.256s\" overloading \"%s\" "\
1569 "in package \"%.256s\"",
1570 (GvCVGEN(gv) ? "Stub found while resolving"
1574 cv = GvCV(gv = ngv);
1576 DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n",
1577 cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))),
1578 GvNAME(CvGV(cv))) );
1580 if (i < DESTROY_amg)
1582 } else if (gv) { /* Autoloaded... */
1586 amt.table[i]=(CV*)SvREFCNT_inc_simple(cv);
1589 AMT_AMAGIC_on(&amt);
1591 AMT_OVERLOADED_on(&amt);
1592 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1593 (char*)&amt, sizeof(AMT));
1597 /* Here we have no table: */
1599 AMT_AMAGIC_off(&amt);
1600 sv_magic((SV*)stash, 0, PERL_MAGIC_overload_table,
1601 (char*)&amt, sizeof(AMTS));
1607 Perl_gv_handler(pTHX_ HV *stash, I32 id)
1613 if (!stash || !HvNAME_get(stash))
1615 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1619 mg = mg_find((SV*)stash, PERL_MAGIC_overload_table);
1622 amtp = (AMT*)mg->mg_ptr;
1623 if ( amtp->was_ok_am != PL_amagic_generation
1624 || amtp->was_ok_sub != PL_sub_generation )
1626 if (AMT_AMAGIC(amtp)) {
1627 CV * const ret = amtp->table[id];
1628 if (ret && isGV(ret)) { /* Autoloading stab */
1629 /* Passing it through may have resulted in a warning
1630 "Inherited AUTOLOAD for a non-method deprecated", since
1631 our caller is going through a function call, not a method call.
1632 So return the CV for AUTOLOAD, setting $AUTOLOAD. */
1633 GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]);
1646 Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
1651 CV **cvp=NULL, **ocvp=NULL;
1652 AMT *amtp=NULL, *oamtp=NULL;
1653 int off = 0, off1, lr = 0, notfound = 0;
1654 int postpr = 0, force_cpy = 0;
1655 int assign = AMGf_assign & flags;
1656 const int assignshift = assign ? 1 : 0;
1661 if (!(AMGf_noleft & flags) && SvAMAGIC(left)
1662 && (stash = SvSTASH(SvRV(left)))
1663 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1664 && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1665 ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
1667 && ((cv = cvp[off=method+assignshift])
1668 || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
1674 cv = cvp[off=method])))) {
1675 lr = -1; /* Call method for left argument */
1677 if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) {
1680 /* look for substituted methods */
1681 /* In all the covered cases we should be called with assign==0. */
1685 if ((cv = cvp[off=add_ass_amg])
1686 || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) {
1687 right = &PL_sv_yes; lr = -1; assign = 1;
1692 if ((cv = cvp[off = subtr_ass_amg])
1693 || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) {
1694 right = &PL_sv_yes; lr = -1; assign = 1;
1698 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg]));
1701 (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg]));
1704 (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg]));
1707 (void)((cv = cvp[off=bool__amg])
1708 || (cv = cvp[off=numer_amg])
1709 || (cv = cvp[off=string_amg]));
1715 * SV* ref causes confusion with the interpreter variable of
1718 SV* const tmpRef=SvRV(left);
1719 if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) {
1721 * Just to be extra cautious. Maybe in some
1722 * additional cases sv_setsv is safe, too.
1724 SV* const newref = newSVsv(tmpRef);
1725 SvOBJECT_on(newref);
1726 SvSTASH_set(newref, (HV*)SvREFCNT_inc(SvSTASH(tmpRef)));
1732 if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg])
1733 && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) {
1734 SV* const nullsv=sv_2mortal(newSViv(0));
1736 SV* const lessp = amagic_call(left,nullsv,
1737 lt_amg,AMGf_noright);
1738 logic = SvTRUE(lessp);
1740 SV* const lessp = amagic_call(left,nullsv,
1741 ncmp_amg,AMGf_noright);
1742 logic = (SvNV(lessp) < 0);
1745 if (off==subtr_amg) {
1756 if ((cv = cvp[off=subtr_amg])) {
1758 left = sv_2mortal(newSViv(0));
1763 case iter_amg: /* XXXX Eventually should do to_gv. */
1765 return NULL; /* Delegate operation to standard mechanisms. */
1773 return left; /* Delegate operation to standard mechanisms. */
1778 if (!cv) goto not_found;
1779 } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
1780 && (stash = SvSTASH(SvRV(right)))
1781 && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
1782 && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
1783 ? (amtp = (AMT*)mg->mg_ptr)->table
1785 && (cv = cvp[off=method])) { /* Method for right
1788 } else if (((ocvp && oamtp->fallback > AMGfallNEVER
1789 && (cvp=ocvp) && (lr = -1))
1790 || (cvp && amtp->fallback > AMGfallNEVER && (lr=1)))
1791 && !(flags & AMGf_unary)) {
1792 /* We look for substitution for
1793 * comparison operations and
1795 if (method==concat_amg || method==concat_ass_amg
1796 || method==repeat_amg || method==repeat_ass_amg) {
1797 return NULL; /* Delegate operation to string conversion */
1807 postpr = 1; off=ncmp_amg; break;
1814 postpr = 1; off=scmp_amg; break;
1816 if (off != -1) cv = cvp[off];
1821 not_found: /* No method found, either report or croak */
1829 return left; /* Delegate operation to standard mechanisms. */
1832 if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */
1833 notfound = 1; lr = -1;
1834 } else if (cvp && (cv=cvp[nomethod_amg])) {
1835 notfound = 1; lr = 1;
1838 if (off==-1) off=method;
1839 msg = sv_2mortal(Perl_newSVpvf(aTHX_
1840 "Operation \"%s\": no method found,%sargument %s%s%s%s",
1841 AMG_id2name(method + assignshift),
1842 (flags & AMGf_unary ? " " : "\n\tleft "),
1844 "in overloaded package ":
1845 "has no overloaded magic",
1847 HvNAME_get(SvSTASH(SvRV(left))):
1850 ",\n\tright argument in overloaded package ":
1853 : ",\n\tright argument has no overloaded magic"),
1855 HvNAME_get(SvSTASH(SvRV(right))):
1857 if (amtp && amtp->fallback >= AMGfallYES) {
1858 DEBUG_o( Perl_deb(aTHX_ "%s", SvPVX_const(msg)) );
1860 Perl_croak(aTHX_ "%"SVf, (void*)msg);
1864 force_cpy = force_cpy || assign;
1869 DEBUG_o(Perl_deb(aTHX_
1870 "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %s%s\n",
1872 method+assignshift==off? "" :
1874 method+assignshift==off? "" :
1875 AMG_id2name(method+assignshift),
1876 method+assignshift==off? "" : "\")",
1877 flags & AMGf_unary? "" :
1878 lr==1 ? " for right argument": " for left argument",
1879 flags & AMGf_unary? " for argument" : "",
1880 stash ? HvNAME_get(stash) : "null",
1881 fl? ",\n\tassignment variant used": "") );
1884 /* Since we use shallow copy during assignment, we need
1885 * to dublicate the contents, probably calling user-supplied
1886 * version of copy operator
1888 /* We need to copy in following cases:
1889 * a) Assignment form was called.
1890 * assignshift==1, assign==T, method + 1 == off
1891 * b) Increment or decrement, called directly.
1892 * assignshift==0, assign==0, method + 0 == off
1893 * c) Increment or decrement, translated to assignment add/subtr.
1894 * assignshift==0, assign==T,
1896 * d) Increment or decrement, translated to nomethod.
1897 * assignshift==0, assign==0,
1899 * e) Assignment form translated to nomethod.
1900 * assignshift==1, assign==T, method + 1 != off
1903 /* off is method, method+assignshift, or a result of opcode substitution.
1904 * In the latter case assignshift==0, so only notfound case is important.
1906 if (( (method + assignshift == off)
1907 && (assign || (method == inc_amg) || (method == dec_amg)))
1914 const bool oldcatch = CATCH_GET;
1917 Zero(&myop, 1, BINOP);
1918 myop.op_last = (OP *) &myop;
1919 myop.op_next = NULL;
1920 myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED;
1922 PUSHSTACKi(PERLSI_OVERLOAD);
1925 PL_op = (OP *) &myop;
1926 if (PERLDB_SUB && PL_curstash != PL_debstash)
1927 PL_op->op_private |= OPpENTERSUB_DB;
1931 EXTEND(SP, notfound + 5);
1932 PUSHs(lr>0? right: left);
1933 PUSHs(lr>0? left: right);
1934 PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no ));
1936 PUSHs( sv_2mortal(newSVpv(AMG_id2name(method + assignshift),0)));
1941 if ((PL_op = Perl_pp_entersub(aTHX)))
1949 CATCH_SET(oldcatch);
1956 ans=SvIV(res)<=0; break;
1959 ans=SvIV(res)<0; break;
1962 ans=SvIV(res)>=0; break;
1965 ans=SvIV(res)>0; break;
1968 ans=SvIV(res)==0; break;
1971 ans=SvIV(res)!=0; break;
1974 SvSetSV(left,res); return left;
1976 ans=!SvTRUE(res); break;
1981 } else if (method==copy_amg) {
1983 Perl_croak(aTHX_ "Copy method did not return a reference");
1985 return SvREFCNT_inc(SvRV(res));
1993 =for apidoc is_gv_magical_sv
1995 Returns C<TRUE> if given the name of a magical GV. Calls is_gv_magical.
2001 Perl_is_gv_magical_sv(pTHX_ SV *name, U32 flags)
2004 const char * const temp = SvPV_const(name, len);
2005 return is_gv_magical(temp, len, flags);
2009 =for apidoc is_gv_magical
2011 Returns C<TRUE> if given the name of a magical GV.
2013 Currently only useful internally when determining if a GV should be
2014 created even in rvalue contexts.
2016 C<flags> is not used at present but available for future extension to
2017 allow selecting particular classes of magical variable.
2019 Currently assumes that C<name> is NUL terminated (as well as len being valid).
2020 This assumption is met by all callers within the perl core, which all pass
2021 pointers returned by SvPV.
2026 Perl_is_gv_magical(pTHX_ const char *name, STRLEN len, U32 flags)
2028 PERL_UNUSED_CONTEXT;
2029 PERL_UNUSED_ARG(flags);
2032 const char * const name1 = name + 1;
2035 if (len == 3 && name1[1] == 'S' && name[2] == 'A')
2039 if (len == 8 && strEQ(name1, "VERLOAD"))
2043 if (len == 3 && name[1] == 'I' && name[2] == 'G')
2046 /* Using ${^...} variables is likely to be sufficiently rare that
2047 it seems sensible to avoid the space hit of also checking the
2049 case '\017': /* ${^OPEN} */
2050 if (strEQ(name1, "PEN"))
2053 case '\024': /* ${^TAINT} */
2054 if (strEQ(name1, "AINT"))
2057 case '\025': /* ${^UNICODE} */
2058 if (strEQ(name1, "NICODE"))
2060 if (strEQ(name1, "TF8LOCALE"))
2063 case '\027': /* ${^WARNING_BITS} */
2064 if (strEQ(name1, "ARNING_BITS"))
2077 const char *end = name + len;
2078 while (--end > name) {
2086 /* Because we're already assuming that name is NUL terminated
2087 below, we can treat an empty name as "\0" */
2114 case '\001': /* $^A */
2115 case '\003': /* $^C */
2116 case '\004': /* $^D */
2117 case '\005': /* $^E */
2118 case '\006': /* $^F */
2119 case '\010': /* $^H */
2120 case '\011': /* $^I, NOT \t in EBCDIC */
2121 case '\014': /* $^L */
2122 case '\016': /* $^N */
2123 case '\017': /* $^O */
2124 case '\020': /* $^P */
2125 case '\023': /* $^S */
2126 case '\024': /* $^T */
2127 case '\026': /* $^V */
2128 case '\027': /* $^W */
2148 Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
2154 PERL_UNUSED_ARG(flags);
2157 Perl_croak(aTHX_ "panic: gv name too long (%"UVuf")", (UV) len);
2159 if (!(flags & GV_ADD) && GvNAME_HEK(gv)) {
2160 unshare_hek(GvNAME_HEK(gv));
2163 PERL_HASH(hash, name, len);
2164 GvNAME_HEK(gv) = share_hek(name, len, hash);
2169 * c-indentation-style: bsd
2171 * indent-tabs-mode: t
2174 * ex: set ts=8 sts=4 sw=4 noet: