Apologies, looks like the smartmatch operator is listed in the
Operator Precedence table (15th row: under "Chaining infix"):

https://docs.raku.org/language/operators#Assignment_operators

However, am I correct in stating that the assignment operator ("=") is
on the 19th row ("Item assignment")? Therefore in the absence of
parentheses, etc., all smartmatch operations take precedence over
assignment operations?

Best Regards, Bill.


On Sat, Dec 7, 2019 at 10:27 PM William Michels <w...@caa.columbia.edu> wrote:
>
> Wow Brad, that's interesting and informative.
>
> I haven't seen the S/// operator before, so I had to look it up. On
> the first page I found the docs say (quite informatively): "S/// uses
> the same semantics as the s/// operator, except it leaves the original
> string intact and returns the resultant string instead of $/ ($/ still
> being set to the same values as with s///)."
>
> https://docs.raku.org/syntax/S$SOLIDUS$SOLIDUS$SOLIDUS
>
> I was then able to find an overview on regexes, which more explicitly
> names the "S///" operator as "Non-disruptive substitution". I suppose
> I could quibble and request that the phrase "Non-disruptive
> substitution" be added to the operator page (above), but no
> matter--it's easy enough to find:
>
> https://docs.raku.org/language/regexes#S///_non-destructive_substitution
>
> So I think I understand that (as Brad has said): "smartmatch with S///
> (or TR///) is not useful." Conversely, I've also found another
> smartmatch construct that is useless (i.e. disallowed):
>
> > my $r = 'abc' ~~ { S/b/./ }
> a.c
> > my $s = 'abc' ~~ { s/b/./ }
> Cannot modify an immutable Str (abc)
>   in block <unit> at <unknown file> line 1
> >
>
> No matter how "discouraged' a particular syntax is, people are going
> to run into these disallowed syntaxes and wonder why. Could it be due
> to precedence? These two prohibited operations beg the question: can a
> definitive statement be made regarding the precedence of the
> smartmatch operator relative to either lowercase-triple-solidus
> operators such as s/// and tr/// , or relative to
> uppercase-triple-solidus operators such as S/// and TR/// ?
>
> This really makes me wonder if anyone has plans to add "~~" (the
> smartmatch operator) to the precedence table that can be found
> below--and where in the table the smartmatch operator would precisely
> sit:
>
> https://docs.raku.org/language/operators#Operator_precedence
>
> Best Regards, Bill.
>
>
>
>
> On Sat, Dec 7, 2019 at 7:53 AM Brad Gilbert <b2gi...@gmail.com> wrote:
> >
> > The return value of s/// is the same as $/
> >
> > If you want the resulting string instead you can use S/// instead.
> >
> >     > $_ = 'abc'
> >     > my $r = S/b/./
> >     > say $r
> >     a.c
> >
> > Note that it warns you try to use S/// with ~~
> >
> >     > my $r = 'abc' ~~ S/b/./
> >     Potential difficulties:
> >         Smartmatch with S/// is not useful. You can use given instead: S/// 
> > given $foo
> >         ------> my $r = 'abc' ~~ S/b/./
> >     False
> >
> > Which gives you an indicator of how to fix it
> >
> >     > my $r = S/b/./ given 'abc'
> >     a.c
> >
> > Note that the `given` happens before the `=`
> >
> > So it works the same as
> >
> >     > my $r = ( S/b/./ given 'abc' )
> >     a.c
> >
> > ---
> >
> > The reason ~~ doesn't work with S/// has to do with the dual pass nature of 
> > ~~.
> >
> > Without getting into details, you can avoid that by delaying the S/// until 
> > the second pass.
> >
> >     > my $r = 'abc' ~~ { S/b/./ }
> >     a.c
> >
> > Or you can just set $_ to the value.
> > (Which is basically what the previous line is doing.)
> >
> >     > my $r = S/b/./ given 'abc'
> >
> >     > given 'abc' {
> >     >   my $r = S/b/./
> >     >   …
> >     > }
> >
> >     > my $_ = 'abc'
> >     > my $r = S/b/./
> >
> >     > my $r = 'abc' ~~ -> $_ { S/b/./ }
> >
> >     > my $r = 'abc' ~~ sub ( $_ ) { S/b/./ }
> >
> >     > my $r = 'abc' ~~ anon sub foo ( $_ ) { S/b/./ }
> > ---
> >
> > One of design goals of Raku is to have as few special cases as possible.
> > Which is why ~~ and S/// haven't been made to just work.
> >
> > (It could be argued that in this case an exception could be made. But I'm 
> > not going to argue for it.)
> >
> > On Fri, Dec 6, 2019 at 10:37 PM William Michels via perl6-users 
> > <perl6-us...@perl.org> wrote:
> >>
> >> Hello All,
> >>
> >> Todd put up some interesting code yesterday using the Raku/Perl6 REPL,
> >> which I reproduced with no problem. Additionally I tried some
> >> variations removing and/or moving parentheses to a different location,
> >> and have numbered the relevant REPL lines 1 through 6:
> >>
> >> mbook:~ homedir$ perl6
> >> To exit type 'exit' or '^D'
> >> 1> my $x = Q[word</b><br>] ;
> >> word</b><br>
> >> 2> (my $y = $x) ~~ s/ '<' .* //; say $/; say $x; say $y;
> >> 「</b><br>」
> >> word</b><br>
> >> word
> >> 3> my $a = Q[word</b><br>] ;
> >> word</b><br>
> >> 4> my $b = ($a ~~ s/ '<' .* //); say $/; say $a; say $b;
> >> 「</b><br>」
> >> word
> >> 「</b><br>」
> >> > my $c = Q[word</b><br>] ;
> >> word</b><br>
> >> > my $d = $c ~~ s/ '<' .* //; say $/; say $c; say $d;
> >> 「</b><br>」
> >> word
> >> 「</b><br>」
> >> 7> $*VM
> >> moar (2019.07.1)
> >>
> >> Working in groups of 2, lines 1 and 2 replicate the code Todd put up
> >> (parenthesis surrounding everything to the left of the smartmatch
> >> operator). I get the same result as Todd. What interests me are lines
> >> 3 through 6. Lines 3 and 4 are the virtually the same code but with
> >> parentheses surrounding everything to the right hand side (RHS) of the
> >> assignment operator (" = "). As people will note, lines 2 and lines 4
> >> give different results. Removing parentheses entirely in line 6 gives
> >> the same result as in line 4. Because the results in line 4 and line 6
> >> are the same, this says that as far as parentheses are concerned, the
> >> smartmatch operator "~~" takes precedence over the assignment operator
> >> "=".
> >>
> >> What's not clear to me in the code above (lines 4 and 6) is why
> >> variables $b and $d get assigned to $/. I would have expected in line
> >> 4 that $a would have been matched against the smartmatch, and the
> >> result ("word") would have been simply copied into variable $b. Have I
> >> misunderstood?
> >>
> >> Anyway, I'm just hoping to start a conversation on the topic of
> >> precedence in general, and hopefully getting some feedback as to where
> >> to look in the docs for further instruction.
> >>
> >> Best Regards, Bill.
> >>
> >>
> >> On Fri, Dec 6, 2019 at 12:15 AM ToddAndMargo via perl6-users
> >> <perl6-us...@perl.org> wrote:
> >> >
> >> > On 2019-12-05 23:19, ToddAndMargo via perl6-users wrote:
> >> > > On 2019-12-05 03:09, William Michels via perl6-users wrote:
> >> > >> What happens when you type "perl6" or "raku" at the bash command 
> >> > >> prompt?
> >> > >
> >> > > Hi William,
> >> > >
> >> > > On my shop machine, it jumps to the next line with an
> >> > > empty flashing cursor
> >> > >
> >> > > On my office machine, it told me to install
> >> > >      zef install Readline
> >> > >
> >> > > After that, I get:
> >> > >
> >> > > $ perl6
> >> > > To exit type 'exit' or '^D'
> >> > >  >
> >> > >
> >> > > and
> >> > >
> >> > >  > say "hello World"
> >> > > hello World
> >> > >  > say "B" ~ Q[:\] ~ " drive dismounted"
> >> > > B:\ drive dismounted
> >> > >  >
> >> > >
> >> > > and sticking an obvious booboo into it
> >> > >
> >> > >  > if 3 % 2 = 1 {say "odd"};
> >> > > Cannot modify an immutable Int (1)
> >> > >    in block <unit> at <unknown file> line 1
> >> > >
> >> > > Plus I can use the arrow keys to recall previous lines too.
> >> > >
> >> > > Time up update my Perl6 on my shop computer!
> >> > >
> >> > > No more hassling with `perl6 -e` !!!
> >> > >
> >> > > Dude!  THANK YOU !!!!!!
> >> > >
> >> > > -T
> >> >
> >> > You've created a monster!!
> >> >
> >> > perl6
> >> > To exit type 'exit' or '^D'
> >> >  > my $x = Q[</b><br>]
> >> > </b><br>
> >> >  > say $x
> >> > </b><br>
> >> >  > (my $y = $x ) ~~ s/ Q[<] .* //;
> >> > ===SORRY!=== Error while compiling:
> >> > Unrecognized regex metacharacter < (must be quoted to match literally)
> >> > ------> (my $y = $x ) ~~ s/ Q[<] .* //;
> >> >  > my $x = Q[abc</b><br>]
> >> > abc</b><br>
> >> >  > (my $y = $x ) ~~ s/ '<' .* //;
> >> > 「</b><br>」
> >> >  > (my $y = $x ) ~~ s/ '<' .* //; say $y
> >> > abc
> >> >  > (my $y = $x ) ~~ s/ '<' .* //; say $x; say $y
> >> > abc</b><br>
> >> > abc
> >> >
> >> >
> >> > Thank you!
> >> >
> >> >
> >> > --
> >> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >> > Computers are like air conditioners.
> >> > They malfunction when you open windows
> >> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Reply via email to