X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=c0eb857eac09b0feb02b2d6a3937e0fbeb4e4a31;hb=26f28346883474bb3e28ea6c2c3205eb54147457;hp=a138bc6645c8d8f92eeb7f993bd16dfde28e2a02;hpb=54310121b442974721115f93666234a200f5c7e4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index a138bc6..c0eb857 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -23,7 +23,7 @@ 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. +The symbols C<"%(-?@> sort before the letters, while C<[> and C<\> sort after. =over 4 @@ -143,6 +143,12 @@ Perl yourself. instead of Perl. Check the #! line, or manually feed your script into Perl yourself. +=item (Missing semicolon on previous line?) + +(S) This is an educated guess made in conjunction with the message "%s +found where operator expected". Don't automatically put a semicolon on +the previous line just because you saw this message. + =item B<-P> not allowed for setuid/setgid script (F) The script would have to be opened by the C preprocessor by name, @@ -153,6 +159,12 @@ which provides a race condition that breaks security. (F) Perl can't peek at the stdio buffer of filehandles when it doesn't know about your kind of stdio. You'll have to use a filename instead. +=item C<-p> destination: %s + +(F) An error occurred during the implicit output invoked by the C<-p> +command-line switch. (This output goes to STDOUT unless you've +redirected it with select().) + =item 500 Server error See Server error. @@ -543,8 +555,19 @@ mention "perl" on the #! line somewhere. =item Can't execute %s +(F) You used the B<-S> switch, but the copies of the script to execute found +in the PATH did not have correct permissions. + +=item Can't find %s on PATH, '.' not in PATH + (F) You used the B<-S> switch, but the script to execute could not be found -in the PATH, or at least not with the correct permissions. +in the PATH, or at least not with the correct permissions. The script +exists in the current directory, but PATH prohibits running it. + +=item Can't find %s on PATH + +(F) You used the B<-S> switch, but the script to execute could not be found +in the PATH. =item Can't find label %s @@ -597,12 +620,12 @@ call for another. It can't manufacture one out of whole cloth. In general you should be calling it out of only an AUTOLOAD routine anyway. See L. -=item Can't localize a reference +=item Can't localize through a reference -(F) You said something like C, which is not allowed because -the compiler can't determine whether $ref will end up pointing to anything -with a symbol table entry, and a symbol table entry is necessary to -do a local. +(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. =item Can't localize lexical variable %s @@ -611,9 +634,16 @@ 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 locate auto/%s.al in @INC + +(F) A function (or method) was called in a package which allows autoload, +but there is no function to autoload. Most probable causes are a misprint +in a function/method name or a failure to C the file, say, by +doing C. + =item Can't locate %s in @INC -(F) You said to do (or require, or use) a file that couldn't be found in +(F) You said to do (or require, or use) a file that couldn't be found in any of the libraries mentioned in @INC. Perhaps you need to set the PERL5LIB or PERL5OPT environment variable to say where the extra library is, or maybe the script needs to add the library name to @INC. Or maybe @@ -630,6 +660,10 @@ method, nor does any of its base classes. See L. (W) The @ISA array contained the name of another package that doesn't seem to exist. +=item Can't make list assignment to \%ENV on this system + +(F) List assignment to %ENV is not supported on some systems, notably VMS. + =item Can't mktemp() (F) The mktemp() routine failed for some reason while trying to process @@ -652,8 +686,11 @@ buffer. =item Can't open %s: %s -(S) An inplace edit couldn't open the original file for the indicated reason. -Usually this is because you don't have read permission for the file. +(S) The implicit opening of a file through use of the CE> +filehandle, either implicitly under the C<-n> or C<-p> command-line +switches, or explicitly, failed for the indicated reason. Usually this +is because you don't have read permission for a file which you named +on the command line. =item Can't open bidirectional pipe @@ -688,6 +725,13 @@ couldn't open the pipe into which to send data destined for stdout. (F) The script you specified can't be opened for the indicated reason. +=item Can't redefine active sort subroutine %s + +(F) Perl optimizes the internal handling of sort subroutines and keeps +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 rename %s to %s: %s, skipping file (S) The rename done by the B<-i> switch failed for some reason, probably because @@ -842,6 +886,12 @@ to 01411. Octal constants are introduced with a leading 0 in Perl, as in C. (W) You tried to close a filehandle that was never opened. +=item Compilation failed in require + +(F) Perl could not compile a file specified in a C statement. +Perl uses this generic message when none of the errors that it encountered +were severe enough to halt compilation immediately. + =item connect() on closed fd (W) You tried to do a connect on a closed socket. Did you forget to check @@ -880,10 +930,16 @@ a valid magic number. =item Deep recursion on subroutine "%s" (W) This subroutine has called itself (directly or indirectly) 100 -times than it has returned. This probably indicates an infinite +times more than it has returned. This probably indicates an infinite recursion, unless you're writing strange benchmark programs, in which case it indicates something else. +=item Delimiter for here document is too long + +(F) In a here document construct like CEFOO>, the label +C is too long for Perl to handle. You have to be seriously +twisted to write code that triggers this error. + =item Did you mean &%s instead? (W) You probably referred to an imported subroutine &FOO as $FOO or some such. @@ -943,6 +999,13 @@ single form when it must operate on them directly. Either you've passed an invalid file specification to Perl, or you've found a case the conversion routines don't handle. Drat. +=item Excessively long <> operator + +(F) The contents of a <> operator may not exceed the maximum size of a +Perl identifier. If you're just trying to glob a long list of +filenames, try using the glob() operator, or put the filenames into a +variable and glob that. + =item Execution of %s aborted due to compilation errors (F) The final summary message when a Perl compilation fails. @@ -1092,6 +1155,13 @@ 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 Identifier too long + +(F) Perl limits identifiers (names for variables, functions, etc.) to +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 Ill-formed logical name |%s| in prime_env_iter (W) A warning peculiar to VMS. A logical name was encountered when preparing @@ -1203,6 +1273,17 @@ and execute the specified command. (P) Something went badly wrong in the regular expression parser. +=item internal error: glob failed + +(P) Something went wrong with the external program(s) used for C +and C*.cE>. This may mean that your csh (C shell) is +broken. If so, you should change all of the csh-related variables in +config.sh: If you have tcsh, make the variables refer to it as if it +were csh (e.g. C); otherwise, make them all +empty (except that C should be C<'undef'>) so that Perl will +think csh is missing. In either case, after editing config.sh, run +C<./Configure -S> and rebuild Perl. + =item internal urp in regexp at /%s/ (P) Something went badly awry in the regular expression parser. @@ -1212,6 +1293,19 @@ and execute the specified command. (F) The range specified in a character class had a minimum character greater than the maximum character. See L. +=item Invalid conversion in %s: "%s" + +(W) Perl does not understand the given format conversion. +See L. + +=item Invalid type in pack: '%s' + +(F) The given character is not a valid pack type. See L. + +=item Invalid type in unpack: '%s' + +(F) The given character is not a valid unpack type. See L. + =item ioctl is not implemented (F) Your machine apparently doesn't implement ioctl(), which is pretty @@ -1281,12 +1375,6 @@ found where operator expected". Often the missing operator is a comma. As a general rule, you'll find it's missing near the place you were last editing. -=item Missing semicolon on previous line? - -(S) This is an educated guess made in conjunction with the message "%s -found where operator expected". Don't automatically put a semicolon on -the previous line just because you saw this message. - =item Modification of a read-only value attempted (F) You tried, directly or indirectly, to change the value of a @@ -1549,6 +1637,13 @@ supplied it an uninitialized value. See L. (P) The internal pattern matching routines are out of their gourd. +=item Number too long + +(F) Perl limits the representation of decimal numbers in programs to about +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 Odd number of elements in hash list (S) You specified an odd number of elements to a hash list, which is odd, @@ -1647,6 +1742,10 @@ it wasn't an eval context. (P) The internal do_trans() routine was called with invalid operational data. +=item panic: frexp + +(P) The library function frexp() failed, making printf("%f") impossible. + =item panic: goto (P) We popped the context stack to a context with the specified label, @@ -1970,10 +2069,10 @@ or setgid bit set. This doesn't make much sense. (F) The lexer couldn't find the final delimiter of a // or m{} construct. Remember that bracketing delimiters count nesting level. -=item seek() on unopened file +=item %sseek() on unopened file -(W) You tried to use the seek() function on a filehandle that was either -never opened or has since been closed. +(W) You tried to use the seek() or sysseek() function on a filehandle that +was either never opened or has since been closed. =item select not implemented @@ -1998,6 +2097,10 @@ or possibly some other missing operator, such as a comma. (W) The filehandle you're sending to got itself closed sometime before now. Check your logic flow. +=item Sequence (? incomplete +(F) A regular expression ended with an incomplete extension (?. +See L. + =item Sequence (?#... not terminated (F) A regular expression comment must be terminated by a closing @@ -2052,7 +2155,7 @@ think so. =item setruid() not implemented -(F) You tried to assign to C<$>, and your operating system doesn't support +(F) You tried to assign to C<$E>, and your operating system doesn't support the setruid() system call (or equivalent), or at least Configure didn't think so. @@ -2143,9 +2246,11 @@ construct. Remember that bracketing delimiters count nesting level. =item substr outside of string -(W) You tried to reference a substr() that pointed outside of a string. -That is, the absolute value of the offset was larger than the length of -the string. See L. +(S),(W) You tried to reference a substr() that pointed outside of a +string. That is, the absolute value of the offset was larger than the +length of the string. See L. This warning is +mandatory if substr is used in an lvalue context (as the left hand side +of an assignment or as a subroutine argument for example). =item suidperl is no longer needed since %s @@ -2189,6 +2294,11 @@ or "msg". See L, for example. (W) The filehandle you're writing to got itself closed sometime before now. Check your logic flow. +=item Target of goto is too deeply nested + +(F) You tried to use C to reach a label that was too deeply +nested for Perl to reach. Perl is doing you a favor by refusing. + =item tell() on unopened file (W) You tried to use the tell() function on a filehandle that was either @@ -2246,10 +2356,10 @@ system call to call, silly dilly. =item Too late for "B<-T>" option (X) The #! line (or local equivalent) in a Perl script contains the -B<-T> option, but Perl was not invoked with B<-T> in its argument -list. This is an error because, by the time Perl discovers a B<-T> in -a script, it's too late to properly taint everything from the -environment. So Perl gives up. +B<-T> option, but Perl was not invoked with B<-T> in its command line. +This is an error because, by the time Perl discovers a B<-T> in a +script, it's too late to properly taint everything from the environment. +So Perl gives up. If the Perl script is being executed as a command using the #! mechanism (or its local equivalent), this error can usually be fixed @@ -2259,6 +2369,12 @@ first argument: e.g. change C to C. If the Perl script is being executed as C, then the B<-T> option must appear on the command line: C. +=item Too late for "-%s" option + +(X) The #! line (or local equivalent) in a Perl script contains the +B<-M> or B<-m> option. This is an error because B<-M> and B<-m> options +are not intended for use inside scripts. Use the C pragma instead. + =item Too many ('s =item Too many )'s @@ -2447,6 +2563,18 @@ 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 Use of "$$" to mean "${$}" is deprecated + +(D) Perl versions before 5.004 misinterpreted any type marker followed +by "$" and a digit. For example, "$$0" was incorrectly taken to mean +"${$}0" instead of "${$0}". This bug is (mostly) fixed in Perl 5.004. + +However, the developers of Perl 5.004 could not fix this bug completely, +because at least two widely-used modules depend on the old meaning of +"$$0" in a string. So Perl 5.004 still interprets "$$" in the +old (broken) way inside strings; but it generates this message as a +warning. And in Perl 5.005, this special treatment will cease. + =item Use of $# is deprecated (D) This was an ill-advised attempt to emulate a poorly defined B feature. @@ -2454,7 +2582,7 @@ Use an explicit printf() or sprintf() instead. =item Use of $* is deprecated -(D) This variable magically turned on multiline pattern matching, both for +(D) This variable magically turned on multi-line pattern matching, both for you and for any luckless subroutine that you happen to call. You should use the new C and C modifiers now to do that without the dangerous action-at-a-distance effects of C<$*>. @@ -2464,12 +2592,6 @@ action-at-a-distance effects of C<$*>. (F) You attempted to use a feature of printf that is accessible from only C. This usually means there's a better way to do it in Perl. -=item Use of %s is deprecated - -(D) The construct indicated is no longer recommended for use, generally -because there's a better way to do it, and also because the old way has -bad side effects. - =item Use of bare EE to mean EE"" is deprecated (D) You are now encouraged to use the explicitly quoted form if you @@ -2481,6 +2603,30 @@ wish to use an empty line as the terminator of the here-document. subroutine's argument list, so it's better if you assign the results of a split() explicitly to an array (or list). +=item Use of inherited AUTOLOAD for non-method %s() is deprecated + +(D) As an (ahem) accidental feature, C subroutines are looked +up as methods (using the C<@ISA> hierarchy) even when the subroutines to +be autoloaded were called as plain functions (e.g. C), not +as methods (e.g. Cbar()> or C<$obj->bar()>). + +This bug will be rectified in Perl 5.005, which will use method lookup +only for methods' Cs. However, there is a significant base +of existing code that may be using the old behavior. So, as an +interim step, Perl 5.004 issues an optional warning when non-methods +use inherited Cs. + +The simple rule is: Inheritance will not work when autoloading +non-methods. The simple fix for old code is: In any module that used to +depend on inheriting C for non-methods from a base class named +C, execute C<*AUTOLOAD = \&BaseClass::AUTOLOAD> during startup. + +=item Use of %s is deprecated + +(D) The construct indicated is no longer recommended for use, generally +because there's a better way to do it, and also because the old way has +bad side effects. + =item Use of uninitialized value (W) An undefined value was used as if it were already defined. It was @@ -2703,7 +2849,7 @@ version of Perl, and this should not happen anyway. =item Malformed PERLLIB_PREFIX -(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form +(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form prefix1;prefix2 @@ -2711,21 +2857,23 @@ or prefix1 prefix2 -with nonempty prefix1 and prefix2. If C is indeed a prefix of -a builtin library search path, prefix2 is substituted. The error may appear -if components are not found, or are too long. See L. +with nonempty prefix1 and prefix2. If C is indeed a prefix +of a builtin library search path, prefix2 is substituted. The error +may appear if components are not found, or are too long. See +"PERLLIB_PREFIX" in F. =item PERL_SH_DIR too long (F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the -C-shell in. See L. +C-shell in. See "PERL_SH_DIR" in F. =item Process terminated by SIG%s (W) This is a standard message issued by OS/2 applications, while *nix -applications die in silence. It is considered a feature of the OS/2 -port. One can easily disable this by appropriate sighandlers, see -L. See L. +applications die in silence. It is considered a feature of the OS/2 +port. One can easily disable this by appropriate sighandlers, see +L. See also "Process terminated by SIGTERM/SIGINT" +in F. =back