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 ==> @varLarry 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
