> On Dec 9, 2023, at 22:12, ToddAndMargo via perl6-users <perl6-users@perl.org> > 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.