diff options
author | Nicholas Clark <nick@ccl4.org> | 2009-08-22 16:28:32 +0100 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2009-08-22 16:28:32 +0100 |
commit | c1754fcef434d9211b828cbe76693855ba6fb690 (patch) | |
tree | 2fb053cd7e16045d770580afcb55c12583bf1fea /op.c | |
parent | 9c1314f0ea4d104e361a6e4ededa781e65b14518 (diff) | |
download | perl-c1754fcef434d9211b828cbe76693855ba6fb690.tar.gz |
In Perl_newATTRSUB(), we know the lengths, so can avoid gv_fetchpv().
Brought to you by the Campaign for the Elimination of strlen().
Diffstat (limited to 'op.c')
-rw-r--r-- | op.c | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -5529,6 +5529,7 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) { dVAR; const char *aname; + STRLEN aname_len; GV *gv; const char *ps; STRLEN ps_len; @@ -5558,14 +5559,20 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) PL_curstash ? "__ANON__" : "__ANON__::__ANON__", CopFILE(PL_curcop), (IV)CopLINE(PL_curcop)); aname = SvPVX_const(sv); + aname_len = SvCUR(sv); } else aname = NULL; - gv = name ? gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV) - : gv_fetchpv(aname ? aname - : (PL_curstash ? "__ANON__" : "__ANON__::__ANON__"), - gv_fetch_flags, SVt_PVCV); + if (name) { + gv = gv_fetchsv(cSVOPo->op_sv, gv_fetch_flags, SVt_PVCV); + } else if (aname) { + gv = gv_fetchpvn_flags(aname, aname_len, gv_fetch_flags, SVt_PVCV); + } else if (PL_curstash) { + gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV); + } else { + gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV); + } if (!PL_madskills) { if (o) |