Author: larry
Date: Wed Oct  1 09:55:35 2008
New Revision: 14583

Modified:
   doc/trunk/design/syn/S03.pod

Log:
Describe how assignment metaoperators initialize undefined lvalues.


Modified: doc/trunk/design/syn/S03.pod
==============================================================================
--- doc/trunk/design/syn/S03.pod        (original)
+++ doc/trunk/design/syn/S03.pod        Wed Oct  1 09:55:35 2008
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 8 Mar 2004
-  Last Modified: 10 Sep 2008
+  Last Modified: 1 Oct 2008
   Number: 3
-  Version: 139
+  Version: 140
 
 =head1 Overview
 
@@ -3249,6 +3249,26 @@
 
     ($a,$b,$c) »+=» 1;  # add one to each of three variables
 
+If you apply an assignment operator to a protoobject, it is assumed that
+you are implementing some kind of notional "reduction" to an accumulator
+variable.  To that end, the base operator is dropped and a simple
+assignment is done instead.  Hence you may correctly write:
+
+    my Num $prod;
+    for @factors -> $f {
+       $prod *= $f;
+    }
+
+While this may seem marginally useful in the scalar variable case,
+it's much more important for it to work this way when the modified
+location may have only just been created by autovivificatoin.  In other
+words, if you write:
+
+    %prod{$key} *= $f
+
+you need not worry about whether the hash element exists yet.  If it
+does not, it will simply be initialized with the value of C<$f>.
+
 =head2 Negated relational operators
 
 Any infix relational operator may be transformed into its negative

Reply via email to