X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=817503bfaeca58596feb1cd57c908d0882d206d3;hb=f26f4a2f8b63c72a33468ddeeb9d0337f0892af6;hp=f40b7a078e486f2b09434deb6b78e98a41f6dc59;hpb=0171352b2ec1a5da767060462636c95507386538;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index f40b7a0..817503b 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 & @@ -163,6 +163,15 @@ error. that expected a numeric value instead. If you're fortunate the message will identify which operator was so unfortunate. +=item Argument list not closed for PerlIO layer "%s" + +(W layer) 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 Array @%s missing the @ in argument %d of %s() (D deprecated) Really old Perl let you omit the @ on array names in some @@ -184,7 +193,7 @@ know which context to supply to the right side. =item A thread exited while %d threads were running -(W) When using threaded Perl, a thread (not necessarily the main +(W threads)(S) When using threaded Perl, a thread (not necessarily the main thread) exited while there were still other threads running. Usually it's a good idea to first collect the return values of the created threads by joining them, and only then exit from the main @@ -273,6 +282,15 @@ 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 set length of freed array + +(W) You tried to set the length of an array which has been freed. You +can do this by storing a reference to the scalar representing the last index +of an array and later assigning through that reference. For example + + $r = do {my @a; \$#a}; + $$r = 503 + =item Attempt to use reference as lvalue in substr (W substr) You supplied a reference as the first argument to substr() @@ -621,6 +639,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 @@ -736,11 +761,10 @@ a block, except that it isn't a proper block. This usually occurs if you tried to jump out of a sort() block or subroutine, which is a no-no. See L. -=item Can't goto subroutine from an eval-string +=item Can't goto subroutine from an eval-%s (F) The "goto subroutine" call can't be used to jump out of an eval -"string". (You can use it to jump out of an eval {BLOCK}, but you -probably don't want to.) +"string" or block. =item Can't goto subroutine outside a subroutine @@ -768,6 +792,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 @@ -799,22 +833,28 @@ 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 functioning as a class, but that package doesn't define that particular method, nor does any of its base classes. See L. -=item Can't locate PerlIO%s - -(F) You tried to use in open() a PerlIO layer that does not exist, -e.g. open(FH, ">:nosuchlayer", "somefile"). - =item Can't locate package %s for @%s::ISA (W syntax) The @ISA array contained the name of another package that doesn't seem to exist. +=item Can't locate PerlIO%s + +(F) You tried to use in open() a PerlIO layer that does not exist, +e.g. open(FH, ">:nosuchlayer", "somefile"). + =item Can't make list assignment to \%ENV on this system (F) List assignment to %ENV is not supported on some systems, notably @@ -898,17 +938,13 @@ 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 (F) The script you specified can't be opened for the indicated reason. -=item Can't provide tied hash usage; use keys(%hash) to test if empty - -(F) When a hash is evaluated in scalar context, bucket usage is -returned if the hash is populated, and false is returned if the hash -is empty. Bucket usage is not currently available for tied hashes. -To test if a hash is empty or populated, use keys(%hash) in scalar -context instead. +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 @@ -1029,7 +1065,7 @@ calling sv_upgrade. =item Can't use anonymous symbol table for method lookup -(P) The internal routine that does method lookup was handed a symbol +(F) 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. @@ -1049,6 +1085,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 @@ -1062,6 +1104,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. @@ -1107,7 +1156,7 @@ references can be weakened. with an assignment operator, which implies modifying the value itself. Perhaps you need to copy the value to a temporary, and repeat that. -=item Character in "C" format wrapped in pack +=item Character in 'C' format wrapped in pack (W pack) You said @@ -1122,7 +1171,19 @@ and so on) and not for Unicode characters, so Perl behaved as if you meant If you actually want to pack Unicode codepoints, use the C<"U"> format instead. -=item Character in "c" format wrapped in pack +=item Character in 'W' format wrapped in pack + +(W pack) You said + + pack("U0W", $x) + +where $x is either less than 0 or more than 255. However, C-mode expects +all values to fall in the interval [0, 255], so Perl behaved as if you +meant: + + pack("U0W", $x & 255) + +=item Character in 'c' format wrapped in pack (W pack) You said @@ -1137,6 +1198,42 @@ and so on) and not for Unicode characters, so Perl behaved as if you meant If you actually want to pack Unicode codepoints, use the C<"U"> format instead. +=item Character in '%c' format wrapped in unpack + +(W unpack) You tried something like + + unpack("H", "\x{2a1}") + +where the format expects to process a byte (a character with a value +below 256), but a higher value was provided instead. Perl uses the value +modulus 256 instead, as if you had provided: + + unpack("H", "\x{a1}") + +=item Character(s) in '%c' format wrapped in pack + +(W pack) You tried something like + + pack("u", "\x{1f3}b") + +where the format expects to process a sequence of bytes (character with a +value below 256), but some of the characters had a higher value. Perl +uses the character values modulus 256 instead, as if you had provided: + + pack("u", "\x{f3}b") + +=item Character(s) in '%c' format wrapped in unpack + +(W unpack) You tried something like + + unpack("s", "\x{1f3}b") + +where the format expects to process a sequence of bytes (character with a +value below 256), but some of the characters had a higher value. Perl +uses the character values modulus 256 instead, as if you had provided: + + unpack("s", "\x{f3}b") + =item close() on unopened filehandle %s (W unopened) You tried to close a filehandle that was never opened. @@ -1284,6 +1381,28 @@ 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 +just being DESTROYed. Perl is confused, and prefers to abort rather than +to create a dangling reference. + =item Did not produce a valid header See Server error. @@ -1341,8 +1460,8 @@ See L. =item (Do you need to predeclare %s?) -(S) This is an educated guess made in conjunction with the message "%s -found where operator expected". It often means a subroutine or module +(S syntax) This is an educated guess made in conjunction with the message +"%s found where operator expected". It often means a subroutine or module name is being referenced that hasn't been declared yet. This may be because of ordering problems in your file, or because of a missing "sub", "package", "require", or "use" statement. If you're referencing @@ -1360,10 +1479,15 @@ 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) There is no keyword "elseif" in Perl because Larry thinks it's ugly. -Your code will be interpreted as an attempt to call a method named +(S syntax) There is no keyword "elseif" in Perl because Larry thinks it's +ugly. Your code will be interpreted as an attempt to call a method named "elseif" for the class returned by the following block. This is unlikely to be what you want. @@ -1378,6 +1502,12 @@ a regular expression without specifying the property name. (F) While under the C pragma, switching the real and effective uids or gids failed. +=item %ENV is aliased to %s + +(F) You're running under taint mode, and the C<%ENV> variable has been +aliased to another hash, so it doesn't reflect anymore the state of the +program's environment. This is potentially insecure. + =item Error converting file specification %s (F) An error peculiar to VMS. Because Perl may have to deal with file @@ -1486,6 +1616,13 @@ you which section of the Perl source code is distressed. (F) Your machine apparently doesn't implement fcntl(). What is this, a PDP-11 or something? +=item Field too wide in 'u' format in pack + +(W pack) Each line in an uuencoded string start with a length indicator +which can't encode values above 63. So there is no point in asking for +a line length bigger than that. Perl will behave as if you specified +C as format. + =item Filehandle %s opened only for input (W io) You tried to write on a read-only filehandle. If you intended @@ -1505,13 +1642,13 @@ Another possibility is that you attempted to open filedescriptor 0 =item Filehandle %s reopened as %s only for input (W io) You opened for reading a filehandle that got the same filehandle id -as STDOUT or STDERR. This occured because you closed STDOUT or STDERR +as STDOUT or STDERR. This occurred because you closed STDOUT or STDERR previously. =item Filehandle STDIN reopened as %s only for output (W io) You opened for writing a filehandle that got the same filehandle id -as STDIN. This occured because you closed STDIN previously. +as STDIN. This occurred because you closed STDIN previously. =item Final $ should be \$ or $name @@ -1520,13 +1657,6 @@ a literal dollar sign, or was meant to introduce a variable name that happens to be missing. So you have to put either the backslash or the name. -=item Final @ should be \@ or @name - -(F) You must now decide whether the final @ in a string was meant to be -a literal "at" sign, or was meant to introduce a variable name that -happens to be missing. So you have to put either the backslash or the -name. - =item flock() on closed filehandle %s (W closed) The filehandle you're attempting to flock() got itself closed @@ -1562,8 +1692,8 @@ when you meant =item %s found where operator expected -(S) The Perl lexer knows whether to expect a term or an operator. If it -sees what it knows to be a term when it was expecting to see an +(S syntax) The Perl lexer knows whether to expect a term or an operator. +If it sees what it knows to be a term when it was expecting to see an operator, it gives you this warning. Usually it indicates that an operator or delimiter was omitted, such as a semicolon. @@ -1698,6 +1828,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 @@ -1732,7 +1866,7 @@ Interpretation of the octal number stopped before the 8 or 9. =item Illegal switch in PERL5OPT: %s (X) The PERL5OPT environment variable may only be used to set the -following switches: B<-[DIMUdmtw]>. +following switches: B<-[CDIMUdmtwA]>. =item Ill-formed CRTL environ value "%s" @@ -1783,7 +1917,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 @@ -1877,6 +2012,13 @@ 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 separator character %s in PerlIO layer specification %s + +(W layer) When pushing layers onto the Perl I/O system, something other than a +colon or whitespace was seen between the elements of a layer list. +If the previous attribute had a parenthesised parameter list, perhaps that +list was terminated too soon. + =item Invalid type '%s' in %s (F) The given character is not a valid pack or unpack type. @@ -1905,11 +2047,29 @@ 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 + +(F) Your Perl has not been configured to have PerlIO, and therefore +you cannot use IO layers. To have PerlIO Perl must be configured +with 'useperlio'. + =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 $* is no longer supported + +(D deprecated) 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. + +=item $# is no longer supported + +(D deprecated) The special variable C<$#>, deprecated in older perls, has +been removed as of 5.9.3 and is no longer supported. You should use the +printf/sprintf functions instead. + =item `%s' is not a code reference (W overload) The second (fourth, sixth, ...) argument of overload::constant @@ -1950,7 +2110,7 @@ effective uids or gids failed. =item length/code after end of string in unpack -(F) While unpacking, the string buffer was alread used up when an unpack +(F) While unpacking, the string buffer was already used up when an unpack length/code combination tried to obtain more data. This results in an undefined value for the length. See L. @@ -1960,18 +2120,18 @@ an undefined value for the length. See L. to check the return value of your socket() call? See L. -=item lstat() on filehandle %s - -(W io) You tried to do an lstat on a filehandle. What did you mean -by that? lstat() makes sense only on filenames. (Perl did a fstat() -instead on the filehandle.) - =item Lookbehind longer than %d not implemented in regex; marked by <-- HERE in m/%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 the regular expression about where the problem was discovered. +=item lstat() on filehandle %s + +(W io) You tried to do an lstat on a filehandle. What did you mean +by that? lstat() makes sense only on filenames. (Perl did a fstat() +instead on the filehandle.) + =item Lvalue subs returning %s not implemented yet (F) Due to limitations in the current implementation, array and hash @@ -2011,7 +2171,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 @@ -2022,6 +2182,21 @@ possibility is careless use of utf8::upgrade(). Perl thought it was reading UTF-16 encoded character data but while doing it Perl met a malformed Unicode surrogate. +=item Malformed UTF-8 string in pack + +(F) You tried to pack something that didn't comply with UTF-8 encoding +rules and perl was unable to guess how to make more progress. + +=item Malformed UTF-8 string in unpack + +(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 Malformed UTF-8 string in '%c' format in unpack + +(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 %s matches null string many times in regex; marked by <-- HERE in m/%s/ (W regexp) The pattern you've specified would be an infinite loop if the @@ -2061,6 +2236,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 @@ -2095,8 +2275,8 @@ can vary from one line to the next. =item (Missing operator before %s?) -(S) This is an educated guess made in conjunction with the message "%s -found where operator expected". Often the missing operator is a comma. +(S syntax) This is an educated guess made in conjunction with the message +"%s found where operator expected". Often the missing operator is a comma. =item Missing right brace on %s @@ -2110,8 +2290,8 @@ 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 +(S syntax) 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 @@ -2170,12 +2350,6 @@ See L for details. (W syntax) Multidimensional arrays aren't written like C<$foo[1,2,3]>. They're written like C<$foo[1][2][3]>, as in C. -=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 in unpack (F) You had an unpack template that contained a '/', but this did not @@ -2200,6 +2374,11 @@ If you had a good reason for having a unique name, then just mention it again somehow to suppress the message. The C declaration is provided for this purpose. +NOTE: This warning detects symbols that have been used only once so $c, @c, +%c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered +the same; if a program uses $c only once but also uses any of the others it +will not trigger this warning. + =item Negative '/' count in unpack (F) The length count obtained from a length/code unpack operation was @@ -2263,22 +2442,21 @@ doesn't know where you want to pipe the output from this command. =item No DB::DB routine defined (F) The currently executing code was compiled with the B<-d> switch, but -for some reason the perl5db.pl file (or some facsimile thereof) didn't -define a routine to be called at the beginning of each statement. Which -is odd, because the file should have been required automatically, and -should have blown up the require if it didn't parse right. +for some reason the current debugger (e.g. F or a C +module) didn't define a routine to be called at the beginning of each +statement. =item No dbm on this machine (P) This is counted as an internal error, because every machine should supply dbm nowadays, because Perl comes with SDBM. See L. -=item No DBsub routine +=item No DB::sub routine defined -(F) The currently executing code was compiled with the B<-d> switch, -but for some reason the perl5db.pl file (or some facsimile thereof) -didn't define a DB::sub routine to be called at the beginning of each -ordinary subroutine call. +(F) The currently executing code was compiled with the B<-d> switch, but +for some reason the current debugger (e.g. F or a C +module) didn't define a C routine to be called at the beginning +of each ordinary subroutine call. =item No B<-e> allowed in setuid scripts @@ -2344,16 +2522,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 @@ -2540,7 +2719,7 @@ that isn't open. Check your control flow. See also L. (S internal) An internal warning that the grammar is screwed up. -=item Operation `%s': no method found, %s +=item Operation "%s": no method found, %s (F) An attempt was made to perform an overloaded operation for which no handler was defined. While some handlers can be autogenerated in terms @@ -2572,6 +2751,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 @@ -2604,11 +2788,22 @@ C<$arr[time]> instead of C<$arr[$time]>. parsing, but realloc() wouldn't give it more memory, virtual or otherwise. +=item '.' outside of string in pack + +(F) The argument to a '.' in your template tried to move the working +position to before the start of the packed string being built. + =item '@' outside of string in unpack (F) You had a template that specified an absolute position outside the string being unpacked. See L. +=item '@' outside of string with malformed UTF-8 in unpack + +(F) You had a template that specified an absolute position outside +the string being unpacked. The string being unpacked was also invalid +UTF-8. See L. + =item %s package attribute may clash with future reserved word: %s (W reserved) A lowercase attribute name was used that had a @@ -2648,6 +2843,13 @@ there are in the savestack. (P) Failed an internal consistency check while trying to reset a weak reference. +=item panic: Devel::DProf inconsistent subroutine return + +(P) Devel::DProf called a subroutine that exited using goto(LABEL), +last(LABEL) or next(LABEL). Leaving that way a subroutine called from +an XSUB will lead very probably to a crash of the interpreter. This is +a bug that will hopefully one day get fixed. + =item panic: die %s (P) We popped the context stack to an eval context, and then discovered @@ -2712,6 +2914,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. @@ -2788,15 +2994,15 @@ was string. (P) The compiler attempted to do a goto, or something weird like that. -=item panic: yylex - -(P) The lexer got into a bad state while processing a case modifier. - =item panic: utf16_to_utf8: odd bytelen (P) Something tried to call utf16_to_utf8 with an odd (as opposed to even) byte length. +=item panic: yylex + +(P) The lexer got into a bad state while processing a case modifier. + =item Parentheses missing around "%s" list (W parenthesis) You said something like @@ -2821,30 +3027,12 @@ 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 perlio: argument list not closed for layer "%s" - -(W layer) 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 layer specification list %s - -(W layer) When pushing layers onto the Perl I/O system, something other than a -colon or whitespace was seen between the elements of a layer list. -If the previous attribute had a parenthesised parameter list, perhaps that -list was terminated too soon. - -=item perlio: unknown layer "%s" +=item Perl_my_%s() not available -(W layer) An attempt was made to push an unknown layer onto the Perl I/O -system. (Layers take care of transforming data between external and -internal representations.) Note that some layers, such as C, -are not supported in all environments. If your program didn't -explicitly request the failing operation, it may be the result of the -value of the environment variable PERLIO. +(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 @@ -3003,8 +3191,8 @@ with a numeric comparison operator, like this : This expression is actually equivalent to C<$x & ($y == 0)>, due to the higher precedence of C<==>. This is probably not what you want. (If you -really meant to write this, disable the warning, or, better, write -C<$x & ($y == 0 ? 1 : 0)>). +really meant to write this, disable the warning, or, better, put the +parentheses explicitly and write C<$x & ($y == 0)>). =item Possible unintended interpolation of %s in string @@ -3013,11 +3201,6 @@ 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 Possible Y2K bug: %s - -(W y2k) You are concatenating the number 19 with another number, which -could be a potential Year 2000 problem. - =item pragma "attrs" is deprecated, use "sub NAME : ATTRS" instead (D deprecated) You have written something like this: @@ -3194,6 +3377,12 @@ expression compiler gave it. (P) A "can't happen" error, because safemalloc() should have caught it earlier. +=item Repeated format line will never terminate (~~ and @# incompatible) + +(F) Your format contains the ~~ repeat-until-blank sequence and a +numeric field that will never go blank so that the repetition never +terminates. You might use ^# instead. See L. + =item Reversed %s= operator (W syntax) You wrote your assignment operator backwards. The = must @@ -3260,6 +3449,16 @@ construct, not just the empty search pattern. Therefore code written in Perl 5.9.0 or later that uses the // as the I can be misparsed by pre-5.9.0 Perls as a non-terminated search pattern. +=item Search pattern not terminated or ternary operator parsed as search pattern + +(F) The lexer couldn't find the final delimiter of a C +construct. + +The question mark is also used as part of the ternary operator (as in +C) leading to some ambiguous constructions being wrongly +parsed. One way to disambiguate the parsing is to put parentheses around +the conditional expression, i.e. C<(foo) ? 0 : 1>. + =item %sseek() on unopened filehandle (W unopened) You tried to use the seek() or sysseek() function on a @@ -3394,10 +3593,21 @@ L. (F) The setuid emulator won't run a script that is writable by the world, because the world might have written on it already. +=item Setuid script not plain file + +(F) The setuid emulator won't run a script that isn't read from a file, +but from a socket, a pipe or another device. + =item shm%s not implemented (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 @@ -3463,7 +3673,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" (P) Overloading resolution over @ISA tree may be broken by importation stubs. Stubs should never be implicitly created, but explicit calls to @@ -3510,6 +3720,11 @@ 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 sv_upgrade from type %d down to type %d + +(P) Perl tried to force the upgrade an SV to a type which was actually +inferior to its current type. + =item Switch (?(condition)... contains too many branches in regex; marked by <-- HERE in m/%s/ (F) A (?(condition)if-clause|else-clause) construct can have at most two @@ -3533,6 +3748,10 @@ about where the problem was discovered. See L. (F) While under the C pragma, we cannot switch the real and effective uids or gids. +=item %s syntax + +(F) The final summary message when a C succeeds. + =item syntax error (F) Probably means you had a syntax error. Common reasons include: @@ -3567,10 +3786,6 @@ yourself. a perl4 interpreter, especially if the next 2 tokens are "use strict" or "my $var" or "our $var". -=item %s syntax - -(F) The final summary message when a C succeeds. - =item sysread() on closed filehandle %s (W closed) You tried to read from a closed filehandle. @@ -3641,6 +3856,11 @@ linkhood 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 The 'unique' attribute may only be applied to 'our' variables + +(F) Currently this attribute is not supported on C or C +declarations. See L. + =item This Perl can't reset CRTL environ elements (%s) =item This Perl can't set CRTL environ elements (%s=%s) @@ -3655,19 +3875,29 @@ target of the change to =item thread failed to start: %s -(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. +(W threads)(S) The entry point function of threads->create() failed for some reason. =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, @@ -3687,25 +3917,9 @@ 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> or B<-m> option. This is an error because B<-M> and B<-m> options +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. -=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, @@ -3745,8 +3959,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 @@ -3851,16 +4065,21 @@ what you are doing you can turn off this warning by C. (F) There are no byte-swapping functions for a machine with this byte order. -=item Unknown "re" subpragma '%s' (known ones are: %s) - -You tried to use an unknown subpragma of the "re" pragma. - =item Unknown open() mode '%s' (F) The second argument of 3-argument open() is not among the list of valid modes: C<< < >>, C<< > >>, C<<< >> >>>, C<< +< >>, C<< +> >>, C<<< +>> >>>, C<-|>, C<|->, C<< <& >>, C<< >& >>. +=item Unknown PerlIO layer "%s" + +(W layer) An attempt was made to push an unknown layer onto the Perl I/O +system. (Layers take care of transforming data between external and +internal representations.) Note that some layers, such as C, +are not supported in all environments. If your program didn't +explicitly request the failing operation, it may be the result of the +value of the environment variable PERLIO. + =item Unknown process %x sent message to prime_env_iter: %s (P) An error peculiar to VMS. Perl was reading values for %ENV before @@ -3868,6 +4087,10 @@ iterating over it, and someone else stuck a message in the stream of data Perl expected. Someone's very confused, or perhaps trying to subvert Perl's population of %ENV for nefarious purposes. +=item Unknown "re" subpragma '%s' (known ones are: %s) + +You tried to use an unknown subpragma of the "re" pragma. + =item Unknown switch condition (?(%.2s in regex; marked by <-- HERE in m/%s/ (F) The condition part of a (?(condition)if-clause|else-clause) construct @@ -3939,6 +4162,11 @@ script, a binary program, or a directory as a Perl program. recognized by Perl inside character classes. The character was understood literally. +=item Unrecognized escape \\%c passed through + +(W misc) You used a backslash-character combination which is not +recognized by Perl. + =item Unrecognized escape \\%c passed through in regex; marked by <-- HERE in m/%s/ (W regexp) You used a backslash-character combination which is not @@ -3947,11 +4175,6 @@ a C<'>-delimited regular expression. The character was understood literally. The <-- HERE shows in the regular expression about where the escape was discovered. -=item Unrecognized escape \\%c passed through - -(W misc) You used a backslash-character combination which is not -recognized by Perl. - =item Unrecognized signal name "%s" (F) You specified a signal name to the kill() function that was not @@ -3987,10 +4210,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 @@ -4029,6 +4252,16 @@ earlier in the line, and you really meant a "less than". (W untie) A copy of the object returned from C (or C) was still valid when C was called. +=item Usage: POSIX::%s(%s) + +(F) You called a POSIX function with incorrect arguments. +See L for more information. + +=item Usage: Win32::%s(%s) + +(F) You called a Win32 function with incorrect arguments. +See L for more information. + =item Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/ (W regexp) You have used an internal modifier such as (?-o) that has no @@ -4043,6 +4276,12 @@ must be written as The <-- HERE shows in the regular expression about where the problem was discovered. See L. +=item Useless localization of %s + +(W syntax) The localization of lvalues such as C is +legal, but in fact the local() currently has no effect. This may change at +some point in the future, but in the meantime such code is discouraged. + =item Useless (?%s) - use /%s modifier in regex; marked by <-- HERE in m/%s/ (W regexp) You have used an internal modifier such as (?o) that has no @@ -4149,6 +4388,19 @@ modifier is not presently meaningful in substitutions. use the /g modifier. Currently, /c is meaningful only when /g is used. (This may change in the future.) +=item Use of freed value in iteration + +(F) Perhaps you modified the iterated array within the loop? +This error is typically caused by code like the following: + + @a = (3,4); + @a = () for (1,2,@a); + +You are not supposed to modify arrays while they are being iterated over. +For speed and efficiency reasons, Perl internally does not do full +reference-counting of iterated items, hence deleting such an item in the +middle of an iteration causes Perl to see a freed value. + =item Use of *glob{FILEHANDLE} is deprecated (D deprecated) You are now encouraged to use the shorter *glob{IO} form @@ -4195,36 +4447,12 @@ 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 $* is deprecated - -(D deprecated) 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<$*>. - -=item Use of $# is deprecated - -(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 %s is deprecated (D deprecated) 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 freed value in iteration (perhaps you modified the iterated array within the loop?) - -(F) This is typically caused by code like the following: - - @a = (3,4); - @a = () for (1,2,@a); - -You are not supposed to modify arrays while they are being iterated over. -For speed and efficiency reasons, Perl internally does not do full -reference-counting of iterated items, hence deleting such an item in the -middle of an iteration causes Perl to see a freed value. - =item Use of -l on filehandle %s (W io) A filehandle represents an opened file, and when you opened the file @@ -4271,13 +4499,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 @@ -4319,6 +4548,36 @@ C operator. longer than 1024 characters. The return value has been truncated to 1024 characters. +=item Variable "%s" is not available + +(W closure) During compilation, an inner named subroutine or eval is +attempting to capture an outer lexical that is not currently available. +This can happen for one of two reasons. First, the outer lexical may be +declared in an outer anonymous subroutine that has not yet been created. +(Remember that named subs are created at compile time, while anonymous +subs are created at run-time.) For example, + + sub { my $a; sub f { $a } } + +At the time that f is created, it can't capture the current value of $a, +since the anonymous subroutine hasn't been created yet. Conversely, +the following won't give a warning since the anonymous subroutine has by +now been created and is live: + + sub { my $a; eval 'sub f { $a }' }->(); + +The second situation is caused by an eval accessing a variable that has +gone out of scope, for example, + + sub f { + my $a; + sub { eval '$a' } + } + f()->(); + +Here, when the '$a' in the eval is being compiled, f() is not currently being +executed, so its $a is not available for capture. + =item Variable "%s" is not imported%s (F) While "use strict" in effect, you referred to a global variable that @@ -4341,27 +4600,6 @@ instance. This is almost always a typographical error. Note that the earlier variable will still exist until the end of the scope or until all closure referents to it are destroyed. -=item Variable "%s" may be unavailable - -(W closure) An inner (nested) I subroutine is inside a -I subroutine, and outside that is another subroutine; and the -anonymous (innermost) subroutine is referencing a lexical variable -defined in the outermost subroutine. For example: - - sub outermost { my $a; sub middle { sub { $a } } } - -If the anonymous subroutine is called or referenced (directly or -indirectly) from the outermost subroutine, it will share the variable as -you would expect. But if the anonymous subroutine is called or -referenced when the outermost subroutine is not active, it will see the -value of the shared variable as it was before and during the *first* -call to the outermost subroutine, which is probably not what you want. - -In these circumstances, it is usually best to make the middle subroutine -anonymous, using the C syntax. Perl has specific support for -shared variables in nested anonymous subroutines; a named subroutine in -between interferes with this feature. - =item Variable syntax (A) You've accidentally run your script through B instead @@ -4371,22 +4609,18 @@ Perl yourself. =item Variable "%s" will not stay shared (W closure) An inner (nested) I subroutine is referencing a -lexical variable defined in an outer subroutine. +lexical variable defined in an outer named subroutine. -When the inner subroutine is called, it will probably see the value of +When the inner subroutine is called, it will see the value of the outer subroutine's variable as it was before and during the *first* call to the outer subroutine; in this case, after the first call to the outer subroutine is complete, the inner and outer subroutines will no longer share a common value for the variable. In other words, the variable will no longer be shared. -Furthermore, if the outer subroutine is anonymous and references a -lexical variable outside itself, then the outer and inner subroutines -will I share the given variable. - This problem can usually be solved by making the inner subroutine anonymous, using the C syntax. When inner anonymous subs that -reference variables in outer subroutines are called or referenced, they +reference variables in outer subroutines are created, they are automatically rebound to the current values of such variables. =item Version number must be a constant number @@ -4438,9 +4672,12 @@ 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 -one. This warning is by default on for I/O (like print) but can be -turned off by C. You are supposed to explicitly -mark the filehandle with an encoding, see L and L. +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 +warning is to add C but that is often closer to +cheating. In general, you are supposed to explicitly mark the +filehandle with an encoding, see L and L. =item Within []-length '%c' not allowed @@ -4454,6 +4691,16 @@ of the codes @, /, U, u, w or a *-length. Redesign the template. (W closed) The filehandle you're writing to got itself closed sometime before now. Check your control flow. +=item %s "\x%s" does not map to Unicode + +When reading in different encodings Perl tries to map everything +into Unicode characters. The bytes you read in are not legal in +this encoding, for example + + utf8 "\xE4" does not map to Unicode + +if you try to read in the a-diaereses Latin-1 as UTF-8. + =item 'X' outside of string (F) You had a (un)pack template that specified a relative position before @@ -4464,16 +4711,6 @@ the beginning of the string being (un)packed. See L. (F) You had a pack template that specified a relative position after the end of the string being unpacked. See L. -=item Xsub "%s" called in sort - -(F) The use of an external subroutine as a sort comparison is not yet -supported. - -=item Xsub called in sort - -(F) The use of an external subroutine as a sort comparison is not yet -supported. - =item YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET! (F) And you probably never will, because you probably don't have the @@ -4489,6 +4726,12 @@ which means that Perl 5 will try to call the subroutine when the assignment is executed, which is probably not what you want. (If it IS what you want, put an & in front.) +=item Your random numbers are not that random + +(F) When trying to initialise the random seed for hashes, Perl could +not get any randomness out of your system. This usually indicates +Something Very Wrong. + =back =cut