Author: autrijus
Date: Mon May 1 01:33:08 2006
New Revision: 9051
Modified:
doc/trunk/design/syn/S04.pod
Log:
* S04: minor typo cleanup.
* S04: Document a consequence caused by the statement-terminating
end-of-line block rule:
# Without the trailing comma, this becomes a code block
my $hash = {
1 => { 2 => 3, 4 => 5 },
};
In other words, nested hash literals in other hash literals
must _not_ be statement-ending.
Modified: doc/trunk/design/syn/S04.pod
==============================================================================
--- doc/trunk/design/syn/S04.pod (original)
+++ doc/trunk/design/syn/S04.pod Mon May 1 01:33:08 2006
@@ -121,7 +121,7 @@
=head1 Statement-ending blocks
A line ending with a closing brace "C<}>", followed by nothing but
-whitespace or comments, will terminates statement if an end of statement
+whitespace or comments, will terminate a statement if an end of statement
can occur there. That is, these two statements are equivalent:
my $x = sub { 3 }
@@ -135,6 +135,13 @@
sub { 3 } # the statement won't terminate here
];
+However, a nested hash block must be disambiguated by a trailing comma:
+
+ # Without the trailing comma, this becomes a code block
+ my $hash = {
+ 1 => { 2 => 3, 4 => 5 },
+ };
+
Because subroutine declarations are expressions, not statements,
this is now invalid: