X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=a6a723cc86342a8e4fd384b6d0dc2a892f2e0b23;hb=45447e0de895cbfedb52c0fe32f88c2291b06536;hp=d7b902499871af86732cdfb9f9d67b0f8087a45b;hpb=f6b3007c38a92f48d086a19ea8682dd935b6d4ee;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index d7b9024..a6a723c 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -18,15 +18,24 @@ desperation): Optional warnings are enabled by using the B<-w> switch. Warnings may be captured by setting C<$SIG{__WARN__}> to a reference to a routine that will be called on each warning instead of printing it. See L. + Trappable errors may be trapped using the eval operator. See -L. +L. In almost all cases, warnings may be selectively +disabled or promoted to fatal errors using the C pragma. +See L. Some of these messages are generic. Spots that vary are denoted with a %s, just as in a printf format. Note that some messages start with a %s! -The symbols C<"%(-?@> sort before the letters, while C<[> and C<\> sort after. +Since the messages are listed in alphabetical order, the symbols +C<"%(-?@> sort before the letters, while C<[> and C<\> sort after. =over 4 +=item "my sub" not yet implemented + +(F) Lexically scoped subroutines are not yet implemented. Don't try that +yet. + =item "my" variable %s can't be in a package (F) Lexically scoped variables aren't in a package, so it doesn't make sense @@ -56,17 +65,64 @@ no useful value. See L. (F) The '!' is allowed in pack() and unpack() only after certain types. See L. +=item / cannot take a count + +(F) You had an unpack template indicating a counted-length string, +but you have also specified an explicit size for the string. +See L. + +=item / must be followed by a, A or Z + +(F) You had an unpack template indicating a counted-length string, +which must be followed by one of the letters a, A or Z +to indicate what sort of string is to be unpacked. +See L. + +=item / must be followed by a*, A* or Z* + +(F) You had a pack template indicating a counted-length string, +Currently the only things that can have their length counted are a*, A* or Z*. +See L. + +=item / must follow a numeric type + +(F) You had an unpack template that contained a '#', +but this did not follow some numeric unpack specification. +See L. + =item % may only be used in unpack (F) You can't pack a string by supplying a checksum, because the checksumming process loses information, and you can't go the other way. See L. +=item Repeat count in pack overflows + +(F) You can't specify a repeat count so large that it overflows +your signed integers. See L. + +=item Repeat count in unpack overflows + +(F) You can't specify a repeat count so large that it overflows +your signed integers. See L. + =item /%s/: Unrecognized escape \\%c passed through (W) 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. +C<'>-delimited regular expression. The character was understood literally. + +=item /%s/: Unrecognized escape \\%c in character class passed through + +(W) You used a backslash-character combination which is not recognized +by Perl inside character classes. The character was understood literally. + +=item /%s/ should probably be written as "%s" + +(W) You have used a pattern where Perl expected to find a string, +as in the first argument to C. Perl will treat the true +or false result of matching the pattern against $_ as the string, +which is probably not what you had in mind. =item %s (...) interpreted as function @@ -74,6 +130,16 @@ C<'>-delimited regular expression. by parentheses turns into a function, with all the list operators arguments found inside the parentheses. See L. +=item %s() called too early to check prototype + +(W) You've called a function that has a prototype before the parser saw a +definition or declaration for it, and Perl could not check that the call +conforms to the prototype. You need to either add an early prototype +declaration for the subroutine in question, or move the subroutine +definition ahead of the call to get proper prototype 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 %s argument is not a HASH element (F) The argument to exists() must be a hash element, such as @@ -126,6 +192,13 @@ regular expression engine didn't specifically check for that. See L. (S) The symbol in question was declared but somehow went out of scope before it could possibly have been used. +=item %s package attribute may clash with future reserved word: %s + +(W) A lowercase attribute name was used that had a package-specific handler. +That name might have a meaning to Perl itself some day, even though it +doesn't yet. Perhaps you should use a mixed-case attribute name, instead. +See L. + =item %s syntax OK (F) The final summary message when a C succeeds. @@ -249,7 +322,8 @@ imported with the C pragma). To silently interpret it as the Perl operator, use the C prefix on the operator (e.g. C) or by declaring the subroutine -to be an object method (see L). +to be an object method (see L +or L). =item Args must match #! line @@ -317,6 +391,12 @@ could indicate that SvREFCNT_dec() was called too many times, or that SvREFCNT_inc() was called too few times, or that the SV was mortalized when it shouldn't have been, or that memory has been corrupted. +=item Attempt to join self + +(F) You tried to join a thread from within itself, which is an +impossible task. You may be joining the wrong thread, or you may +need to move the join() to some other thread. + =item Attempt to pack pointer to temporary value (W) You tried to pass a temporary value (like the result of a @@ -380,6 +460,12 @@ is not the same as $var = 'myvar'; $sym = "mypack::$var"; +=item Bad realloc() ignored + +(S) An internal routine called realloc() on something that had never been +malloc()ed in the first place. Mandatory, but can be disabled by +setting environment variable C to 1. + =item Bad symbol for array (P) An internal request asked to add an array entry to something that @@ -426,11 +512,21 @@ already occurred. Since the intended environment for the C could not be guaranteed (due to the errors), and since subsequent code likely depends on its correct operation, Perl just gave up. +=item Binary number > 0b11111111111111111111111111111111 non-portable + +(W) The binary number you specified is larger than 2**32-1 +(4294967295) and therefore non-portable between systems. See +L for more on portability concerns. + =item bind() on closed fd (W) 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 Bit vector size > 32 non-portable + +(W) Using bit vector sizes larger than 32 is non-portable. + =item Bizarre copy of %s in %s (P) Perl detected an attempt to copy an internal value that is not copiable. @@ -595,9 +691,11 @@ They must have ordinary identifiers as names. from a deleted (but still opened) file. You have to say C<-i.bak>, or some such. -=item Can't do inplace edit: %s E 14 characters +=item Can't do inplace edit: %s would not be unique -(S) There isn't enough room in the filename to make a backup name for the file. +(S) Your filesystem does not support filenames longer than 14 +characters and Perl was unable to create a unique filename during +inplace editing with the B<-i> switch. The file was ignored. =item Can't do inplace edit: %s is not a regular file @@ -786,6 +884,11 @@ to exist. (F) You aren't allowed to assign to the item indicated, or otherwise try to change it, such as with an auto-increment. +=item Can't modify non-lvalue subroutine call + +(F) Subroutines meant to be used in lvalue context should be declared as +such, see L. + =item Can't modify nonexistent substring (P) The internal routine that does assignment to a substr() was handed @@ -844,10 +947,16 @@ pointers into them. You tried to redefine one such sort subroutine when it was currently active, which is not allowed. If you really want to do this, you should write C instead of C. +=item Can't remove %s: %s, skipping file + +(S) You requested an inplace edit without creating a backup file. Perl +was unable to remove the original file to replace it with the modified +file. The file was left unmodified. + =item Can't rename %s to %s: %s, skipping file -(S) The rename done by the B<-i> switch failed for some reason, probably because -you don't have write permission to the directory. +(S) The rename done by the B<-i> switch failed for some reason, +probably because you don't have write permission to the directory. =item Can't reopen input pipe (name: %s) in binary mode @@ -864,6 +973,12 @@ of suidperl. (F) The return statement was executed in mainline code, that is, where there was no subroutine call to return out of. See L. +=item Can't return %s from lvalue subroutine + +(F) Perl detected an attempt to return illegal lvalues (such +as temporary or readonly values) from a subroutine used as an lvalue. +This is not allowed. + =item Can't stat script "%s" (P) For some reason you can't fstat() the script even though you have @@ -1000,6 +1115,19 @@ there is no builtin with the name C. opposed to a subroutine reference): no such method callable via the package. If method name is C, this is an internal error. +=item Character class [:%s:] unknown + +(F) The class in the character class [: :] syntax is unknown. +See L. + +=item Character class syntax [%s] belongs inside character classes + +(W) The character class constructs [: :], [= =], and [. .] go +I character classes, the [] are part of the construct, +for example: /[012[:alpha:]345]/. Note that [= =] and [. .] +are not currently implemented; they are simply placeholders for +future extensions. + =item Character class syntax [. .] is reserved for future extensions (W) Within regular expression character classes ([]) the syntax beginning @@ -1008,14 +1136,6 @@ If you need to represent those character sequences inside a regular expression character class, just quote the square brackets with the backslash: "\[." and ".\]". -=item Character class syntax [: :] is reserved for future extensions - -(W) Within regular expression character classes ([]) the syntax beginning -with "[:" and ending with ":]" is reserved for future extensions. -If you need to represent those character sequences inside a regular -expression character class, just quote the square brackets with the -backslash: "\[:" and ":\]". - =item Character class syntax [= =] is reserved for future extensions (W) Within regular expression character classes ([]) the syntax @@ -1080,6 +1200,16 @@ workarounds. inlining. See L for commentary and workarounds. +=item constant(%s): %%^H is not localized + +(F) When setting compile-time-lexicalized hash %^H one should set the +corresponding bit of $^H as well. + +=item constant(%s): %s + +(F) Compile-time-substitutions (such as overloaded constants and +character names) were not correctly set up. + =item Copy method did not return a reference (F) The method which overloads "=" is buggy. See L. @@ -1123,6 +1253,10 @@ just use C for example. C is too long for Perl to handle. You have to be seriously twisted to write code that triggers this error. +=item Did not produce a valid header + +See Server error. + =item Did you mean &%s instead? (W) You probably referred to an imported subroutine &FOO as $FOO or some such. @@ -1149,6 +1283,10 @@ to define the subroutine or package before the current location. You can use an empty "sub foo;" or "package FOO;" to enter a "forward" declaration. +=item Document contains no data + +See Server error. + =item Don't know how to handle magic of type '%s' (P) The internal handling of magical variables has been cursed. @@ -1247,6 +1385,13 @@ the effect of blessing the reference into the package main. This is usually not what you want. Consider providing a default target package, e.g. bless($ref, $p || 'MyPackage'); +=item false [] range "%s" in regexp + +(W) A character class range must start and end at a literal character, not +another character class like C<\d> or C<[:alpha:]>. The "-" in your false +range is interpreted as a literal "-". Consider quoting the "-", "\-". +See L. + =item Fatal VMS error at %s, line %d (P) An error peculiar to VMS. Something untoward happened in a VMS system @@ -1265,7 +1410,7 @@ PDP-11 or something? You need to do an open() or a socket() call, or call a constructor from the FileHandle package. -=item Filehandle %s opened for only input +=item Filehandle %s opened only for input (W) 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 @@ -1273,12 +1418,12 @@ intended it to be a read-write filehandle, you needed to open it with you intended only to write the file, use "E" or "EE". See L. -=item Filehandle opened for only input +=item Filehandle %s opened only for output -(W) 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 +(W) 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 "+E" or "+E" or "+EE" instead of with "E" or nothing. If -you intended only to write the file, use "E" or "EE". See +you intended only to read from the file, use "E". See L. =item Final $ should be \$ or $name @@ -1300,7 +1445,7 @@ the name. (W) You redefined a format. To suppress this warning, say { - local $^W = 0; + no warnings; eval "format NAME =..."; } @@ -1370,6 +1515,12 @@ an emergency basis to prevent a core dump. (D) Really old Perl let you omit the % on hash names in some spots. This is now heavily deprecated. +=item Hexadecimal number > 0xffffffff non-portable + +(W) The hexadecimal number you specified is larger than 2**32-1 +(4294967295) and therefore non-portable between systems. See +L for more on portability concerns. + =item Identifier too long (F) Perl limits identifiers (names for variables, functions, etc.) to @@ -1421,7 +1572,7 @@ don't take to this kindly. =item Illegal binary digit %s -(F) You used a digit other than 0 and 1 in a binary number. +(F) You used a digit other than 0 or 1 in a binary number. =item Illegal octal digit %s @@ -1437,12 +1588,17 @@ Interpretation of the binary number stopped before the offending digit. (W) You may have tried to use an 8 or 9 in a octal number. Interpretation of the octal number stopped before the 8 or 9. -=item Illegal hex digit %s ignored +=item Illegal hexadecimal digit %s ignored -(W) You may have tried to use a character other than 0 - 9 or A - F in a -hexadecimal number. Interpretation of the hexadecimal number stopped +(W) You may have tried to use a character other than 0 - 9 or A - F, a - f +in a hexadecimal number. Interpretation of the hexadecimal number stopped before the illegal character. +=item Illegal number of bits in vec + +(F) The number of bits in vec() (the third argument) must be a power of +two from 1 to 32 (or 64, if your platform supports that). + =item Illegal switch in PERL5OPT: %s (X) The PERL5OPT environment variable may only be used to set the @@ -1484,14 +1640,15 @@ known value, using trustworthy data. See L. =item Integer overflow in %s number -(S) The literal hex, octal or binary number you have specified is -too big for your architecture. On a 32-bit architecture the largest -literal hex, octal or binary number representable without overflow -is 0xFFFFFFFF, 037777777777, or 0b11111111111111111111111111111111 -respectively. Note that Perl transparently promotes decimal literals -to a floating point representation internally--subject to loss of -precision errors in subsequent operations--so this limit usually -doesn't apply to decimal literals. +(W) The hexadecimal, octal or binary number you have specified either +as a literal or as an argument to hex() or oct() is too big for your +architecture, and has been converted to a floating point number. On a +32-bit architecture the largest hexadecimal, octal or binary number +representable without overflow is 0xFFFFFFFF, 037777777777, or +0b11111111111111111111111111111111 respectively. Note that Perl +transparently promotes all numbers to a floating point representation +internally--subject to loss of precision errors in subsequent +operations. =item Internal inconsistency in tracking vforks @@ -1525,7 +1682,17 @@ rebuild Perl. (P) Something went badly awry in the regular expression parser. -=item invalid [] range in regexp +=item Invalid %s attribute: %s + +The indicated attribute for a subroutine or variable was not recognized +by Perl or by a user-supplied handler. See L. + +=item Invalid %s attributes: %s + +The indicated attributes for a subroutine or variable were not recognized +by Perl or by a user-supplied handler. See 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. @@ -1535,6 +1702,13 @@ greater than the maximum character. See L. (W) Perl does not understand the given format conversion. See L. +=item Invalid separator character %s in attribute list + +(F) Something other than a comma or whitespace was seen between the +elements of an attribute list. If the previous attribute +had a parenthesised parameter list, perhaps that list was terminated +too soon. See L. + =item Invalid type in pack: '%s' (F) The given character is not a valid pack type. See L. @@ -1584,11 +1758,21 @@ effective uids or gids failed. (W) You tried to do a listen on a closed socket. Did you forget to check the return value of your socket() call? See L. +=item Lvalue subs returning %s not implemented yet + +(F) Due to limitations in the current implementation, array and hash +values cannot be returned in subroutines used in lvalue context. +See L. + =item Method for operation %s not found in package %s during blessing (F) An attempt was made to specify an entry in an overloading table that doesn't resolve to a valid subroutine. See L. +=item Method %s not permitted + +See Server error. + =item Might be a runaway multi-line %s string starting on line %d (S) An advisory indicating that the previous error may have been caused @@ -1605,6 +1789,11 @@ ended earlier on the current line. mentioned with the $ in Perl, unlike in the shells, where it can vary from one line to the next. +=item Missing %sbrace%s on \N{} + +(F) Wrong syntax of character name literal C<\N{charname}> within +double-quotish context. + =item Missing comma after first argument to %s function (F) While certain functions allow you to specify a filehandle or an @@ -1661,12 +1850,17 @@ be created for some peculiar reason. (W) Multidimensional arrays aren't written like C<$foo[1,2,3]>. They're written like C<$foo[1][2][3]>, as in C. +=item Missing name in "my sub" + +(F) The reserved syntax for lexically scoped subroutines requires that they +have a name with which they can be found. + =item Name "%s::%s" used only once: possible typo (W) Typographical errors often show up as unique variable names. If you had a good reason for having a unique name, then just mention -it again somehow to suppress the message. The C pragma is -provided for just this purpose. +it again somehow to suppress the message. The C declaration is +provided for this purpose. =item Negative length @@ -1786,13 +1980,13 @@ your system. (F) The argument to B<-I> must follow the B<-I> immediately with no intervening space. -=item No such array field +=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 field "%s" in variable %s of type %s +=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 @@ -1916,6 +2110,14 @@ about 250 characters. You've exceeded that length. Future versions of Perl are likely to eliminate this arbitrary limitation. In the meantime, try using scientific notation (e.g. "1e6" instead of "1_000_000"). +=item Octal number > 037777777777 non-portable + +(W) The octal number you specified is larger than 2**32-1 (4294967295) +and therefore non-portable between systems. See L for more +on portability concerns. + +See also L for writing portable code. + =item Odd number of elements in hash assignment (S) You specified an odd number of elements to initialize a hash, which @@ -1952,6 +2154,12 @@ to use an operator, but this is highly likely to be incorrect. For example, if you say "*foo *foo" it will be interpreted as if you said "*foo * 'foo'". +=item Out of memory! + +(X) The malloc() function returned 0, indicating there was insufficient +remaining memory (or virtual memory) to satisfy the request. Perl +has no option but to exit immediately. + =item Out of memory for yacc stack (F) The yacc parser wanted to grow its stack so it could continue parsing, @@ -2174,9 +2382,14 @@ perspective, it's probably not what you intended. =item POSIX getpgrp can't take an argument -(F) Your C compiler uses POSIX getpgrp(), which takes no argument, unlike +(F) Your system has POSIX getpgrp(), which takes no argument, unlike the BSD version, which takes a pid. +=item Possible Y2K bug: %s + +(W) You are concatenating the number 19 with another number, which +could be a potential Year 2000 problem. + =item Possible attempt to put comments in qw() list (W) qw() lists contain items separated by whitespace; as with literal @@ -2244,6 +2457,10 @@ and list operators. (The old open was a little of both.) You must put parentheses around the filehandle, or use the new "or" operator instead of "||". +=item Premature end of script headers + +See Server error. + =item print on closed filehandle %s (W) The filehandle you're printing on got itself closed sometime before now. @@ -2274,11 +2491,16 @@ 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 E%sE +=item Read on closed filehandle %s (W) The filehandle you're reading from got itself closed sometime before now. Check your logic flow. +=item realloc() of freed memory ignored + +(S) An internal routine called realloc() on something that had already +been freed. + =item Reallocation too large: %lx (F) You can't allocate more than 64K on an MS-DOS machine. @@ -2437,7 +2659,12 @@ See L. =item Server error -Also known as "500 Server error". +This is the error message generally seen in a browser window when trying +to run a CGI program (including SSI) over the web. The actual error +text varies widely from server to server. The most frequently-seen +variants are "500 Server error", "Method (something) not permitted", +"Document contains no data", "Premature end of script headers", and +"Did not produce a valid header". B. @@ -2468,6 +2695,11 @@ think so. the seteuid() system call (or equivalent), or at least Configure didn't think so. +=item setpgrp can't take arguments + +(F) Your system has the setpgrp() from BSD 4.2, which takes no arguments, +unlike POSIX setpgid(), which takes a process ID and process group ID. + =item setrgid() not implemented (F) You tried to assign to C<$(>, and your operating system doesn't support @@ -2552,7 +2784,7 @@ may break this. (W) You redefined a subroutine. To suppress this warning, say { - local $^W = 0; + no warnings; eval "sub name { ... }"; } @@ -2681,7 +2913,7 @@ will deny it. if the last stat that wrote to the stat buffer already went past the symlink to get to the real file. Use an actual filename instead. -=item This Perl can't reset CRTL eviron elements (%s) +=item This Perl can't reset CRTL environ elements (%s) =item This Perl can't set CRTL environ elements (%s=%s) @@ -2846,6 +3078,12 @@ representative, who probably put it there in the first place. (F) There are no byte-swapping functions for a machine with this byte order. +=item Unknown open() mode '%s' + +(F) The second argument of 3-argument open() is not among the list +of valid modes: C>, C>, CE>, C<+L>, +C<+L>, C<+EE>, C<-|>, C<|->. + =item Unknown process %x sent message to prime_env_iter: %s (P) An error peculiar to VMS. Perl was reading values for %ENV before @@ -2935,6 +3173,20 @@ a term, so it's looking for the corresponding right angle bracket, and not finding it. Chances are you left some needed parentheses out earlier in the line, and you really meant a "less than". +=item Unterminated attribute parameter in attribute list + +(F) The lexer saw an opening (left) parenthesis character while parsing an +attribute list, but the matching closing (right) parenthesis +character was not found. You may need to add (or remove) a backslash +character to get your parentheses to balance. See L. + +=item Unterminated attribute list + +(F) The lexer found something other than a simple identifier at the start +of an attribute, and it wasn't a semicolon or the start of a +block. Perhaps you terminated the parameter list of the previous attribute +too soon. See L. + =item Use of $# is deprecated (D) This was an ill-advised attempt to emulate a poorly defined B feature. @@ -3119,6 +3371,12 @@ variables. of Perl. Check the #! line, or manually feed your script into Perl yourself. +=item Version number must be a constant number + +(P) The attempt to translate a C statement into +its equivalent C block found an internal inconsistency with +the version number. + =item perl: warning: Setting locale failed. (S) The whole warning message will look something like: @@ -3169,7 +3427,7 @@ but in actual fact, you got So put in parentheses to say what you really mean. -=item Write on closed filehandle +=item Write on closed filehandle %s (W) The filehandle you're writing to got itself closed sometime before now. Check your logic flow.