On Wed, Apr 20, 2005 at 07:17:14PM +0200, Juerd wrote:
: Must LABEL be quoted/a normal string?

Forgot to answer the more general question.  Presuming we still have

    next LABEL;
    last LABEL;
    redo LABEL;
    goto LABEL;

how do we parse something like this

    goto join "", "L", { rand 10 } XX rand 10;

without doing inconsistent autoquoting or confusticating the current
subroutine namespace with the label space?  I think the answer is
that those control keywords always autoquote the next identifier,
and if you want to do something run-timeish, you have to say

    goto(join "", "L", { rand 10 } XX rand 10);

or, slightly more problematically,

    (join "", "L", { rand 10 } XX rand 10).goto;

(slightly more problematic insofar as .goto is presumably not a
built-in method on Str, so you're relying on failover to MMD.)

Anyway, with these rules, goto LABEL and friends can just automatically
quote the next identifier if there is one, and not worry about it
otherwise, just as => only autoquotes its left side if it's an identifier.

Or did we open that up to general names like Foo::bar?  I don't recall.
Hmm.  What would it mean to goto a class?

And if we write

    Foo::Bar => 1,
    Str => 2,

do we care that class names are getting string typed in the pairs'
keys, if you can use a string as a class name anywhere?  Or maybe
we don't care the other direction, insofar as, if the => autoquoter
ignores predefined class names and types them as classes, but classes
always stringify to their own name anyway, so it doesn't matter.  Hmm.
That's probably better, since with the first approach we'd have to make
sure that Str supports class methods somehow, if only by failover to MMD.

It would be kind of nice if autoquoting policy were similar between =>
and goto, but maybe that's a foolish consistency.  We've never allowed
:: in labels before, whereas I can see lots of uses for class names
on the left side of pairs.

I think I'm arguing myself out of autoquoting :: names.  So in

    Foo::Bar => 1,
    Str => 2,

I think it should autoquote Str only, and then if you really mean
the class there instead of the autoquoted string, you should say

    ::Str => 2,

instead.  And now we don't have a problem with consistency.  Autoquoted
labels are limited to bare identifiers also.


Reply via email to