# New Ticket Created by  Moritz Lenz 
# Please include the string:  [perl #65358]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=65358 >


As the commit mail below shows the parsing of statement controls like
'try' changed. Previously 'a(try {...}, 1)' would pass two arguments to
'try' and the result to a(), now 'try' only gets the block.

Rakudo needs to track this change.


-------- Original Message --------
Subject: r26655 - docs/Perl6/Spec
Date: Mon,  4 May 2009 05:36:16 +0200
From: pugs-comm...@feather.perl6.nl
To: perl6-langu...@perl.org

Author: lwall
Date: 2009-05-04 05:36:15 +0200 (Mon, 04 May 2009)
New Revision: 26655

Modified:
   docs/Perl6/Spec/S04-control.pod
Log:
[S04] clarify parsing of statement controls


Modified: docs/Perl6/Spec/S04-control.pod
===================================================================
--- docs/Perl6/Spec/S04-control.pod     2009-05-04 03:14:22 UTC (rev 26654)
+++ docs/Perl6/Spec/S04-control.pod     2009-05-04 03:36:15 UTC (rev 26655)
@@ -12,8 +12,8 @@

   Maintainer: Larry Wall <la...@wall.org>
   Date: 19 Aug 2004
-  Last Modified: 19 Apr 2009
-  Version: 76
+  Last Modified: 3 May 2009
+  Version: 77

 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -695,6 +695,29 @@
 For purposes of flow control, none of these forms are considered loops,
 but they may easily be applied to a normal loop.

+Note that any construct in the statement_prefix category defines
+special syntax.  If followed by a block it does not parse as a
+list operator or even as a prefix unary; it will never look for any
+additional expression following the block.  In particular,
+
+    foo( try {...}, 2, 3 )
+
+calls the C<foo> function with three arguments.  And
+
+    do {...} + 1
+
+add 1 to the result of the do block.  On the other hand, if a
+statement_control is followed by a non-block statement, all nested
+blockless statement_controls will terminate at the same statement
+ending:
+
+    do do do foo(); bar 43;
+
+is parsed as:
+
+    do { do { do { foo(); }}}; bar(43);
+
+
 =head1 Switch statements
 X<given>X<when>X<switch>X<case>X<default>


Reply via email to