From: Father Chrysostomos Date: Sat, 31 Oct 2009 15:15:08 +0000 (+0100) Subject: [perl #69875] Slow down split in scalar context :-) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=941446f6f52eecff56982518624db4f64a5951fc;p=p5sagit%2Fp5-mst-13.2.git [perl #69875] Slow down split in scalar context :-) The patch to speed up split in scalar context broke Font::GlyphNames, because it stops scalar(@array = split) from working. The attached patch fixes this, and ineluctably slows it down slightly. (Patch amended by replacing the 2nd GIMME_V macro call by the gimme variable) --- diff --git a/pp.c b/pp.c index 80bb590..d0022fc 100644 --- a/pp.c +++ b/pp.c @@ -4894,7 +4894,7 @@ PP(pp_split) I32 realarray = 0; I32 base; const I32 gimme = GIMME_V; - const bool gimme_scalar = (GIMME_V == G_SCALAR); + bool gimme_scalar; const I32 oldsave = PL_savestack_ix; U32 make_mortal = SVs_TEMP; bool multiline = 0; @@ -4968,6 +4968,8 @@ PP(pp_split) multiline = 1; } + gimme_scalar = gimme == G_SCALAR && !ary; + if (!limit) limit = maxiters + 2; if (RX_EXTFLAGS(rx) & RXf_WHITE) { diff --git a/t/op/split.t b/t/op/split.t index 6b38b43..da12b3e 100644 --- a/t/op/split.t +++ b/t/op/split.t @@ -6,7 +6,7 @@ BEGIN { require './test.pl'; } -plan tests => 250; +plan tests => 251; $FS = ':'; @@ -460,3 +460,11 @@ is($cnt, scalar(@ary)); () = split m/,/, "", BANG; ok(1); } + +{ + # Bug #XXXXX + # 'Hybrid' scalar-and-array context + scalar(our @PATH = split /::/, "Font::GlyphNames"); + # 'my' doesn't trigger the bug + is "@PATH", "Font GlyphNames", "hybrid scalar-and-array context"; +}