in reply to Fringe case slice behavior

Actually, the odd operator is =, not +=. Most operators will dictate the context of their operands, and so does +=: both operands are in scalar context. But = is special cased, there the operands could be either in list or scalar context - and it's the left operand that decides.

The following program might be of interest:

#!/usr/bin/perl use strict; use warnings; my ($a, @a) = (""); sub foo : lvalue { print wantarray ? "LIST: " : "SCALAR: "; wantarray ? @a : $a } foo () = 1; print "\$a = $a; \@a = [@a]\n"; (foo ()) = 2; print "\$a = $a; \@a = [@a]\n"; foo () += 3; print "\$a = $a; \@a = [@a]\n"; (foo ()) += 4; print "\$a = $a; \@a = [@a]\n"; __END__ SCALAR: $a = 1; @a = [] LIST: $a = 1; @a = [2] SCALAR: $a = 4; @a = [2] SCALAR: $a = 8; @a = [2]

Abigail