Author: larry Date: Tue Jan 22 16:29:21 2008 New Revision: 14494 Modified: doc/trunk/design/syn/S03.pod
Log: More tweaks, typos, clarification that "our" differs from in Perl 5 Modified: doc/trunk/design/syn/S03.pod ============================================================================== --- doc/trunk/design/syn/S03.pod (original) +++ doc/trunk/design/syn/S03.pod Tue Jan 22 16:29:21 2008 @@ -23,7 +23,7 @@ =head1 Operator precedence Not counting terms and terminators, Perl 6 has 23 operator precedence -levels (same as Perl 5, but differently arranged). Here we list the +levels (same as Perl 5, but differently arranged). Here we list the levels from "tightest" to "loosest", along with a few examples of each level: @@ -1348,7 +1348,7 @@ =item * -C<< infix:«p5=>» >>, the Perl 5 fatarrow +C<< infix:«p5=>» >>, the Perl 5 fatarrow This operator, which behaves exactly like the Perl 5 fatarrow in being equivalent to a comma, is purely for easier migration from Perl 5 @@ -3580,14 +3580,15 @@ Variable declarators such as C<my> now take a I<signature> as their argument. (The syntax of function signatures is described more fully in S06.) -As in the examples above, the parentheses around the signature may be omitted for a + +The parentheses around the signature may be omitted for a simple declaration that declares a single variable, along with its associated type, traits and the initializer: - constant $foo = 123; # okay: initializes $foo to 123 - constant ($foo = 123); # same thing (with explicit parens) - constant :($foo = 123); # same thing (full Signature form) - constant ($foo) = 123; # wrong: constants cannot be assigned to + constant Dog $foo is woof = 123; # okay: initializes $foo to 123 + constant (Dog $foo is woof = 123); # same thing (with explicit parens) + constant :(Dog $foo is woof = 123); # same thing (full Signature form) + constant (Dog $foo is woof) = 123; # wrong: constants cannot be assigned to Each declarator can take an initializer following an equals sign (which should not be confused with a normal assignment, because @@ -3600,11 +3601,15 @@ state $foo = 1; # happens at START time constant $foo = 1; # happens at BEGIN time +(Note that the semantics of C<our> are different from Perl 5, where the +initialization happens at the same time as a C<my>. To get the same +effect in Perl 6 you'd have to say "c<(our $foo) = 1;>" instead.) + If you do not initialize a container, it starts out undefined at the beginning of its natural lifetime. (In other words, you can't use -the old Perl 5 trick of "C<my $foo if 0>" to get a static variable, +the old Perl 5 trick of "C<my $foo if 0>" to get a static variable, because a C<my> variable starts out uninitialized every time through -in Perl 6 rather than retaining its previous value.) Native integer +in Perl 6 rather than retaining its previous value.) Native integer containers that do not support the concept of undefined should be initialized to 0 instead. (Native floating-point containers are by default initialized to C<NaN>.) Typed object containers start