X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlop.pod;h=e97a25bc9b9aea3b879557c41a12159918611c1e;hb=22d4bb9ccb8701e68f9243547d7e3a3c55f70908;hp=3c84e608019577152a60d6e74ec8237770c16025;hpb=4b19af017623bfa3bb72bb164598a517f586e0d3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlop.pod b/pod/perlop.pod index 3c84e60..e97a25b 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' @@ -196,7 +196,7 @@ C<$a> minus the largest multiple of C<$b> that is not greater than C<$a>. If C<$b> is negative, then C<$a % $b> is C<$a> minus the smallest multiple of C<$b> that is not less than C<$a> (i.e. the result will be less than or equal to zero). -Note than when C is in scope, "%" give you direct access +Note than when C is in scope, "%" gives you direct access to the modulus operator as implemented by your C compiler. This operator is not as well defined for negative operands, but it will execute faster. @@ -299,7 +299,9 @@ to the right argument. Binary "<=>" returns -1, 0, or 1 depending on whether the left argument is numerically less than, equal to, or greater than the right -argument. +argument. If your platform supports NaNs (not-a-numbers) as numeric +values, using them with "<=>" (or any other numeric comparison) +returns undef. Binary "eq" returns true if the left argument is stringwise equal to the right argument. @@ -307,8 +309,9 @@ the right argument. Binary "ne" returns true if the left argument is stringwise not equal to the right argument. -Binary "cmp" returns -1, 0, or 1 depending on whether the left argument is stringwise -less than, equal to, or greater than the right argument. +Binary "cmp" returns -1, 0, or 1 depending on whether the left +argument is stringwise less than, equal to, or greater than the right +argument. "lt", "le", "ge", "gt" and "cmp" use the collation (sort) order specified by the current locale if C is in effect. See L. @@ -707,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. @@ -848,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: @@ -858,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++; @@ -876,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: @@ -885,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, @@ -997,13 +1010,14 @@ for a detailed look at the semantics of regular expressions. =item `STRING` -A string which is (possibly) interpolated and then executed as a system -command with C or its equivalent. Shell wildcards, pipes, -and redirections will be honored. The collected standard output of the -command is returned; standard error is unaffected. In scalar context, -it comes back as a single (potentially multi-line) string. In list -context, returns a list of lines (however you've defined lines with $/ -or $INPUT_RECORD_SEPARATOR). +A string which is (possibly) interpolated and then executed as a +system command with C or its equivalent. Shell wildcards, +pipes, and redirections will be honored. The collected standard +output of the command is returned; standard error is unaffected. In +scalar context, it comes back as a single (potentially multi-line) +string, or undef if the command failed. In list context, returns a +list of lines (however you've defined lines with $/ or +$INPUT_RECORD_SEPARATOR), or an empty list if the command failed. Because backticks do not affect standard error, use shell file descriptor syntax (assuming the shell supports this) if you care to address this.