Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[svn:perl6-synopsis] r12933 - doc/trunk/design/syn

4 views
Skip to first unread message

la...@cvs.perl.org

unread,
Oct 9, 2006, 11:34:37 AM10/9/06
to perl6-l...@perl.org
Author: larry
Date: Mon Oct 9 08:34:36 2006
New Revision: 12933

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

Log:
Quote and regex adverbs may now take only parentheses as brackets.


Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod (original)
+++ doc/trunk/design/syn/S02.pod Mon Oct 9 08:34:36 2006
@@ -12,9 +12,9 @@

Maintainer: Larry Wall <la...@wall.org>
Date: 10 Aug 2004
- Last Modified: 8 Oct 2006
+ Last Modified: 9 Oct 2006
Number: 2
- Version: 75
+ Version: 76

This document summarizes Apocalypse 2, which covers small-scale
lexical items and typological issues. (These Synopses also contain
@@ -1476,17 +1476,17 @@
There is now a generalized adverbial form of Pair notation. The
following table shows the correspondence to the "fatarrow" notation:

- Fat arrow Adverbial pair
- ========= ==============
+ Fat arrow Adverbial pair Paren form
+ ========= ============== ==========
a => 1 :a
a => 0 :!a
a => 0 :a(0)
a => $x :a($x)
- a => 'foo' :a<foo>
- a => <foo bar> :a<foo bar>
- a => «$foo @bar» :a«$foo @bar»
- a => {...} :a{...}
- a => [...] :a[...]
+ a => 'foo' :a<foo> :a(<foo>)
+ a => <foo bar> :a<foo bar> :a(<foo bar>)
+ a => «$foo @bar» :a«$foo @bar» :a(«$foo @bar»)
+ a => {...} :a{...} :a({...})
+ a => [...] :a[...] :a([...])
a => $a :$a
a => @a :@a
a => %a :%a
@@ -1518,7 +1518,12 @@
If that's not intended, you must use whitespace between the adverb and
the opening bracket. The syntax of individual adverbs is the same
everywhere in Perl 6. There are no exceptions based on whether an
-argument is wanted or not. Except as noted above, the parser always
+argument is wanted or not. (There is a minor exception for quote and
+regex adverbs, which accept I<only> parentheses as their bracketing
+operator, and ignore other brackets, which must be placed in parens
+if desired. See "Paren form" in the table above.)
+
+Except as noted above, the parser always
looks for the brackets. Despite not indicating a true subscript,
the brackets are similarly parsed as postfix operators. As postfixes
the brackets may be separated from their initial C<:foo> with either
@@ -1566,7 +1571,7 @@

quote qx = 'qq:x'; # equivalent to P5's qx//
quote qTO = 'qq:x:w:to'; # qq:x:w:to//
- quote circumfix:<❰ ❱> = q:code { .quoteharder }; # or some such...
+ quote circumfix:<❰ ❱> = q:code{ .quoteharder }; # or some such...

In particular, all these forms disable the lookahead for an adverbial argument,
as if there were a space after the keyword. So although
@@ -1594,10 +1599,8 @@

q:n[stuff]

-is not so fine, if the user intended "stuff" to be the string rather
-than an argument to C<:n>. Basically, you'll be fine if you just
-never use parens for quote delimiters, and always put a space after
-your adverbs.
+also happens to work because quote adverbs only all the paren form of
+bracketed adverbs.

If this is all too much of a hardship, you can define your own quote
adverbs and operators as standard macros. The main difference is that,
@@ -1609,8 +1612,8 @@

macro qn { 'q:n' }

-does I<not> disable the subsequent search for an argument to C<:n>. To
-get the equivalent, you need to add a space:
+does I<not> disable the subsequent search for a parenthesized argument
+to C<:n>. To get the equivalent, you need to add a space:

macro qn { 'q:n ' }

Modified: doc/trunk/design/syn/S05.pod
==============================================================================
--- doc/trunk/design/syn/S05.pod (original)
+++ doc/trunk/design/syn/S05.pod Mon Oct 9 08:34:36 2006
@@ -14,9 +14,9 @@
Maintainer: Patrick Michaud <pmic...@pobox.com> and
Larry Wall <la...@wall.org>
Date: 24 Jun 2002
- Last Modified: 8 Oct 2006
+ Last Modified: 9 Oct 2006
Number: 5
- Version: 36
+ Version: 37

This document summarizes Apocalypse 5, which is about the new regex
syntax. We now try to call them I<regex> rather than "regular
@@ -108,8 +108,8 @@

Every modifier must start with its own colon. The delimiter must be
separated from the final modifier by whitespace if it would otherwise be taken
-as an argument to the preceding modifier (which is true for any
-bracketing character).
+as an argument to the preceding modifier (which is true if and only if
+the next character is a left parenthesis.)

=item *

@@ -180,7 +180,7 @@

But in the case of

- m:s {(a|\*) (b|\+)}
+ m:s{(a|\*) (b|\+)}

or equivalently,

@@ -257,7 +257,7 @@
which is almost the same as:

$_.pos = 0;
- s:c [ (<?ident>) = (\N+) $$] [$0 => $1] for 1..4;
+ s:c[ (<?ident>) = (\N+) $$] = "$0 => $1" for 1..4;

except that the string is unchanged unless all four matches are found.
However, ranges are allowed, so you can say C<:x(1..4)> to change anywhere
@@ -373,6 +373,13 @@

m/:s alignment = [:i left|right|cent[er|re]] /

+As with modifiers outside, only parentheses are recognized as valid
+brackets for args to the adverb. In particular:
+
+ m/:foo[xxx]/ Parses as :foo [xxx]
+ m/:foo{xxx}/ Parses as :foo {xxx}
+ m/:foo<xxx>/ Parses as :foo <xxx>
+
=item *

User-defined modifiers will be possible:
@@ -381,13 +388,13 @@

=item *

-User-defined modifiers can also take arguments:
+User-defined modifiers can also take arguments, but only in parentheses:

m:fuzzy('bare')/pattern/;

=item *

-To use parens or brackets for your delimiters you have to separate:
+To use parens for your delimiters you have to separate:

m:fuzzy (pattern);

@@ -2932,15 +2939,15 @@
Any scalar assignment operator may be used; the substitution macro
knows how to turn

- $target ~~ s:g [pattern] op= expr
+ $target ~~ s:g[pattern] op= expr

into something like:

- $target.subst(rx:g [pattern], { $() op expr })
+ $target.subst(rx:g[pattern], { $() op expr })

So, for example, you can multiply every dollar amount by 2 with:

- s:g [\$ <( \d+ )>] *= 2
+ s:g[\$ <( \d+ )>] *= 2

(Of course, the optimizer is free to do something faster than an actual
method call.)

0 new messages