Author: larry
Date: Sat Mar 15 18:09:39 2008
New Revision: 14520

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

Log:
Suboptimalities noted by John M. Dlugosz++


Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod        (original)
+++ doc/trunk/design/syn/S02.pod        Sat Mar 15 18:09:39 2008
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 10 Aug 2004
-  Last Modified: 15 Feb 2008
+  Last Modified: 15 Mar 2008
   Number: 2
-  Version: 129
+  Version: 130
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -1367,9 +1367,10 @@
 If you need to force inner context to scalar, we now have convenient
 single-character context specifiers such as + for numbers and ~ for strings:
 
+    $x        =  g();       # scalar context and g()
     @x[f()]   =  g();       # list context for f() and g()
     @x[f()]   = +g();       # list context for f(), scalar context for g()
-    @x[+f()]  =  g();       # scalar context for f() and g()
+    @x[+f()]  =  g();       # scalar context for f(), list context for g()
                             # -- see S03 for "SIMPLE" lvalues
 
     @x[f()]   =  @y[g()];   # list context for f() and g()
@@ -1377,6 +1378,18 @@
     @x[+f()]  =  @y[g()];   # scalar context for f(), list context for g()
     @x[f()]   =  @y[+g()];  # list context for f(), scalar context for g()
 
+Sigils used as list prefix operators may also be used to force context:
+
+    @x = $ g();         # scalar context for g()
+    $x = @ g();         # list context for g()
+    $x = % g();         # list context for g() (and coercion to hash)
+
+These may also be used in functional form:
+
+    @x = $(g());         # scalar context for g()
+    $x = @(g());         # list context for g()
+    $x = %(g());         # list context for g() (and coercion to hash)
+
 =item *
 
 There is a need to distinguish list assignment from list binding.
@@ -1432,18 +1445,21 @@
 
 A signature object (C<Signature>) may be created with colon-prefixed parens:
 
-    my ::MySig ::= :(Int, Num, Complex, Status :mice)
+    my ::MySig ::= :(Int, Num, Complex, Status)
 
 Expressions inside the signature are parsed as parameter declarations
 rather than ordinary expressions.  See S06 for more details on the syntax
 for parameters.
 
-Signature objects bound to C<::t> variables may be used within another
-signature to apply additional type constraints.  When applied to a
-C<Capture> argument of form C<\$x>, the signature allows you to specify
-the types of parameters that would otherwise be untyped:
+Signature objects bound to type variables (as in the example above) may
+be used within other signatures to apply additional type constraints.
+When applied to a C<Capture> argument, the signature allows you to
+take the types of the capture's arguments from C<MySig>, but declare
+the (untyped) variable names yourself via an addition signature
+in parentheses:
 
-    :(Num Dog|Cat $numdog, MySig \$a ($i,$j,$k,$mousestatus))
+    sub foo (Num Dog|Cat $numdog, MySig $a ($i,$j,$k,$mousestatus)) {...}
+    foo($mynumdog, \(1, 2.7182818, 1.0i, statmouse());
 
 =item *
 

Reply via email to