in reply to Eliminating "used only once" warnings from List::Util::reduce
#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" STATIC OP* ck_reduce(pTHX_ OP* o, GV* namegv, SV* ckobj) { #define check_reduce(a,b,c) check_reduce(aTHX_ a,b,c) PERL_UNUSED_ARG(namegv); PERL_UNUSED_ARG(ckobj); (void*)gv_fetchpvs("a", GV_ADD|GV_ADDMULTI, SVt_PV)); (void*)gv_fetchpvs("b", GV_ADD|GV_ADDMULTI, SVt_PV)); return o; } /* ======================================== */ MODULE = List::Util PACKAGE = List::Util BOOT: { CV* const reducecv = get_cvn_flags("List::Util::reduce", 18, GV_ADD +); cv_set_call_checker(reducecv, ck_reduce, &PL_sv_undef); }
There's something missing since $a and $b's package isn't mentioned anywhere, but you should be able to grab the right package since the checker is called for each call of reduce.
If this works, the warning will be disabled if and only if reduce is used, and only for the package using it.
|
|---|