You can set a limit to the number of items (words) you want to retrieve: you will get only the first $limit words.
If you don't supply any limit, Inf can be thought as the default value for the number of items, i.e. there is no limit and the routine will return as many words as it can from the source input. Le mer. 26 sept. 2018 à 23:19, ToddAndMargo <toddandma...@zoho.com> a écrit : > >> On Wed, Sep 26, 2018 at 2:57 AM Todd Chester <toddandma...@zoho.com > >> multi method words(Str:D $input: $limit = Inf --> Positional) > > > On 9/26/18 7:21 AM, Brandon Allbery wrote: > > > $limit sets a limit on how many words it will make. Inf means there's no > > limit. Your assumption that it must be some kind of array index doesn't > > make a lot of sense; this doesn't index at all, it splits at whitespace > > until it's got the number of chunks you told it to make, indexing the > > result is your problem. Small pieces of functionality, not "god > > functions" that try to do everything you can possibly think of. > > Hi Brandon, > > So, "$limit = Inf" means that I can put an infinite number of > stuff in the [] or () > > p6 '"a b c d e".words(3)[2,4].say;' > (c Nil) > > $ p6 '"a b c d e".words(3).say;' > (a b c) > > > I really think that could be written better. > > First off the parameter is not a "limit". It is > a selection. > > And second, "Inf" is a "type", meaning "infinity" or larger > than Perl's memory allocation can handle. It is confusing > to use it to state that there can be any number of selections > in the parameter. > > $ p6 '"a b c d e".words()[2,4,1,3,3,3,3,20].say;' > (c e b d d d d Nil) > > It also does not tell that the parameter(s) is/are integers > or what happens if you supply a sting (error) or a real (it > truncates): > > $ p6 '"a b c d e".words()["a"].say;' > Cannot convert string to number: base-10 number must begin > with valid digits or '.' in '⏏a' (indicated by ⏏) > in block <unit> at -e line 1 > > $ p6 '"a b c d e".words()[ 2.5 ].say;' > c > > Third, it does not state the difference between using () and []. > Or how to mix and match them. > > $ p6 '"a b c d e".words(3).say;' > (a b c) > > Where (3) gives you the first three words > > -T >