summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gv.c13
-rw-r--r--lib/overload.t2
2 files changed, 11 insertions, 4 deletions
diff --git a/gv.c b/gv.c
index a61c34f219..8bc7d9945d 100644
--- a/gv.c
+++ b/gv.c
@@ -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