Author: larry Date: Wed Feb 28 07:55:51 2007 New Revision: 14306 Modified: doc/trunk/design/syn/S02.pod doc/trunk/design/syn/S05.pod doc/trunk/design/syn/S06.pod
Log: The old "is context is rw" is now written "is context<rw>". The old "is context(Scalar)" is gone; use a macro. Fixed some off-by-one errors in the S05 ascii art. Modified: doc/trunk/design/syn/S02.pod ============================================================================== --- doc/trunk/design/syn/S02.pod (original) +++ doc/trunk/design/syn/S02.pod Wed Feb 28 07:55:51 2007 @@ -12,9 +12,9 @@ Maintainer: Larry Wall <[EMAIL PROTECTED]> Date: 10 Aug 2004 - Last Modified: 26 Feb 2007 + Last Modified: 28 Feb 2007 Number: 2 - Version: 90 + Version: 91 This document summarizes Apocalypse 2, which covers small-scale lexical items and typological issues. (These Synopses also contain @@ -1503,11 +1503,12 @@ failure. Any lexical declared with the C<is context> trait is by default -considered readonly outside the current lexical scope. You may add -C<is rw> to allow called routines to modify your value. C<$_>, -C<$!>, and C<$/> are C<rw> by default. In any event, your lexical -scope can always access the variable as if it were an ordinary C<my>; -the restriction on writing applies only to called subroutines. +considered readonly outside the current lexical scope. You may +add a trait argument of C<< <rw> >> to allow called routines to +modify your value. C<$_>, C<$!>, and C<$/> are C<< context<rw> >> +by default. In any event, your lexical scope can always access the +variable as if it were an ordinary C<my>; the restriction on writing +applies only to called subroutines. =item * Modified: doc/trunk/design/syn/S05.pod ============================================================================== --- doc/trunk/design/syn/S05.pod (original) +++ doc/trunk/design/syn/S05.pod Wed Feb 28 07:55:51 2007 @@ -1965,7 +1965,7 @@ # | subpattern subpattern | # | __/\__ __/\__ | # | | | | | | - ms/ (I am the (walrus), ( khoo )**{2} kachoo) /; + ms/ (I am the (walrus), ( khoo )**{2} kachoo) /; =item * @@ -1996,7 +1996,7 @@ # | subpat-B subpat-C | # | __/\__ __/\__ | # | | | | | | - ms/ (I am the (walrus), ( khoo )**{2} kachoo) /; + ms/ (I am the (walrus), ( khoo )**{2} kachoo) /; then the C<Match> objects representing the matches made by I<subpat-B> and I<subpat-C> would be successively pushed onto the array inside I<subpat- @@ -2062,7 +2062,7 @@ =item * -This behavior is quite different to PerlĀ 5 semantics: +This behavior is quite different from PerlĀ 5 semantics: # Perl 5... # @@ -2222,7 +2222,7 @@ =item * In particular, the index of capturing parentheses restarts after each -C<|>. Hence: +C<|> or C<||> (but not after each C<&> or C<&&>). Hence: # $0 $1 $2 $3 $4 $5 $tune_up = rx/ (don't) (ray) (me) (for) (solar tea), (d'oh!) @@ -2282,7 +2282,7 @@ # : $/<ident> : $/[0]<ident> : : # : __^__ : __^__ : : # : | | : | | : : - ms/ <ident> \: ( known as <ident> previously ) / + ms/ <ident> \: ( known as <ident> previously ) / =back @@ -2301,7 +2301,7 @@ # $<ident> $0<ident> # __^__ __^__ # | | | | - ms/ <ident> \: ( known as <ident> previously ) / + ms/ <ident> \: ( known as <ident> previously ) / =item * @@ -2409,10 +2409,10 @@ If a named scalar alias is applied to a set of I<capturing> parens: - # ______/capturing parens\_____ - # | | - # | | - ms/ $<key>:=( (<[A..E]>) (\d**{3..6}) (X?) ) /; + # ______/capturing parens\______ + # | | + # | | + ms/ $<key>:=( (<[A..E]>) (\d**{3..6}) (X?) ) /; then the outer capturing parens no longer capture into the array of C<$/> as unaliased parens would. Instead the aliased parens capture @@ -2467,10 +2467,10 @@ If a named scalar alias is applied to a set of I<non-capturing> brackets: - # ___/non-capturing brackets\__ - # | | - # | | - ms/ $<key>:=[ (<[A..E]>) (\d**{3..6}) (X?) ] /; + # ___/non-capturing brackets\___ + # | | + # | | + ms/ $<key>:=[ (<[A..E]>) (\d**{3..6}) (X?) ] /; then the corresponding C<< $/<key> >> Match object contains only the string matched by the non-capturing brackets. @@ -2580,28 +2580,28 @@ # Perl 5... # $1 - # _____________/\______________ - # | $2 $3 $4 | - # | __/\___ ____/\____ /\ | - # | | | | | | | | - m/ ( (<[A..E]>) (\d**{3..6}) (X?) ) /; + # _____________/\___________ + # | $2 $3 $4 | + # | __/\___ __/\___ /\ | + # | | | | | | | | + m/ ( ( [A-E] ) (\d{3,6}) (X?) ) /x; # Perl 6... - # $0 - # _____________/\______________ - # | $0[0] $0[1] $0[2] | - # | __/\___ ____/\____ /\ | - # | | | | | | | | + # $0 + # ______________/\______________ + # | $0[0] $0[1] $0[2] | + # | ___/\___ ____/\____ /\ | + # | | | | | | | | m/ ( (<[A..E]>) (\d**{3..6}) (X?) ) /; # Perl 6 simulating Perl 5... - # $1 - # _______________/\________________ - # | $2 $3 $4 | - # | __/\___ ____/\____ /\ | - # | | | | | | | | + # $1 + # ________________/\________________ + # | $2 $3 $4 | + # | ___/\___ ____/\____ /\ | + # | | | | | | | | m/ $1:=[ (<[A..E]>) (\d**{3..6}) (X?) ] /; The non-capturing brackets don't introduce a scope, so the subpatterns within @@ -2635,7 +2635,7 @@ In other words, aliasing and quantification are completely orthogonal. For example: - if m/ mv $0:=<file>+ / { + if ms/ mv $0:=<file>+ / { # <file>+ returns a list of Match objects, # so $0 contains an array of Match objects, # one for each successful call to <file> @@ -2644,7 +2644,7 @@ } - if m/ mv $<from>:=(\S+ \s+)* / { + if m/ mv \s+ $<from>:=(\S+ \s+)* / { # Quantified subpattern returns a list of Match objects, # so $/<from> contains an array of Match # objects, one for each successful match of the subpattern @@ -2676,7 +2676,7 @@ An alias can also be specified using an array as the alias instead of a scalar. For example: - m/ mv @<from>:=[(\S+) \s+]* <dir> /; + m/ mv \s+ @<from>:=[(\S+) \s+]* <dir> /; =item * @@ -2714,18 +2714,18 @@ brackets, it captures the substrings matched by each repetition of the brackets into separate elements of the corresponding array. That is: - m/ mv $<files>:=[ f.. \s* ]* /; # $/<files> assigned a single - # Match object containing the - # complete substring matched by - # the full set of repetitions - # of the non-capturing brackets - - m/ mv @<files>:=[ f.. \s* ]* /; # $/<files> assigned an array, - # each element of which is a - # Match object containing - # the substring matched by Nth - # repetition of the non- - # capturing bracket match + ms/ mv $<files>:=[ f.. \s* ]* /; # $/<files> assigned a single + # Match object containing the + # complete substring matched by + # the full set of repetitions + # of the non-capturing brackets + + ms/ mv @<files>:=[ f.. \s* ]* /; # $/<files> assigned an array, + # each element of which is a + # Match object containing + # the substring matched by Nth + # repetition of the non- + # capturing bracket match =item * Modified: doc/trunk/design/syn/S06.pod ============================================================================== --- doc/trunk/design/syn/S06.pod (original) +++ doc/trunk/design/syn/S06.pod Wed Feb 28 07:55:51 2007 @@ -13,9 +13,9 @@ Maintainer: Larry Wall <[EMAIL PROTECTED]> Date: 21 Mar 2003 - Last Modified: 22 Feb 2007 + Last Modified: 28 Feb 2007 Number: 6 - Version: 72 + Version: 73 This document summarizes Apocalypse 6, which covers subroutines and the @@ -1609,21 +1609,12 @@ print $text while $count-- > 0; } -=item C<is context(I<TYPE>)> +=item C<is context(I<ACCESS>)> -Specifies the context that a parameter applies to its argument. Typically used -to cause a final list parameter to apply a series of scalar contexts: - - # &format may have as many arguments as it likes, - # each of which is evaluated in scalar context - - sub format([EMAIL PROTECTED] is context(Scalar)) {...} - -Note that the compiler may not be able to propagate such a scalar -context to a function call used as an argument to a method or multisub -whose signature is not visible until dispatch time. Such function -call arguments are called in list context by default, and must be -coerced to scalar context explicitly if that is desired. +Specifies that the parameter is to be treated as an "environmental" +variable, that is, a lexical that is accessible from the dynamic +scope (see S02). If I<ACCESS> is omitted, defaults to readonly in +any portions of the dynamic scope outside the current lexical scope. =back