For each instance you are using [], it is the same as assigning to a variable, then calling [] on it.
$ p6 '"a b c d e".words(3).say;' (a b c) same as my @x = "a b c d e".words(3); @x.say $ p6 '"a b c d e".words(3)[ 2, 4 ].say;' (c Nil) same as my @x = '"a b c d e".words(3); # same as @x = 'a', 'b', 'c'; @x[2,4].say; (c, Nil) The methods don't take []. You are calling [] on the thing that the methods return. On Wed, Sep 26, 2018 at 8:49 PM ToddAndMargo <toddandma...@zoho.com> wrote: > On 9/26/18 4:33 PM, The Sidhekin wrote: > > On Wed, Sep 26, 2018 at 11:40 PM ToddAndMargo <toddandma...@zoho.com > > <mailto:toddandma...@zoho.com>> wrote: > > > > What I don't understand is: > > > > multi method words(Str:D $input: $limit = Inf --> Positional) > > > > Specifically "$limit = Inf". Why are we using "$limit" instead > > of "$selection" > > > > Perhaps this would be easier if you explain where you're getting > > "$selection", and what you think it is. > > $ p6 '"a b c d e".words[ 2, 4 ].say;' > (c e) > > or > > $ p6 '"a b c d e".words()[ 2, 4 ].say;' > (c e) > > I am selecting the 2nd and 4th word starting from zero. Inside > the brackets I am asking it to select th e 2nd and 4th words for me. > > I am NOT asking it to limit my request to Infinity. > > > > > > > And where is it stated what goes in the () and what goes > > in the []? > > > > > > The () is part of a method call syntax; method arguments go there: > > https://docs.perl6.org/language/syntax#Subroutine_calls > > Where does it state that > > $ p6 '"a b c d e".words(3).say;' > (a b c) > > means the first three words, starting at zero? > > > > The [] is a postcircumfix operator; index arguments go there: > > https://docs.perl6.org/language/operators#postcircumfix_[_] > > Where does > > multi method words(Str:D $input: $limit = Inf --> Positional) > > state that I can do such? > > I ask this because not all methods will take [] > > > $ p6 '"a b c d e".contains( "a","b" ).say;' > Cannot convert string to number: base-10 number must begin with valid > digits or '.' in '⏏b' (indicated by ⏏) > in block <unit> at -e line 1 > > $ p6 '"a b c d e".contains( 1, 3 ).say;' > Ambiguous call to 'contains(Str: Int, Int)'; these signatures all match: > :(Str:D: Cool:D $needle, Cool:D $pos, *%_) > :(Str:D: Cool:D $needle, Cool:D $pos, *%_) > in block <unit> at -e line 1 > > > Also, where is it stated that > > $ p6 '"a b c d e".words(3)[ 2, 4 ].say;' > (c Nil) > > will send the first three words to [2,4] ? > > Thank you for helping me with this! > > -T >