X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlop.pod;h=69c8c69337cda3be8c2b36c08c074b59763df127;hb=322edccd6da7b0afb2e0db52c07695cbca6754c9;hp=b317bdec9c339c736dfa1a444e19e09f4d3fa61a;hpb=d4ad863d67925b9ee11642aee9c9257c020e4f2d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlop.pod b/pod/perlop.pod index b317bde..69c8c69 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -119,7 +119,7 @@ you increment a variable that is numeric, or that has ever been used in a numeric context, you get a normal increment. If, however, the variable has been used in only string contexts since it was set, and has a value that is not the empty string and matches the pattern -C, the increment is done as a string, preserving each +C, the increment is done as a string, preserving each character within its range, with carry: print ++($foo = '99'); # prints '100' @@ -710,7 +710,7 @@ on a Mac, these are reversed, and on systems without line terminator, printing C<"\n"> may emit no actual data. In general, use C<"\n"> when you mean a "newline" for your system, but use the literal ASCII when you need an exact character. For example, most networking protocols expect -and prefer a CR+LF (C<"\012\015"> or C<"\cJ\cM">) for line terminators, +and prefer a CR+LF (C<"\015\012"> or C<"\cM\cJ">) for line terminators, and although they often accept just C<"\012">, they seldom tolerate just C<"\015">. If you get in the habit of using C<"\n"> for networking, you may be burned some day. @@ -851,9 +851,11 @@ string also resets the search position. You can intermix C matches with C, where C<\G> is a zero-width assertion that matches the exact position where the previous -C, if any, left off. The C<\G> assertion is not supported without -the C modifier. (Currently, without C, C<\G> behaves just like -C<\A>, but that's accidental and may change in the future.) +C, if any, left off. Without the C modifier, the C<\G> assertion +still anchors at pos(), but the match is of course only attempted once. +Using C<\G> without C on a target string that has not previously had a +C match applied to it is the same as using the C<\A> assertion to match +the beginning of the string. Examples: @@ -861,7 +863,7 @@ Examples: ($one,$five,$fifteen) = (`uptime` =~ /(\d+\.\d+)/g); # scalar context - $/ = ""; $* = 1; # $* deprecated in modern perls + $/ = ""; while (defined($paragraph = <>)) { while ($paragraph =~ /[a-z]['")]*[.!?]+['")]*\s/g) { $sentences++; @@ -879,6 +881,7 @@ Examples: print "3: '"; print $1 while /(p)/gc; print "', pos=", pos, "\n"; } + print "Final: '$1', pos=",pos,"\n" if /\G(.)/; The last example should print: @@ -888,6 +891,13 @@ The last example should print: 1: '', pos=7 2: 'q', pos=8 3: '', pos=8 + Final: 'q', pos=8 + +Notice that the final match matched C instead of C

, which a match +without the C<\G> anchor would have done. Also note that the final match +did not update C -- C is only updated on a C match. If the +final match did indeed match C

, it's a good bet that you're running an +older (pre-5.6.0) Perl. A useful idiom for C-like scanners is C. You can combine several regexps like this to process a string part-by-part, @@ -941,7 +951,7 @@ A double-quoted, interpolated string. =item qr/STRING/imosx -This operators quotes--and compiles--its I as a regular +This operator quotes (and possibly compiles) its I as a regular expression. I is interpolated the same way as I in C. If "'" is used as the delimiter, no interpolation is done. Returns a Perl value which may be used instead of the