# New Ticket Created by "Chris Davaz"
# Please include the string: [perl #58952]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=58952 >
Here is the implementation of the second argument to the comb method as
described in S29. Here is a test I wrote (which I'll commit to the pugs test
suite later):
my Str $hair = "Th3r3 4r3 s0m3 numb3rs 1n th1s str1ng";
say $hair.comb(/\d+/);
say $hair.comb(/\d+/, -10);
say $hair.comb(/\d+/, 0);
say $hair.comb(/\d+/, 1);
say $hair.comb(/\d+/, 3);
say $hair.comb(/\d+/, 9);
say $hair.comb(/\d+/, 10000000000000000);
The output being:
3343033111
3
334
334303311
3343033111
Index: src/builtins/any-str.pir
===================================================================
--- src/builtins/any-str.pir (revision 31199)
+++ src/builtins/any-str.pir (working copy)
@@ -45,6 +45,8 @@
.sub comb :method :multi(_)
.param pmc regex
+ .param int count :optional
+ .param int has_count :opt_flag
.local pmc retv, match
.local string s
@@ -54,6 +56,10 @@
do_match:
match = regex.'ACCEPTS'(s)
unless match goto done
+ unless has_count goto skip_count
+ count -= 1
+ if count < 0 goto done
+ skip_count:
# shouldn't have to coerce to Str here, but see RT #55962
$S0 = match
retv.'push'($S0)