X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/1108974dc425da181c3fc8be06ee65371f6439d6..2628b4e04e549c099db13c6de70af2f726568985:/pod/perldiag.pod diff --git a/pod/perldiag.pod b/pod/perldiag.pod index fa290e3..d5e44c7 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -1334,6 +1334,14 @@ specified in the C<\N{...}> escape. Perhaps you forgot to load the corresponding C or C pragma? See L and L. +=item Constant(%s)%s: %s in regex; marked by <-- HERE in m/%s/ + +(F) The parser found inconsistencies while attempting to find +the character name specified in the C<\N{...}> escape. Perhaps you +forgot to load the corresponding C pragma? +See L. + + =item Constant is not %s reference (F) A constant value (perhaps declared using the C pragma) @@ -1422,13 +1430,18 @@ conditional. Some people have exploited this bug to achieve a kind of static variable. Since we intend to fix this bug, we don't want people relying on this behavior. You can achieve a similar static effect by declaring the variable in a separate block outside the function, eg - + sub f { my $x if 0; return $x++ } becomes { my $x; sub f { return $x++ } } +Beginning with perl 5.9.4, you can also use C variables to +have lexicals that are initialized only once (see L): + + sub f { state $x; return $x++ } + =item DESTROY created new reference to dead object '%s' (F) A DESTROY() method created a new reference to the object which is @@ -1836,6 +1849,13 @@ about 250 characters for simple names, and somewhat more for compound names (like C<$A::B>). You've exceeded Perl's limits. Future versions of Perl are likely to eliminate these arbitrary limitations. +=item Ignoring %s in character class in regex; marked by <-- HERE in m/%s/ + +(W) Named unicode character escapes (\N{...}) may return multi-char +or zero length sequences. When such an escape is used in a character class +its behaviour is not well defined. Check that the correct escape has +been used, and the correct charname handler is in scope. + =item Illegal binary digit %s (F) You used a digit other than 0 or 1 in a binary number. @@ -2744,10 +2764,13 @@ which is odd, because hashes come in key/value pairs. =item Offset outside string -(F) You tried to do a read/write/send/recv operation with an offset -pointing outside the buffer. This is difficult to imagine. The sole -exception to this is that Cing past the buffer will extend -the buffer and zero pad the new area. +(F, W layer) You tried to do a read/write/send/recv/seek operation +with an offset pointing outside the buffer. This is difficult to +imagine. The sole exceptions to this are that zero padding will +take place when going past the end of the string when either +Cing a file, or when seeking past the end of a scalar opened +for I/O (in anticipation of future reads and to imitate the behaviour +with real files). =item %s() on unopened %s @@ -2921,6 +2944,11 @@ data. (P) The internal do_trans routines were called with invalid operational data. +=item panic: fold_constants JMPENV_PUSH returned %d + +(P) While attempting folding constants an exception other than an C +failure was caught. + =item panic: frexp (P) The library function frexp() failed, making printf("%f") impossible. @@ -3735,6 +3763,16 @@ L. iterate more times than there are characters of input, which is what happened.) See L. +=item State variable %s will be reinitialized + +(W misc) You're declaring a C variable inside a list. The list +assignment will be treated by perl as a regular assignment, which means +that the C variable will be reinitialized each time the statement +is run. The solution to have it initialized only once is to write the +assignment on its own line, as in: + + state $var = 42; + =item Statement unlikely to be reached (W exec) You did an exec() with some statement after it other than a @@ -3768,7 +3806,7 @@ C may break this. (P) The substitution was looping infinitely. (Obviously, a substitution shouldn't iterate more times than there are characters of input, which is what happened.) See the discussion of substitution in -L. +L. =item Substitution pattern not terminated @@ -4235,23 +4273,24 @@ subroutine. in your Perl script (or eval). Perhaps you tried to run a compressed script, a binary program, or a directory as a Perl program. -=item /%s/: Unrecognized escape \\%c in character class passed through +=item Unrecognized escape \\%c in character class passed through in regex; marked by <-- HERE in m/%s/ (W regexp) You used a backslash-character combination which is not recognized by Perl inside character classes. The character was understood literally. +The <-- HERE shows in the regular expression about where the +escape was discovered. =item Unrecognized escape \\%c passed through (W misc) You used a backslash-character combination which is not -recognized by Perl. +recognized by Perl. The character was understood literally. =item Unrecognized escape \\%c passed through in regex; marked by <-- HERE in m/%s/ (W regexp) You used a backslash-character combination which is not -recognized by Perl. This combination appears in an interpolated variable or -a C<'>-delimited regular expression. The character was understood -literally. The <-- HERE shows in the regular expression about where the +recognized by Perl. The character was understood literally. +The <-- HERE shows in the regular expression about where the escape was discovered. =item Unrecognized signal name "%s"