Subject: | GvCV and GvGP lvalue changes in perl core |
Date: | Fri, 21 Jan 2011 16:22:40 +0000 |
To: | bug-Method-Cumulative [...] rt.cpan.org |
From: | Dave Mitchell <davem [...] iabyn.com> |
Hi, A search of sources on CPAN shows that your module(s) use GvCV()
and/or GvGP() in an lvalue context (i.e. you assign to it).
From perl 5.13.10 onwards, this will no longer be allowed, and you'll
need to update your source code in such a way as to be compatible with
both existing and the new perls.
Probably the easiest way to do this is to add the following
definitions:
#ifndef GvCV_set
# define GvCV_set(gv,cv) (GvGP(gv)->gp_cv = (cv))
#endif
#ifndef GvGP_set
# define GvGP_set(gv,gp) ((gv)->sv_u.svu_gp = (gp))
#endif
then replace code like the following:
GvGP(gv) = gp;
GvCV(gv) = cv;
with
GvGP_set(gv, gp);
GvCV_set(gv, cv);
If you do something like
SAVEGENERICSV(&(GvCV(gv)))
then you may need to replace it with a custom SAVEDESTRUCTOR() or similar
that does a GvCV_set(gv,old_value) upon restoration.