And when I cut/paste from the doc, the number example works too,
in both script and repl.

On Wed, Mar 17, 2021 at 10:33 PM Ralph Mellor <ralphdjmel...@gmail.com> wrote:
>
> Er, by wfm I mean it matches 「Is」 as the code suggests.
>
> On Wed, Mar 17, 2021 at 10:32 PM Ralph Mellor <ralphdjmel...@gmail.com> wrote:
> >
> > Works for me in Rakudo 2020.12.
> >
> > On Wed, Mar 17, 2021 at 9:33 PM yary <not....@gmail.com> wrote:
> > >
> > > The "Interpolation" section of the raku docs use strings as the elements 
> > > of building up a larger regex from smaller pieces, but the example that 
> > > looks fruitful isn't working in my raku. This is taken from 
> > > https://docs.raku.org/language/regexes#Regex_interpolation
> > >
> > > > my $string   = 'Is this a regex or a string: 123\w+False$pattern1 ?';
> > >
> > > Is this a regex or a string: 123\w+False$pattern1 ?
> > >
> > > > my $regex    = /\w+/;
> > >
> > > /\w+/
> > >
> > > > say $string.match: / $regex /;
> > >
> > > Regex object coerced to string (please use .gist or .raku to do that)
> > >
> > >  ... and more error lines, and no result when the docs show matching 
> > > '123':
> > >
> > > 「」
> > >
> > >
> > > $ raku -v
> > >
> > > Welcome to 𝐑𝐚𝐤𝐮𝐝𝐨™ v2020.10.
> > >
> > > Implementing the 𝐑𝐚𝐤𝐮™ programming language v6.d.
> > >
> > > Built on MoarVM version 2020.10.
> > >
> > >
> > >
> > > -y
> > >
> > >
> > > On Wed, Mar 17, 2021 at 3:17 PM William Michels via perl6-users 
> > > <perl6-us...@perl.org> wrote:
> > >>
> > >> Dear Brad,
> > >>
> > >> 1. The list you posted is fantastic ("If the first character inside is 
> > >> anything other than an alpha it doesn't capture"). It should be added to 
> > >> the Raku Docs ASAP.
> > >>
> > >> 2. There are some shortcuts that don't seem to follow a set pattern. For 
> > >> example a named capture can be accessed using $<myname> instead of 
> > >> $/<myname> ; the "/' can be elided. Do you have a method you can share 
> > >> for remembering these sorts of shortcuts? Or are they disfavored?
> > >>
> > >> > say ~$<myname> if 'abc' ~~ / $<myname> = [ \w+ ] /;
> > >> abc
> > >> >
> > >> [ Above from the example at 
> > >> https://docs.raku.org/syntax/Named%20captures ].
> > >>
> > >> 3. Finally, I've never seen in the Perl6/Raku literature the motto you 
> > >> cite: "One of the mottos of Raku, is that it is ok to confuse a new 
> > >> programmer, it is not ok to confuse an expert." Do you have a citation?
> > >>
> > >> [ The motto I prefer is from Larry Wall: "...easy things should stay 
> > >> easy, hard things should get easier, and impossible things should get 
> > >> hard... ." Citation: https://www.perl.com/pub/2000/10/23/soto2000.html/ 
> > >> ].
> > >>
> > >> Best Regards,
> > >>
> > >> Bill.
> > >>
> > >>
> > >>
> > >> On Sat, Mar 13, 2021 at 4:47 PM Brad Gilbert <b2gi...@gmail.com> wrote:
> > >>>
> > >>> It makes <…> more consistent precisely because <$pattern> doesn't 
> > >>> capture.
> > >>>
> > >>> If the first character inside is anything other than an alpha it 
> > >>> doesn't capture.
> > >>> Which is a very simple description of when it captures.
> > >>>
> > >>>     <?before …> doesn't capture because of the 「?」
> > >>>     <!before …> doesn't capture because of the 「!」
> > >>>     <.ws> doesn't capture because of the 「.」
> > >>>     <&ws> doesn't capture because of the 「&」
> > >>>     <$pattern> doesn't capture because of the 「$」
> > >>>     <$0> doesn't capture because of the 「$」
> > >>>     <@a> doesn't capture because of the 「@」
> > >>>     <[…]> doesn't capture because of the 「[」
> > >>>     <-[…]> doesn't capture because of the 「-]
> > >>>     <:Ll> doesn't capture because of the 「:」
> > >>>
> > >>> For most of those, you don't actually want it to capture.
> > >>> With 「.」 the whole point is that it doesn't capture.
> > >>>
> > >>>     <digit> does capture because it starts with an alpha
> > >>>     <pattern=$pattern> does capture because it starts with an alpha
> > >>>
> > >>>     $0 = <$pattern> doesn't capture to $<pattern>, but does capture to 
> > >>> $0
> > >>>     $<pattern> = <$pattern> captures because of $<pattern> =
> > >>>
> > >>> It would be a mistake to just make <$pattern> capture.
> > >>> Consistency is perhaps Raku's most important feature.
> > >>>
> > >>> One of the mottos of Raku, is that it is ok to confuse a new 
> > >>> programmer, it is not ok to confuse an expert.
> > >>> An expert in Raku understands the deep fundamental ways that Raku is 
> > >>> consistent.
> > >>> So breaking consistency should be very carefully considered.
> > >>>
> > >>> In this case, there is very little benefit.
> > >>> Even worse, you then have to come up with some new syntax to prevent it 
> > >>> from capturing when you don't want it to.
> > >>> That new syntax wouldn't be as guessible as it currently is. Which 
> > >>> again would confuse experts.
> > >>>
> > >>> If anyone seriously suggests such a change, I will vehemently fight to 
> > >>> prevent it from happening.
> > >>>
> > >>> I would be more likely to accept <=$pattern> being added as a synonym 
> > >>> to <pattern=$pattern>.
> > >>>
> > >>> On Sat, Mar 13, 2021 at 3:30 PM Joseph Brenner <doom...@gmail.com> 
> > >>> wrote:
> > >>>>
> > >>>> Thanks much for your answer on this.  I think this is the sort of
> > >>>> trick I was looking for:
> > >>>>
> > >>>> Brad Gilbert<b2gi...@gmail.com> wrote:
> > >>>>
> > >>>> > You can put it back in as a named
> > >>>>
> > >>>> >     > $input ~~ / <pattern=$pattern>
> > >>>> >     「9 million」
> > >>>> >      pattern => 「9 million」
> > >>>> >       0 => 「9」
> > >>>> >       1 => 「million」
> > >>>>
> > >>>> That's good enough, I guess, though you need to know about the
> > >>>> issue... is there some reason it shouldn't happen automatically,
> > >>>> using the variable name to label the captures?
> > >>>>
> > >>>> I don't think this particular gotcha is all that well
> > >>>> documented, though I guess there's a reference to this being a
> > >>>> "known trap" in the documentation under "Regex interpolation"--
> > >>>> but that's the sort of remark that makes sense only after you know
> > >>>> what its talking about.
> > >>>>
> > >>>> I have to say, my first reaction was something like "if they
> > >>>> couldn't get this working right, why did they put it in?"
> > >>>>
> > >>>>
> > >>>> On 3/11/21, Brad Gilbert <b2gi...@gmail.com> wrote:
> > >>>> > If you interpolate a regex, it is a sub regex.
> > >>>> >
> > >>>> > If you have something like a sigil, then the match data structure 
> > >>>> > gets
> > >>>> > thrown away.
> > >>>> >
> > >>>> > You can put it back in as a named
> > >>>> >
> > >>>> >     > $input ~~ / <pattern=$pattern>
> > >>>> >     「9 million」
> > >>>> >      pattern => 「9 million」
> > >>>> >       0 => 「9」
> > >>>> >       1 => 「million」
> > >>>> >
> > >>>> > Or as a numbered:
> > >>>> >
> > >>>> >     > $input ~~ / $0 = <$pattern>
> > >>>> >     「9 million」
> > >>>> >      0 => 「9 million」
> > >>>> >       0 => 「9」
> > >>>> >       1 => 「million」
> > >>>> >
> > >>>> > Or put it in as a lexical regex
> > >>>> >
> > >>>> >     > my regex pattern { (\d+) \s+ (\w+) }
> > >>>> >     > $input ~~ / <pattern>  /
> > >>>> >     「9 million」
> > >>>> >      pattern => 「9 million」
> > >>>> >       0 => 「9」
> > >>>> >       1 => 「million」
> > >>>> >
> > >>>> > Or just use it as the whole regex
> > >>>> >
> > >>>> >     > $input ~~ $pattern # variable
> > >>>> >     「9 million」
> > >>>> >      0 => 「9」
> > >>>> >      1 => 「million」
> > >>>> >
> > >>>> >     > $input ~~ &pattern # my regex pattern /…/
> > >>>> >     「9 million」
> > >>>> >      0 => 「9」
> > >>>> >      1 => 「million」
> > >>>> >
> > >>>> > On Thu, Mar 11, 2021 at 2:29 AM Joseph Brenner <doom...@gmail.com> 
> > >>>> > wrote:
> > >>>> >
> > >>>> >> Does this behavior make sense to anyone?  When you've got a regex
> > >>>> >> with captures in it, the captures don't work if the regex is
> > >>>> >> stashed in a variable and then interpolated into a regex.
> > >>>> >>
> > >>>> >> Do capture groups need to be defined at the top level where the
> > >>>> >> regex is used?
> > >>>> >>
> > >>>> >> { #  From a code example in the "Parsing" book by Moritz Lenz, p. 
> > >>>> >> 48,
> > >>>> >> section 5.2
> > >>>> >>    my $input = 'There are 9 million bicycles in beijing.';
> > >>>> >>    if $input ~~ / (\d+) \s+ (\w+) / {
> > >>>> >>        say $0.^name;  # Match
> > >>>> >>        say $0;        # 「9」
> > >>>> >>        say $1.^name;  # Match
> > >>>> >>        say $1;        # 「million」
> > >>>> >>        say $/;
> > >>>> >>         # 「9 million」
> > >>>> >>         #  0 => 「9」
> > >>>> >>         #  1 => 「million」
> > >>>> >>    }
> > >>>> >> }
> > >>>> >>
> > >>>> >> say '---';
> > >>>> >>
> > >>>> >> { # Moving the pattern to var which we interpolate into match
> > >>>> >>    my $input = 'There are 9 million bicycles in beijing.';
> > >>>> >>    my $pattern = rx{ (\d+) \s+ (\w+) };
> > >>>> >>    if $input ~~ / <$pattern> / {
> > >>>> >>        say $0.^name;  # Nil
> > >>>> >>        say $0;        # Nil
> > >>>> >>        say $1.^name;  # Nil
> > >>>> >>        say $1;        # Nil
> > >>>> >>        say $/;        # 「9 million」
> > >>>> >>    }
> > >>>> >> }
> > >>>> >>
> > >>>> >> In the second case, the match clearly works, but it behaves as
> > >>>> >> though the capture groups aren't there.
> > >>>> >>
> > >>>> >>
> > >>>> >>    raku --version
> > >>>> >>
> > >>>> >>    Welcome to 𝐑𝐚𝐤𝐮𝐝𝐨™ v2020.10.
> > >>>> >>    Implementing the 𝐑𝐚𝐤𝐮™ programming language v6.d.
> > >>>> >>
> > >>>> >

Reply via email to