After reading that appendix, I'm still a bit murky on the final decisions as to which of these edge cases will be allowed:
my @out <== (1,2,3); my @out <== (my @in = foo()); my @out <== foo();
(1,2,3) ==> my @out; (my @in = foo()) ==> my @out; foo() ==> my @out;
These are basically all just two edge-cases. Namely:
@var <== LIST and: LIST ==> @var
Larry is still leery, but I suspect they will ultimately be allowed. Mainly because these:
@in ==> map {...} ==> sort {...} ==> map {...} ==> @out;
@out <== map {...} <== sort {...} <== map {...} <== @in;
are much less annoying than:
@in ==> map {...} ==> sort {...} ==> map {...} ==> push @out;
push @out <== map {...} <== sort {...} <== map {...} <== @in;
And because, as I demonstrated, the necessary overloaded multimethods are so trivial to implement.
Damian