X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=6a8148ca8e8245c7514963b240f769d543d8ad83;hb=4addbd3b37ffede9a798950435a751b9834e67d0;hp=12fc7acbccd6cee17543eb9cd8804315871605b2;hpb=d7133549e15d907b18e0c1873e57e635dc9d6424;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 12fc7ac..6a8148c 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -49,7 +49,7 @@ letter. (W) When using threaded Perl, a thread (not necessarily the main thread) exited while there were still other threads running. Usually it's a good idea to first collect the return values of the -created threads by joining them, and only then exit from then main +created threads by joining them, and only then exit from the main thread. See L. =item accept() on closed socket %s @@ -165,6 +165,11 @@ or a hash or array slice, such as: name, and not a subroutine call. C will generate this error. +=item '%s' trapped by operation mask + +(F) You tried to use an operator from a Safe compartment in which it's +disallowed. See L. + =item Argument "%s" isn't numeric%s (W numeric) The indicated string was fed as an argument to an operator @@ -318,12 +323,6 @@ which is left unnoticed if C uses I system malloc(). (P) One of the internal hash routines was passed a null HV pointer. -=item Bad index while coercing array into hash - -(F) The index looked up in the hash found as the 0'th element of a -pseudo-hash is not legal. Index values must be at 1 or greater. -See L. - =item Badly placed ()'s (A) You've accidentally run your script through B instead @@ -467,6 +466,24 @@ checking. Alternatively, if you are certain that you're calling the function correctly, you may put an ampersand before the name to avoid the warning. See L. +=item Can only compress unsigned integers + +(F) An argument to pack("w",...) was not an integer. The BER compressed +integer format can only be used with positive integers, and you attempted +to compress something else. See L. + +=item Cannot compress integer + +(F) An argument to pack("w",...) was too large to compress. The BER +compressed integer format can only be used with positive integers, and you +attempted to compress Infinity or a very large number (> 1e308). +See L. + +=item Cannot compress negative numbers + +(F) An argument to pack("w",...) was negative. The BER compressed integer +format can only be used with positive integers. See L. + =item / cannot take a count (F) You had an unpack template indicating a counted-length string, but @@ -689,11 +706,11 @@ editor will have a way to help you find these characters. =item Can't find %s property definition %s -(F) You may have tried to use C<\p> which means a Unicode property for -example \p{Lu} is all uppercase letters. if you did mean to use a +(F) You may have tried to use C<\p> which means a Unicode property (for +example C<\p{Lu}> is all uppercase letters). If you did mean to use a Unicode property, see L for the list of known properties. If you didn't mean to use a Unicode property, escape the C<\p>, either -C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until +by C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until possible C<\E>). =item Can't fork @@ -780,13 +797,6 @@ lexical variable using "my". This is not allowed. If you want to localize a package variable of the same name, qualify it with the package name. -=item Can't localize pseudo-hash element - -(F) You said something like C<< local $ar->{'key'} >>, where $ar is a -reference to a pseudo-hash. That hasn't been implemented yet, but you -can get a similar effect by localizing the corresponding array element -directly -- C<< local $ar->[$ar->[0]{'key'}] >>. - =item Can't localize through a reference (F) You said something like C, which Perl can't currently @@ -1435,7 +1445,7 @@ goto, or a loop control statement. =item Exiting format via %s -(W exiting) You are exiting an eval by unconventional means, such as a +(W exiting) You are exiting a format by unconventional means, such as a goto, or a loop control statement. =item Exiting pseudo-block via %s @@ -1494,17 +1504,30 @@ PDP-11 or something? =item Filehandle %s opened only for input -(W io) You tried to write on a read-only filehandle. If you intended it -to be a read-write filehandle, you needed to open it with "+<" or "+>" -or "+>>" instead of with "<" or nothing. If you intended only to write -the file, use ">" or ">>". See L. +(W io) You tried to write on a read-only filehandle. If you intended +it to be a read-write filehandle, you needed to open it with "+<" or +"+>" or "+>>" instead of with "<" or nothing. If you intended only to +write the file, use ">" or ">>". See L. =item Filehandle %s opened only for output -(W io) You tried to read from a filehandle opened only for writing. If +(W io) You tried to read from a filehandle opened only for writing, If you intended it to be a read/write filehandle, you needed to open it with "+<" or "+>" or "+>>" instead of with "<" or nothing. If you intended only to read from the file, use "<". See L. +Another possibility is that you attempted to open filedescriptor 0 +(also known as STDIN) for output (maybe you closed STDIN earlier?). + +=item Filehandle %s reopened as %s only for input + +(W io) You opened for reading a filehandle that got the same filehandle id +as STDOUT or STDERR. This occured because you closed STDOUT or STDERR +previously. + +=item Filehandle STDIN reopened as %s only for output + +(W io) You opened for writing a filehandle that got the same filehandle id +as STDIN. This occured because you closed STDIN previously. =item Final $ should be \$ or $name @@ -1693,6 +1716,11 @@ to your Perl administrator. (W syntax) An illegal character was found in a prototype declaration. Legal characters in prototypes are $, @, %, *, ;, [, ], &, and \. +=item Illegal declaration of anonymous subroutine + +(F) When using the C keyword to construct an anonymous subroutine, +you must always specify a block of code. See L. + =item Illegal division by zero (F) You tried to divide a number by 0. Either something was wrong in @@ -1779,9 +1807,9 @@ the world. See L. (F) You can't use system(), exec(), or a piped open in a setuid or setgid script if any of C<$ENV{PATH}>, C<$ENV{IFS}>, C<$ENV{CDPATH}>, -C<$ENV{ENV}> or C<$ENV{BASH_ENV}> are derived from data supplied (or -potentially supplied) by the user. The script must set the path to a -known value, using trustworthy data. See L. +C<$ENV{ENV}>, C<$ENV{BASH_ENV}> or C<$ENV{TERM}> are derived from data +supplied (or potentially supplied) by the user. The script must set +the path to a known value, using trustworthy data. See L. =item Integer overflow in %s number @@ -1795,6 +1823,15 @@ transparently promotes all numbers to a floating point representation internally--subject to loss of precision errors in subsequent operations. +=item Integer overflow in version + +(F) Some portion of a version initialization is too large for the +size of integers for your architecture. This is not a warning +because there is no rational reason for a version to try and use a +element larger than typically 2**32. This is usually caused by +trying to use some odd mathematical operation as a version, like +100/9. + =item Internal disaster in regex; marked by <-- HERE in m/%s/ (P) Something went badly wrong in the regular expression parser. @@ -1846,7 +1883,7 @@ C<{}> from your ending C<\x{}> - C<\x> without the curly braces can go only up to C. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item Invalid [] range "%s" in transliteration operator +=item Invalid range "%s" in transliteration operator (F) The range specified in the tr/// or y/// operator had a minimum character greater than the maximum character. See L. @@ -1871,6 +1908,17 @@ L. (W unpack) The given character is not a valid unpack type but used to be silently ignored. +=item Invalid version format (multiple underscores) + +(F) Versions may contain at most a single underscore, which signals +that the version is a beta release. See L for the allowed +version formats. + +=item Invalid version format (underscores before decimal) + +(F) Versions may not contain decimals after the optional underscore. +See L for the allowed version formats. + =item ioctl is not implemented (F) Your machine apparently doesn't implement ioctl(), which is pretty @@ -2041,6 +2089,11 @@ double-quotish context. C construction, but the command was missing or blank. +=item Missing control char name in \c + +(F) A double-quoted string ended with "\c", without the required control +character name. + =item Missing name in "my sub" (F) The reserved syntax for lexically scoped subroutines requires that @@ -2319,19 +2372,6 @@ this class doesn't exist at this point in your program. close a pipe which hadn't been opened. This should have been caught earlier as an attempt to close an unopened filehandle. -=item No such pseudo-hash field "%s" - -(F) You tried to access an array as a hash, but the field name used is -not defined. The hash at index 0 should map all valid field names to -array indices for that to work. - -=item No such pseudo-hash field "%s" in variable %s of type %s - -(F) You tried to access a field of a typed variable where the type does -not know about the field name. The field names are looked up in the -%FIELDS hash in the type package at compile time. The %FIELDS hash is -%usually set up with the 'fields' pragma. - =item No such signal: SIG%s (W signal) You specified a signal name as a subscript to %SIG that was @@ -2943,6 +2983,18 @@ Perl guesses a reasonable buffer size, but puts a sentinel byte at the end of the buffer just in case. This sentinel byte got clobbered, and Perl assumes that memory is now corrupted. See L. +=item Possible precedence problem on bitwise %c operator + +(W precedence) Your program uses a bitwise logical operator in conjunction +with a numeric comparison operator, like this : + + if ($x & $y == 0) { ... } + +This expression is actually equivalent to C<$x & ($y == 0)>, due to the +higher precedence of C<==>. This is probably not what you want. (If you +really meant to write this, disable the warning, or, better, write +C<$x & ($y == 0 ? 1 : 0)>). + =item Possible unintended interpolation of %s in string (W ambiguous) You said something like `@foo' in a double-quoted string @@ -3017,7 +3069,7 @@ declared or defined with a different function prototype. =item Prototype not terminated -(F) You've omitted the closing parenthesis in a function prototype +(F) You've omitted the closing parenthesis in a function prototype definition. =item Quantifier in {,} bigger than %d in regex; @@ -3048,6 +3100,14 @@ are outside the range which can be represented by integers internally. One possible workaround is to force Perl to use magical string increment by prepending "0" to your numbers. +=item read() on closed filehandle %s + +(W closed) You tried to read from a closed filehandle. + +=item read() on unopened filehandle %s + +(W unopened) You tried to read from a filehandle that was never opened. + =item readline() on closed filehandle %s (W closed) The filehandle you're reading from got itself closed sometime @@ -3194,6 +3254,11 @@ or setgid bit set. This doesn't make much sense. construct. Remember that bracketing delimiters count nesting level. Missing the leading C<$> from a variable C<$m> may cause this error. +Note that since Perl 5.9.0 a // can also be the I +construct, not just the empty search pattern. Therefore code written +in Perl 5.9.0 or later that uses the // as the I can be +misparsed by pre-5.9.0 Perls as a non-terminated search pattern. + =item %sseek() on unopened filehandle (W unopened) You tried to use the seek() or sysseek() function on a @@ -3517,6 +3582,14 @@ or "my $var" or "our $var". (F) The final summary message when a C succeeds. +=item sysread() on closed filehandle %s + +(W closed) You tried to read from a closed filehandle. + +=item sysread() on unopened filehandle %s + +(W unopened) You tried to read from a filehandle that was never opened. + =item System V %s is not implemented on this machine (F) You tried to do something with a function beginning with "sem", @@ -3586,11 +3659,22 @@ F (see L) so that the environ array isn't the target of the change to %ENV which produced the warning. +=item thread failed to start: %s + +(F) The entry point function of threads->create() failed for some reason. + =item times not implemented (F) Your version of the C library apparently doesn't do times(). I suspect you're not running on Unix. +=item To%s: illegal mapping '%s' + +(F) You tried to define a customized To-mapping for lc(), lcfirst, +uc(), or ucfirst() (or their string-inlined versions), but you +specified an illegal mapping. +See L. + =item Too few args to syscall (F) There has to be at least one argument to syscall() to specify the @@ -4130,7 +4214,7 @@ defined B feature. Use an explicit printf() or sprintf() instead. =item Use of reference "%s" as array index -(W) You tried to use a reference as an array index; this probably +(W misc) You tried to use a reference as an array index; this probably isn't what you mean, because references in numerical context tend to be huge numbers, and so usually indicates programmer error. @@ -4150,7 +4234,7 @@ a package qualifier, e.g. C<&our()>, or C. =item Use of tainted arguments in %s is deprecated -(W taint) You have supplied C or C with multiple +(W taint, deprecated) You have supplied C or C with multiple arguments and at least one of them is tainted. This used to be allowed but will become a fatal error in a future version of perl. Untaint your arguments. See L. @@ -4289,7 +4373,7 @@ the version number. =item v-string in use/require is non-portable -(W) The use of v-strings is non-portable to older, pre-5.6, Perls. +(W portable) The use of v-strings is non-portable to older, pre-5.6, Perls. If you want your scripts to be backward portable, use the floating point version number: for example, instead of C say C. This of course won't help: the older Perls