Front page | perl.perl6.compiler |
Postings from April 2006
Re: Infix macro := reparsing the LHS?
Thread Previous
From:
Larry Wall
Date:
April 19, 2006 11:44
Subject:
Re: Infix macro := reparsing the LHS?
Message ID:
20060419184357.GA13263@wall.org
After some discussion on IRC, we have all declarators implying a signature
syntax, either with parens for full sig or without for a limited one arg
syntax:
my Int $x = 1;
my (Int $x where Odd, Dog $spot = fido()) := (1,$lassie);
The sigil or the parens still control the context of the right side in
the case of assignment, but the listop form of either = or := causes the
right side to parse as a list argument that doesn't need parens, just as
with ordinary list operators. The scalar form is unaffected, so
loop($a = 1, $b = 2; ; $a++, $b++) {...}
still works.
In the case of
my ($a, $b, $c) = 1,2,3;
the left side is parsed as a signature and "degrades" to an ordinary lvalue
list, but since "my" already restricts what can occur in such a list, that's fine.
If you wish to bind to a signature without a declarator, you have to use
the colon form of sig:
:($a,$b,$c) := 1,2,3;
Assignment to a sig does binding but maintains copy semantics so that
my $a = $b;
my ($a,$c) = $b,$d;
do not alias, and
:($a,$b) = $b,$a
swaps values rather than clobbering one of them, because the binding is to
temp copies.
my $a, $b, $c;
is still an error, generally caught by the fact that $b hasn't been declared.
I'm sure I've left out something important...
Larry
Thread Previous