Author: larry
Date: Mon Oct  9 00:22:24 2006
New Revision: 12875

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

Log:
P5's s[pat][repl] syntax is dead, now use s[pat] = "repl"


Modified: doc/trunk/design/syn/S05.pod
==============================================================================
--- doc/trunk/design/syn/S05.pod        (original)
+++ doc/trunk/design/syn/S05.pod        Mon Oct  9 00:22:24 2006
@@ -14,9 +14,9 @@
    Maintainer: Patrick Michaud <[EMAIL PROTECTED]> and
                Larry Wall <[EMAIL PROTECTED]>
    Date: 24 Jun 2002
-   Last Modified: 4 Oct 2006
+   Last Modified: 8 Oct 2006
    Number: 5
-   Version: 35
+   Version: 36
 
 This document summarizes Apocalypse 5, which is about the new regex
 syntax.  We now try to call them I<regex> rather than "regular
@@ -88,10 +88,18 @@
 
      s/pattern/{ doit() }/
 
+or:
+
+     s[pattern] = doit()
+
 Instead of C</ee> say:
 
      s/pattern/{ eval doit() }/
 
+or:
+
+     s[pattern] = eval doit()
+
 =item *
 
 Modifiers are now placed as adverbs at the I<start> of a match/substitution:
@@ -2876,15 +2884,71 @@
 the longest one wins.  In the case of two identical sequences the
 first in order wins.
 
+=back
+
+=head1 Substitution
+
 There are also method forms of C<m//> and C<s///>:
 
-     $str.match(//);
-     $str.subst(//, "replacement");
-     $str.subst(//, {"replacement"});
-     $str.=subst(//, "replacement");
-     $str.=subst(//, {"replacement"});
+     $str.match(/pat/);
+     $str.subst(/pat/, "replacement");
+     $str.subst(/pat/, {"replacement"});
+     $str.=subst(/pat/, "replacement");
+     $str.=subst(/pat/, {"replacement"});
 
-=back
+There is no syntactic sugar here, so in order to get deferred
+evaluation of the replacement you must put it into a closure.  The
+syntactic sugar is provided only by the quotelike forms.  First there
+is the standard "triple quote" form:
+
+    s/pattern/replacement/
+
+Only non-bracket characters may be used for the "triple quote".  The
+right side is always evaluated as if it were a double-quoted string
+regardless of the quote chosen.
+
+As with Perl 5, a bracketing form is also supported, but unlike Perl 5,
+Perl 6 uses the brackets I<only> around the pattern.  The replacement
+is then specified as if it were an ordinary item assignment, with ordinary
+quoting rules.  To pick your own quotes on the right just use one of the C<q>
+forms.  The substitution above is equivalent to:
+
+    s[pattern] = "replacement"
+
+or
+
+    s[pattern] = qq[replacement]
+
+This is not a normal assigment, since the right side is evaluated each
+time the substitution matches (much like the pseudo-assignment to declarators
+can happen at strange times).  It is therefore treated as a "thunk", that is,
+as if it has implicit curlies around it.  In fact, it makes no sense at
+all to say
+
+    s[pattern] = { doit }
+
+because that would try to substitute a closure into the string.
+
+Any scalar assignment operator may be used; the substitution macro
+knows how to turn
+
+    $target ~~ s:g [pattern] op= expr
+
+into something like:
+
+    $target.subst(rx:g [pattern], { $() op expr })
+
+So, for example, you can multiply every dollar amount by 2 with:
+
+    s:g [\$ <( \d+ )>] *= 2
+
+(Of course, the optimizer is free to do something faster than an actual
+method call.)
+
+You'll note from the last example that substitutions only happen on
+the "official" string result of the match, that is, the C<$()> value.
+(Here we captured C<$()> using the C<< <(...)> >> pair; otherwise we
+would have had to use lookbehind to match the C<$>.)
 
 =head1 Positional matching, fixed width types
 

Reply via email to