Larry Wall:
# Perl 6 is written in Unicode.

Great.  That's a wonderful policy.  But it *shouldn't influence routine
coding in any way*.  I have no problem with user-defined Unicode
operators.  I have a *huge* problem with built-in Unicode operators, and
a gargantuan problem with built-in Unicode operators that are generally
useful.

I can honestly say at this point that I'd rather give up <$iterator>
than lose hyperops.  And I consider relegating them to the << >>
digraphs losing them, because I'm never going to be able to remember how
to type them, and neither will anybody else.

Let's look at this logically.  Here's all the punctuation (non-\w)
characters on my keyboard and what they do in Perl 6:

        TERM                            OPERATOR                DOUBLE
OPERATOR
`       backticks                       none                    none
'       string constants                none**          none
"       string constants                none                    none

#       comment                 comment         comment

$       scalar sigil            none                    none
@       array sigil                     none                    none
%       hash sigil                      modulo          none

&       sub sigil                       junction and**  logical and
!       logical not                     none (?)                none
^       complement                      junction xor**  logical xor**
|       none                            junction or**   logical or

/       regex                           divide          defined or (in
5.9)
*       list flatten*           multiply                exponent
-       numify and negate               subtraction
postdecrement
+       numify**                        addition
postincrement
~       stringify*                      concat**                smart
match

=       none                            assignment
comparison
\       get reference           none                    none
..      method call**           method call**   range constructor
?       force to bool*          none**          trinary operator

,       none                            list composer   list composer
;       none                            statement end   statement end
(in parentheses)                        super-comma             none
:       none                            super-comma             package
separator, trinary operator


( )     expression grouping     sub parameters  yuck
{ }     hash composing          hash subscripts yuck
        block composing         block composing yuck
[ ]     array composing         array subscripts        yuck
< >     iterator syntax         comparison ops  shift-left, shift-right
UNUSED: 5                               8                       9

Items marked with a * are new, ** are changed.  There are twenty-two
'none's on that list, but none of them line up.  (Isn't Perl great?!?)

';;' is available (it doesn't mean anything in either term or operator
context), but it's really ugly.  The other possibilities I see there
have the same problem.

There are potentially some meaningless sequences, especially with
sigils, but those'll look quite cluttered.  Actually, one of the few
good meaningless ones is ^[op] (with the square brackets).  In term
context it would normally mean "bitwise complement this array", and in
operator context it would mean "add this array to an xor junction".  If
we lose xor junctions (which I'm not necessarily advocating, mind you),
this sequence is pretty much open.

Damn.  Larry, I don't envy you your job.  :^)

--Brent Dax <[EMAIL PROTECTED]>
@roles=map {"Parrot $_"} qw(embedding regexen Configure)

Wire telegraph is a kind of a very, very long cat. You pull his tail in
New York and his head is meowing in Los Angeles. And radio operates
exactly the same way. The only difference is that there is no cat.
    --Albert Einstein (explaining radio)

Reply via email to