char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
OP *newop = newAVREF(newGVOP(OP_GV, 0,
gv_fetchpv(name, TRUE, SVt_PVAV) ));
- if (ckWARN(WARN_SYNTAX))
#ifdef IV_IS_QUAD
+ if (ckWARN(WARN_SYNTAX))
Perl_warner(aTHX_ WARN_SYNTAX,
"Array @%s missing the @ in argument %" PERL_PRId64 " of %s()",
name, (IV)numargs, PL_op_desc[type]);
#else
+ if (ckWARN(WARN_SYNTAX))
Perl_warner(aTHX_ WARN_SYNTAX,
"Array @%s missing the @ in argument %ld of %s()",
name, (long)numargs, PL_op_desc[type]);
char *name = SvPVx(((SVOP*)kid)->op_sv, n_a);
OP *newop = newHVREF(newGVOP(OP_GV, 0,
gv_fetchpv(name, TRUE, SVt_PVHV) ));
- if (ckWARN(WARN_SYNTAX))
#ifdef IV_IS_QUAD
+ if (ckWARN(WARN_SYNTAX))
Perl_warner(aTHX_ WARN_SYNTAX,
"Hash %%%s missing the %% in argument %" PERL_PRId64 " of %s()",
name, (IV)numargs, PL_op_desc[type]);
#else
+ if (ckWARN(WARN_SYNTAX))
Perl_warner(aTHX_ WARN_SYNTAX,
"Hash %%%s missing the %% in argument %ld of %s()",
name, (long)numargs, PL_op_desc[type]);
OP *kkid = kid->op_sibling;
/* Can just relocate the target. */
- if (kkid && kkid->op_type == OP_PADSV) {
+ if (kkid && kkid->op_type == OP_PADSV
+ && !(kkid->op_private & OPpLVAL_INTRO))
+ {
/* Concat has problems if target is equal to right arg. */
if (kid->op_type == OP_CONCAT
&& kLISTOP->op_first->op_sibling->op_type == OP_PADSV
goto ignore_optimization;
} else {
o->op_targ = o->op_next->op_targ;
+ o->op_private |= OPpTARGET_MY;
}
}
null(o->op_next);
case OP_GREPWHILE:
case OP_AND:
case OP_OR:
+ case OP_ANDASSIGN:
+ case OP_ORASSIGN:
case OP_COND_EXPR:
case OP_RANGE:
o->op_seq = PL_op_seqmax++;