Re: Test not working so well

[email protected] (William Michels via perl6-users)
Newsgroups perl.perl6.users
Message-ID <[email protected]>

> 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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.