diff options
author | Ævar Arnfjörð Bjarmason <avar@cpan.org> | 2007-08-11 20:33:49 +0000 |
---|---|---|
committer | Abhijit Menon-Sen <ams@wiw.org> | 2007-08-12 14:20:44 +0000 |
commit | e9515b0f73bee32254d01f1895ff1206459e6758 (patch) | |
tree | 296864db06e0d3d73919043d7d0d778fcbe43262 /pp.c | |
parent | df44d732c379359119ddcbb4645f9d1a2c1ffec2 (diff) | |
download | perl-e9515b0f73bee32254d01f1895ff1206459e6758.tar.gz |
Re: [PATCH] Optimize split //
From: Ãvar Arnfjörð Bjarmason <avarab@gmail.com>
Message-Id: <51dd1af80708111333kfd82e12u145b5ba38e23dcce@mail.gmail.com>
p4raw-id: //depot/perl@31704
Diffstat (limited to 'pp.c')
-rw-r--r-- | pp.c | 38 |
1 files changed, 24 insertions, 14 deletions
@@ -4726,26 +4726,36 @@ PP(pp_split) else EXTEND(SP, slen); - while (--limit) { - m = s; - - if (do_utf8) + if (do_utf8) { + while (--limit) { + /* keep track of how many bytes we skip over */ + m = s; s += UTF8SKIP(s); - else - ++s; + dstr = newSVpvn(m, s-m); - dstr = newSVpvn(m, s-m); + if (make_mortal) + sv_2mortal(dstr); - if (make_mortal) - sv_2mortal(dstr); - if (do_utf8) (void)SvUTF8_on(dstr); + PUSHs(dstr); - PUSHs(dstr); + if (s >= strend) + break; + } + } else { + while (--limit) { + dstr = newSVpvn(s, 1); + + s++; + + if (make_mortal) + sv_2mortal(dstr); - /* are we there yet? */ - if (s >= strend) - break; + PUSHs(dstr); + + if (s >= strend) + break; + } } } else if (do_utf8 == ((rx->extflags & RXf_UTF8) != 0) && |