This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #109542] Make num ops treat $1 as "$1"
[perl5.git] / sv.h
diff --git a/sv.h b/sv.h
index 9078517..6d26f85 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -1208,8 +1208,14 @@ the scalar's value cannot change unless written to.
        STMT_START {if (!SvIOKp(sv) && (SvNOK(sv) || SvPOK(sv))) \
                (void) SvIV(sv); } STMT_END
 #define SvIV_please_nomg(sv) \
-       STMT_START {if (!SvIOKp(sv) && (SvNOK(sv) || SvPOK(sv))) \
-               (void) SvIV_nomg(sv); } STMT_END
+       (!SvIOKp(sv) && (SvNOK(sv) || SvPOK(sv)) \
+           ? (SvIV_nomg(sv), SvIOK(sv))          \
+           : SvGMAGICAL(sv)                       \
+               ? SvIOKp(sv) || (                   \
+                      (SvNOKp(sv) || SvPOKp(sv))    \
+                   && sv_gmagical_2iv_please(sv)     \
+                 )                                    \
+               : SvIOK(sv))
 #define SvIV_set(sv, val) \
        STMT_START { \
                assert(PL_valid_types_IV_set[SvTYPE(sv) & SVt_MASK]);   \