X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=e09df2bfb4472c670e3cdf6b78ef995233d8ee0d;hb=95e3e3529702f84120414f082fc9ad3968747f3f;hp=a27dde7e306c414d772bdd8f74b5765b6fa6fd9e;hpb=7ea3cd407b6ec2a3e424bdfbc486b6e01d6d28bd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index a27dde7..e09df2b 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 @@ -628,6 +628,13 @@ found in the PATH did not have correct permissions. (F) A string of a form C was given to prototype(), but there is no builtin with the name C. +=item Can't find %s character property "%s" + +(F) You used C<\p{}> or C<\P{}> but the character property by that name +could not be find. Maybe you mispelled the name of the property +(remember that the names of character properties consist only of +alphanumeric characters), or maybe you forgot the C or C prefix? + =item Can't find label %s (F) You said to goto a label that isn't mentioned anywhere that it's @@ -656,7 +663,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 @@ -759,7 +766,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 @@ -868,7 +875,7 @@ the command line for writing. redirection, and couldn't open the pipe into which to send data destined for stdout. -=item Can't open perl script "%s": %s +=item Can't open perl script%s: %s (F) The script you specified can't be opened for the indicated reason. @@ -896,7 +903,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 @@ -929,6 +936,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 @@ -986,12 +1001,18 @@ calling sv_upgrade. (F) A value used as either a hard reference or a symbolic reference must be a defined value. This helps to delurk some insidious errors. +=item Can't use anonymous symbol table for method lookup + +(P) The internal routine that does method lookup was handed a symbol +table that doesn't have a name. Symbol tables can become anonymous +for example by undefining stashes: C. + =item Can't use bareword ("%s") as %s ref while "strict refs" in use (F) Only hard references are allowed by "strict refs". Symbolic references are disallowed. See L. -=item Can't use %%! because Errno.pm is not available +=item Can't use %! because Errno.pm is not available (F) The first time the %! hash is used, perl automatically loads the Errno.pm module. The Errno module is expected to tie the %! hash to @@ -1128,7 +1149,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 @@ -1171,13 +1192,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 @@ -1672,7 +1693,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 @@ -1693,7 +1714,9 @@ L. =item invalid [] range "%s" in regexp (F) The range specified in a character class had a minimum character -greater than the maximum character. See L. +greater than the maximum character. One possibility is that you +forgot the C<{}> from your ending C<\x{}> - C<\x> without the curly +braces can go only up to C. See L. =item invalid [] range "%s" in transliteration operator @@ -1730,6 +1753,11 @@ strange for a machine that supports C. (W unopened) You tried ioctl() on a filehandle that was never opened. Check you control flow and number of arguments. +=item IO::Socket::atmark not implemented on this architecture + +(F) Your machine doesn't implement the sockatmark() functionality, +neither as a system call or an ioctl call (SIOCATMARK). + =item `%s' is not a code reference (W) The second (fourth, sixth, ...) argument of overload::constant needs @@ -1785,7 +1813,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 @@ -1844,7 +1872,10 @@ ended earlier on the current line. =item Misplaced _ in number -(W syntax) An underline in a decimal constant wasn't on a 3-digit boundary. +(W syntax) An underscore (underbar) in a numeric constant either +immediately followed an earlier underscore, or an underscore began or +ended a numeric constant, or its fractional part (in the case of +decimal constants) began or ended with an underscore. =item Missing %sbrace%s on \N{} @@ -1907,7 +1938,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 @@ -2405,23 +2436,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 @@ -2513,6 +2540,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. @@ -2547,7 +2578,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 @@ -2594,6 +2625,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 @@ -2770,7 +2817,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 @@ -2911,6 +2958,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 @@ -2961,22 +3015,22 @@ before now. Check your control 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/ @@ -3163,7 +3217,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 @@ -3549,8 +3603,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 @@ -3643,10 +3696,27 @@ a scalar context, the comma is treated like C's comma operator, which throws away the left argument, which is not what you want. See L for more on this. +This warning will not be issued for numerical constants equal to 0 or 1 +since they are often used in statements like + + 1 while sub_with_side_effects() ; + +String constants that would normally evaluate to 0 or 1 are warned +about. + =item Useless use of "re" pragma (W) You did C without any arguments. That isn't very useful. +=item Useless use of %s with no values + +(W syntax) You used the push() or unshift() function with no arguments +apart from the array, like C or C. That won't +usually have any effect on the array, so is completely useless. It's +possible in principle that push(@tied_array) could have some effect +if the array is tied to a class which implements a PUSH method. If so, +you can write it as C to avoid this warning. + =item "use" not allowed in expression (F) The "use" keyword is recognized and executed at compile time, and @@ -3710,6 +3780,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 @@ -3813,7 +3892,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 @@ -3857,7 +3936,7 @@ So put in parentheses to say what you really mean. =item Wide character in %s -(F) Perl met a wide character (>255) when it wasn't expecting one. +(W utf8) Perl met a wide character (>255) when it wasn't expecting one. =item write() on closed filehandle %s