From: Jarkko Hietaniemi Date: Tue, 23 Oct 2001 22:19:34 +0000 (+0000) Subject: Negation and Unicode: sort of solves 20010303.010, X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8eb28a70b2ec19f2782a68fd1ccf1a9a24131140;p=p5sagit%2Fp5-mst-13.2.git Negation and Unicode: sort of solves 20010303.010, except not quite like reported in the Subject (Perl_warner is still utf8-ignorant). p4raw-id: //depot/perl@12614 --- diff --git a/pp.c b/pp.c index a0729e9..c182e9a 100644 --- a/pp.c +++ b/pp.c @@ -2157,15 +2157,22 @@ PP(pp_negate) sv_setsv(TARG, sv); *SvPV_force(TARG, len) = *s == '-' ? '+' : '-'; } - else if (DO_UTF8(sv) && UTF8_IS_START(*s) && isIDFIRST_utf8((U8*)s)) { - sv_setpvn(TARG, "-", 1); - sv_catsv(TARG, sv); + else if (DO_UTF8(sv)) { + SvIV_please(sv); + if (SvIOK(sv)) + goto oops_its_an_int; + if (SvNOK(sv)) + sv_setnv(TARG, -SvNV(sv)); + else { + sv_setpvn(TARG, "-", 1); + sv_catsv(TARG, sv); + } } else { - SvIV_please(sv); - if (SvIOK(sv)) - goto oops_its_an_int; - sv_setnv(TARG, -SvNV(sv)); + SvIV_please(sv); + if (SvIOK(sv)) + goto oops_its_an_int; + sv_setnv(TARG, -SvNV(sv)); } SETTARG; } diff --git a/t/lib/warnings/sv b/t/lib/warnings/sv index 9af58c2..29bef82 100644 --- a/t/lib/warnings/sv +++ b/t/lib/warnings/sv @@ -326,3 +326,11 @@ no warnings 'numeric' ; $a = "\x{100}\x{200}" * 42; EXPECT Argument "\x{100}\x{200}" isn't numeric in multiplication (*) at - line 3. +######## +# sv.c +use warnings 'numeric' ; +$a = "\x{100}\x{200}"; $a = -$a; +no warnings 'numeric' ; +$a = "\x{100}\x{200}"; $a = -$a; +EXPECT +Argument "\x{100}\x{200}" isn't numeric in negation (-) at - line 3.