Re: Bug report: split splits on wrong pattern
Radu Greab [Wed, 27 Jun 2001 21:50:52 +0000 (00:50 +0300)]
Message-ID: <15162.11020.279064.471031@ix.netsoft.ro>

p4raw-id: //depot/perl@11029

pp_ctl.c
t/op/split.t

index 24dfc26..4970bd0 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -147,8 +147,11 @@ PP(pp_regcomp)
 
     if (!PM_GETRE(pm)->prelen && PL_curpm)
        pm = PL_curpm;
-    else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
-       pm->op_pmflags |= PMf_WHITE;
+    else
+       if (strEQ("\\s+", PM_GETRE(pm)->precomp))
+           pm->op_pmflags |= PMf_WHITE;
+       else
+           pm->op_pmflags &= ~PMf_WHITE;
 
     /* XXX runtime compiled output needs to move to the pad */
     if (pm->op_pmflags & PMf_KEEP) {
index 8aa91e5..170dfe8 100755 (executable)
@@ -5,7 +5,7 @@ BEGIN {
     @INC = '../lib';
 }
 
-print "1..44\n";
+print "1..45\n";
 
 $FS = ':';
 
@@ -244,3 +244,13 @@ print "ok 32\n";
     print "ok 44\n";
 }
 
+{
+    # check that PMf_WHITE is cleared after \s+ is used
+    # reported in <20010627113312.RWGY6087.viemta06@localhost>
+    my $r;
+    foreach my $pat ( qr/\s+/, qr/ll/ ) {
+       $r = join ':' => split($pat, "hello cruel world");
+    }
+    print "not " unless $r eq "he:o cruel world";
+    print "ok 45\n";
+}