X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=122f5ea144c05125b120fe347260aee1694453ab;hb=55eda71149148d511e3e5da4f7c4e646dd445502;hp=9baf17583338c13b53a83a79089ab9e330db52c5;hpb=4c32f29ba9da41e214e9e03a44a530ee0427f19a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 9baf175..122f5ea 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -16,7 +16,7 @@ desperation): (A) An alien error message (not generated by Perl). The majority of messages from the first three classifications above -(W, D & S) can be controlled using the C pragma. +(W, D & S) can be controlled using the C pragma. If a message can be controlled by the C pragma, its warning category is included with the classification letter in the description @@ -402,6 +402,11 @@ L for more on portability concerns. (W closed) You tried to do a bind on a closed socket. Did you forget to check the return value of your socket() call? See L. +=item binmode() on closed filehandle %s + +(W unopened) You tried binmode() on a filehandle that was never opened. +Check you control flow and number of arguments. + =item Bit vector size > 32 non-portable (W portable) Using bit vector sizes larger than 32 is non-portable. @@ -651,7 +656,7 @@ If you're getting this error from a here-document, you may have included unseen whitespace before or after your closing tag. A good programmer's editor will have a way to help you find these characters. -=item Can't find %s property definition %s +=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. Escape the C<\p>, either @@ -754,7 +759,7 @@ directly -- C<< local $ar->[$ar->[0]{'key'}] >>. (F) You said something like C, which Perl can't currently handle, because when it goes to restore the old value of whatever $ref pointed to after the scope of the local() is finished, it can't be sure -that $ref will still be a reference. +that $ref will still be a reference. =item Can't locate %s @@ -891,7 +896,7 @@ or grep(). You can usually double the curlies to get the same effect though, because the inner curlies will be considered a block that loops once. See L. -=item Can't remove %s: %s, skipping file +=item Can't remove %s: %s, skipping file (S inplace) You requested an inplace edit without creating a backup file. Perl was unable to remove the original file to replace it with @@ -924,6 +929,14 @@ suidperl. temporary or readonly values) from a subroutine used as an lvalue. This is not allowed. +=item Can't return %s to lvalue scalar context + +(F) You tried to return a complete array or hash from an lvalue subroutine, +but you called the subroutine in a way that made Perl think you meant +to return only one value. You probably meant to write parentheses around +the call to the subroutine, which tell Perl that the call should be in +list context. + =item Can't return outside a subroutine (F) The return statement was executed in mainline code, that is, where @@ -1123,7 +1136,7 @@ workarounds. =item Copy method did not return a reference -(F) The method which overloads "=" is buggy. See +(F) The method which overloads "=" is buggy. See L. =item CORE::%s is not a keyword @@ -1166,13 +1179,13 @@ which case it indicates something else. (D deprecated) defined() is not usually useful on arrays because it checks for an undefined I value. If you want to see if the -array is empty, just use C for example. +array is empty, just use C for example. =item defined(%hash) is deprecated (D deprecated) defined() is not usually useful on hashes because it checks for an undefined I value. If you want to see if the hash -is empty, just use C for example. +is empty, just use C for example. =item Delimiter for here document is too long @@ -1387,7 +1400,7 @@ name. =item flock() on closed filehandle %s (W closed) The filehandle you're attempting to flock() got itself closed -some time before now. Check your logic flow. flock() operates on +some time before now. Check your control flow. flock() operates on filehandles. Are you attempting to call flock() on a dirhandle by the same name? @@ -1667,7 +1680,7 @@ shows in the regular expression about where the problem was discovered. (W syntax) You've run afoul of the rule that says that any list operator followed by parentheses turns into a function, with all the list -operators arguments found inside the parentheses. See +operators arguments found inside the parentheses. See L. =item Invalid %s attribute: %s @@ -1720,6 +1733,11 @@ silently ignored. (F) Your machine apparently doesn't implement ioctl(), which is pretty strange for a machine that supports C. +=item ioctl() on unopened %s + +(W unopened) You tried ioctl() on a filehandle that was never opened. +Check you control flow and number of arguments. + =item `%s' is not a code reference (W) The second (fourth, sixth, ...) argument of overload::constant needs @@ -1775,7 +1793,7 @@ instead on the filehandle.) values cannot be returned in subroutines used in lvalue context. See L. -=item Lookbehind longer than %d not implemented before << HERE in reges m/%s/ +=item Lookbehind longer than %d not implemented before << HERE %s (F) There is currently a limit on the length of string which lookbehind can handle. This restriction may be eased in a future release. The << HERE shows in @@ -1897,7 +1915,7 @@ is aliased to a constant in the look I: $x = 1; foreach my $n ($x, 2) { $n *= 2; # modifies the $x, but fails on attempt to modify the 2 - } + } =item Modification of non-creatable array value attempted, %s @@ -2277,9 +2295,9 @@ the buffer and zero pad the new area. =item -%s on unopened filehandle %s (W unopened) You tried to invoke a file test operator on a filehandle -that isn't open. Check your logic. See also L. +that isn't open. Check your control flow. See also L. -=item %s() on unopened %s %s +=item %s() on unopened %s (W unopened) An I/O operation was attempted on a filehandle that was never initialized. You need to do an open(), a sysopen(), or a socket() @@ -2395,23 +2413,19 @@ reference. (P) We popped the context stack to an eval context, and then discovered it wasn't an eval context. -=item panic: do_match +=item panic: pp_match (P) The internal pp_match() routine was called with invalid operational data. -=item panic: do_split - -(P) Something terrible went wrong in setting up for the split. - =item panic: do_subst (P) The internal pp_subst() routine was called with invalid operational data. -=item panic: do_trans +=item panic: do_trans_%s -(P) The internal do_trans() routine was called with invalid operational +(P) The internal do_trans routines were called with invalid operational data. =item panic: frexp @@ -2503,6 +2517,10 @@ and freeing temporaries and lexicals from. (P) The foreach iterator got called in a non-loop context frame. +=item panic: pp_split + +(P) Something terrible went wrong in setting up for the split. + =item panic: realloc (P) Something requested a negative number of bytes of realloc. @@ -2537,7 +2555,7 @@ was string. =item panic: utf16_to_utf8: odd bytelen (P) Something tried to call utf16_to_utf8 with an odd (as opposed -to even) byte length. +to even) byte length. =item Parentheses missing around "%s" list @@ -2584,6 +2602,22 @@ the problem, however, you will get the same error message each time you run Perl. How to really fix the problem can be found in L section B. +=item perlio: argument list not closed for layer "%s" + +(S) When pushing a layer with arguments onto the Perl I/O system you forgot +the ) that closes the argument list. (Layers take care of transforming +data between external and internal representations.) Perl stopped parsing +the layer list at this point and did not attempt to push this layer. +If your program didn't explicitly request the failing operation, it may be +the result of the value of the environment variable PERLIO. + +=item perlio: invalid separator character %s in attribute list + +(S) When pushing layers onto the Perl I/O system, something other than a +colon or whitespace was seen between the elements of an layer list. +If the previous attribute had a parenthesised parameter list, perhaps that +list was terminated too soon. + =item perlio: unknown layer "%s" (S) An attempt was made to push an unknown layer onto the Perl I/O @@ -2734,12 +2768,12 @@ See Server error. =item printf() on closed filehandle %s (W closed) The filehandle you're writing to got itself closed sometime -before now. Check your logic flow. +before now. Check your control flow. =item print() on closed filehandle %s (W closed) The filehandle you're printing on got itself closed sometime -before now. Check your logic flow. +before now. Check your control flow. =item Process terminated by SIG%s @@ -2760,7 +2794,7 @@ declared or defined with a different function prototype. {min,max} construct. The << HERE shows in the regular expression about where the problem was discovered. See L. -=item Quantifier unexpected on zero-length expression before << HERE in regex m/%s/ +=item Quantifier unexpected on zero-length expression before << HERE %s (W regexp) You applied a regular expression quantifier in a place where it makes no sense, such as on a zero-width assertion. Try putting the @@ -2778,7 +2812,7 @@ by prepending "0" to your numbers. =item readline() on closed filehandle %s (W closed) The filehandle you're reading from got itself closed sometime -before now. Check your logic flow. +before now. Check your control flow. =item Reallocation too large: %lx @@ -2901,6 +2935,13 @@ as a list, you need to look into how references work, because Perl will not magically convert between scalars and lists for you. See L. +=item Scalars leaked: %d + +(P) Something went wrong in Perl's internal bookkeeping of scalars: +not all scalar variables were deallocated by the time Perl exited. +What this usually indicates is a memory leak, which is of course bad, +especially if the Perl program is intended to be long-running. + =item Script is not setuid/setgid in suidperl (F) Oddly, the suidperl program was invoked on a script without a setuid @@ -2943,7 +2984,7 @@ scalar that had previously been marked as free. =item send() on closed socket %s (W closed) The socket you're sending to got itself closed sometime -before now. Check your logic flow. +before now. Check your control flow. =item Sequence (? incomplete before << HERE mark in regex m/%s/ @@ -2951,22 +2992,22 @@ before now. Check your logic flow. shows in the regular expression about where the problem was discovered. See L. -=item Sequence (?{...}) not terminated or not {}-balanced in regex m/%s/ +=item Sequence (?{...}) not terminated or not {}-balanced in %s (F) If the contents of a (?{...}) clause contains braces, they must balance for Perl to properly detect the end of the clause. See L. -=item Sequence (?%s...) not implemented before << HERE mark in regex m/%s/ +=item Sequence (?%s...) not implemented before << HERE mark in %s (F) A proposed regular expression extension has the character reserved but has not yet been written. The << HERE shows in the regular expression about where the problem was discovered. See L. -=item Sequence (?%s...) not recognized before << HERE mark in regex m/%s/ +=item Sequence (?%s...) not recognized before << HERE mark in %s (F) You used a regular expression extension that doesn't make sense. The << HERE shows in the regular expression about -where the problem was discovered. +where the problem was discovered. See L. =item Sequence (?#... not terminated in regex m/%s/ @@ -3153,7 +3194,7 @@ assignment or as a subroutine argument for example). (F) Your Perl was compiled with B<-D>SETUID_SCRIPTS_ARE_SECURE_NOW, but a version of the setuid emulator somehow got run anyway. -=item Switch (?(condition)... contains too many branches before << HERE in regex m/%s/ +=item Switch (?(condition)... contains too many branches before << HE%s (F) A (?(condition)if-clause|else-clause) construct can have at most two branches (the if-clause and the else-clause). If you want one or both to @@ -3218,7 +3259,7 @@ unconfigured. Consult your system support. =item syswrite() on closed filehandle %s (W closed) The filehandle you're writing to got itself closed sometime -before now. Check your logic flow. +before now. Check your control flow. =item Target of goto is too deeply nested @@ -3539,8 +3580,7 @@ bad switch on your behalf.) (W newline) A file operation was attempted on a filename, and that operation failed, PROBABLY because the filename contained a newline, -PROBABLY because you forgot to chop() or chomp() it off. See -L. +PROBABLY because you forgot to chomp() it off. See L. =item Unsupported directory function "%s" called @@ -3700,6 +3740,15 @@ old way has bad side effects. (D deprecated) This was an ill-advised attempt to emulate a poorly defined B feature. Use an explicit printf() or sprintf() instead. +=item Use of reference "%s" in array index + +(W) You tried to use a reference as an array index; this probably +isn't what you mean, because references tend to be huge numbers which +take you out of memory, and so usually indicates programmer error. + +If you really do mean it, explicitly numify your reference, like so: +C<$array[0+$ref]> + =item Use of reserved word "%s" is deprecated (D deprecated) The indicated bareword is a reserved word. Future @@ -3803,7 +3852,7 @@ anonymous, using the C syntax. When inner anonymous subs that reference variables in outer subroutines are called or referenced, they are automatically rebound to the current values of such variables. -=item Variable length lookbehind not implemented before << HERE in regex m/%s/ +=item Variable length lookbehind not implemented before << HERE in %s (F) Lookbehind is allowed only for subexpressions whose length is fixed and known at compile time. The << HERE shows in the regular expression about where @@ -3852,7 +3901,7 @@ So put in parentheses to say what you really mean. =item write() on closed filehandle %s (W closed) The filehandle you're writing to got itself closed sometime -before now. Check your logic flow. +before now. Check your control flow. =item X outside of string