gp->gp_io = newIO();
IoFLAGS(gp->gp_io) |= IOf_ARGV|IOf_START;
}
+#ifdef PERL_DONT_CREATE_GVSV
+ if (gv == PL_errgv) {
+ /* We could scatter this logic everywhere by changing the
+ definition of ERRSV from GvSV() to GvSVn(), but it seems more
+ efficient to do this check once here. */
+ gp->gp_sv = newSV(0);
+ }
+#endif
GvGP(gv) = gp;
}
else {
av = (AV*)SSPOPPTR;
gv = (GV*)SSPOPPTR;
if (GvAV(gv)) {
- AV * const goner = GvAV(gv);
- /* FIXME - this is a temporary hack until we work out what
- the correct behaviour for magic should be. */
- sv_unmagic((SV*)goner, PERL_MAGIC_arylen_p);
- SvMAGIC_set(av, SvMAGIC(goner));
- SvFLAGS((SV*)av) |= SvMAGICAL(goner);
- SvMAGICAL_off(goner);
- SvMAGIC_set(goner, NULL);
- SvREFCNT_dec(goner);
+ SvREFCNT_dec(GvAV(gv));
}
GvAV(gv) = av;
if (SvMAGICAL(av)) {
hv = (HV*)SSPOPPTR;
gv = (GV*)SSPOPPTR;
if (GvHV(gv)) {
- HV * const goner = GvHV(gv);
- SvMAGIC_set(hv, SvMAGIC(goner));
- SvFLAGS(hv) |= SvMAGICAL(goner);
- SvMAGICAL_off(goner);
- SvMAGIC_set(goner, NULL);
- SvREFCNT_dec(goner);
+ SvREFCNT_dec(GvHV(gv));
}
GvHV(gv) = hv;
if (SvMAGICAL(hv)) {