From: Johan Vromans Date: Sun, 9 Jun 2002 13:12:43 +0000 (+0200) Subject: [Patch] $^N issues X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=77ea4f6d93da91f08d36b99d2fc1b3f43e33aab0;p=p5sagit%2Fp5-mst-13.2.git [Patch] $^N issues Message-ID: <15619.14379.888034.910020@phoenix.squirrel.nl> p4raw-id: //depot/perl@17131 --- diff --git a/lib/English.pm b/lib/English.pm index 5383368..05dd05c 100644 --- a/lib/English.pm +++ b/lib/English.pm @@ -124,6 +124,7 @@ sub import { *OSNAME *LAST_REGEXP_CODE_RESULT *EXCEPTIONS_BEING_CAUGHT + *LAST_SUBMATCH_RESULT @LAST_MATCH_START @LAST_MATCH_END ); @@ -144,6 +145,7 @@ sub import { # Matching. *LAST_PAREN_MATCH = \$+ ; + *LAST_SUBMATCH_RESULT = \$^N ; *LAST_MATCH_START = \@- ; *LAST_MATCH_END = \@+ ; diff --git a/pod/perlre.pod b/pod/perlre.pod index c0d4e89..0256f22 100644 --- a/pod/perlre.pod +++ b/pod/perlre.pod @@ -392,11 +392,14 @@ Several special variables also refer back to portions of the previous match. C<$+> returns whatever the last bracket match matched. C<$&> returns the entire matched string. (At one point C<$0> did also, but now it returns the name of the program.) C<$`> returns -everything before the matched string. And C<$'> returns everything -after the matched string. +everything before the matched string. C<$'> returns everything +after the matched string. And C<$^N> contains whatever was matched by +the most-recently closed group (submatch). C<$^N> can be used in +extended patterns (see below), for example to assign a submatch to a +variable. The numbered variables ($1, $2, $3, etc.) and the related punctuation -set (C<$+>, C<$&>, C<$`>, and C<$'>) are all dynamically scoped +set (C<$+>, C<$&>, C<$`>, C<$'>, and C<$^N>) are all dynamically scoped until the end of the enclosing block or until the next successful match, whichever comes first. (See L.) @@ -563,6 +566,14 @@ This zero-width assertion evaluate any embedded Perl code. It always succeeds, and its C is not interpolated. Currently, the rules to determine where the C ends are somewhat convoluted. +This feature can be used together with the special variable C<$^N> to +capture the results of submatches in variables without having to keep +track of the number of nested parentheses. For example: + + $_ = "The brown fox jumps over the lazy dog"; + /the (\S+)(?{ $color = $^N }) (\S+)(?{ $animal = $^N })/i; + print "color = $color, animal = $animal\n"; + The C is properly scoped in the following sense: If the assertion is backtracked (compare L<"Backtracking">), all changes introduced after Cization are undone, so that