I think https://github.com/rakudo/rakudo/commit/dd2f072d6aae04bfcf2603c6bdcd2f2e7d804ea8 fixed it.
> On 16 Nov 2019, at 18:57, Timo Paulssen <t...@wakelift.de> wrote: > > Oh dang! > > This may very well be a rakudobug. I've actually never used the sub form > of comb, only ever the method form, for which the "match" named > parameter definitely exists: > > "a;b;c".comb(/\w/, match => True); > (「a」 「b」 「c」) > > Someone will have to fix that and then the code from my mail will > retroactively become correct ;) > > HTH > - Timo > > On 16/11/2019 18:35, William Michels wrote: >> Hello Timo, and thank you for taking the time to explain how "comb" >> routine signatures work. I have no doubt your description is the >> correct way to use comb routine(s) in Raku/Perl6. >> >> First of all, I should preface my remarks by saying that I'm using >> Rakudo (moar) 2019.07.1, with the Linenoise module to run the >> Raku/Perl6 REPL. It has been suggested to me that my install might >> somehow be broken, because I tried to 'roll-my-own' Rakudo-Star >> release (basically I copied over pre-installed modules from my Rakudo >> 2019.03 install, and ran 'zef update'). >> >> In any case, I haven't been able to get the code you posted to work. I >> checked all six examples in the REPL, and the last example I checked >> at the command line as well. I'm hoping someone on the list running >> Rakudo (moar) 2019.07.1 can confirm/refute my results: >> >>> #Timo >> Nil >>> comb(/\w/, "a;b;c", match => True); >> Unexpected named argument 'match' passed >> in block <unit> at <unknown file> line 1 >> >>> comb(/\w/, "a;b;c", :match); >> Unexpected named argument 'match' passed >> in block <unit> at <unknown file> line 1 >> >>> comb(/\w/, "a;b;c", :match(True)); >> Unexpected named argument 'match' passed >> in block <unit> at <unknown file> line 1 >> >>> comb(/\w/, "a;b;c", :!match); >> Unexpected named argument 'match' passed >> in block <unit> at <unknown file> line 1 >> >>> comb(/\w/, "a;b;c", :match(False)); >> Unexpected named argument 'match' passed >> in block <unit> at <unknown file> line 1 >> >>> comb(/\w/, "a;b;c", 2, :match); >> Unexpected named argument 'match' passed >> in block <unit> at <unknown file> line 1 >> >>> $*VM >> moar (2019.07.1) >>> exit >> mbook:~ homedir$ perl6 -e 'comb(/\w/, "a;b;c", 2, :match);' >> Unexpected named argument 'match' passed >> in block <unit> at -e line 1 >> mbook:~ homedir$ >> >> As for what's going on, I'm wondering if there might be an issue with >> "comb" signatures in general. There exists both a '(Str) routine comb' >> and a '(Cool) routine comb'. Maybe these two routines are somehow >> interfering with each other? >> >> Thank you, and any further help appreciated, Bill. >> >> >> On Sat, Nov 16, 2019 at 6:34 AM Timo Paulssen <t...@wakelift.de> wrote: >>> Hi Bill, >>> >>> In your repl examples you're actually passing the True or False as a >>> positional parameter, which makes it go into the slot for $limit, not the >>> slot for :$match. >>> >>> In order to pass true or false for the "match" named parameter you have >>> different syntactical options: >>> >>> comb(/\w/, "a;b;c", match => True) # maybe the simplest is using a pair >>> >>> comb(/\w/, "a;b;c", :match) # using "colon pair" syntax; it's syntax that >>> puts a colon at the beginning and makes a pair >>> >>> comb(/\w/, "a;b;c", :match(True)) # :match is short for match => True, and >>> :match(True) is long for match => True >>> >>> comb(/\w/, "a;b;c", :!match) # putting a ! after the : negates the pair, >>> i.e. it's now match => False >>> >>> comb(/\w/, "a;b;c", :match(False)) # same value >>> >>> And on top of that, you can add the third positional parameter to pass a >>> value for $limit >>> >>> comb(/\w/, "a;b;c", 2, :match) # output up to two results, as match objects >>> >>> Here's a few comments on the examples you pasted: >>> >>> >>>> On another note (or possibly the same note), I tried code similar to > >>>> Joe's with fair success. I was able to get the REPL to understand a > >>>> "True" or "False" parameter, but never in conjunction with a > "$limit" >>>> parameter. Is this the correct behaviour, and why? >>> The surprise here comes from Bool actually being derived from Int, and >>> therefore being totally acceptable values to pass for $limit. >>>>> #REPL > Nil >> say comb(/\w/, "a;b;c", False).perl; > ().Seq You can see >>>>> here that it gave no results; that's because it interpreted the False as >>>>> 0 in the $limit parameter. >>>>> say comb(/\w/, "a;b;c", True).perl; > ("a",).Seq >>> Here the True is interpreted as 1 for $limit, giving you just "a", and it's >>> a string because the match named parameter wasn't given and defaulted to >>> False. >>>>> say comb(/\w+/, "a;b;c", True).perl; > ("a",).Seq >>> The difference between \w and \w+ isn't noticeable here, as the source >>> string only ever has single word character in a row, but you can try with >>> "ab;cd;ef" for example with both \w and \w+. >>> >>>>> say comb(/\w+/, "a;b;c", 2).perl; > ("a", "b").Seq >> say comb(/\w+/, >>>>> "a;b;c", 3).perl; > ("a", "b", "c").Seq >> say comb(/\w+/, "a;b;c", >>>>> 4).perl; > ("a", "b", "c").Seq >> say comb(/\w+/, "a;b;c", True).perl; > >>>>> ("a",).Seq >>> Same as above; True being interpreted as 1 >>> >>>>> say comb(/\w+/, "a;b;c", 2, True).perl; > Too many positionals passed; >>>>> expected 2 or 3 arguments but got 4 in > block <unit> at <unknown file> >>>>> line 1 >>> There's no syntax here that distinguishes 2, a positional parameter, from >>> True, also a positional parameter. >>> >>>>> say comb(/\w+/, "a;b;c", 2, :True).perl; > Unexpected named argument >>>>> 'True' passed in block <unit> at <unknown > file> line 1 >>> The issue here is that :True is short for True => True, i.e. passing the >>> value True to the named parameter called "True", easy to get confused by >>> the error message here! >>>> Any help appreciated, Bill. >>> I hope the explanations make sense! >>> - Timo