On Fri, Sep 29, 2017 at 3:27 PM, ToddAndMargo <toddandma...@zoho.com> wrote:

> I do not understand.  :'(

There's not enough syntax to go around, so perl 6 has to use spaces
sometimes to figure out what you want.

> $ perl6 -e 'my $x="abc"; $x[R~]= "yyz"; say $x;'
> ===SORRY!=== Error while compiling -e
> Missing required term after infix

I explained this one earlier. Things would go faster if you read entire

The sequece `$x[` could potentially mean that $x is an array stored in a
scalar variable, and you are asking for a particular item from the array.
Or it could mean the start of a complex operator to be applied to $x. You
need a space to tell it which you intend: without the space it sees the
indexing operation, without it sees the complex operator.

In this case, the complex operator is composed of a basic operator '~'
(string concatenation), modified twice: once with the reversing
metaoperator (Rop), and a second time with the in-place assigment operator
(postfix =). Just as you need to use parentheses in `2 + 3 * 5` if you want
it to be (2 + 3) * 5 instead of 2 + (3 * 5), you need braces to tell it how
to combine these special operators --- and you must *not* have a space
before the postfix =. Which is why you got this error:

> $ perl6 -e 'my $x="abc"; $x [R~] = "yyz"; say $x;'
> ===SORRY!=== Error while compiling -e
> Preceding context expects a term, but found infix = instead

With the space before it, it is no longer a modifier for the reversed
concatenation [R~] but a standalone assignment operator, which can't happen
there because it already has an operator [R~] so now it needs to see a term
(expression, roughly).

brandon s allbery kf8nh                               sine nomine associates
allber...@gmail.com                                  ballb...@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

Reply via email to