diff options
-rw-r--r-- | sv.c | 3 | ||||
-rwxr-xr-x | t/op/array.t | 7 |
2 files changed, 8 insertions, 2 deletions
@@ -2860,7 +2860,8 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr) if (SvTEMP(sstr) && /* slated for free anyway? */ SvREFCNT(sstr) == 1 && /* and no other references to it? */ !(sflags & SVf_OOK) && /* and not involved in OOK hack? */ - SvLEN(sstr)) /* and really is a string */ + SvLEN(sstr) && /* and really is a string */ + !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */ { if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */ if (SvOOK(dstr)) { diff --git a/t/op/array.t b/t/op/array.t index 7cc84e3217..d48b5fbfa0 100755 --- a/t/op/array.t +++ b/t/op/array.t @@ -1,6 +1,6 @@ #!./perl -print "1..70\n"; +print "1..71\n"; # # @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them @@ -229,3 +229,8 @@ print "ok 69\n"; print "not " unless unshift(@ary,12) == 5; print "ok 70\n"; + +sub foo { "a" } +@foo=(foo())[0,0]; +$foo[1] eq "a" or print "not "; +print "ok 71\n"; |