> 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.