Author: larry
Date: Wed Jul 12 18:05:24 2006
New Revision: 10156

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

Log:
Clarifications from Smylers++ and ajs++.


Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod        (original)
+++ doc/trunk/design/syn/S02.pod        Wed Jul 12 18:05:24 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 10 Aug 2004
-  Last Modified: 10 July 2006
+  Last Modified: 12 July 2006
   Number: 2
-  Version: 49
+  Version: 50
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -1215,7 +1215,7 @@
 way, but with any radix it's not clear whether the exponentiator should
 be 10 or the radix, and this makes it explicit:
 
-    0b1.1e10                    illegal, could be read as any of:
+    0b1.1e10                    ILLEGAL, could be read as any of:
 
     :2<1.1> * 2 ** 10           1536
     :2<1.1> * 10 ** 10          15,000,000,000
@@ -1747,15 +1747,15 @@
 or a method call in dot form.  (It is also allowed on a label when a
 statement is expected.) So for any undeclared identifier "C<foo>":
 
-    foo.bar            # foo().bar     -- illegal postfix, must use foo().bar
+    foo.bar            # ILLEGAL       -- postfix must use foo().bar
     foo .bar           # foo($_.bar)   -- no postfix starts with whitespace
-    foo\ .bar          # foo().bar     -- illegal long dot, use foo()\ .bar
-    foo++              # foo()++       -- illegal postfix, must use foo()++
+    foo\ .bar          # ILLEGAL       -- long dot must use foo()\ .bar
+    foo++              # ILLEGAL       -- postfix must use foo()++
     foo 1,2,3          # foo(1,2,3)    -- args always expected after listop
     foo + 1            # foo(+1)       -- term always expected after listop
     foo;               # foo();        -- no postfix, but no args either
     foo:               #   label       -- must be label at statement boundary.
-                                       -- illegal otherwise
+                                       -- ILLEGAL otherwise
     foo: bar:          #   two labels in a row, okay
     .foo:              # $_.foo: 1     -- must be "dot" method with : args
     .foo(1)            # $_.foo(1)     -- must be "dot" method with () args
@@ -1768,13 +1768,13 @@
     foo $bar: 1                # $bar.foo(1)   -- indirect object even if 
declared sub
                                        -- $bar considered one token
     foo (bar()):       # bar().foo(1)  -- even if foo declared sub
-    foo bar():         # illegal       -- bar() is two tokens.
+    foo bar():         # ILLEGAL       -- bar() is two tokens.
     foo .bar:          # foo(.bar:)    -- colon chooses .bar to listopify
     foo bar baz: 1     # foo(baz.bar(1)) -- colon controls "bar", not foo.
     foo (bar baz): 1   # bar(baz()).foo(1) -- colon controls "foo"
-    $foo $bar          # illegal       -- two terms in a row
-    $foo $bar:         # illegal       -- use $bar.$foo for indirection
-    (foo bar) baz: 1   # illegal       -- use $baz.$(foo bar) for indirection
+    $foo $bar          # ILLEGAL       -- two terms in a row
+    $foo $bar:         # ILLEGAL       -- use $bar.$foo for indirection
+    (foo bar) baz: 1   # ILLEGAL       -- use $baz.$(foo bar) for indirection
 
 The indirect object colon only ever dominates a simple term, where
 "simple" includes classes and variables and parenthesized expressions,

Modified: doc/trunk/design/syn/S03.pod
==============================================================================
--- doc/trunk/design/syn/S03.pod        (original)
+++ doc/trunk/design/syn/S03.pod        Wed Jul 12 18:05:24 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 8 Mar 2004
-  Last Modified: 10 Jul 2006
+  Last Modified: 12 Jul 2006
   Number: 3
-  Version: 45
+  Version: 46
 
 =head1 Changes to existing operators
 
@@ -249,18 +249,18 @@
     say foo ($bar+1),$baz              say(foo($bar+1, $baz));
     say foo .($bar+1),$baz             say(foo($_.($bar+1), $baz));
 
-    say foo[$bar+1],$baz               illegal, need foo()[]
-    say foo.[$bar+1],$baz              illegal, need foo().[]
+    say foo[$bar+1],$baz               ILLEGAL, need foo()[]
+    say foo.[$bar+1],$baz              ILLEGAL, need foo().[]
     say foo [$bar+1],$baz              say(foo([$bar+1], $baz));
     say foo .[$bar+1],$baz             say(foo($_.[$bar+1], $baz));
 
-    say foo{$bar+1},$baz               illegal, need foo(){}
-    say foo.{$bar+1},$baz              illegal, need foo().{}
+    say foo{$bar+1},$baz               ILLEGAL, need foo(){}
+    say foo.{$bar+1},$baz              ILLEGAL, need foo().{}
     say foo {$bar+1},$baz              say(foo({$bar+1}, $baz));
     say foo .{$bar+1},$baz             say(foo($_.{$bar+1}, $baz));
 
-    say foo<$bar+1>,$baz               illegal, need foo()<>
-    say foo.<$bar+1>,$baz              illegal, need foo().<>
+    say foo<$bar+1>,$baz               ILLEGAL, need foo()<>
+    say foo.<$bar+1>,$baz              ILLEGAL, need foo().<>
     say foo <$bar+1>,$baz              say(foo(<$bar+1>, $baz));
     say foo .<$bar+1>,$baz             say(foo($_.<$bar+1>, $baz));
 
@@ -271,7 +271,7 @@
     any <a b c>                        any('a','b','c')        # term
     any()<a b c>               (any).{'a','b','c'}     # postfix
     any() < $x                 (any) < $x              # infix
-    any<a b c>                     [syntax error]      # illegal postfix
+    any<a b c>                 ILLEGAL                 # stealth postfix
 
 This will seem unfamiliar and "undwimmy" to Perl 5 programmers, who
 are used to a grammar that sloppily hardwires a few postfix operators
@@ -279,6 +279,18 @@
 whitespace dependency in order to gain a completely extensible class
 of postfix operators.
 
+Also note that the postfix restriction applies only to list operators;
+it doesn't apply to methods.  It is legal to say
+
+    $foo.bar<a b c>
+
+to mean
+
+    $foo.bar().{'a','b','c'}
+
+because methods never assume there are arguments unless followed by
+parentheses or a colon.
+
 =item * A list operator's arguments are also terminated by a closure
 that is not followed by a comma or colon.  (And a semicolon is implied if
 the closure is the final thing on a line.)

Reply via email to