diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-18 05:15:06 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-18 05:15:06 +0000 |
commit | 60425c380d8403607be85706bb016ae8d577acf4 (patch) | |
tree | 08f8900d4049d68f909ca8aaeb45e172b06f495a | |
parent | 05d340b81db0665672bf1917f71d6cb9459a3b2b (diff) | |
download | perl-60425c380d8403607be85706bb016ae8d577acf4.tar.gz |
NI-S' cunning idea of how to de-UTF8 the "\C-broken" submatches.
p4raw-id: //depot/perl@9193
-rw-r--r-- | mg.c | 6 | ||||
-rwxr-xr-x | t/op/pat.t | 6 |
2 files changed, 5 insertions, 7 deletions
@@ -412,7 +412,9 @@ Perl_magic_len(pTHX_ SV *sv, MAGIC *mg) char *s = rx->subbeg + s1; char *send = rx->subbeg + t1; - i = Perl_utf8_length(aTHX_ (U8*)s, (U8*)send); + i = t1 - s1; + if (is_utf8_string((U8*)s, i)) + i = Perl_utf8_length(aTHX_ (U8*)s, (U8*)send); } if (i < 0) Perl_croak(aTHX_ "panic: magic_len: %"IVdf, (IV)i); @@ -630,7 +632,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) PL_tainted = FALSE; } sv_setpvn(sv, s, i); - if (DO_UTF8(PL_reg_sv)) + if (DO_UTF8(PL_reg_sv) && is_utf8_string((U8*)s, i)) SvUTF8_on(sv); else SvUTF8_off(sv); diff --git a/t/op/pat.t b/t/op/pat.t index a66ea45199..8575ca8a15 100755 --- a/t/op/pat.t +++ b/t/op/pat.t @@ -1133,8 +1133,6 @@ $test++; $_ = "a\x{100}b"; if (/(.)(\C)(\C)(.)/) { print "ok 232\n"; - # currently \C are still tagged as UTF-8 - use bytes; if ($1 eq "a") { print "ok 233\n"; } else { @@ -1164,7 +1162,6 @@ $_ = "\x{100}"; if (/(\C)/g) { print "ok 237\n"; # currently \C are still tagged as UTF-8 - use bytes; if ($1 eq "\xC4") { print "ok 238\n"; } else { @@ -1178,7 +1175,6 @@ if (/(\C)/g) { if (/(\C)/g) { print "ok 239\n"; # currently \C are still tagged as UTF-8 - use bytes; if ($1 eq "\x80") { print "ok 240\n"; } else { @@ -1231,7 +1227,7 @@ if (ord('i') == 0x89 && ord('J') == 0xd1) { # EBCDIC } } else { for (244..245) { - print "ok $_ # Skip: not EBCDIC\n"; + print "ok $_ # Skip: only in EBCDIC\n"; } } |