in reply to Re^7: Definition of numerically equal and rationale for 'you' == 'me'
in thread Definition of numerically equal and rationale for 'you' == 'me'

Even in an imaginary Perl without sigils, the following code could be parsed unambiguously:
No, it cannot. Stepping away the additional problem with say (the first x can be seen as a filehandle), you're forgetting that sigils make barewords possible. You're x x x can be parsed in several ways:
$x x $x x(x($x)) x::->x("x")
or some combination there off. That is, if we'd dropped sigils, a bare x can be a (scalar) variable, an operator, a class name, a subroutine, or the string "x".

Replies are listed 'Best First'.
Re^9: Definition of numerically equal and rationale for 'you' == 'me'
by moritz (Cardinal) on Mar 03, 2012 at 13:32 UTC

    Well, everything is possible with the right amount of disambiguation rules. Perl 6 doesn't have barewords, and type names must be predeclared. If a subroutine of name x and another symbol with that name (type name, constant, enum element) are in scope, the parser disambiguates in favor of the latter, unless there are parens after the token.

    In fact, constants can give you a taste of sigil-less Perl 6 already:

    use v6; constant x = 4; say x x x # produces 4444

    This works today in both Rakudo and Niecza.

      That works in Perl 5 as well:
      perl -Mconstant=x,1 -MO=Deparse -e 'print x x x' print '1' x '1'; -e syntax OK
      But:
      perl -MO=Deparse -e 'sub x {1} print x x x' sub x { 1; } print x(x(x())); -e syntax OK