X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=1f7bc0bc8ede2f0de83cea83e25a0ccf8e841119;hb=c1effa61278e47c916466883d74905b04fedc388;hp=a58a31678ebad592949bc216f4bf4fd0acf3bb20;hpb=a4edf47d48bc97e4faed7a02d615d5e49723b48a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index a58a316..1f7bc0b 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -131,12 +131,14 @@ for example, turn C<-w -U> into C<-wU>. (F) msgsnd() requires a string at least as long as sizeof(long). -=item %s argument is not a HASH or ARRAY element +=item %s argument is not a HASH or ARRAY element or a subroutine -(F) The argument to exists() must be a hash or array element, such as: +(F) The argument to exists() must be a hash or array element or a +subroutine with an ampersand, such as: $foo{$bar} $ref->{"susie"}[12] + &do_something =item %s argument is not a HASH or ARRAY element or slice @@ -282,6 +284,13 @@ invalid anytime, even before the end of the current statement. Use literals or global values as arguments to the "p" pack() template to avoid this warning. +=item Attempt to reload %s aborted. + +(F) You tried to load a file with C or C that failed to +compile once already. Perl will not try to compile this file again +unless you delete its entry from %INC. See L and +L. + =item Attempt to set length of freed array (W) You tried to set the length of an array which has been freed. You @@ -297,7 +306,21 @@ of an array and later assigning through that reference. For example used as an lvalue, which is pretty strange. Perhaps you forgot to dereference it first. See L. -=item Bad arg length for %s, is %d, should be %s +=item Attribute "locked" is deprecated + +(D deprecated) You have used the attributes pragam to modify the "locked" +attribute on a code reference. The :locked attribute is obsolete, has had no +effect since 5005 threads were removed, and will be removed in the next major +release of Perl 5. + +=item Attribute "unique" is deprecated + +(D deprecated) You have used the attributes pragam to modify the "unique" +attribute on an array, hash or scalar reference. The :unique attribute has +had no effect since Perl 5.8.8, and will be removed in the next major +release of Perl 5. + +=item Bad arg length for %s, is %d, should be %d (F) You passed a buffer of the wrong size to one of msgctl(), semctl() or shmctl(). In C parlance, the correct sizes are, respectively, @@ -606,13 +629,13 @@ quotas or other plumbing problems. =item Can't declare class for non-scalar %s in "%s" (F) Currently, only scalar variables can be declared with a specific -class qualifier in a "my" or "our" declaration. The semantics may be +class qualifier in a "my", "our" or "state" declaration. The semantics may be extended for other types of variables in future. =item Can't declare %s in "%s" -(F) Only scalar, array, and hash variables may be declared as "my" or -"our" variables. They must have ordinary identifiers as names. +(F) Only scalar, array, and hash variables may be declared as "my", "our" or +"state" variables. They must have ordinary identifiers as names. =item Can't do inplace edit: %s is not a regular file @@ -642,24 +665,6 @@ inplace editing with the B<-i> switch. The file was ignored. regexp to match something 0 times, just put {0}. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item Can't do setegid! - -(P) The setegid() call failed for some reason in the setuid emulator of -suidperl. - -=item Can't do seteuid! - -(P) The setuid emulator of suidperl failed for some reason. - -=item Can't do setuid - -(F) This typically means that ordinary perl tried to exec suidperl to do -setuid emulation, but couldn't exec it. It looks for a name of the form -sperl5.000 in the same directory that the perl executable resides under -the name perl5.000, typically /usr/local/bin on Unix machines. If the -file is there, check the execute permissions. If it isn't, ask your -sysadmin why he and/or she removed it. - =item Can't do waitpid with flags (F) This machine doesn't have either waitpid() or wait4(), so only @@ -748,11 +753,16 @@ If you didn't mean to use a Unicode property, escape the C<\p>, either 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 +=item Can't fork: %s (F) A fatal error occurred while trying to fork while opening a pipeline. +=item Can't fork, trying again in 5 seconds + +(W pipe) A fork in a piped open failed with EAGAIN and will be retried +after five seconds. + =item Can't get filespec - stale stat buffer? (S) A warning peculiar to VMS. This arises because of the difference @@ -820,6 +830,12 @@ processes, Perl has reset the signal to its default value. This situation typically indicates that the parent program under which Perl may be running (e.g. cron) is being very careless. +=item Can't kill a non-numeric process ID + +(F) Process identifiers must be (signed) integers. It is a fatal error to +attempt to kill() an undefined, empty-string or otherwise non-numeric +process identifier. + =item Can't "last" outside a loop block (F) A "last" statement was executed to break out of the current block, @@ -848,7 +864,7 @@ extensions. =item Can't localize lexical variable %s (F) You used local on a variable name that was previously declared as a -lexical variable using "my". This is not allowed. If you want to +lexical variable using "my" or "state". This is not allowed. If you want to localize a package variable of the same name, qualify it with the package name. @@ -893,13 +909,6 @@ method, nor does any of its base classes. See L. (W syntax) The @ISA array contained the name of another package that doesn't seem to exist. -=item Can't locate package %s for the parents of %s - -(W syntax) You did not define (or require/use) the first package, -which is named as a (possibly indirect) parent of the second by -C<@ISA> inheritance. Perl will treat this as if the undefined -package had an empty C<@ISA>. - =item Can't locate PerlIO%s (F) You tried to use in open() a PerlIO layer that does not exist, @@ -1029,17 +1038,12 @@ probably because you don't have write permission to the directory. (P) An error peculiar to VMS. Perl thought stdin was a pipe, and tried to reopen it to accept binary data. Alas, it failed. -=item Can't resolve method `%s' overloading `%s' in package `%s' +=item Can't resolve method "%s" overloading "%s" in package "%s" (F|P) Error resolving overloading specified by a method name (as opposed to a subroutine reference): no such method callable via the package. If method name is C, this is an internal error. -=item Can't reswap uid and euid - -(P) The setreuid() call failed for some reason in the setuid emulator of -suidperl. - =item Can't return %s from lvalue subroutine (F) Perl detected an attempt to return illegal lvalues (such as @@ -1064,11 +1068,6 @@ list context. (P) For some reason you can't fstat() the script even though you have it open already. Bizarre. -=item Can't swap uid and euid - -(P) The setreuid() call failed for some reason in the setuid emulator of -suidperl. - =item Can't take log of %g (F) For ordinary real numbers, you can't take the logarithm of a @@ -1133,7 +1132,7 @@ allowed. See L. (F) Only a simple scalar variable may be used as a loop variable on a foreach. -=item Can't use global %s in "my" +=item Can't use global %s in "%s" (F) You tried to declare a magical variable as a lexical variable. This is not allowed, because the magic can be tied to only one location @@ -1148,6 +1147,11 @@ that is already inside a group with a byte-order modifier. For example you cannot force little-endianness on a type that is inside a big-endian group. +=item Can't use keyword '%s' as a label + +(F) You attempted to use a reserved keyword, such as C or C, +as a statement label. This is disallowed since Perl 5.11.0. + =item Can't use "my %s" in sort comparison (F) The global variables $a and $b are reserved for sort comparisons. @@ -1415,6 +1419,9 @@ L. infinite recursion, unless you're writing strange benchmark programs, in which case it indicates something else. +This threshold can be changed from 100, by recompiling the F binary, +setting the C pre-processor macro C to the desired value. + =item defined(@array) is deprecated (D deprecated) defined() is not usually useful on arrays because it @@ -1588,7 +1595,7 @@ conversion routines don't handle. Drat. expression that contains the C<(?{ ... })> zero-width assertion, which is unsafe. See L, and L. -=item %s: Eval-group not allowed at run time +=item %s: Eval-group not allowed at runtime, use re 'eval' (F) Perl tried to compile a regular expression containing the C<(?{ ... })> zero-width assertion at run time, as it would when the @@ -1622,7 +1629,7 @@ variable and glob that. (F) The C function is not implemented in MacPerl. See L. -=item Execution of %s aborted due to compilation errors +=item Execution of %s aborted due to compilation errors. (F) The final summary message when a Perl compilation fails. @@ -1805,7 +1812,7 @@ L. =item Global symbol "%s" requires explicit package name (F) You've said "use strict" or "use strict vars", which indicates -that all variables must either be lexically scoped (using "my"), +that all variables must either be lexically scoped (using "my" or "state"), declared beforehand using "our", or explicitly qualified to say which package the global variable is in (using "::"). @@ -1846,7 +1853,7 @@ unspecified destination. See L. supposed to follow something: a template character or a ()-group. See L. -=item %s had compilation errors +=item %s had compilation errors. (F) The final summary message when a C fails. @@ -1949,10 +1956,10 @@ two from 1 to 32 (or 64, if your platform supports that). (W digit) You may have tried to use an 8 or 9 in an octal number. Interpretation of the octal number stopped before the 8 or 9. -=item Illegal switch in PERL5OPT: %s +=item Illegal switch in PERL5OPT: -%c (X) The PERL5OPT environment variable may only be used to set the -following switches: B<-[CDIMUdmtwA]>. +following switches: B<-[CDIMUdmtw]>. =item Ill-formed CRTL environ value "%s" @@ -1999,6 +2006,13 @@ either consume text or fail. The <-- HERE shows in the regular expression about where the problem was discovered. +=item Initialization of state variables in list context currently forbidden + +(F) Currently the implementation of "state" only permits the initialization +of scalar variables in scalar context. Re-write C as +C to change from list to scalar context. Constructions such +as C will be supported in a future perl release. + =item Insecure dependency in %s (F) You tried to do something that the tainting mechanism didn't like. @@ -2164,7 +2178,7 @@ 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 layers (like "%s") unavailable +=item IO layers (like '%s') unavailable (F) Your Perl has not been configured to have PerlIO, and therefore you cannot use IO layers. To have PerlIO Perl must be configured @@ -2178,8 +2192,12 @@ neither as a system call or an ioctl call (SIOCATMARK). =item $* is no longer supported (S deprecated, syntax) The special variable C<$*>, deprecated in older perls, has -been removed as of 5.9.0 and is no longer supported. You should use the -C and C regexp modifiers instead. +been removed as of 5.9.0 and is no longer supported. In previous versions of perl the use of +C<$*> enabled or disabled multi-line matching within a string. + +Instead of using C<$*> you should use the C (and maybe C) regexp +modifiers. (In older versions: when C<$*> was set to a true value then all regular +expressions behaved as if they were written using C.) =item $# is no longer supported @@ -2242,6 +2260,15 @@ L. (F) There is currently a limit on the length of string which lookbehind can handle. This restriction may be eased in a future release. +=item Lost precision when %s %f by 1 + +(W) The value you attempted to increment or decrement by one is too large +for the underlying floating point representation to store accurately, +hence the target of C<++> or C<--> is unchanged. Perl issues this warning +because it has already switched from integers to floating point when values +are too large for integers, and now even floating point is insufficient. +You may wish to switch to using L explicitly. + =item lstat() on filehandle %s (W io) You tried to do an lstat on a filehandle. What did you mean @@ -2321,9 +2348,9 @@ rules and perl was unable to guess how to make more progress. (F) You tried to unpack something that didn't comply with UTF-8 encoding rules and perl was unable to guess how to make more progress. -=item Maximal count of pending signals (%s) exceeded +=item Maximal count of pending signals (%d) exceeded -(F) Perl aborted due to a too important number of signals pending. This +(F) Perl aborted due to a too high number of signals pending. This usually indicates that your operating system tried to deliver signals too fast (with a very high priority), starving the perl process from resources it would need to reach a point where it can process signals @@ -2412,7 +2439,7 @@ can vary from one line to the next. =item Missing right brace on %s -(F) Missing right brace in C<\p{...}> or C<\P{...}>. +(F) Missing right brace in C<\x{...}>, C<\p{...}> or C<\P{...}>. =item Missing right curly or square bracket @@ -2466,7 +2493,7 @@ couldn't be created for some peculiar reason. you omitted the name of the module. Consult L for full details about C<-M> and C<-m>. -=item More than one argument to open +=item More than one argument to '%s' open (F) The C function has been asked to open multiple files. This can happen if you are trying to open a pipe to a command that takes a @@ -2493,7 +2520,7 @@ See L. (F) Lexically scoped subroutines are not yet implemented. Don't try that yet. -=item "my" variable %s can't be in a package +=item "%s" variable %s can't be in a package (F) Lexically scoped variables aren't in a package, so it doesn't make sense to try to declare one with a package qualifier on the front. Use @@ -2680,9 +2707,14 @@ package has restricted the set of allowed keys using the L pragma. =item No such class %s -(F) You provided a class qualifier in a "my" or "our" declaration, but +(F) You provided a class qualifier in a "my", "our" or "state" declaration, but this class doesn't exist at this point in your program. +=item No such hook: %s + +(F) You specified a signal hook that was not recognized by Perl. Currently, Perl +accepts C<__DIE__> and C<__WARN__> as valid signal hooks + =item No such pipe open (P) An error peculiar to VMS. The internal routine my_pclose() tried to @@ -3164,6 +3196,11 @@ then discovered it wasn't a subroutine or eval context. (P) scan_num() got called on something that wasn't a number. +=item panic: sv_chop %s + +(P) The sv_chop() routine was passed a position that is not within the +scalar's string buffer. + =item panic: sv_insert (P) The sv_insert() routine was told to remove more string than there @@ -3206,7 +3243,7 @@ when you meant my ($foo, $bar) = @_; -Remember that "my", "our", and "local" bind tighter than comma. +Remember that "my", "our", "local" and "state" bind tighter than comma. =item C<-p> destination: %s @@ -3264,10 +3301,6 @@ 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 Permission denied - -(F) The setuid emulator in suidperl decided you were up to no good. - =item pid %x not a child (W exec) A warning peculiar to VMS. Waitpid() was asked to wait for a @@ -3278,11 +3311,6 @@ fine from VMS' perspective, it's probably not what you intended. (F) The unpack format P must have an explicit size, not "*". -=item B<-P> not allowed for setuid/setgid script - -(F) The script would have to be opened by the C preprocessor by name, -which provides a race condition that breaks security. - =item POSIX class [:%s:] unknown in regex; marked by <-- HERE in m/%s/ (F) The class in the character class [: :] syntax is unknown. The <-- HERE @@ -3394,23 +3422,19 @@ but there was no array C<@foo> in scope at the time. If you wanted a literal @foo, then write it as \@foo; otherwise find out what happened to the array you apparently lost track of. -=item pragma "attrs" is deprecated, use "sub NAME : ATTRS" instead +=item Possible unintended interpolation of $\ in regex -(D deprecated) You have written something like this: +(W ambiguous) You said something like C in a regex. +The regex C translates to: match the word 'foo', the output +record separator (see L) and the letter 's' (one time or more) +followed by the word 'bar'. - sub doit - { - use attrs qw(locked); - } - -You should use the new declaration syntax instead. - - sub doit : locked - { - ... +If this is what you intended then you can silence the warning by using +C (for example: C). -The C pragma is now obsolete, and is only provided for -backward-compatibility. See L. +If instead you intended to match the word 'foo' at the end of the line +followed by whitespace and the word 'bar' on the next line then you can use +C (for example: C). =item Precedence problem: open %s should be open(%s) @@ -3449,6 +3473,11 @@ port. One can easily disable this by appropriate sighandlers, see L. See also "Process terminated by SIGTERM/SIGINT" in L. +=item Prototype after '%c' for %s : %s + +(W syntax) A character follows % or @ in a prototype. This is useless, +since % and @ gobble the rest of the subroutine arguments. + =item Prototype mismatch: %s vs %s (S prototype) The subroutine being declared or defined had previously been @@ -3560,7 +3589,7 @@ a reference count of other than 1. (F) You used C<\g0> or similar in a regular expression. You may refer to capturing parentheses only with strictly positive integers (normal -backreferences) or with stricly negative integers (relative +backreferences) or with strictly negative integers (relative backreferences), but using 0 does not make sense. =item Reference to nonexistent group in regex; marked by <-- HERE in m/%s/ @@ -3617,6 +3646,12 @@ earlier. numeric field that will never go blank so that the repetition never terminates. You might use ^# instead. See L. +=item Replacement list is longer than search list + +(W misc) You have used a replacement list that is longer than the +search list. So the additional elements in the replacement list +are meaningless. + =item Reversed %s= operator (W syntax) You wrote your assignment operator backwards. The = must @@ -3672,11 +3707,6 @@ 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 Script is not setuid/setgid in suidperl - -(F) Oddly, the suidperl program was invoked on a script without a setuid -or setgid bit set. This doesn't make much sense. - =item Search pattern not terminated (F) The lexer couldn't find the final delimiter of a // or m{} @@ -3879,6 +3909,12 @@ superfluous. (W signal) The signal handler named in %SIG doesn't, in fact, exist. Perhaps you put it into the wrong package? +=item Smart matching a non-overloaded object breaks encapsulation + +(F) You should not use the C<~~> operator on an object that does not +overload it: Perl refuses to use the object's underlying structure for +the smart match. + =item sort is now a reserved word (F) An ancient error message that almost nobody ever runs into anymore. @@ -3922,7 +3958,7 @@ a block by itself. (W unopened) You tried to use the stat() function on a filehandle that was either never opened or has since been closed. -=item Stub found while resolving method "%s" overloading "%s" +=item Stub found while resolving method "%s" overloading "%s" in package "%s" (P) Overloading resolution over @ISA tree may be broken by importation stubs. Stubs should never be implicitly created, but explicit calls to @@ -3964,11 +4000,6 @@ length of the string. See L. This warning is fatal 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 - -(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 sv_upgrade from type %d down to type %d (P) Perl tried to force the upgrade an SV to a type which was actually @@ -4138,18 +4169,18 @@ suspect you're not running on Unix. =item "-T" is on the #! line, it must also be used on the command line (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 command line. +B<-T> option (or the 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 by -editing the #! line so that the B<-T> option is a part of Perl's first -argument: e.g. change C to C. +editing the #! line so that the B<-%c> option is a part of Perl's 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. +B<-%c> option must appear on the command line: C. =item To%s: illegal mapping '%s' @@ -4170,8 +4201,15 @@ system call to call, silly dilly. =item Too late for "-%s" option (X) The #! line (or local equivalent) in a Perl script contains the -B<-M>, B<-m> or B<-C> option. This is an error because those options -are not intended for use inside scripts. Use the C pragma instead. +B<-M>, B<-m> or B<-C> option. + +In the case of B<-M> and B<-m>, this is an error because those options are +not intended for use inside scripts. Use the C pragma instead. + +The B<-C> option only works if it is specified on the command line as well +(with the same sequence of letters or numbers following). Either specify +this option on the command line, or, if your system supports it, make your +script executable and run it directly instead of passing it to perl. =item Too late to run %s block @@ -4410,10 +4448,10 @@ reserved word. It's best to put such a word in quotes, or capitalize it somehow, or insert an underbar into it. You might also declare it as a subroutine. -=item Unrecognized character %s in column %d +=item Unrecognized character %s; marked by <-- HERE after %s near column %d (F) The Perl parser has no idea what to do with the specified character -in your Perl script (or eval) at the specified column. Perhaps you tried +in your Perl script (or eval) near the specified column. Perhaps you tried to run a compressed script, a binary program, or a directory as a Perl program. =item Unrecognized escape \\%c in character class passed through in regex; marked by <-- HERE in m/%s/ @@ -4572,6 +4610,12 @@ must be written as The <-- HERE shows in the regular expression about where the problem was discovered. See L. +=item Useless use of /d modifier in transliteration operator + +(W misc) You have used the /d modifier where the searchlist has the +same length as the replacelist. See L for more information +about the /d modifier. + =item Useless use of %s in void context (W void) You did something without a side effect in a context that does @@ -4638,10 +4682,20 @@ you can write it as C to avoid this warning. (F) The "use" keyword is recognized and executed at compile time, and returns no useful value. See L. +=item Use of assignment to $[ is deprecated + +(D deprecated) The C<$[> variable (index of the first element in an array) +is deprecated. See L. + =item Use of bare << to mean <<"" is deprecated -(D deprecated) You are now encouraged to use the explicitly quoted form -if you wish to use an empty line as the terminator of the here-document. +(D deprecated, W syntax) You are now encouraged to use the explicitly quoted +form if you wish to use an empty line as the terminator of the here-document. + +=item Use of comma-less variable list is deprecated + +(D deprecated, W syntax) The values you give to a format should be +separated by commas, not just aligned on a line. =item Use of chdir('') or chdir(undef) as chdir() deprecated @@ -4688,12 +4742,6 @@ to access the filehandle slot within a typeglob. operator. Since C always tries to match the pattern repeatedly, the C has no effect. -=item Use of implicit split to @_ is deprecated - -(D deprecated) It makes a lot of work for the compiler when you clobber -a 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 deprecated) As an (ahem) accidental feature, C subroutines @@ -4718,6 +4766,15 @@ In code that currently says C you should remove AutoLoader from @ISA and change C to C. +=item Use of octal value above 377 is deprecated + +(D deprecated, W regexp) There is a constant in the regular expression whose +value is interpeted by Perl as octal and larger than 377 (255 decimal, 0xFF +hex). Perl may take this to mean different things depending on the rest of +the regular expression. If you meant such an octal value, convert it to +hexadecimal and use C<\xHH> or C<\x{HH}> instead. If you meant to have +part of it mean a backreference, use C<\g> for that. See L. + =item Use of %s in printf format not supported (F) You attempted to use a feature of printf that is accessible from @@ -4751,7 +4808,7 @@ to be huge numbers, and so usually indicates programmer error. If you really do mean it, explicitly numify your reference, like so: C<$array[0+$ref]>. This warning is not given for overloaded objects, either, because you can overload the numification and stringification -operators and then you assumedly know what you are doing. +operators and then you assumably know what you are doing. =item Use of reserved word "%s" is deprecated @@ -4869,7 +4926,7 @@ known at compile time. See L. =item "%s" variable %s masks earlier declaration in same %s -(W misc) A "my" or "our" variable has been redeclared in the current +(W misc) A "my", "our" or "state" variable has been redeclared in the current scope or statement, effectively eliminating all access to the previous instance. This is almost always a typographical error. Note that the earlier variable will still exist until the end of the scope or until @@ -4919,16 +4976,6 @@ the version number. (W misc) The version string contains invalid characters at the end, which are being ignored. -=item v-string in use/require is non-portable - -(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 -won't suddenly start understanding newer features, but at least -they will show a sensible error message indicating the required -minimum version. - =item Warning: something's wrong (W) You passed warn() an empty string (the equivalent of C) or @@ -4961,7 +5008,7 @@ So put in parentheses to say what you really mean. =item Wide character in %s -(W utf8) Perl met a wide character (>255) when it wasn't expecting +(S utf8) Perl met a wide character (>255) when it wasn't expecting one. This warning is by default on for I/O (like print). The easiest way to quiet this warning is simply to add the C<:utf8> layer to the output, e.g. C. Another way to turn off the