Hello tye,
Thanks for this explanation. When I first read the OP, I completely overlooked the fact that || puts its LHS into scalar context.
However:
... instead of making it match @a = @a || ...
But it doesn’t match!
13:08 >perl -MData::Dump -wE "@a = @a || (1 .. 3); dd \@a;" [1, 2, 3] 13:08 >perl -MData::Dump -wE "@a ||= (1 .. 3); dd \@a;" Can't modify array dereference in logical or assignment (||=) at -e li +ne 1, near ");" Execution of -e aborted due to compilation errors. 13:09 >perl -v This is perl 5, version 18, subversion 0 (v5.18.0) built for MSWin32-x +86-multi-thread-64int
From the error message, it appears that the ||= operator is putting its LHS into scalar context. Am I correct in reading it this way? If so, it seems strange that perlop#Assignment-Operators doesn’t highlight this important semantic difference between X = X op Y and X op= Y?
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re^6: Conditional array initialisation? (scalar, !defined)
by Athanasius
in thread Conditional array initialisation?
by BrowserUk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |