The `where` clause is already a smart-match, adding `~~` to it is not only redundant, it can cause confusing action at a distance. (By that I mean the right side of `where` is exactly the same as the right side of `~~`)
You wouldn't write this: * ~~ (* ~~ 1|2|4|8|16) So don't write this either: … where * ~~ 1|2|4|8|16 --- It should be sub mysub(Int $value where 1|2|4|8|16) { say "Got $value" } On Sun, Mar 3, 2019 at 4:16 AM Fernando Santagata <nando.santag...@gmail.com> wrote: > > Hi Todd, > is this what you're looking for? > > sub mysub(Int $value where * ~~ 1|2|4|8|16) > { > say "Got $value" > } > > mysub 2; # Got 2 > mysub 3; # Constraint type check failed in binding to parameter '$value'; > expected anonymous constraint to be met but got Int (3) > > On Sun, Mar 3, 2019 at 11:09 AM ToddAndMargo via perl6-users > <perl6-us...@perl.org> wrote: >> >> Hi All, >> >> I want to pass an integer to a sub. The only >> valid values of the integer are 1, 2, 4, 8, and 16. >> >> Other than using "if" to test their values, is >> there a way to state that an integer can only >> have certain predefined values? >> >> Many thanks, >> -T >> >> -- >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> Having been erased, >> The document you're seeking >> Must now be retyped. >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > > > -- > Fernando Santagata