X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=ba0ad972baf0b8a23b1f6102b425879b78ca181d;hb=8a2485f87de4ac33d6c8564ae6b27c5efc3e1430;hp=38be87a6259fd8c771d201b4d1f79e1d353e8645;hpb=722969e2558105c9a60bf5758cf8dd5f3eedca60;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 38be87a..ba0ad97 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -54,10 +54,10 @@ L. (X) You can't allocate more than 64K on an MS-DOS machine. -=item '!' allowed only after types %s +=item '%c' allowed only after types %s -(F) The '!' is allowed in pack() or unpack() only after certain types. -See L. +(F) The modifiers '!', '<' and '>' are allowed in pack() or unpack() only +after certain types. See L. =item Ambiguous call resolved as CORE::%s(), qualify as such or use & @@ -630,6 +630,13 @@ waitpid() without flags is emulated. point. For example, it'd be kind of silly to put a B<-x> on the #! line. +=item Can't %s %s-endian %ss on this platform + +(F) Your platform's byte-order is neither big-endian nor little-endian, +or it has a very strange pointer size. Packing and unpacking big- or +little-endian floating point values and pointers may not be possible. +See L. + =item Can't exec "%s": %s (W exec) A system(), exec(), or piped open call could not execute the @@ -777,6 +784,16 @@ 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 load '%s' for module %s + +(F) The module you tried to load failed to load a dynamic extension. This +may either mean that you upgraded your version of perl to one that is +incompatible with your old dynamic extensions (which is known to happen +between major versions of perl), or (more likely) that your dynamic +extension was built against an older version of the library that is +installed on your system. You may need to rebuild your old dynamic +extensions. + =item Can't localize lexical variable %s (F) You used local on a variable name that was previously declared as a @@ -808,6 +825,12 @@ 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 loadable object for module %s in @INC + +(F) The module you loaded is trying to load an external library, like +for example, C or C, but the L module was +unable to locate this library. See L. + =item Can't locate object method "%s" via package "%s" (F) You called a method correctly, and it correctly indicated a package @@ -911,6 +934,10 @@ for stdout. (F) The script you specified can't be opened for the indicated reason. +If you're debugging a script that uses #!, and normally relies on the +shell's $PATH search, the -S option causes perl to do that search, so +you don't have to type the path or C<`which $scriptname`>. + =item Can't read CRTL environ (S) A warning peculiar to VMS. Perl tried to read an element of %ENV @@ -1050,6 +1077,12 @@ references are disallowed. See L. Errno.pm module. The Errno module is expected to tie the %! hash to provide symbolic names for C<$!> errno values. +=item Can't use both '<' and '>' after type '%c' in %s + +(F) A type cannot be forced to have both big-endian and little-endian +byte-order at the same time, so this combination of modifiers is not +allowed. See L. + =item Can't use %s for loop variable (F) Only a simple scalar variable may be used as a loop variable on a @@ -1063,6 +1096,13 @@ is not allowed, because the magic can be tied to only one location have variables in your program that looked like magical variables but weren't. +=item Can't use '%c' in a group with different byte-order in %s + +(F) You attempted to force a different byte-order on a type +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 "my %s" in sort comparison (F) The global variables $a and $b are reserved for sort comparisons. @@ -1285,6 +1325,22 @@ there are neither package declarations nor a C<$VERSION>. long for Perl to handle. You have to be seriously twisted to write code that triggers this error. +=item Deprecated use of my() in false conditional + +(D deprecated) You used a declaration similar to C. +There has been a long-standing bug in Perl that causes a lexical variable +not to be cleared at scope exit when its declaration includes a false +conditional. Some people have exploited this bug to achieve a kind of +static variable. Since we intend to fix this bug, we don't want people +relying on this behavior. You can achieve a similar static effect by +declaring the variable in a separate block outside the function, eg + + sub f { my $x if 0; return $x++ } + +becomes + + { my $x; sub f { return $x++ } } + =item DESTROY created new reference to dead object '%s' (F) A DESTROY() method created a new reference to the object which is @@ -1367,6 +1423,11 @@ qualifying it as C. Maybe it's a typo. See L. (S malloc) An internal routine called free() on something that had already been freed. +=item Duplicate modifier '%c' after '%c' in %s + +(W) You have applied the same modifier more than once after a type +in a pack template. See L. + =item elseif should be elsif (S syntax) There is no keyword "elseif" in Perl because Larry thinks it's @@ -1704,6 +1765,10 @@ characters in prototypes are $, @, %, *, ;, [, ], &, and \. (F) When using the C keyword to construct an anonymous subroutine, you must always specify a block of code. See L. +=item Illegal declaration of subroutine %s + +(F) A subroutine was not declared correctly. See L. + =item Illegal division by zero (F) You tried to divide a number by 0. Either something was wrong in @@ -1789,7 +1854,8 @@ L for more information. (F) You can't use system(), exec(), or a piped open in a setuid or setgid script if C<$ENV{PATH}> contains a directory that is writable by -the world. See L. +the world. Also, the PATH must not contain any relative directory. +See L. =item Insecure $ENV{%s} while running %s @@ -2036,7 +2102,7 @@ when the function is called. =item Malformed UTF-8 character (%s) -Perl detected something that didn't comply with UTF-8 encoding rules. +(W utf8) Perl detected something that didn't comply with UTF-8 encoding rules. One possible cause is that you read in data that you thought to be in UTF-8 but it wasn't (it was for example legacy 8-bit data). Another @@ -2086,6 +2152,11 @@ ended earlier on the current line. (W syntax) An underscore (underbar) in a numeric constant did not separate two digits. +=item Missing argument to -%c + +(F) The argument to the indicated command line switch must follow +immediately after the switch, without intervening spaces. + =item Missing %sbrace%s on \N{} (F) Wrong syntax of character name literal C<\N{charname}> within @@ -2259,15 +2330,6 @@ C appear to be nested quantifiers, but aren't. See L. (S internal) The symbol in question was declared but somehow went out of scope before it could possibly have been used. -=item Newline in left-justified string for %s - -(W printf) There is a newline in a string to be left justified by -C or C. - -The padding spaces will appear after the newline, which is probably not -what you wanted. Usually you should remove the newline from the string -and put formatting characters in the C format. - =item No %s allowed while running setuid (F) Certain operations are deemed to be too insecure for a setuid or @@ -2383,16 +2445,17 @@ your system. (F) Configure didn't find anything resembling the setreuid() call for your system. -=item No space allowed after -%c - -(F) The argument to the indicated command line switch must follow -immediately after the switch, without intervening spaces. - =item No %s specified for -%c (F) The indicated command line switch needs a mandatory argument, but you haven't specified one. +=item No such class field "%s" in variable %s of type %s + +(F) You tried to access a key from a hash through the indicated typed variable +but that key is not allowed by the package of the same type. The indicated +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 @@ -2611,6 +2674,11 @@ C (where C is the number of kilobytes) to check the current limits and change them, and in ksh/bash/zsh use C and C, respectively. +=item Out of memory during %s extend + +(X) An attempt was made to extend an array, a list, or a string beyond +the largest possible memory allocation. + =item Out of memory during "large" request for %s (F) The malloc() function returned 0, indicating there was insufficient @@ -2758,6 +2826,10 @@ references to an object. (P) The compiler is screwed up with respect to the map() function. +=item panic: memory wrap + +(P) Something tried to allocate more memory than possible. + =item panic: null array (P) One of the internal array routines was passed a null AV pointer. @@ -2867,6 +2939,13 @@ redirected it with select().) "Can't locate object method \"%s\" via package \"%s\"". It often means that a method requires a package that has not been loaded. +=item Perl_my_%s() not available + +(F) Your platform has very uncommon byte-order and integer size, +so it was not possible to set up some or all fixed-width byte-order +conversion functions. This is only a problem when you're using the +'<' or '>' modifiers in (un)pack templates. See L. + =item Perl %s required--this is only version %s, stopped (F) The module in question uses features of a version of Perl more @@ -3425,6 +3504,12 @@ world, because the world might have written on it already. (F) You don't have System V shared memory IPC on your system. +=item !=~ should be !~ + +(W syntax) The non-matching operator is !~, not !=~. !=~ will be +interpreted as the != (numeric not equal) and ~ (1's complement) +operators: probably not what you intended. + =item <> should be quotes (F) You wrote C<< require >> when you should have written @@ -3689,17 +3774,27 @@ target of the change to (F) The entry point function of threads->create() failed for some reason. -=item Tied variable freed while still in use - -(F) An access method for a tied variable (e.g. FETCH) did something to -free the variable. Since continuing the current operation is likely -to result in a coredump, Perl is bailing out instead. - =item times not implemented (F) Your version of the C library apparently doesn't do times(). I 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. +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. + +If the Perl script is being executed as C, then the +B<-T> option must appear on the command line: C. + =item To%s: illegal mapping '%s' (F) You tried to define a customized To-mapping for lc(), lcfirst, @@ -3722,22 +3817,6 @@ system call to call, silly dilly. 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 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 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. - -If the Perl script is being executed as C, then the -B<-T> option must appear on the command line: C. - =item Too late to run %s block (W void) A CHECK or INIT block is being defined during run time proper, @@ -3777,8 +3856,8 @@ C<$tr> or C<$y> may cause this error. =item Transliteration replacement not terminated -(F) The lexer couldn't find the final delimiter of a tr/// or tr[][] -construct. +(F) The lexer couldn't find the final delimiter of a tr///, tr[][], +y/// or y[][] construct. =item '%s' trapped by operation mask @@ -4028,10 +4107,10 @@ Note that under some systems, like OS/2, there may be different flavors of Perl executables, some of which may support fork, some not. Try changing the name you call Perl by to C, C, and so on. -=item Unsupported script encoding +=item Unsupported script encoding %s (F) Your program file begins with a Unicode Byte Order Mark (BOM) which -declares it to be in a Unicode encoding that Perl cannot yet read. +declares it to be in a Unicode encoding that Perl cannot read. =item Unsupported socket function "%s" called @@ -4322,13 +4401,14 @@ arguments. See L. defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign a defined value to your variables. -To help you figure out what was undefined, perl tells you what operation -you used the undefined value in. Note, however, that perl optimizes your -program and the operation displayed in the warning may not necessarily -appear literally in your program. For example, C<"that $foo"> is -usually optimized into C<"that " . $foo>, and the warning will refer to -the C operator, even though there is no C<.> in your -program. +To help you figure out what was undefined, perl will try to tell you the +name of the variable (if any) that was undefined. In some cases it cannot +do this, so it also tells you what operation you used the undefined value +in. Note, however, that perl optimizes your program and the operation +displayed in the warning may not necessarily appear literally in your +program. For example, C<"that $foo"> is usually optimized into C<"that " +. $foo>, and the warning will refer to the C operator, +even though there is no C<.> in your program. =item Using a hash as a reference is deprecated