Author: moritz
Date: 2010-08-06 19:52:06 +0200 (Fri, 06 Aug 2010)
New Revision: 31918
Modified:
docs/Perl6/Spec/S05-regex.pod
Log:
[S05] be explicit about which attributes/modifiers are allowed where
Also removes rx:g// from existing examples.
Added myself boldly to AUTHORS list
Modified: docs/Perl6/Spec/S05-regex.pod
===
--- docs/Perl6/Spec/S05-regex.pod 2010-08-06 17:52:01 UTC (rev 31917)
+++ docs/Perl6/Spec/S05-regex.pod 2010-08-06 17:52:06 UTC (rev 31918)
@@ -11,13 +11,14 @@
Allison Randal
Patrick Michaud
Larry Wall
+Moritz Lenz
=head1 VERSION
Created: 24 Jun 2002
-Last Modified: 11 Jul 2010
-Version: 128
+Last Modified: 6 Aug 2010
+Version: 129
This document summarizes Apocalypse 5, which is about the new regex
syntax. We now try to call them I rather than "regular
@@ -604,6 +605,56 @@
=back
+=head2 Allowed modifiers
+
+Some modifiers are allowed in all possible places where modifiers can occur,
+but not all of them.
+
+In general, a modifier that affects the compilation of a regex (like C<:i>)
+must be known at compile time. A modifier that affects only the calling
+behaviour, and not the regex itself (eg. C<:pos>, C<:overlap>, C<:x(4)>) may
+only appear on constructs that involve a call (like C and C), and
+not on C. Finally overlapping is disallowed on substitutions, while
+adverbs that affect modifications (eg. C<:samecase>) are only allowed on
+substitutions.
+
+These principle result in the following rules:
+
+=over
+
+=item *
+
+The C<:ignorecase>, C<:ignoremark> C<:sigspace>, C<:ratchet> and C<:Perl5>
+modifiers and their short forms are allowed everywhere: inside a regex,
+and on C, C and C constructs. An implementation may require
+that their value is known at compile time, and give a compile-time error
+message if that is not the case.
+
+rx:i/ hello / # OK
+rx:i(1) /hello/ # OK
+my $i = 1;
+rx:i($i) /hello/# may error out at compile time
+
+=item *
+
+The C<:samecase>, C<:samespace> and C<:samemark> modifiers (and their short
+forms) modifiers are only allowed on substitutions (C and C).
+
+=item *
+
+The C<:overlap> and C<:exhaustive> modifiers (and their short forms) are only
+allowed on matches (ie C), not on substitutions or regex quotes.
+
+=item *
+
+The C<:pos>, C<:continue>, C<:x> and C<:nth> modifiers and their aliases are
+only allowed on constructs that involve immediate calls, eg. C and C
+(but not on C).
+
+=item *
+
+The C<:dba> adverb is only allowed inside a regex.
+
=head1 Changed metacharacters
=over
@@ -1967,8 +2018,8 @@
If either form needs modifiers, they go before the opening delimiter:
- $regex = regex :g:s:i { my name is (.*) };
- $regex = rx:g:s:i / my name is (.*) /;# same thing
+ $regex = regex :s:i { my name is (.*) };
+ $regex = rx:s:i / my name is (.*) /;# same thing
Space is necessary after the final modifier if you use any
bracketing character for the delimiter. (Otherwise it would be taken as
@@ -1979,7 +2030,7 @@
You may not use colons for the delimiter. Space is allowed between
modifiers:
- $regex = rx :g :s :i / my name is (.*) /;
+ $regex = rx :s :i / my name is (.*) /;
=item *