Scott wrote:
I'm just waiting for Damian to speak up :-)
I'm not at all comfortable with the notion of junctions as lvalues.
I've *always* considered a junction to be a special kind of constant, just as a number or a string or a reference is.
I have trouble with junctive lvalues because I think they lead to unexpected/unpredictable behaviour. For example, the "predicate" associated with a junction is only invoked when that junction is involved in a boolean test of some kind, so the (hypothetical):
all($x, $y, $z) = 1; any($x, $y, $z) = 1; one($x, $y, $z) = 1; none($x, $y, $z) = 1;
would (hypothetically) all do the same thing (i.e. independently assign 1 to each of the three scalar variables). That makes the last three versions nothing but obfuscatory in my view.
So, at very best, we'd have to restrict lvalue junctions to conjunctions.
And there seems to be very little benefit even in that restricted form, especially when you consider that:
all($x, $y, $z) = 1; all(@foo) = 2;
are hardly any better than the existing solutions:
$x = $y = $z = 1; $_ = 2 for @foo;
and no better at all than the Perl 6 distributive solutions:
($x, $y, $z) »= 1; @foo »= 2;
So, on balance, I feel that lvalue junctions are more trouble than they're worth.
Damian