The example in S05 under "Subpattern numbering" isn't quite complex enough to give the reader a full understanding of the ramifications of the re-numbering that occurs with alternations, especially with respect to the combination of capturing and non-capturing subpatterns. I've written a small example and explanation to address this (attached as diff) based on an IRC conversation with fglock. If it's deemed correct, could this be included, please?
--- Rule.pod.orig	2006-10-10 17:26:39.000000000 -0400
+++ Rule.pod	2006-10-10 17:37:17.000000000 -0400
@@ -1956,6 +1956,21 @@
 C<(undef, undef, undef, undef, undef, undef, 'every', 'green', 'BEM',
 'devours', 'faces')> (as the same regex would in Perl 5).
 
+If non-capturing brackets are used, this can become more complex.
+Every time C<|> appears inside of non-capturing brackets, the subpattern
+index is returned to the index that it had when entering the
+brackets. When exiting the brackets, the next capturing subpattern
+will have an index one higher than the highest subpattern inside
+the non-capturing brackets. Here is such an example:
+
+    #            $0    $1  $2    $1    $3
+    $match = rx/ (a) [ (b) (c) | (d) ] (e) /;
+
+Notice that it is not the most recent C<$1> that determines
+the index of the C<(e)> subpattern, but the C<(c)> subpattern that
+incremented the index to C<$2>. Therefore C<(e)> has an index
+of C<$3>.
+
 =item *
 
 Note that it is still possible to mimic the monotonic Perl 5 capture

Reply via email to