if (!PL_initav)
PL_initav = newAV();
av_push(PL_initav, SvREFCNT_inc(cv));
+ GvCV(gv) = 0;
}
}
}
break;
case OA_FILEREF:
- if (kid->op_type != OP_GV) {
+ if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
if (kid->op_type == OP_CONST &&
(kid->op_private & OPpCONST_BARE)) {
OP *newop = newGVOP(OP_GV, 0,
bad_type(arg, "sub", gv_ename(namegv), o2);
goto wrapref;
case '$':
- if (o2->op_type != OP_RV2SV && o2->op_type != OP_PADSV)
+ if (o2->op_type != OP_RV2SV
+ && o2->op_type != OP_PADSV
+ && o2->op_type != OP_THREADSV)
+ {
bad_type(arg, "scalar", gv_ename(namegv), o2);
+ }
goto wrapref;
case '@':
if (o2->op_type != OP_RV2AV && o2->op_type != OP_PADAV)