X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlre.pod;h=42017ddf6629661a082bb46ab08273ae43864308;hb=93592fd5aeec89ac25994a493ef54e1d7a572d65;hp=10ea30ee36fcdefb2d959b3f230da60634212805;hpb=345e23944176348809d2be92e05ba6856a5c0ebc;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlre.pod b/pod/perlre.pod index 10ea30e..42017dd 100644 --- a/pod/perlre.pod +++ b/pod/perlre.pod @@ -62,7 +62,7 @@ Extend your pattern's legibility by permitting whitespace and comments. =item p X

X X -Preserve the string matched such that ${^PREMATCH}, {$^MATCH}, and +Preserve the string matched such that ${^PREMATCH}, ${^MATCH}, and ${^POSTMATCH} are available for use after matching. =item g and c @@ -518,6 +518,10 @@ backreference only if at least 11 left parentheses have opened before it. And so on. \1 through \9 are always interpreted as backreferences. +If the bracketing group did not match, the associated backreference won't +match either. (This can happen if the bracketing group is optional, or +in a different branch of an alternation.) + X<\g{1}> X<\g{-1}> X<\g{name}> X X In order to provide a safer and easier way to construct patterns using backreferences, Perl provides the C<\g{N}> notation (starting with perl @@ -703,6 +707,10 @@ will match C in any case, some spaces, and an exact (I repetition of the previous word, assuming the C modifier, and no C modifier outside this group. +These modifiers do not carry over into named subpatterns called in the +enclosing group. In other words, a pattern such as C<((?i)(&NAME))> does not +change the case-sensitivity of the "NAME" pattern. + Note that the C

modifier is special in that it can only be enabled, not disabled, and that its presence anywhere in a pattern has a global effect. Thus C<(?-p)> and C<(?-p:...)> are meaningless and will warn @@ -942,13 +950,6 @@ The assignment to C<$^R> above is properly localized, so the old value of C<$^R> is restored if the assertion is backtracked; compare L<"Backtracking">. -Due to an unfortunate implementation issue, the Perl code contained in these -blocks is treated as a compile time closure that can have seemingly bizarre -consequences when used with lexically scoped variables inside of subroutines -or loops. There are various workarounds for this, including simply using -global variables instead. If you are using this construct and strange results -occur then check for the use of lexically scoped variables. - For reasons of security, this construct is forbidden if the regular expression involves run-time interpolation of variables, unless the perilous C pragma has been used (see L), or the @@ -970,9 +971,15 @@ so you should only do so if you are also using taint checking. Better yet, use the carefully constrained evaluation within a Safe compartment. See L for details about both these mechanisms. -Because Perl's regex engine is currently not re-entrant, interpolated -code may not invoke the regex engine either directly with C or C), -or indirectly with functions such as C. +B: Use of lexical (C) variables in these blocks is +broken. The result is unpredictable and will make perl unstable. The +workaround is to use global (C) variables. + +B: Because Perl's regex engine is currently not re-entrant, +interpolated code may not invoke the regex engine either directly with +C or C), or indirectly with functions such as +C. Invoking the regex engine in these blocks will make perl +unstable. =item C<(??{ code })> X<(??{})>