TSA wrote:

> I *still* don't understand the problem this long dot is trying
> to solve.

It's trying to solve the fundamental ambiguity of:

    foo .bar

Which might be:

    foo().bar

or might be:

    foo(.bar)

The way we solved it is by saying that, anywhere a term is expected, a sequence matching:

    /\s+ \. [<ident>|<brackets>]/

is always a unary dot method call.

The reason we chose that is because we think that things like this:

    method describe {
        say .name;
        say .rank;
        say .serial_num;
    }

and this:

    given %data {
        .<name> = join .<sep>, ucfirst .<first>, uc .<family>
    }

will be common. And that it's much easier to understand such constructs if a "gappy dot" *always* means unary dot, regardless of what preceded it.

That leaves a problem for people who want to line up method calls, or cascade them over multiple lines. So we need a way to indicate that a "gap-dot" doesn't mean unary method call. Which means we need a way to prevent perl6 from expecting a term, where a term is normally expected. Which we chose to do by providing a postfix that indicates "more expression to come yet" or "don't switch back to expecting a term here".

And the postfix Larry decided upon (rightly, I believe) was dot.

Damian

Reply via email to