On 09/29/2017 12:41 PM, Brandon Allbery wrote:
On Fri, Sep 29, 2017 at 3:27 PM, ToddAndMargo <toddandma...@zoho.com <mailto: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 messages.

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.

Ding!   It finally sunk in.  "$x[" is an index, where "$x [" means an
operation.  Took a bit, but I finally got there.


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).

Hi Brandon,

Some of my issues comes from Modula2 where stings and arrays of characters. And perl 5 with is "~=" or "=~". I forget.

Thank you for your patience!

-T

Reply via email to