Perhaps this example should be provided somewhere as a 'gotcha'. On Mon, Jul 3, 2017 at 11:09 AM, jn...@jnthn.net via RT < perl6-bugs-follo...@perl.org> wrote:
> On Mon, 03 Jul 2017 05:46:46 -0700, comdog wrote: > > It seems that term precedence with << >> gets confused. > > > The << >> quoting construct interpolates. The rule for interpolation of > method calls, indexing, etc. after a scalar is that there may be one, but > it may only end with a ], ), } or >. > > > { > > my $number = <<$string>>[0]; > > When the variable is encountered inside of the interpolating quoting > construct, which is being parsed by the quoting parser, it calls back into > the Perl 6 main language parser. This parses a variable and optionally a > postfix. The >>[0] is a valid postfix, where >> is the hyper-operator and > [0] is the indexer. Therefore the $string>>[0] is taken as the thing to > interpolate. It then hands back control to the quoting parser. > > > put "Type: " ~ $number; > > #`( > > ===SORRY!=== Error while compiling ... > > Cannot use variable $number in declaration to initialize itself > > ------> put "Type: " ~ $⏏number; > > This is complaining that $number was used before its declaration was > complete, which is indeed the case because at we are still inside of the > quoting construct. > > I can see the potential for a human reader to be confused, but the Perl 6 > parser is not in the least bit confused. There isn't any question as to > what will parse the >>: if the main language parser understands it and > wants it, then it gets it, because the quoting parser doesn't get a say > again until the main language parser has done its bit. This is the same > reason that you can do stuff like: > > say "Foos: @foo.join("bar")" > > And there isn't a bit of confusion so far as Perl 6 is concerned that the > inner " is opening a new string, not closing the one we were already in. > Granted it's maybe kinder to the reader to write it with single quotes > inside of the string. But nestings of main language => quote parser => main > language => quote parser will Just Work, each eating as much as it > understands (or until seeing its terminator) before giving up control. > > /jnthn > > -- brandon s allbery kf8nh sine nomine associates allber...@gmail.com ballb...@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net