}
TAINT_NOT;
}
- if (relem == lastrelem && dowarn)
- warn("Odd number of elements in hash list");
+ if (relem == lastrelem && dowarn) {
+ if (relem == firstrelem &&
+ SvROK(*relem) &&
+ ( SvTYPE(SvRV(*relem)) == SVt_PVAV ||
+ SvTYPE(SvRV(*relem)) == SVt_PVHV ) )
+ warn("Reference found where even-sized list expected");
+ else
+ warn("Odd number of elements in hash assignment");
+ }
}
break;
default:
*/
MUTEX_LOCK(CvMUTEXP(cv));
if (CvFLAGS(cv) & CVf_LOCKED) {
- MAGIC *mg;
- if (CvFLAGS(cv) & CVf_METHOD) {
+ MAGIC *mg;
+ if (CvFLAGS(cv) & CVf_PACKAGE) {
+ sv = (SV *) CvGV(cv);
+ }
+ else if (CvFLAGS(cv) & CVf_METHOD) {
if (SP > stack_base + TOPMARK)
sv = *(stack_base + TOPMARK + 1);
else {