3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 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 * Then he heard Merry change the note, and up went the Horn-cry of Buckland,
15 * Awake! Awake! Fear, Fire, Foes! Awake!
20 #define PERL_IN_PP_HOT_C
34 PL_curcop = (COP*)PL_op;
35 TAINT_NOT; /* Each statement is presumed innocent */
36 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
45 if (PL_op->op_private & OPpLVAL_INTRO)
46 PUSHs(save_scalar(cGVOP_gv));
48 PUSHs(GvSV(cGVOP_gv));
59 PL_curcop = (COP*)PL_op;
65 PUSHMARK(PL_stack_sp);
80 XPUSHs((SV*)cGVOP_gv);
91 RETURNOP(cLOGOP->op_other);
99 if (PL_op->op_private & OPpASSIGN_BACKWARDS) {
101 temp = left; left = right; right = temp;
103 if (PL_tainting && PL_tainted && !SvTAINTED(left))
105 SvSetMagicSV(right, left);
114 RETURNOP(cLOGOP->op_other);
116 RETURNOP(cLOGOP->op_next);
122 TAINT_NOT; /* Each statement is presumed innocent */
123 PL_stack_sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
125 oldsave = PL_scopestack[PL_scopestack_ix - 1];
126 LEAVE_SCOPE(oldsave);
132 dSP; dATARGET; tryAMAGICbin(concat,opASSIGN);
139 char* rpv = SvPV(right, rlen); /* mg_get(right) happens here */
140 bool rbyte = !SvUTF8(right), rcopied = FALSE;
142 if (TARG == right && right != left) {
143 right = sv_2mortal(newSVpvn(rpv, rlen));
144 rpv = SvPV(right, rlen); /* no point setting UTF8 here */
149 lpv = SvPV(left, llen); /* mg_get(left) may happen here */
150 lbyte = !SvUTF8(left);
151 sv_setpvn(TARG, lpv, llen);
157 else { /* TARG == left */
158 if (SvGMAGICAL(left))
159 mg_get(left); /* or mg_get(left) may happen here */
162 lpv = SvPV_nomg(left, llen);
163 lbyte = !SvUTF8(left);
166 #if defined(PERL_Y2KWARN)
167 if ((SvIOK(right) || SvNOK(right)) && ckWARN(WARN_Y2K) && SvOK(TARG)) {
168 if (llen >= 2 && lpv[llen - 2] == '1' && lpv[llen - 1] == '9'
169 && (llen == 2 || !isDIGIT(lpv[llen - 3])))
171 Perl_warner(aTHX_ packWARN(WARN_Y2K), "Possible Y2K bug: %s",
172 "about to append an integer to '19'");
177 if (lbyte != rbyte) {
179 sv_utf8_upgrade_nomg(TARG);
182 right = sv_2mortal(newSVpvn(rpv, rlen));
183 sv_utf8_upgrade_nomg(right);
184 rpv = SvPV(right, rlen);
187 sv_catpvn_nomg(TARG, rpv, rlen);
198 if (PL_op->op_flags & OPf_MOD) {
199 if (PL_op->op_private & OPpLVAL_INTRO)
200 SAVECLEARSV(PAD_SVl(PL_op->op_targ));
201 else if (PL_op->op_private & OPpDEREF) {
203 vivify_ref(PAD_SVl(PL_op->op_targ), PL_op->op_private & OPpDEREF);
212 tryAMAGICunTARGET(iter, 0);
213 PL_last_in_gv = (GV*)(*PL_stack_sp--);
214 if (SvTYPE(PL_last_in_gv) != SVt_PVGV) {
215 if (SvROK(PL_last_in_gv) && SvTYPE(SvRV(PL_last_in_gv)) == SVt_PVGV)
216 PL_last_in_gv = (GV*)SvRV(PL_last_in_gv);
219 XPUSHs((SV*)PL_last_in_gv);
222 PL_last_in_gv = (GV*)(*PL_stack_sp--);
225 return do_readline();
230 dSP; tryAMAGICbinSET(eq,0);
231 #ifndef NV_PRESERVES_UV
232 if (SvROK(TOPs) && SvROK(TOPm1s)) {
234 SETs(boolSV(SvRV(TOPs) == SvRV(TOPp1s)));
238 #ifdef PERL_PRESERVE_IVUV
241 /* Unless the left argument is integer in range we are going
242 to have to use NV maths. Hence only attempt to coerce the
243 right argument if we know the left is integer. */
246 bool auvok = SvUOK(TOPm1s);
247 bool buvok = SvUOK(TOPs);
249 if (auvok == buvok) { /* ## IV == IV or UV == UV ## */
250 /* Casting IV to UV before comparison isn't going to matter
251 on 2s complement. On 1s complement or sign&magnitude
252 (if we have any of them) it could to make negative zero
253 differ from normal zero. As I understand it. (Need to
254 check - is negative zero implementation defined behaviour
256 UV buv = SvUVX(POPs);
257 UV auv = SvUVX(TOPs);
259 SETs(boolSV(auv == buv));
262 { /* ## Mixed IV,UV ## */
266 /* == is commutative so doesn't matter which is left or right */
268 /* top of stack (b) is the iv */
277 /* As uv is a UV, it's >0, so it cannot be == */
281 /* we know iv is >= 0 */
282 SETs(boolSV((UV)iv == SvUVX(uvp)));
290 SETs(boolSV(TOPn == value));
298 if (SvTYPE(TOPs) > SVt_PVLV)
299 DIE(aTHX_ PL_no_modify);
300 if (!SvREADONLY(TOPs) && SvIOK_notUV(TOPs) && !SvNOK(TOPs) && !SvPOK(TOPs)
301 && SvIVX(TOPs) != IV_MAX)
304 SvFLAGS(TOPs) &= ~(SVp_NOK|SVp_POK);
306 else /* Do all the PERL_PRESERVE_IVUV conditionals in sv_inc */
319 RETURNOP(cLOGOP->op_other);
325 /* Most of this is lifted straight from pp_defined */
330 if (!sv || !SvANY(sv)) {
332 RETURNOP(cLOGOP->op_other);
335 switch (SvTYPE(sv)) {
337 if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
341 if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
345 if (CvROOT(sv) || CvXSUB(sv))
356 RETURNOP(cLOGOP->op_other);
361 dSP; dATARGET; bool useleft; tryAMAGICbin(add,opASSIGN);
362 useleft = USE_LEFT(TOPm1s);
363 #ifdef PERL_PRESERVE_IVUV
364 /* We must see if we can perform the addition with integers if possible,
365 as the integer code detects overflow while the NV code doesn't.
366 If either argument hasn't had a numeric conversion yet attempt to get
367 the IV. It's important to do this now, rather than just assuming that
368 it's not IOK as a PV of "9223372036854775806" may not take well to NV
369 addition, and an SV which is NOK, NV=6.0 ought to be coerced to
370 integer in case the second argument is IV=9223372036854775806
371 We can (now) rely on sv_2iv to do the right thing, only setting the
372 public IOK flag if the value in the NV (or PV) slot is truly integer.
374 A side effect is that this also aggressively prefers integer maths over
375 fp maths for integer values.
377 How to detect overflow?
379 C 99 section 6.2.6.1 says
381 The range of nonnegative values of a signed integer type is a subrange
382 of the corresponding unsigned integer type, and the representation of
383 the same value in each type is the same. A computation involving
384 unsigned operands can never overflow, because a result that cannot be
385 represented by the resulting unsigned integer type is reduced modulo
386 the number that is one greater than the largest value that can be
387 represented by the resulting type.
391 which I read as "unsigned ints wrap."
393 signed integer overflow seems to be classed as "exception condition"
395 If an exceptional condition occurs during the evaluation of an
396 expression (that is, if the result is not mathematically defined or not
397 in the range of representable values for its type), the behavior is
400 (6.5, the 5th paragraph)
402 I had assumed that on 2s complement machines signed arithmetic would
403 wrap, hence coded pp_add and pp_subtract on the assumption that
404 everything perl builds on would be happy. After much wailing and
405 gnashing of teeth it would seem that irix64 knows its ANSI spec well,
406 knows that it doesn't need to, and doesn't. Bah. Anyway, the all-
407 unsigned code below is actually shorter than the old code. :-)
412 /* Unless the left argument is integer in range we are going to have to
413 use NV maths. Hence only attempt to coerce the right argument if
414 we know the left is integer. */
422 /* left operand is undef, treat as zero. + 0 is identity,
423 Could SETi or SETu right now, but space optimise by not adding
424 lots of code to speed up what is probably a rarish case. */
426 /* Left operand is defined, so is it IV? */
429 if ((auvok = SvUOK(TOPm1s)))
432 register IV aiv = SvIVX(TOPm1s);
435 auvok = 1; /* Now acting as a sign flag. */
436 } else { /* 2s complement assumption for IV_MIN */
444 bool result_good = 0;
447 bool buvok = SvUOK(TOPs);
452 register IV biv = SvIVX(TOPs);
459 /* ?uvok if value is >= 0. basically, flagged as UV if it's +ve,
460 else "IV" now, independent of how it came in.
461 if a, b represents positive, A, B negative, a maps to -A etc
466 all UV maths. negate result if A negative.
467 add if signs same, subtract if signs differ. */
473 /* Must get smaller */
479 /* result really should be -(auv-buv). as its negation
480 of true value, need to swap our result flag */
497 if (result <= (UV)IV_MIN)
500 /* result valid, but out of range for IV. */
505 } /* Overflow, drop through to NVs. */
512 /* left operand is undef, treat as zero. + 0.0 is identity. */
516 SETn( value + TOPn );
524 AV *av = GvAV(cGVOP_gv);
525 U32 lval = PL_op->op_flags & OPf_MOD;
526 SV** svp = av_fetch(av, PL_op->op_private, lval);
527 SV *sv = (svp ? *svp : &PL_sv_undef);
529 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
530 sv = sv_mortalcopy(sv);
539 do_join(TARG, *MARK, MARK, SP);
550 * We ass_u_me that LvTARGOFF() comes first, and that two STRLENs
551 * will be enough to hold an OP*.
553 SV* sv = sv_newmortal();
554 sv_upgrade(sv, SVt_PVLV);
556 Copy(&PL_op, &LvTARGOFF(sv), 1, OP*);
564 /* Oversized hot code. */
568 dSP; dMARK; dORIGMARK;
574 if (PL_op->op_flags & OPf_STACKED)
579 if (gv && (io = GvIO(gv))
580 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
583 if (MARK == ORIGMARK) {
584 /* If using default handle then we need to make space to
585 * pass object as 1st arg, so move other args up ...
589 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
593 *MARK = SvTIED_obj((SV*)io, mg);
596 call_method("PRINT", G_SCALAR);
604 if (!(io = GvIO(gv))) {
605 if ((GvEGV(gv)) && (io = GvIO(GvEGV(gv)))
606 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
608 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
609 report_evil_fh(gv, io, PL_op->op_type);
610 SETERRNO(EBADF,RMS_IFI);
613 else if (!(fp = IoOFP(io))) {
614 if (ckWARN2(WARN_CLOSED, WARN_IO)) {
616 report_evil_fh(gv, io, OP_phoney_INPUT_ONLY);
617 else if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
618 report_evil_fh(gv, io, PL_op->op_type);
620 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
625 if (PL_ofs_sv && SvOK(PL_ofs_sv)) {
627 if (!do_print(*MARK, fp))
631 if (!do_print(PL_ofs_sv, fp)) { /* $, */
640 if (!do_print(*MARK, fp))
648 if (PL_ors_sv && SvOK(PL_ors_sv))
649 if (!do_print(PL_ors_sv, fp)) /* $\ */
652 if (IoFLAGS(io) & IOf_FLUSH)
653 if (PerlIO_flush(fp) == EOF)
674 tryAMAGICunDEREF(to_av);
677 if (SvTYPE(av) != SVt_PVAV)
678 DIE(aTHX_ "Not an ARRAY reference");
679 if (PL_op->op_flags & OPf_REF) {
684 if (GIMME == G_SCALAR)
685 Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
689 else if (PL_op->op_flags & OPf_MOD
690 && PL_op->op_private & OPpLVAL_INTRO)
691 Perl_croak(aTHX_ PL_no_localize_ref);
694 if (SvTYPE(sv) == SVt_PVAV) {
696 if (PL_op->op_flags & OPf_REF) {
701 if (GIMME == G_SCALAR)
702 Perl_croak(aTHX_ "Can't return array to lvalue"
711 if (SvTYPE(sv) != SVt_PVGV) {
715 if (SvGMAGICAL(sv)) {
721 if (PL_op->op_flags & OPf_REF ||
722 PL_op->op_private & HINT_STRICT_REFS)
723 DIE(aTHX_ PL_no_usym, "an ARRAY");
724 if (ckWARN(WARN_UNINITIALIZED))
726 if (GIMME == G_ARRAY) {
733 if ((PL_op->op_flags & OPf_SPECIAL) &&
734 !(PL_op->op_flags & OPf_MOD))
736 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVAV);
738 && (!is_gv_magical(sym,len,0)
739 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV))))
745 if (PL_op->op_private & HINT_STRICT_REFS)
746 DIE(aTHX_ PL_no_symref, sym, "an ARRAY");
747 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVAV);
754 if (PL_op->op_private & OPpLVAL_INTRO)
756 if (PL_op->op_flags & OPf_REF) {
761 if (GIMME == G_SCALAR)
762 Perl_croak(aTHX_ "Can't return array to lvalue"
770 if (GIMME == G_ARRAY) {
771 I32 maxarg = AvFILL(av) + 1;
772 (void)POPs; /* XXXX May be optimized away? */
774 if (SvRMAGICAL(av)) {
776 for (i=0; i < (U32)maxarg; i++) {
777 SV **svp = av_fetch(av, i, FALSE);
778 SP[i+1] = (svp) ? *svp : &PL_sv_undef;
782 Copy(AvARRAY(av), SP+1, maxarg, SV*);
786 else if (GIMME_V == G_SCALAR) {
788 I32 maxarg = AvFILL(av) + 1;
802 tryAMAGICunDEREF(to_hv);
805 if (SvTYPE(hv) != SVt_PVHV)
806 DIE(aTHX_ "Not a HASH reference");
807 if (PL_op->op_flags & OPf_REF) {
812 if (GIMME != G_SCALAR)
813 Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
817 else if (PL_op->op_flags & OPf_MOD
818 && PL_op->op_private & OPpLVAL_INTRO)
819 Perl_croak(aTHX_ PL_no_localize_ref);
822 if (SvTYPE(sv) == SVt_PVHV) {
824 if (PL_op->op_flags & OPf_REF) {
829 if (GIMME == G_SCALAR)
830 Perl_croak(aTHX_ "Can't return hash to lvalue"
839 if (SvTYPE(sv) != SVt_PVGV) {
843 if (SvGMAGICAL(sv)) {
849 if (PL_op->op_flags & OPf_REF ||
850 PL_op->op_private & HINT_STRICT_REFS)
851 DIE(aTHX_ PL_no_usym, "a HASH");
852 if (ckWARN(WARN_UNINITIALIZED))
854 if (GIMME == G_ARRAY) {
861 if ((PL_op->op_flags & OPf_SPECIAL) &&
862 !(PL_op->op_flags & OPf_MOD))
864 gv = (GV*)gv_fetchpv(sym, FALSE, SVt_PVHV);
866 && (!is_gv_magical(sym,len,0)
867 || !(gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV))))
873 if (PL_op->op_private & HINT_STRICT_REFS)
874 DIE(aTHX_ PL_no_symref, sym, "a HASH");
875 gv = (GV*)gv_fetchpv(sym, TRUE, SVt_PVHV);
882 if (PL_op->op_private & OPpLVAL_INTRO)
884 if (PL_op->op_flags & OPf_REF) {
889 if (GIMME == G_SCALAR)
890 Perl_croak(aTHX_ "Can't return hash to lvalue"
898 if (GIMME == G_ARRAY) { /* array wanted */
899 *PL_stack_sp = (SV*)hv;
905 Perl_sv_setpvf(aTHX_ TARG, "%"IVdf"/%"IVdf,
906 (IV)HvFILL(hv), (IV)HvMAX(hv) + 1);
916 S_do_oddball(pTHX_ HV *hash, SV **relem, SV **firstrelem)
922 if (ckWARN(WARN_MISC)) {
923 if (relem == firstrelem &&
925 (SvTYPE(SvRV(*relem)) == SVt_PVAV ||
926 SvTYPE(SvRV(*relem)) == SVt_PVHV))
928 Perl_warner(aTHX_ packWARN(WARN_MISC),
929 "Reference found where even-sized list expected");
932 Perl_warner(aTHX_ packWARN(WARN_MISC),
933 "Odd number of elements in hash assignment");
936 tmpstr = NEWSV(29,0);
937 didstore = hv_store_ent(hash,*relem,tmpstr,0);
938 if (SvMAGICAL(hash)) {
939 if (SvSMAGICAL(tmpstr))
951 SV **lastlelem = PL_stack_sp;
952 SV **lastrelem = PL_stack_base + POPMARK;
953 SV **firstrelem = PL_stack_base + POPMARK + 1;
954 SV **firstlelem = lastrelem + 1;
967 PL_delaymagic = DM_DELAY; /* catch simultaneous items */
969 /* If there's a common identifier on both sides we have to take
970 * special care that assigning the identifier on the left doesn't
971 * clobber a value on the right that's used later in the list.
973 if (PL_op->op_private & (OPpASSIGN_COMMON)) {
974 EXTEND_MORTAL(lastrelem - firstrelem + 1);
975 for (relem = firstrelem; relem <= lastrelem; relem++) {
978 TAINT_NOT; /* Each item is independent */
979 *relem = sv_mortalcopy(sv);
989 while (lelem <= lastlelem) {
990 TAINT_NOT; /* Each item stands on its own, taintwise. */
992 switch (SvTYPE(sv)) {
995 magic = SvMAGICAL(ary) != 0;
997 av_extend(ary, lastrelem - relem);
999 while (relem <= lastrelem) { /* gobble up all the rest */
1003 sv_setsv(sv,*relem);
1005 didstore = av_store(ary,i++,sv);
1015 case SVt_PVHV: { /* normal hash */
1019 magic = SvMAGICAL(hash) != 0;
1022 while (relem < lastrelem) { /* gobble up all the rest */
1027 sv = &PL_sv_no, relem++;
1028 tmpstr = NEWSV(29,0);
1030 sv_setsv(tmpstr,*relem); /* value */
1031 *(relem++) = tmpstr;
1032 didstore = hv_store_ent(hash,sv,tmpstr,0);
1034 if (SvSMAGICAL(tmpstr))
1041 if (relem == lastrelem) {
1042 do_oddball(hash, relem, firstrelem);
1048 if (SvIMMORTAL(sv)) {
1049 if (relem <= lastrelem)
1053 if (relem <= lastrelem) {
1054 sv_setsv(sv, *relem);
1058 sv_setsv(sv, &PL_sv_undef);
1063 if (PL_delaymagic & ~DM_DELAY) {
1064 if (PL_delaymagic & DM_UID) {
1065 #ifdef HAS_SETRESUID
1066 (void)setresuid(PL_uid,PL_euid,(Uid_t)-1);
1068 # ifdef HAS_SETREUID
1069 (void)setreuid(PL_uid,PL_euid);
1072 if ((PL_delaymagic & DM_UID) == DM_RUID) {
1073 (void)setruid(PL_uid);
1074 PL_delaymagic &= ~DM_RUID;
1076 # endif /* HAS_SETRUID */
1078 if ((PL_delaymagic & DM_UID) == DM_EUID) {
1079 (void)seteuid(PL_uid);
1080 PL_delaymagic &= ~DM_EUID;
1082 # endif /* HAS_SETEUID */
1083 if (PL_delaymagic & DM_UID) {
1084 if (PL_uid != PL_euid)
1085 DIE(aTHX_ "No setreuid available");
1086 (void)PerlProc_setuid(PL_uid);
1088 # endif /* HAS_SETREUID */
1089 #endif /* HAS_SETRESUID */
1090 PL_uid = PerlProc_getuid();
1091 PL_euid = PerlProc_geteuid();
1093 if (PL_delaymagic & DM_GID) {
1094 #ifdef HAS_SETRESGID
1095 (void)setresgid(PL_gid,PL_egid,(Gid_t)-1);
1097 # ifdef HAS_SETREGID
1098 (void)setregid(PL_gid,PL_egid);
1101 if ((PL_delaymagic & DM_GID) == DM_RGID) {
1102 (void)setrgid(PL_gid);
1103 PL_delaymagic &= ~DM_RGID;
1105 # endif /* HAS_SETRGID */
1107 if ((PL_delaymagic & DM_GID) == DM_EGID) {
1108 (void)setegid(PL_gid);
1109 PL_delaymagic &= ~DM_EGID;
1111 # endif /* HAS_SETEGID */
1112 if (PL_delaymagic & DM_GID) {
1113 if (PL_gid != PL_egid)
1114 DIE(aTHX_ "No setregid available");
1115 (void)PerlProc_setgid(PL_gid);
1117 # endif /* HAS_SETREGID */
1118 #endif /* HAS_SETRESGID */
1119 PL_gid = PerlProc_getgid();
1120 PL_egid = PerlProc_getegid();
1122 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
1127 if (gimme == G_VOID)
1128 SP = firstrelem - 1;
1129 else if (gimme == G_SCALAR) {
1132 SETi(lastrelem - firstrelem + 1);
1138 SP = firstrelem + (lastlelem - firstlelem);
1139 lelem = firstlelem + (relem - firstrelem);
1141 *relem++ = (lelem <= lastlelem) ? *lelem++ : &PL_sv_undef;
1149 register PMOP *pm = cPMOP;
1150 SV *rv = sv_newmortal();
1151 SV *sv = newSVrv(rv, "Regexp");
1152 if (pm->op_pmdynflags & PMdf_TAINTED)
1154 sv_magic(sv,(SV*)ReREFCNT_inc(PM_GETRE(pm)), PERL_MAGIC_qr,0,0);
1161 register PMOP *pm = cPMOP;
1167 I32 r_flags = REXEC_CHECKED;
1168 char *truebase; /* Start of string */
1169 register REGEXP *rx = PM_GETRE(pm);
1174 I32 oldsave = PL_savestack_ix;
1175 I32 update_minmatch = 1;
1176 I32 had_zerolen = 0;
1178 if (PL_op->op_flags & OPf_STACKED)
1185 PUTBACK; /* EVAL blocks need stack_sp. */
1186 s = SvPV(TARG, len);
1189 DIE(aTHX_ "panic: pp_match");
1190 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1191 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1194 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1196 /* PMdf_USED is set after a ?? matches once */
1197 if (pm->op_pmdynflags & PMdf_USED) {
1199 if (gimme == G_ARRAY)
1204 /* empty pattern special-cased to use last successful pattern if possible */
1205 if (!rx->prelen && PL_curpm) {
1210 if (rx->minlen > (I32)len)
1215 /* XXXX What part of this is needed with true \G-support? */
1216 if ((global = dynpm->op_pmflags & PMf_GLOBAL)) {
1218 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1219 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1220 if (mg && mg->mg_len >= 0) {
1221 if (!(rx->reganch & ROPT_GPOS_SEEN))
1222 rx->endp[0] = rx->startp[0] = mg->mg_len;
1223 else if (rx->reganch & ROPT_ANCH_GPOS) {
1224 r_flags |= REXEC_IGNOREPOS;
1225 rx->endp[0] = rx->startp[0] = mg->mg_len;
1227 minmatch = (mg->mg_flags & MGf_MINMATCH);
1228 update_minmatch = 0;
1232 if ((!global && rx->nparens)
1233 || SvTEMP(TARG) || PL_sawampersand)
1234 r_flags |= REXEC_COPY_STR;
1236 r_flags |= REXEC_SCREAM;
1238 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1239 SAVEINT(PL_multiline);
1240 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1244 if (global && rx->startp[0] != -1) {
1245 t = s = rx->endp[0] + truebase;
1246 if ((s + rx->minlen) > strend)
1248 if (update_minmatch++)
1249 minmatch = had_zerolen;
1251 if (rx->reganch & RE_USE_INTUIT &&
1252 DO_UTF8(TARG) == ((rx->reganch & ROPT_UTF8) != 0)) {
1253 PL_bostr = truebase;
1254 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1258 if ( (rx->reganch & ROPT_CHECK_ALL)
1260 && ((rx->reganch & ROPT_NOSCAN)
1261 || !((rx->reganch & RE_INTUIT_TAIL)
1262 && (r_flags & REXEC_SCREAM)))
1263 && !SvROK(TARG)) /* Cannot trust since INTUIT cannot guess ^ */
1266 if (CALLREGEXEC(aTHX_ rx, s, strend, truebase, minmatch, TARG, NULL, r_flags))
1269 if (dynpm->op_pmflags & PMf_ONCE)
1270 dynpm->op_pmdynflags |= PMdf_USED;
1279 RX_MATCH_TAINTED_on(rx);
1280 TAINT_IF(RX_MATCH_TAINTED(rx));
1281 if (gimme == G_ARRAY) {
1282 I32 nparens, i, len;
1284 nparens = rx->nparens;
1285 if (global && !nparens)
1289 SPAGAIN; /* EVAL blocks could move the stack. */
1290 EXTEND(SP, nparens + i);
1291 EXTEND_MORTAL(nparens + i);
1292 for (i = !i; i <= nparens; i++) {
1293 PUSHs(sv_newmortal());
1295 if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
1296 len = rx->endp[i] - rx->startp[i];
1297 if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
1298 len < 0 || len > strend - s)
1299 DIE(aTHX_ "panic: pp_match start/end pointers");
1300 s = rx->startp[i] + truebase;
1301 sv_setpvn(*SP, s, len);
1302 if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
1307 if (dynpm->op_pmflags & PMf_CONTINUE) {
1309 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1310 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1312 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1313 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1315 if (rx->startp[0] != -1) {
1316 mg->mg_len = rx->endp[0];
1317 if (rx->startp[0] == rx->endp[0])
1318 mg->mg_flags |= MGf_MINMATCH;
1320 mg->mg_flags &= ~MGf_MINMATCH;
1323 had_zerolen = (rx->startp[0] != -1
1324 && rx->startp[0] == rx->endp[0]);
1325 PUTBACK; /* EVAL blocks may use stack */
1326 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
1331 LEAVE_SCOPE(oldsave);
1337 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG))
1338 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1340 sv_magic(TARG, (SV*)0, PERL_MAGIC_regex_global, Nullch, 0);
1341 mg = mg_find(TARG, PERL_MAGIC_regex_global);
1343 if (rx->startp[0] != -1) {
1344 mg->mg_len = rx->endp[0];
1345 if (rx->startp[0] == rx->endp[0])
1346 mg->mg_flags |= MGf_MINMATCH;
1348 mg->mg_flags &= ~MGf_MINMATCH;
1351 LEAVE_SCOPE(oldsave);
1355 yup: /* Confirmed by INTUIT */
1357 RX_MATCH_TAINTED_on(rx);
1358 TAINT_IF(RX_MATCH_TAINTED(rx));
1360 if (dynpm->op_pmflags & PMf_ONCE)
1361 dynpm->op_pmdynflags |= PMdf_USED;
1362 if (RX_MATCH_COPIED(rx))
1363 Safefree(rx->subbeg);
1364 RX_MATCH_COPIED_off(rx);
1365 rx->subbeg = Nullch;
1367 rx->subbeg = truebase;
1368 rx->startp[0] = s - truebase;
1369 if (RX_MATCH_UTF8(rx)) {
1370 char *t = (char*)utf8_hop((U8*)s, rx->minlen);
1371 rx->endp[0] = t - truebase;
1374 rx->endp[0] = s - truebase + rx->minlen;
1376 rx->sublen = strend - truebase;
1379 if (PL_sawampersand) {
1381 #ifdef PERL_COPY_ON_WRITE
1382 if (SvIsCOW(TARG) || (SvFLAGS(TARG) & CAN_COW_MASK) == CAN_COW_FLAGS) {
1384 PerlIO_printf(Perl_debug_log,
1385 "Copy on write: pp_match $& capture, type %d, truebase=%p, t=%p, difference %d\n",
1386 (int) SvTYPE(TARG), truebase, t,
1389 rx->saved_copy = sv_setsv_cow(rx->saved_copy, TARG);
1390 rx->subbeg = SvPVX(rx->saved_copy) + (t - truebase);
1391 assert (SvPOKp(rx->saved_copy));
1396 rx->subbeg = savepvn(t, strend - t);
1397 #ifdef PERL_COPY_ON_WRITE
1398 rx->saved_copy = Nullsv;
1401 rx->sublen = strend - t;
1402 RX_MATCH_COPIED_on(rx);
1403 off = rx->startp[0] = s - t;
1404 rx->endp[0] = off + rx->minlen;
1406 else { /* startp/endp are used by @- @+. */
1407 rx->startp[0] = s - truebase;
1408 rx->endp[0] = s - truebase + rx->minlen;
1410 rx->nparens = rx->lastparen = 0; /* used by @- and @+ */
1411 LEAVE_SCOPE(oldsave);
1416 if (global && !(dynpm->op_pmflags & PMf_CONTINUE)) {
1417 if (SvTYPE(TARG) >= SVt_PVMG && SvMAGIC(TARG)) {
1418 MAGIC* mg = mg_find(TARG, PERL_MAGIC_regex_global);
1423 LEAVE_SCOPE(oldsave);
1424 if (gimme == G_ARRAY)
1430 Perl_do_readline(pTHX)
1432 dSP; dTARGETSTACKED;
1437 register IO *io = GvIO(PL_last_in_gv);
1438 register I32 type = PL_op->op_type;
1439 I32 gimme = GIMME_V;
1442 if (io && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar))) {
1444 XPUSHs(SvTIED_obj((SV*)io, mg));
1447 call_method("READLINE", gimme);
1450 if (gimme == G_SCALAR) {
1452 SvSetSV_nosteal(TARG, result);
1461 if (IoFLAGS(io) & IOf_ARGV) {
1462 if (IoFLAGS(io) & IOf_START) {
1464 if (av_len(GvAVn(PL_last_in_gv)) < 0) {
1465 IoFLAGS(io) &= ~IOf_START;
1466 do_open(PL_last_in_gv,"-",1,FALSE,O_RDONLY,0,Nullfp);
1467 sv_setpvn(GvSV(PL_last_in_gv), "-", 1);
1468 SvSETMAGIC(GvSV(PL_last_in_gv));
1473 fp = nextargv(PL_last_in_gv);
1474 if (!fp) { /* Note: fp != IoIFP(io) */
1475 (void)do_close(PL_last_in_gv, FALSE); /* now it does*/
1478 else if (type == OP_GLOB)
1479 fp = Perl_start_glob(aTHX_ POPs, io);
1481 else if (type == OP_GLOB)
1483 else if (ckWARN(WARN_IO) && IoTYPE(io) == IoTYPE_WRONLY) {
1484 report_evil_fh(PL_last_in_gv, io, OP_phoney_OUTPUT_ONLY);
1488 if (ckWARN2(WARN_GLOB, WARN_CLOSED)
1489 && (!io || !(IoFLAGS(io) & IOf_START))) {
1490 if (type == OP_GLOB)
1491 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1492 "glob failed (can't start child: %s)",
1495 report_evil_fh(PL_last_in_gv, io, PL_op->op_type);
1497 if (gimme == G_SCALAR) {
1498 /* undef TARG, and push that undefined value */
1499 if (type != OP_RCATLINE) {
1500 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1508 if (gimme == G_SCALAR) {
1512 (void)SvUPGRADE(sv, SVt_PV);
1513 tmplen = SvLEN(sv); /* remember if already alloced */
1514 if (!tmplen && !SvREADONLY(sv))
1515 Sv_Grow(sv, 80); /* try short-buffering it */
1517 if (type == OP_RCATLINE && SvOK(sv)) {
1520 (void)SvPV_force(sv, n_a);
1526 sv = sv_2mortal(NEWSV(57, 80));
1530 /* This should not be marked tainted if the fp is marked clean */
1531 #define MAYBE_TAINT_LINE(io, sv) \
1532 if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
1537 /* delay EOF state for a snarfed empty file */
1538 #define SNARF_EOF(gimme,rs,io,sv) \
1539 (gimme != G_SCALAR || SvCUR(sv) \
1540 || (IoFLAGS(io) & IOf_NOLINE) || !RsSNARF(rs))
1544 if (!sv_gets(sv, fp, offset)
1545 && (type == OP_GLOB || SNARF_EOF(gimme, PL_rs, io, sv)))
1547 PerlIO_clearerr(fp);
1548 if (IoFLAGS(io) & IOf_ARGV) {
1549 fp = nextargv(PL_last_in_gv);
1552 (void)do_close(PL_last_in_gv, FALSE);
1554 else if (type == OP_GLOB) {
1555 if (!do_close(PL_last_in_gv, FALSE) && ckWARN(WARN_GLOB)) {
1556 Perl_warner(aTHX_ packWARN(WARN_GLOB),
1557 "glob failed (child exited with status %d%s)",
1558 (int)(STATUS_CURRENT >> 8),
1559 (STATUS_CURRENT & 0x80) ? ", core dumped" : "");
1562 if (gimme == G_SCALAR) {
1563 if (type != OP_RCATLINE) {
1564 SV_CHECK_THINKFIRST_COW_DROP(TARG);
1570 MAYBE_TAINT_LINE(io, sv);
1573 MAYBE_TAINT_LINE(io, sv);
1575 IoFLAGS(io) |= IOf_NOLINE;
1579 if (type == OP_GLOB) {
1582 if (SvCUR(sv) > 0 && SvCUR(PL_rs) > 0) {
1583 tmps = SvEND(sv) - 1;
1584 if (*tmps == *SvPVX(PL_rs)) {
1589 for (tmps = SvPVX(sv); *tmps; tmps++)
1590 if (!isALPHA(*tmps) && !isDIGIT(*tmps) &&
1591 strchr("$&*(){}[]'\";\\|?<>~`", *tmps))
1593 if (*tmps && PerlLIO_lstat(SvPVX(sv), &PL_statbuf) < 0) {
1594 (void)POPs; /* Unmatched wildcard? Chuck it... */
1598 if (gimme == G_ARRAY) {
1599 if (SvLEN(sv) - SvCUR(sv) > 20) {
1600 SvLEN_set(sv, SvCUR(sv)+1);
1601 Renew(SvPVX(sv), SvLEN(sv), char);
1603 sv = sv_2mortal(NEWSV(58, 80));
1606 else if (gimme == G_SCALAR && !tmplen && SvLEN(sv) - SvCUR(sv) > 80) {
1607 /* try to reclaim a bit of scalar space (only on 1st alloc) */
1611 SvLEN_set(sv, SvCUR(sv)+40); /* allow some slop */
1612 Renew(SvPVX(sv), SvLEN(sv), char);
1621 register PERL_CONTEXT *cx;
1622 I32 gimme = OP_GIMME(PL_op, -1);
1625 if (cxstack_ix >= 0)
1626 gimme = cxstack[cxstack_ix].blk_gimme;
1634 PUSHBLOCK(cx, CXt_BLOCK, SP);
1646 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
1647 U32 defer = PL_op->op_private & OPpLVAL_DEFER;
1649 #ifdef PERL_COPY_ON_WRITE
1650 U32 hash = (SvIsCOW_shared_hash(keysv)) ? SvUVX(keysv) : 0;
1652 U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
1656 if (SvTYPE(hv) == SVt_PVHV) {
1657 if (PL_op->op_private & OPpLVAL_INTRO) {
1660 /* does the element we're localizing already exist? */
1662 /* can we determine whether it exists? */
1664 || mg_find((SV*)hv, PERL_MAGIC_env)
1665 || ( (mg = mg_find((SV*)hv, PERL_MAGIC_tied))
1666 /* Try to preserve the existenceness of a tied hash
1667 * element by using EXISTS and DELETE if possible.
1668 * Fallback to FETCH and STORE otherwise */
1669 && (stash = SvSTASH(SvRV(SvTIED_obj((SV*)hv, mg))))
1670 && gv_fetchmethod_autoload(stash, "EXISTS", TRUE)
1671 && gv_fetchmethod_autoload(stash, "DELETE", TRUE)
1673 ) ? hv_exists_ent(hv, keysv, 0) : 1;
1676 he = hv_fetch_ent(hv, keysv, lval && !defer, hash);
1677 svp = he ? &HeVAL(he) : 0;
1683 if (!svp || *svp == &PL_sv_undef) {
1688 DIE(aTHX_ PL_no_helem, SvPV(keysv, n_a));
1690 lv = sv_newmortal();
1691 sv_upgrade(lv, SVt_PVLV);
1693 sv_magic(lv, key2 = newSVsv(keysv), PERL_MAGIC_defelem, Nullch, 0);
1694 SvREFCNT_dec(key2); /* sv_magic() increments refcount */
1695 LvTARG(lv) = SvREFCNT_inc(hv);
1700 if (PL_op->op_private & OPpLVAL_INTRO) {
1701 if (HvNAME(hv) && isGV(*svp))
1702 save_gp((GV*)*svp, !(PL_op->op_flags & OPf_SPECIAL));
1706 char *key = SvPV(keysv, keylen);
1707 SAVEDELETE(hv, savepvn(key,keylen), keylen);
1709 save_helem(hv, keysv, svp);
1712 else if (PL_op->op_private & OPpDEREF)
1713 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
1715 sv = (svp ? *svp : &PL_sv_undef);
1716 /* This makes C<local $tied{foo} = $tied{foo}> possible.
1717 * Pushing the magical RHS on to the stack is useless, since
1718 * that magic is soon destined to be misled by the local(),
1719 * and thus the later pp_sassign() will fail to mg_get() the
1720 * old value. This should also cure problems with delayed
1721 * mg_get()s. GSAR 98-07-03 */
1722 if (!lval && SvGMAGICAL(sv))
1723 sv = sv_mortalcopy(sv);
1731 register PERL_CONTEXT *cx;
1737 if (PL_op->op_flags & OPf_SPECIAL) {
1738 cx = &cxstack[cxstack_ix];
1739 cx->blk_oldpm = PL_curpm; /* fake block should preserve $1 et al */
1744 gimme = OP_GIMME(PL_op, -1);
1746 if (cxstack_ix >= 0)
1747 gimme = cxstack[cxstack_ix].blk_gimme;
1753 if (gimme == G_VOID)
1755 else if (gimme == G_SCALAR) {
1758 if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
1761 *MARK = sv_mortalcopy(TOPs);
1764 *MARK = &PL_sv_undef;
1768 else if (gimme == G_ARRAY) {
1769 /* in case LEAVE wipes old return values */
1770 for (mark = newsp + 1; mark <= SP; mark++) {
1771 if (!(SvFLAGS(*mark) & (SVs_PADTMP|SVs_TEMP))) {
1772 *mark = sv_mortalcopy(*mark);
1773 TAINT_NOT; /* Each item is independent */
1777 PL_curpm = newpm; /* Don't pop $1 et al till now */
1787 register PERL_CONTEXT *cx;
1793 cx = &cxstack[cxstack_ix];
1794 if (CxTYPE(cx) != CXt_LOOP)
1795 DIE(aTHX_ "panic: pp_iter");
1797 itersvp = CxITERVAR(cx);
1798 av = cx->blk_loop.iterary;
1799 if (SvTYPE(av) != SVt_PVAV) {
1800 /* iterate ($min .. $max) */
1801 if (cx->blk_loop.iterlval) {
1802 /* string increment */
1803 register SV* cur = cx->blk_loop.iterlval;
1805 char *max = SvPV((SV*)av, maxlen);
1806 if (!SvNIOK(cur) && SvCUR(cur) <= maxlen) {
1807 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1808 /* safe to reuse old SV */
1809 sv_setsv(*itersvp, cur);
1813 /* we need a fresh SV every time so that loop body sees a
1814 * completely new SV for closures/references to work as
1816 SvREFCNT_dec(*itersvp);
1817 *itersvp = newSVsv(cur);
1819 if (strEQ(SvPVX(cur), max))
1820 sv_setiv(cur, 0); /* terminate next time */
1827 /* integer increment */
1828 if (cx->blk_loop.iterix > cx->blk_loop.itermax)
1831 /* don't risk potential race */
1832 if (SvREFCNT(*itersvp) == 1 && !SvMAGICAL(*itersvp)) {
1833 /* safe to reuse old SV */
1834 sv_setiv(*itersvp, cx->blk_loop.iterix++);
1838 /* we need a fresh SV every time so that loop body sees a
1839 * completely new SV for closures/references to work as they
1841 SvREFCNT_dec(*itersvp);
1842 *itersvp = newSViv(cx->blk_loop.iterix++);
1848 if (cx->blk_loop.iterix >= (av == PL_curstack ? cx->blk_oldsp : AvFILL(av)))
1851 SvREFCNT_dec(*itersvp);
1853 if (SvMAGICAL(av) || AvREIFY(av)) {
1854 SV **svp = av_fetch(av, ++cx->blk_loop.iterix, FALSE);
1861 sv = AvARRAY(av)[++cx->blk_loop.iterix];
1863 if (sv && SvREFCNT(sv) == 0) {
1866 "Use of freed value in iteration (perhaps you modified the iterated array within the loop?)");
1873 if (av != PL_curstack && sv == &PL_sv_undef) {
1874 SV *lv = cx->blk_loop.iterlval;
1875 if (lv && SvREFCNT(lv) > 1) {
1880 SvREFCNT_dec(LvTARG(lv));
1882 lv = cx->blk_loop.iterlval = NEWSV(26, 0);
1883 sv_upgrade(lv, SVt_PVLV);
1885 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
1887 LvTARG(lv) = SvREFCNT_inc(av);
1888 LvTARGOFF(lv) = cx->blk_loop.iterix;
1889 LvTARGLEN(lv) = (STRLEN)UV_MAX;
1893 *itersvp = SvREFCNT_inc(sv);
1900 register PMOP *pm = cPMOP;
1916 register REGEXP *rx = PM_GETRE(pm);
1918 int force_on_match = 0;
1919 I32 oldsave = PL_savestack_ix;
1921 bool doutf8 = FALSE;
1922 #ifdef PERL_COPY_ON_WRITE
1927 /* known replacement string? */
1928 dstr = (pm->op_pmflags & PMf_CONST) ? POPs : Nullsv;
1929 if (PL_op->op_flags & OPf_STACKED)
1936 #ifdef PERL_COPY_ON_WRITE
1937 /* Awooga. Awooga. "bool" types that are actually char are dangerous,
1938 because they make integers such as 256 "false". */
1939 is_cow = SvIsCOW(TARG) ? TRUE : FALSE;
1942 sv_force_normal_flags(TARG,0);
1945 #ifdef PERL_COPY_ON_WRITE
1949 || (SvTYPE(TARG) > SVt_PVLV
1950 && !(SvTYPE(TARG) == SVt_PVGV && SvFAKE(TARG)))))
1951 DIE(aTHX_ PL_no_modify);
1954 s = SvPV(TARG, len);
1955 if (!SvPOKp(TARG) || SvTYPE(TARG) == SVt_PVGV)
1957 rxtainted = ((pm->op_pmdynflags & PMdf_TAINTED) ||
1958 (PL_tainted && (pm->op_pmflags & PMf_RETAINT)));
1963 RX_MATCH_UTF8_set(rx, DO_UTF8(TARG));
1967 DIE(aTHX_ "panic: pp_subst");
1970 slen = RX_MATCH_UTF8(rx) ? utf8_length((U8*)s, (U8*)strend) : len;
1971 maxiters = 2 * slen + 10; /* We can match twice at each
1972 position, once with zero-length,
1973 second time with non-zero. */
1975 if (!rx->prelen && PL_curpm) {
1979 r_flags = (rx->nparens || SvTEMP(TARG) || PL_sawampersand)
1980 ? REXEC_COPY_STR : 0;
1982 r_flags |= REXEC_SCREAM;
1983 if (pm->op_pmflags & (PMf_MULTILINE|PMf_SINGLELINE)) {
1984 SAVEINT(PL_multiline);
1985 PL_multiline = pm->op_pmflags & PMf_MULTILINE;
1988 if (rx->reganch & RE_USE_INTUIT) {
1990 s = CALLREG_INTUIT_START(aTHX_ rx, TARG, s, strend, r_flags, NULL);
1994 /* How to do it in subst? */
1995 /* if ( (rx->reganch & ROPT_CHECK_ALL)
1997 && ((rx->reganch & ROPT_NOSCAN)
1998 || !((rx->reganch & RE_INTUIT_TAIL)
1999 && (r_flags & REXEC_SCREAM))))
2004 /* only replace once? */
2005 once = !(rpm->op_pmflags & PMf_GLOBAL);
2007 /* known replacement string? */
2009 /* replacement needing upgrading? */
2010 if (DO_UTF8(TARG) && !doutf8) {
2011 nsv = sv_newmortal();
2014 sv_recode_to_utf8(nsv, PL_encoding);
2016 sv_utf8_upgrade(nsv);
2017 c = SvPV(nsv, clen);
2021 c = SvPV(dstr, clen);
2022 doutf8 = DO_UTF8(dstr);
2030 /* can do inplace substitution? */
2032 #ifdef PERL_COPY_ON_WRITE
2035 && (I32)clen <= rx->minlen && (once || !(r_flags & REXEC_COPY_STR))
2036 && !(rx->reganch & ROPT_LOOKBEHIND_SEEN)
2037 && (!doutf8 || SvUTF8(TARG))) {
2038 if (!CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2039 r_flags | REXEC_CHECKED))
2043 LEAVE_SCOPE(oldsave);
2046 #ifdef PERL_COPY_ON_WRITE
2047 if (SvIsCOW(TARG)) {
2048 assert (!force_on_match);
2052 if (force_on_match) {
2054 s = SvPV_force(TARG, len);
2059 SvSCREAM_off(TARG); /* disable possible screamer */
2061 rxtainted |= RX_MATCH_TAINTED(rx);
2062 m = orig + rx->startp[0];
2063 d = orig + rx->endp[0];
2065 if (m - s > strend - d) { /* faster to shorten from end */
2067 Copy(c, m, clen, char);
2072 Move(d, m, i, char);
2076 SvCUR_set(TARG, m - s);
2079 else if ((i = m - s)) { /* faster from front */
2087 Copy(c, m, clen, char);
2092 Copy(c, d, clen, char);
2097 TAINT_IF(rxtainted & 1);
2103 if (iters++ > maxiters)
2104 DIE(aTHX_ "Substitution loop");
2105 rxtainted |= RX_MATCH_TAINTED(rx);
2106 m = rx->startp[0] + orig;
2110 Move(s, d, i, char);
2114 Copy(c, d, clen, char);
2117 s = rx->endp[0] + orig;
2118 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2120 /* don't match same null twice */
2121 REXEC_NOT_FIRST|REXEC_IGNOREPOS));
2124 SvCUR_set(TARG, d - SvPVX(TARG) + i);
2125 Move(s, d, i+1, char); /* include the NUL */
2127 TAINT_IF(rxtainted & 1);
2129 PUSHs(sv_2mortal(newSViv((I32)iters)));
2131 (void)SvPOK_only_UTF8(TARG);
2132 TAINT_IF(rxtainted);
2133 if (SvSMAGICAL(TARG)) {
2141 LEAVE_SCOPE(oldsave);
2145 if (CALLREGEXEC(aTHX_ rx, s, strend, orig, 0, TARG, NULL,
2146 r_flags | REXEC_CHECKED))
2148 if (force_on_match) {
2150 s = SvPV_force(TARG, len);
2153 #ifdef PERL_COPY_ON_WRITE
2156 rxtainted |= RX_MATCH_TAINTED(rx);
2157 dstr = NEWSV(25, len);
2158 sv_setpvn(dstr, m, s-m);
2163 register PERL_CONTEXT *cx;
2167 RETURNOP(cPMOP->op_pmreplroot);
2169 r_flags |= REXEC_IGNOREPOS | REXEC_NOT_FIRST;
2171 if (iters++ > maxiters)
2172 DIE(aTHX_ "Substitution loop");
2173 rxtainted |= RX_MATCH_TAINTED(rx);
2174 if (RX_MATCH_COPIED(rx) && rx->subbeg != orig) {
2179 strend = s + (strend - m);
2181 m = rx->startp[0] + orig;
2182 if (doutf8 && !SvUTF8(dstr))
2183 sv_catpvn_utf8_upgrade(dstr, s, m - s, nsv);
2185 sv_catpvn(dstr, s, m-s);
2186 s = rx->endp[0] + orig;
2188 sv_catpvn(dstr, c, clen);
2191 } while (CALLREGEXEC(aTHX_ rx, s, strend, orig, s == m,
2192 TARG, NULL, r_flags));
2193 if (doutf8 && !DO_UTF8(TARG))
2194 sv_catpvn_utf8_upgrade(dstr, s, strend - s, nsv);
2196 sv_catpvn(dstr, s, strend - s);
2198 #ifdef PERL_COPY_ON_WRITE
2199 /* The match may make the string COW. If so, brilliant, because that's
2200 just saved us one malloc, copy and free - the regexp has donated
2201 the old buffer, and we malloc an entirely new one, rather than the
2202 regexp malloc()ing a buffer and copying our original, only for
2203 us to throw it away here during the substitution. */
2204 if (SvIsCOW(TARG)) {
2205 sv_force_normal_flags(TARG, SV_COW_DROP_PV);
2209 (void)SvOOK_off(TARG);
2211 Safefree(SvPVX(TARG));
2213 SvPVX(TARG) = SvPVX(dstr);
2214 SvCUR_set(TARG, SvCUR(dstr));
2215 SvLEN_set(TARG, SvLEN(dstr));
2216 doutf8 |= DO_UTF8(dstr);
2220 TAINT_IF(rxtainted & 1);
2222 PUSHs(sv_2mortal(newSViv((I32)iters)));
2224 (void)SvPOK_only(TARG);
2227 TAINT_IF(rxtainted);
2230 LEAVE_SCOPE(oldsave);
2239 LEAVE_SCOPE(oldsave);
2248 PL_stack_base[PL_markstack_ptr[-1]++] = PL_stack_base[*PL_markstack_ptr];
2249 ++*PL_markstack_ptr;
2250 LEAVE; /* exit inner scope */
2253 if (PL_stack_base + *PL_markstack_ptr > SP) {
2255 I32 gimme = GIMME_V;
2257 LEAVE; /* exit outer scope */
2258 (void)POPMARK; /* pop src */
2259 items = --*PL_markstack_ptr - PL_markstack_ptr[-1];
2260 (void)POPMARK; /* pop dst */
2261 SP = PL_stack_base + POPMARK; /* pop original mark */
2262 if (gimme == G_SCALAR) {
2266 else if (gimme == G_ARRAY)
2273 ENTER; /* enter inner scope */
2276 src = PL_stack_base[*PL_markstack_ptr];
2280 RETURNOP(cLOGOP->op_other);
2291 register PERL_CONTEXT *cx;
2297 if (gimme == G_SCALAR) {
2300 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2302 *MARK = SvREFCNT_inc(TOPs);
2307 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2309 *MARK = sv_mortalcopy(sv);
2314 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2318 *MARK = &PL_sv_undef;
2322 else if (gimme == G_ARRAY) {
2323 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2324 if (!SvTEMP(*MARK)) {
2325 *MARK = sv_mortalcopy(*MARK);
2326 TAINT_NOT; /* Each item is independent */
2333 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2334 PL_curpm = newpm; /* ... and pop $1 et al */
2337 return pop_return();
2340 /* This duplicates the above code because the above code must not
2341 * get any slower by more conditions */
2349 register PERL_CONTEXT *cx;
2356 if (cx->blk_sub.lval & OPpENTERSUB_INARGS) {
2357 /* We are an argument to a function or grep().
2358 * This kind of lvalueness was legal before lvalue
2359 * subroutines too, so be backward compatible:
2360 * cannot report errors. */
2362 /* Scalar context *is* possible, on the LHS of -> only,
2363 * as in f()->meth(). But this is not an lvalue. */
2364 if (gimme == G_SCALAR)
2366 if (gimme == G_ARRAY) {
2367 if (!CvLVALUE(cx->blk_sub.cv))
2368 goto temporise_array;
2369 EXTEND_MORTAL(SP - newsp);
2370 for (mark = newsp + 1; mark <= SP; mark++) {
2373 else if (SvFLAGS(*mark) & (SVs_PADTMP | SVf_READONLY))
2374 *mark = sv_mortalcopy(*mark);
2376 /* Can be a localized value subject to deletion. */
2377 PL_tmps_stack[++PL_tmps_ix] = *mark;
2378 (void)SvREFCNT_inc(*mark);
2383 else if (cx->blk_sub.lval) { /* Leave it as it is if we can. */
2384 /* Here we go for robustness, not for speed, so we change all
2385 * the refcounts so the caller gets a live guy. Cannot set
2386 * TEMP, so sv_2mortal is out of question. */
2387 if (!CvLVALUE(cx->blk_sub.cv)) {
2392 DIE(aTHX_ "Can't modify non-lvalue subroutine call");
2394 if (gimme == G_SCALAR) {
2398 if (SvFLAGS(TOPs) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2403 DIE(aTHX_ "Can't return %s from lvalue subroutine",
2404 SvREADONLY(TOPs) ? (TOPs == &PL_sv_undef) ? "undef"
2405 : "a readonly value" : "a temporary");
2407 else { /* Can be a localized value
2408 * subject to deletion. */
2409 PL_tmps_stack[++PL_tmps_ix] = *mark;
2410 (void)SvREFCNT_inc(*mark);
2413 else { /* Should not happen? */
2418 DIE(aTHX_ "%s returned from lvalue subroutine in scalar context",
2419 (MARK > SP ? "Empty array" : "Array"));
2423 else if (gimme == G_ARRAY) {
2424 EXTEND_MORTAL(SP - newsp);
2425 for (mark = newsp + 1; mark <= SP; mark++) {
2426 if (*mark != &PL_sv_undef
2427 && SvFLAGS(*mark) & (SVs_TEMP | SVs_PADTMP | SVf_READONLY)) {
2428 /* Might be flattened array after $#array = */
2434 DIE(aTHX_ "Can't return a %s from lvalue subroutine",
2435 SvREADONLY(TOPs) ? "readonly value" : "temporary");
2438 /* Can be a localized value subject to deletion. */
2439 PL_tmps_stack[++PL_tmps_ix] = *mark;
2440 (void)SvREFCNT_inc(*mark);
2446 if (gimme == G_SCALAR) {
2450 if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
2452 *MARK = SvREFCNT_inc(TOPs);
2457 sv = SvREFCNT_inc(TOPs); /* FREETMPS could clobber it */
2459 *MARK = sv_mortalcopy(sv);
2464 *MARK = SvTEMP(TOPs) ? TOPs : sv_mortalcopy(TOPs);
2468 *MARK = &PL_sv_undef;
2472 else if (gimme == G_ARRAY) {
2474 for (MARK = newsp + 1; MARK <= SP; MARK++) {
2475 if (!SvTEMP(*MARK)) {
2476 *MARK = sv_mortalcopy(*MARK);
2477 TAINT_NOT; /* Each item is independent */
2485 POPSUB(cx,sv); /* Stack values are safe: release CV and @_ ... */
2486 PL_curpm = newpm; /* ... and pop $1 et al */
2489 return pop_return();
2494 S_get_db_sub(pTHX_ SV **svp, CV *cv)
2496 SV *dbsv = GvSV(PL_DBsub);
2498 if (!PERLDB_SUB_NN) {
2502 if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
2503 || strEQ(GvNAME(gv), "END")
2504 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
2505 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv)
2506 && (gv = (GV*)*svp) ))) {
2507 /* Use GV from the stack as a fallback. */
2508 /* GV is potentially non-unique, or contain different CV. */
2509 SV *tmp = newRV((SV*)cv);
2510 sv_setsv(dbsv, tmp);
2514 gv_efullname3(dbsv, gv, Nullch);
2518 (void)SvUPGRADE(dbsv, SVt_PVIV);
2519 (void)SvIOK_on(dbsv);
2520 SAVEIV(SvIVX(dbsv));
2521 SvIVX(dbsv) = PTR2IV(cv); /* Do it the quickest way */
2525 PL_curcopdb = PL_curcop;
2526 cv = GvCV(PL_DBsub);
2536 register PERL_CONTEXT *cx;
2538 bool hasargs = (PL_op->op_flags & OPf_STACKED) != 0;
2541 DIE(aTHX_ "Not a CODE reference");
2542 switch (SvTYPE(sv)) {
2543 /* This is overwhelming the most common case: */
2545 if (!(cv = GvCVu((GV*)sv)))
2546 cv = sv_2cv(sv, &stash, &gv, FALSE);
2558 if (sv == &PL_sv_yes) { /* unfound import, ignore */
2560 SP = PL_stack_base + POPMARK;
2563 if (SvGMAGICAL(sv)) {
2567 sym = SvPOKp(sv) ? SvPVX(sv) : Nullch;
2570 sym = SvPV(sv, n_a);
2572 DIE(aTHX_ PL_no_usym, "a subroutine");
2573 if (PL_op->op_private & HINT_STRICT_REFS)
2574 DIE(aTHX_ PL_no_symref, sym, "a subroutine");
2575 cv = get_cv(sym, TRUE);
2580 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
2581 tryAMAGICunDEREF(to_cv);
2584 if (SvTYPE(cv) == SVt_PVCV)
2589 DIE(aTHX_ "Not a CODE reference");
2590 /* This is the second most common case: */
2600 if (!CvROOT(cv) && !CvXSUB(cv)) {
2605 if ((PL_op->op_private & OPpENTERSUB_DB) && GvCV(PL_DBsub) && !CvNODEBUG(cv)) {
2606 if (CvASSERTION(cv) && PL_DBassertion)
2607 sv_setiv(PL_DBassertion, 1);
2609 cv = get_db_sub(&sv, cv);
2611 DIE(aTHX_ "No DBsub routine");
2614 if (!(CvXSUB(cv))) {
2615 /* This path taken at least 75% of the time */
2617 register I32 items = SP - MARK;
2618 AV* padlist = CvPADLIST(cv);
2619 push_return(PL_op->op_next);
2620 PUSHBLOCK(cx, CXt_SUB, MARK);
2623 /* XXX This would be a natural place to set C<PL_compcv = cv> so
2624 * that eval'' ops within this sub know the correct lexical space.
2625 * Owing the speed considerations, we choose instead to search for
2626 * the cv using find_runcv() when calling doeval().
2628 if (CvDEPTH(cv) < 2)
2629 (void)SvREFCNT_inc(cv);
2631 PERL_STACK_OVERFLOW_CHECK();
2632 pad_push(padlist, CvDEPTH(cv), 1);
2634 PAD_SET_CUR(padlist, CvDEPTH(cv));
2641 DEBUG_S(PerlIO_printf(Perl_debug_log,
2642 "%p entersub preparing @_\n", thr));
2644 av = (AV*)PAD_SVl(0);
2646 /* @_ is normally not REAL--this should only ever
2647 * happen when DB::sub() calls things that modify @_ */
2652 cx->blk_sub.savearray = GvAV(PL_defgv);
2653 GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av);
2654 CX_CURPAD_SAVE(cx->blk_sub);
2655 cx->blk_sub.argarray = av;
2658 if (items > AvMAX(av) + 1) {
2660 if (AvARRAY(av) != ary) {
2661 AvMAX(av) += AvARRAY(av) - AvALLOC(av);
2662 SvPVX(av) = (char*)ary;
2664 if (items > AvMAX(av) + 1) {
2665 AvMAX(av) = items - 1;
2666 Renew(ary,items,SV*);
2668 SvPVX(av) = (char*)ary;
2671 Copy(MARK,AvARRAY(av),items,SV*);
2672 AvFILLp(av) = items - 1;
2680 /* warning must come *after* we fully set up the context
2681 * stuff so that __WARN__ handlers can safely dounwind()
2684 if (CvDEPTH(cv) == 100 && ckWARN(WARN_RECURSION)
2685 && !(PERLDB_SUB && cv == GvCV(PL_DBsub)))
2686 sub_crush_depth(cv);
2688 DEBUG_S(PerlIO_printf(Perl_debug_log,
2689 "%p entersub returning %p\n", thr, CvSTART(cv)));
2691 RETURNOP(CvSTART(cv));
2694 #ifdef PERL_XSUB_OLDSTYLE
2695 if (CvOLDSTYLE(cv)) {
2696 I32 (*fp3)(int,int,int);
2698 register I32 items = SP - MARK;
2699 /* We dont worry to copy from @_. */
2704 PL_stack_sp = mark + 1;
2705 fp3 = (I32(*)(int,int,int))CvXSUB(cv);
2706 items = (*fp3)(CvXSUBANY(cv).any_i32,
2707 MARK - PL_stack_base + 1,
2709 PL_stack_sp = PL_stack_base + items;
2712 #endif /* PERL_XSUB_OLDSTYLE */
2714 I32 markix = TOPMARK;
2719 /* Need to copy @_ to stack. Alternative may be to
2720 * switch stack to @_, and copy return values
2721 * back. This would allow popping @_ in XSUB, e.g.. XXXX */
2724 av = GvAV(PL_defgv);
2725 items = AvFILLp(av) + 1; /* @_ is not tieable */
2728 /* Mark is at the end of the stack. */
2730 Copy(AvARRAY(av), SP + 1, items, SV*);
2735 /* We assume first XSUB in &DB::sub is the called one. */
2737 SAVEVPTR(PL_curcop);
2738 PL_curcop = PL_curcopdb;
2741 /* Do we need to open block here? XXXX */
2742 (void)(*CvXSUB(cv))(aTHX_ cv);
2744 /* Enforce some sanity in scalar context. */
2745 if (gimme == G_SCALAR && ++markix != PL_stack_sp - PL_stack_base ) {
2746 if (markix > PL_stack_sp - PL_stack_base)
2747 *(PL_stack_base + markix) = &PL_sv_undef;
2749 *(PL_stack_base + markix) = *PL_stack_sp;
2750 PL_stack_sp = PL_stack_base + markix;
2757 assert (0); /* Cannot get here. */
2758 /* This is deliberately moved here as spaghetti code to keep it out of the
2765 /* anonymous or undef'd function leaves us no recourse */
2766 if (CvANON(cv) || !(gv = CvGV(cv)))
2767 DIE(aTHX_ "Undefined subroutine called");
2769 /* autoloaded stub? */
2770 if (cv != GvCV(gv)) {
2773 /* should call AUTOLOAD now? */
2776 if ((autogv = gv_autoload4(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
2783 sub_name = sv_newmortal();
2784 gv_efullname3(sub_name, gv, Nullch);
2785 DIE(aTHX_ "Undefined subroutine &%"SVf" called", sub_name);
2789 DIE(aTHX_ "Not a CODE reference");
2795 Perl_sub_crush_depth(pTHX_ CV *cv)
2798 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on anonymous subroutine");
2800 SV* tmpstr = sv_newmortal();
2801 gv_efullname3(tmpstr, CvGV(cv), Nullch);
2802 Perl_warner(aTHX_ packWARN(WARN_RECURSION), "Deep recursion on subroutine \"%"SVf"\"",
2812 IV elem = SvIV(elemsv);
2814 U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
2815 U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
2818 if (SvROK(elemsv) && !SvGAMAGIC(elemsv) && ckWARN(WARN_MISC))
2819 Perl_warner(aTHX_ packWARN(WARN_MISC), "Use of reference \"%"SVf"\" as array index", elemsv);
2821 elem -= PL_curcop->cop_arybase;
2822 if (SvTYPE(av) != SVt_PVAV)
2824 svp = av_fetch(av, elem, lval && !defer);
2826 if (!svp || *svp == &PL_sv_undef) {
2829 DIE(aTHX_ PL_no_aelem, elem);
2830 lv = sv_newmortal();
2831 sv_upgrade(lv, SVt_PVLV);
2833 sv_magic(lv, Nullsv, PERL_MAGIC_defelem, Nullch, 0);
2834 LvTARG(lv) = SvREFCNT_inc(av);
2835 LvTARGOFF(lv) = elem;
2840 if (PL_op->op_private & OPpLVAL_INTRO)
2841 save_aelem(av, elem, svp);
2842 else if (PL_op->op_private & OPpDEREF)
2843 vivify_ref(*svp, PL_op->op_private & OPpDEREF);
2845 sv = (svp ? *svp : &PL_sv_undef);
2846 if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
2847 sv = sv_mortalcopy(sv);
2853 Perl_vivify_ref(pTHX_ SV *sv, U32 to_what)
2859 Perl_croak(aTHX_ PL_no_modify);
2860 if (SvTYPE(sv) < SVt_RV)
2861 sv_upgrade(sv, SVt_RV);
2862 else if (SvTYPE(sv) >= SVt_PV) {
2863 (void)SvOOK_off(sv);
2864 Safefree(SvPVX(sv));
2865 SvLEN(sv) = SvCUR(sv) = 0;
2869 SvRV(sv) = NEWSV(355,0);
2872 SvRV(sv) = (SV*)newAV();
2875 SvRV(sv) = (SV*)newHV();
2890 if (SvTYPE(rsv) == SVt_PVCV) {
2896 SETs(method_common(sv, Null(U32*)));
2904 U32 hash = SvUVX(sv);
2906 XPUSHs(method_common(sv, &hash));
2911 S_method_common(pTHX_ SV* meth, U32* hashp)
2920 SV *packsv = Nullsv;
2923 name = SvPV(meth, namelen);
2924 sv = *(PL_stack_base + TOPMARK + 1);
2927 Perl_croak(aTHX_ "Can't call method \"%s\" on an undefined value", name);
2936 /* this isn't a reference */
2939 if(SvOK(sv) && (packname = SvPV(sv, packlen))) {
2941 he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
2943 stash = INT2PTR(HV*,SvIV(HeVAL(he)));
2950 !(iogv = gv_fetchpv(packname, FALSE, SVt_PVIO)) ||
2951 !(ob=(SV*)GvIO(iogv)))
2953 /* this isn't the name of a filehandle either */
2955 ((UTF8_IS_START(*packname) && DO_UTF8(sv))
2956 ? !isIDFIRST_utf8((U8*)packname)
2957 : !isIDFIRST(*packname)
2960 Perl_croak(aTHX_ "Can't call method \"%s\" %s", name,
2961 SvOK(sv) ? "without a package or object reference"
2962 : "on an undefined value");
2964 /* assume it's a package name */
2965 stash = gv_stashpvn(packname, packlen, FALSE);
2969 SV* ref = newSViv(PTR2IV(stash));
2970 hv_store(PL_stashcache, packname, packlen, ref, 0);
2974 /* it _is_ a filehandle name -- replace with a reference */
2975 *(PL_stack_base + TOPMARK + 1) = sv_2mortal(newRV((SV*)iogv));
2978 /* if we got here, ob should be a reference or a glob */
2979 if (!ob || !(SvOBJECT(ob)
2980 || (SvTYPE(ob) == SVt_PVGV && (ob = (SV*)GvIO((GV*)ob))
2983 Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
2987 stash = SvSTASH(ob);
2990 /* NOTE: stash may be null, hope hv_fetch_ent and
2991 gv_fetchmethod can cope (it seems they can) */
2993 /* shortcut for simple names */
2995 HE* he = hv_fetch_ent(stash, meth, 0, *hashp);
2997 gv = (GV*)HeVAL(he);
2998 if (isGV(gv) && GvCV(gv) &&
2999 (!GvCVGEN(gv) || GvCVGEN(gv) == PL_sub_generation))
3000 return (SV*)GvCV(gv);
3004 gv = gv_fetchmethod(stash ? stash : (HV*)packsv, name);
3007 /* This code tries to figure out just what went wrong with
3008 gv_fetchmethod. It therefore needs to duplicate a lot of
3009 the internals of that function. We can't move it inside
3010 Perl_gv_fetchmethod_autoload(), however, since that would
3011 cause UNIVERSAL->can("NoSuchPackage::foo") to croak, and we
3018 for (p = name; *p; p++) {
3020 sep = p, leaf = p + 1;
3021 else if (*p == ':' && *(p + 1) == ':')
3022 sep = p, leaf = p + 2;
3024 if (!sep || ((sep - name) == 5 && strnEQ(name, "SUPER", 5))) {
3025 /* the method name is unqualified or starts with SUPER:: */
3026 packname = sep ? CopSTASHPV(PL_curcop) :
3027 stash ? HvNAME(stash) : packname;
3028 packlen = strlen(packname);
3031 /* the method name is qualified */
3033 packlen = sep - name;
3036 /* we're relying on gv_fetchmethod not autovivifying the stash */
3037 if (gv_stashpvn(packname, packlen, FALSE)) {
3039 "Can't locate object method \"%s\" via package \"%.*s\"",
3040 leaf, (int)packlen, packname);
3044 "Can't locate object method \"%s\" via package \"%.*s\""
3045 " (perhaps you forgot to load \"%.*s\"?)",
3046 leaf, (int)packlen, packname, (int)packlen, packname);
3049 return isGV(gv) ? (SV*)GvCV(gv) : (SV*)gv;