diff options
-rw-r--r-- | gv.c | 13 | ||||
-rw-r--r-- | lib/overload.t | 2 |
2 files changed, 11 insertions, 4 deletions
@@ -2756,9 +2756,16 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr) ? (amtp = (AMT*)mg->mg_ptr)->table : NULL)) - && (cv = cvp[off=method])) { /* Method for right - * argument found */ - lr=1; + && ((cv = cvp[off=method+assignshift]) + || (assign && amtp->fallback > AMGfallNEVER && /* fallback to + * usual method */ + ( +#ifdef DEBUGGING + fl = 1, +#endif + cv = cvp[off=method])))) { /* Method for right + * argument found */ + lr=1; } else if (((cvp && amtp->fallback > AMGfallNEVER) || (ocvp && oamtp->fallback > AMGfallNEVER)) && !(flags & AMGf_unary)) { diff --git a/lib/overload.t b/lib/overload.t index c0478eef7f..015497b98f 100644 --- a/lib/overload.t +++ b/lib/overload.t @@ -202,7 +202,7 @@ is($b, "89"); is(ref $a, "Oscalar"); is($copies, 1); -eval q[package Oscalar; use overload ('+=' => sub {$ {$_[0]} += 3*$_[1]; +eval q[package Oscalar; use overload ('+=' => sub {$ {$_[0]} += 3*"$_[1]"; $_[0] } ) ]; $c=new Oscalar; # Cause rehash |