Re: Test not working so well
[email protected] (ToddAndMargo via perl6-users)
| Newsgroups | perl.perl6.users |
|---|---|
| Message-ID | <[email protected]> |
On 12/9/23 22:49, William Michels via perl6-users wrote: > > >> On Dec 9, 2023, at 22:12, ToddAndMargo via perl6-users >> <[email protected]> wrote: >> >> On 12/9/23 21:32, ToddAndMargo via perl6-users wrote: >>> On 12/9/23 19:42, William Michels via perl6-users wrote: >>>> >>>>> On 12/9/23 17:44, Tom Browder wrote: >>>>> > Try: say so $=.... >>>>> > >>>>> >>>>> Would you give me a quick example? >>>> >>>> Hi Todd! >>>> >>>> <SNIP> >>>> >>>> HTH, Bill. >>> Awesome! Thank you! >>> :-) :-) :-) >> >> >> Hi Bill, >> >> I was going to make a keeper out of your examples which explanations. >> Not to ask too stupid a question, but what should I call teh keeper? >> >> Many thanks, >> -T > > > Hi Todd, > > I should have annotated my examples. I'd just call these "match > explorations". You'd probably want to write something like: > > if $x.match( / ^ <+[0..9] + [a..z]> ** 7 $ / ) { do something...}; > > #Below: use <alnum> character class, which also includes underscores. > Smartmatching with match return: >>>> [0] > my $x="abc2def"; say $x ~~ / ^ <alnum> ** 7 $ /; >>>> 「abc2def」 >>>> alnum => 「a」 >>>> alnum => 「b」 >>>> alnum => 「c」 >>>> alnum => 「2」 >>>> alnum => 「d」 >>>> alnum => 「e」 >>>> alnum => 「f」 > > #Below: not a great example (waiting for a fellow Rakoon to chime in and > explain): >>>> [0] > my $x="abc2def"; .so.put if $x ~~ / ^ <alnum> ** 7 $ /; >>>> False > > #Below: use `so`. Automatic return in the REPL. But are parentheses > required? >>>> [0] > my $x="abc2def"; $x ~~ / ^ <alnum> ** 7 $ /.so; >>>> True > > #Below: automatic return in the REPL. Parentheses work: >>>> [1] > my $x="abc2def"; ($x ~~ / ^ <alnum> ** 7 $ /).so; >>>> True > > #Below: use `Bool` instead of `so`: >>>> [2] > my $x="abc2def"; Bool($x ~~ / ^ <alnum> ** 7 $ /); >>>> True > > #Below: use `Bool` to check an 8-character match (should return `False`): >>>> [3] > my $x="abc2def"; Bool($x ~~ / ^ <alnum> ** 8 $ /); >>>> False > > #Below: use `Bool`, back to a 7-character match, add `say`: >>>> [4] > my $x="abc2def"; Bool($x ~~ / ^ <alnum> ** 7 $ /).say; >>>> True > > #Below: use `Bool`, a 8-character (non)-match, with `say`: >>>> [4] > my $x="abc2def"; Bool($x ~~ / ^ <alnum> ** 8 $ /).say; >>>> False > > #Below: make a custom `<[0..9] + [a..z]>` character class and test for 7 > (or 8) character match: >>>> [4] > my $x="abc2def"; Bool($x ~~ / ^ <[0..9] + [a..z]> ** 7 $ /).say; >>>> True >>>> [4] > my $x="abc2def"; Bool($x ~~ / ^ <[0..9] + [a..z]> ** 8 $ /).say; >>>> False > > #Below, add a leading `+` to the custom character class, just to be careful: >>>> [4] > my $x="abc2def"; Bool($x ~~ / ^ <+[0..9] + [a..z]> ** 8 $ >>>> /).say; >>>> False > > ##Below, remove `Bool` and rearrange `so` to give final code: >>>> [4] > my $x="abc2def"; say so $x.match: / ^ <+[0..9] + [a..z]> ** >>>> 8 $ /; >>>> False >>>> [4] > my $x="abc2def"; say so $x.match: / ^ <+[0..9] + [a..z]> ** >>>> 7 $ /; >>>> True > > HTH, Bill. Awesome!