}
/* we found a real sub here */
- sv = sv_2mortal(newSV(0));
+ sv = sv_newmortal();
gv_efullname3(sv, cvgv, NULL);
- fq_subname = SvPVX(sv);
- fq_subname_len = SvCUR(sv);
+ if (SvPOK(sv)) {
+ fq_subname = SvPVX(sv);
+ fq_subname_len = SvCUR(sv);
+
+ subname = strrchr(fq_subname, ':');
+ } else {
+ subname = NULL;
+ }
subname = strrchr(fq_subname, ':');
if(!subname)
if (SvTYPE(candidate) == SVt_PVGV && (cand_cv = GvCV(candidate)) && !GvCVGEN(candidate)) {
SvREFCNT_dec(linear_av);
SvREFCNT_inc((SV*)cand_cv);
- if (!hv_store_ent(nmcache, newSVsv(cachekey), (SV*)cand_cv, 0)) {
+ if (!hv_store_ent(nmcache, cachekey, (SV*)cand_cv, 0)) {
croak("failed to store value in hash");
}
XPUSHs(sv_2mortal(newRV_inc((SV*)cand_cv)));
}
SvREFCNT_dec(linear_av);
- if (!hv_store_ent(nmcache, newSVsv(cachekey), &PL_sv_undef, 0)) {
+ if (!hv_store_ent(nmcache, cachekey, &PL_sv_undef, 0)) {
croak("failed to store value in hash");
}
if(throw_nomethod)