This patch fixes the following: perl -le "print 1x1e12 ne '' ? 'ok' : 'not ok'" not ok
perl -le "print 1x(1x12) ne '' ? 'ok' : 'not ok'" not ok perl -le "print +(1)x1e12" (no output) perl -le "print +(1)x(1x12)" (no output)
diff -ruN perl-current/pp.c perl-patched/pp.c --- perl-current/pp.c Wed Jun 22 14:23:34 2005 +++ perl-patched/pp.c Thu Jun 23 12:14:04 2005 @@ -1399,30 +1399,12 @@ dPOPss; if (SvGMAGICAL(sv)) mg_get(sv); - if (SvIOKp(sv)) { - if (SvUOK(sv)) { - UV uv = SvUV(sv); - if (uv > IV_MAX) - count = IV_MAX; /* The best we can do? */ - else - count = uv; - } else { - IV iv = SvIV(sv); - if (iv < 0) - count = 0; - else - count = iv; - } - } - else if (SvNOKp(sv)) { - NV nv = SvNV(sv); - if (nv < 0.0) - count = 0; - else - count = (IV)nv; - } - else - count = SvIVx(sv); + + SvIV_please(sv); + count = SvIVX(sv); + if (SvIsUV(sv) && count < 0) + count = IV_MAX; + if (GIMME == G_ARRAY && PL_op->op_private & OPpREPEAT_DOLIST) { dMARK; I32 items = SP - MARK;