X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=37bcf1a750444ebc3672cc6887bbc716eac6ca8e;hb=5ff3f7a4e03a6b103d9e628865398e498e9a7968;hp=a138bc6645c8d8f92eeb7f993bd16dfde28e2a02;hpb=54310121b442974721115f93666234a200f5c7e4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index a138bc6..37bcf1a 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -23,7 +23,7 @@ L. Some of these messages are generic. Spots that vary are denoted with a %s, just as in a printf format. Note that some messages start with a %s! -The symbols C<"%-?@> sort before the letters, while C<[> and C<\> sort after. +The symbols C<"%(-?@> sort before the letters, while C<[> and C<\> sort after. =over 4 @@ -33,11 +33,11 @@ The symbols C<"%-?@> sort before the letters, while C<[> and C<\> sort after. to try to declare one with a package qualifier on the front. Use local() if you want to localize a package variable. -=item "my" variable %s masks earlier declaration in same scope +=item "my" variable %s masks earlier declaration in same %s -(S) A lexical variable has been redeclared in the same scope, effectively -eliminating all access to the previous instance. This is almost always -a typographical error. Note that the earlier variable will still exist +(W) A lexical 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 all closure referents to it are destroyed. @@ -143,6 +143,12 @@ Perl yourself. instead of Perl. Check the #! line, or manually feed your script into Perl yourself. +=item (Missing semicolon on previous line?) + +(S) This is an educated guess made in conjunction with the message "%s +found where operator expected". Don't automatically put a semicolon on +the previous line just because you saw this message. + =item B<-P> not allowed for setuid/setgid script (F) The script would have to be opened by the C preprocessor by name, @@ -153,6 +159,12 @@ which provides a race condition that breaks security. (F) Perl can't peek at the stdio buffer of filehandles when it doesn't know about your kind of stdio. You'll have to use a filename instead. +=item C<-p> destination: %s + +(F) An error occurred during the implicit output invoked by the C<-p> +command-line switch. (This output goes to STDOUT unless you've +redirected it with select().) + =item 500 Server error See Server error. @@ -176,13 +188,9 @@ the return value of your socket() call? See L. (X) You can't allocate more than 64K on an MS-DOS machine. -=item Allocation too large - -(F) You can't allocate more than 2^31+"small amount" bytes. - =item Applying %s to %s will act on scalar(%s) -(W) The pattern match (//), substitution (s///), and translation (tr///) +(W) The pattern match (//), substitution (s///), and transliteration (tr///) operators work on scalar values. If you apply one of them to an array or a hash, it will convert the array or hash to a scalar value -- the length of an array, or the population info of a hash -- and then work on @@ -199,6 +207,22 @@ L and L for alternatives. you thought. Normally it's pretty easy to disambiguate it by supplying a missing quote, operator, parenthesis pair or declaration. +=item Ambiguous call resolved as CORE::%s(), qualify as such or use & + +(W) A subroutine you have declared has the same name as a Perl keyword, +and you have used the name without qualification for calling one or the +other. Perl decided to call the builtin because the subroutine is +not imported. + +To force interpretation as a subroutine call, either put an ampersand +before the subroutine name, or qualify the name with its package. +Alternatively, you can import the subroutine (or pretend that it's +imported with the C pragma). + +To silently interpret it as the Perl operator, use the C prefix +on the operator (e.g. C) or by declaring the subroutine +to be an object method (see L). + =item Args must match #! line (F) The setuid emulator requires that the arguments Perl was invoked @@ -265,6 +289,15 @@ could indicate that SvREFCNT_dec() was called too many times, or that SvREFCNT_inc() was called too few times, or that the SV was mortalized when it shouldn't have been, or that memory has been corrupted. +=item Attempt to pack pointer to temporary value + +(W) You tried to pass a temporary value (like the result of a +function, or a computed expression) to the "p" pack() template. This +means the result contains a pointer to a location that could become +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 use reference as lvalue in substr (W) You supplied a reference as the first argument to substr() used @@ -299,6 +332,12 @@ system malloc(). (P) One of the internal hash routines was passed a null HV pointer. +=item Bad index while coercing array into hash + +(F) The index looked up in the hash found as the 0'th element of a +pseudo-hash is not legal. Index values must be at 1 or greater. +See L. + =item Bad name after %s:: (F) You started to name a symbol by using a package prefix, and then didn't @@ -340,6 +379,12 @@ Perl yourself. subroutine identifier, in curly braces or to the left of the "=>" symbol. Perhaps you need to predeclare a subroutine? +=item Bareword "%s" refers to nonexistent package + +(W) You used a qualified bareword of the form C, but +the compiler saw no other uses of that namespace before that point. +Perhaps you need to predeclare a package? + =item BEGIN failed--compilation aborted (F) An untrapped exception was raised while executing a BEGIN subroutine. @@ -374,6 +419,11 @@ like 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" into the middle of a foreach loop + +(F) A "goto" statement was executed to jump into the middle of a +foreach loop. You can't get there from here. See L. + =item Can't "last" outside a block (F) A "last" statement was executed to break out of the current block, @@ -427,7 +477,17 @@ an object reference until it has been blessed. See L. (F) You used the syntax of a method call, but the slot filled by the object reference or package name contains an expression that returns -neither an object reference nor a package name. (Perhaps it's null?) +a defined value which is neither an object reference nor a package name. +Something like this will reproduce the error: + + $BADREF = 42; + process $BADREF 1,2,3; + $BADREF->process(1,2,3); + +=item Can't call method "%s" on an undefined value + +(F) You used the syntax of a method call, but the slot filled by the +object reference or package name contains an undefined value. Something like this will reproduce the error: $BADREF = undef; @@ -464,6 +524,12 @@ but then $foo no longer contains a glob. (F) Certain types of SVs, in particular real symbol table entries (typeglobs), can't be forced to stop being what they are. +=item Can't coerce array into hash + +(F) You used an array where a hash was expected, but the array has no +information on how to map from keys to array indices. You can do that +only with arrays that have a hash reference at index 0. + =item Can't create pipe mailbox (P) An error peculiar to VMS. The process is suffering from exhausted quotas @@ -543,8 +609,19 @@ mention "perl" on the #! line somewhere. =item Can't execute %s +(F) You used the B<-S> switch, but the copies of the script to execute found +in the PATH did not have correct permissions. + +=item Can't find %s on PATH, '.' not in PATH + +(F) You used the B<-S> switch, but the script to execute could not be found +in the PATH, or at least not with the correct permissions. The script +exists in the current directory, but PATH prohibits running it. + +=item Can't find %s on PATH + (F) You used the B<-S> switch, but the script to execute could not be found -in the PATH, or at least not with the correct permissions. +in the PATH. =item Can't find label %s @@ -557,7 +634,11 @@ for us to go to. See L. the closing delimiter was omitted. Because bracketed quotes count nesting levels, the following is missing its final parenthesis: - print q(The character '(' starts a side comment.) + print q(The character '(' starts a side comment.); + +If you're getting this error from a here-document, you may have +included unseen whitespace before or after your closing tag. A good +programmer's editor will have a way to help you find these characters. =item Can't fork @@ -597,12 +678,17 @@ call for another. It can't manufacture one out of whole cloth. In general you should be calling it out of only an AUTOLOAD routine anyway. See L. -=item Can't localize a reference +=item Can't goto subroutine from an eval-string + +(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.) + +=item Can't localize through a reference -(F) You said something like C, which is not allowed because -the compiler can't determine whether $ref will end up pointing to anything -with a symbol table entry, and a symbol table entry is necessary to -do a local. +(F) You said something like C, which Perl can't currently +handle, because when it goes to restore the old value of whatever $ref +pointed to after the scope of the local() is finished, it can't be +sure that $ref will still be a reference. =item Can't localize lexical variable %s @@ -611,9 +697,23 @@ lexical variable using "my". This is not allowed. If you want to localize a package variable of the same name, qualify it with the package name. +=item Can't localize pseudo-hash element + +(F) You said something like C{'key'}>, where $ar is +a reference to a pseudo-hash. That hasn't been implemented yet, but +you can get a similar effect by localizing the corresponding array +element directly -- C[$ar-E[0]{'key'}]>. + +=item Can't locate auto/%s.al in @INC + +(F) A function (or method) was called in a package which allows autoload, +but there is no function to autoload. Most probable causes are a misprint +in a function/method name or a failure to C the file, say, by +doing C. + =item Can't locate %s in @INC -(F) You said to do (or require, or use) a file that couldn't be found in +(F) You said to do (or require, or use) a file that couldn't be found in any of the libraries mentioned in @INC. Perhaps you need to set the PERL5LIB or PERL5OPT environment variable to say where the extra library is, or maybe the script needs to add the library name to @INC. Or maybe @@ -630,10 +730,9 @@ method, nor does any of its base classes. See L. (W) The @ISA array contained the name of another package that doesn't seem to exist. -=item Can't mktemp() +=item Can't make list assignment to \%ENV on this system -(F) The mktemp() routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. +(F) List assignment to %ENV is not supported on some systems, notably VMS. =item Can't modify %s in %s @@ -652,8 +751,11 @@ buffer. =item Can't open %s: %s -(S) An inplace edit couldn't open the original file for the indicated reason. -Usually this is because you don't have read permission for the file. +(S) The implicit opening of a file through use of the CE> +filehandle, either implicitly under the C<-n> or C<-p> command-line +switches, or explicitly, failed for the indicated reason. Usually this +is because you don't have read permission for a file which you named +on the command line. =item Can't open bidirectional pipe @@ -688,6 +790,13 @@ couldn't open the pipe into which to send data destined for stdout. (F) The script you specified can't be opened for the indicated reason. +=item Can't redefine active sort subroutine %s + +(F) Perl optimizes the internal handling of sort subroutines and keeps +pointers into them. You tried to redefine one such sort subroutine when it +was currently active, which is not allowed. If you really want to do +this, you should write C instead of C. + =item Can't rename %s to %s: %s, skipping file (S) The rename done by the B<-i> switch failed for some reason, probably because @@ -720,13 +829,16 @@ of suidperl. =item Can't take log of %g -(F) Logarithms are defined on only positive real numbers. +(F) For ordinary real numbers, you can't take the logarithm of a +negative number or zero. There's a Math::Complex package that comes +standard with Perl, though, if you really want to do that for +the negative numbers. =item Can't take sqrt of %g (F) For ordinary real numbers, you can't take the square root of a -negative number. There's a Complex package available for Perl, though, -if you really want to do that. +negative number. There's a Math::Complex package that comes standard +with Perl, though, if you really want to do that. =item Can't undef active subroutine @@ -752,6 +864,12 @@ message indicates that such a conversion was attempted. of upgradability. Upgrading to undef indicates an error in the code calling sv_upgrade. +=item Can't use %%! because Errno.pm is not available + +(F) The first time the %! hash is used, perl automatically loads the +Errno.pm module. The Errno module is expected to tie the %! hash to +provide symbolic names for C<$!> errno values. + =item Can't use "my %s" in sort comparison (F) The global variables $a and $b are reserved for sort comparisons. @@ -807,21 +925,16 @@ weren't. subscript. But to the left of the brackets was an expression that didn't look like an array reference, or anything else subscriptable. -=item Can't write to temp file for B<-e>: %s - -(F) The write routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. - =item Can't x= to read-only value (F) You tried to repeat a constant value (often the undefined value) with an assignment operator, which implies modifying the value itself. Perhaps you need to copy the value to a temporary, and repeat that. -=item Cannot open temporary file +=item Cannot find an opnumber for "%s" -(F) The create routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. +(F) A string of a form C was given to prototype(), but +there is no builtin with the name C. =item Cannot resolve method `%s' overloading `%s' in package `%s' @@ -829,6 +942,30 @@ a B<-e> switch. Maybe your /tmp partition is full, or clobbered. opposed to a subroutine reference): no such method callable via the package. If method name is C, this is an internal error. +=item Character class syntax [. .] is reserved for future extensions + +(W) Within regular expression character classes ([]) the syntax beginning +with "[." and ending with ".]" is reserved for future extensions. +If you need to represent those character sequences inside a regular +expression character class, just quote the square brackets with the +backslash: "\[." and ".\]". + +=item Character class syntax [: :] is reserved for future extensions + +(W) Within regular expression character classes ([]) the syntax beginning +with "[:" and ending with ":]" is reserved for future extensions. +If you need to represent those character sequences inside a regular +expression character class, just quote the square brackets with the +backslash: "\[:" and ":\]". + +=item Character class syntax [= =] is reserved for future extensions + +(W) Within regular expression character classes ([]) the syntax +beginning with "[=" and ending with "=]" is reserved for future extensions. +If you need to represent those character sequences inside a regular +expression character class, just quote the square brackets with the +backslash: "\[=" and "=\]". + =item chmod: mode argument is missing initial 0 (W) A novice will sometimes say @@ -842,6 +979,24 @@ to 01411. Octal constants are introduced with a leading 0 in Perl, as in C. (W) You tried to close a filehandle that was never opened. +=item Compilation failed in require + +(F) Perl could not compile a file specified in a C statement. +Perl uses this generic message when none of the errors that it encountered +were severe enough to halt compilation immediately. + +=item Complex regular subexpression recursion limit (%d) exceeded + +(W) The regular expression engine uses recursion in complex situations +where back-tracking is required. Recursion depth is limited to 32766, +or perhaps less in architectures where the stack cannot grow +arbitrarily. ("Simple" and "medium" situations are handled without +recursion and are not subject to a limit.) Try shortening the string +under examination; looping in Perl code (e.g. with C) rather +than in the regular expression engine; or rewriting the regular +expression so that it is simpler or backtracks less. (See L +for information on I.) + =item connect() on closed fd (W) You tried to do a connect on a closed socket. Did you forget to check @@ -880,10 +1035,16 @@ a valid magic number. =item Deep recursion on subroutine "%s" (W) This subroutine has called itself (directly or indirectly) 100 -times than it has returned. This probably indicates an infinite +times more than it has returned. This probably indicates an infinite recursion, unless you're writing strange benchmark programs, in which case it indicates something else. +=item Delimiter for here document is too long + +(F) In a here document construct like CEFOO>, the label +C is too long for Perl to handle. You have to be seriously +twisted to write code that triggers this error. + =item Did you mean &%s instead? (W) You probably referred to an imported subroutine &FOO as $FOO or some such. @@ -935,6 +1096,16 @@ unlikely to be what you want. (F) An untrapped exception was raised while executing an END subroutine. The interpreter is immediately exited. +=item effective %s access is not implemented + +(F) We cannot switch the real and effective uids or gids. +The C pragma is unavailable in this system. + +=item entering effective %s access failed + +(F) While under the C pragma, switching the real and +effective uids or gids failed. + =item Error converting file specification %s (F) An error peculiar to VMS. Because Perl may have to deal with file @@ -943,6 +1114,34 @@ single form when it must operate on them directly. Either you've passed an invalid file specification to Perl, or you've found a case the conversion routines don't handle. Drat. +=item %s: Eval-group in insecure regular expression + +(F) Perl detected tainted data when trying to compile a regular expression +that contains the C<(?{ ... })> zero-width assertion, which is unsafe. +See L, and L. + +=item %s: Eval-group not allowed, use re 'eval' + +(F) A regular expression contained the C<(?{ ... })> zero-width assertion, +but that construct is only allowed when the C pragma is +in effect. See L. + +=item %s: Eval-group not allowed at run time + +(F) Perl tried to compile a regular expression containing the C<(?{ ... })> +zero-width assertion at run time, as it would when the pattern contains +interpolated values. Since that is a security risk, it is not allowed. +If you insist, you may still do this by explicitly building the pattern +from an interpolated string at run time and using that in an eval(). +See L. + +=item Excessively long <> operator + +(F) The contents of a <> operator may not exceed the maximum size of a +Perl identifier. If you're just trying to glob a long list of +filenames, try using the glob() operator, or put the filenames into a +variable and glob that. + =item Execution of %s aborted due to compilation errors (F) The final summary message when a Perl compilation fails. @@ -968,6 +1167,13 @@ a goto, or a loop control statement. (W) You are exiting a substitution by unconventional means, such as a return, a goto, or a loop control statement. +=item Explicit blessing to '' (assuming package main) + +(W) You are blessing a reference to a zero length string. This has +the effect of blessing the reference into the package main. This is +usually not what you want. Consider providing a default target +package, e.g. bless($ref, $p || 'MyPackage'); + =item Fatal VMS error at %s, line %d (P) An error peculiar to VMS. Something untoward happened in a VMS system @@ -1062,7 +1268,6 @@ Did you forget to check the return value of your socket() call? (S) A warning peculiar to VMS. The call to C underlying the C operator returned an invalid UIC. - =item Glob not terminated (F) The lexer saw a left angle bracket in a place where it was expecting @@ -1092,6 +1297,13 @@ an emergency basis to prevent a core dump. (D) Really old Perl let you omit the % on hash names in some spots. This is now heavily deprecated. +=item Identifier too long + +(F) Perl limits identifiers (names for variables, functions, etc.) to +about 250 characters for simple names, and somewhat more for compound +names (like C<$A::B>). You've exceeded Perl's limits. Future +versions of Perl are likely to eliminate these arbitrary limitations. + =item Ill-formed logical name |%s| in prime_env_iter (W) A warning peculiar to VMS. A logical name was encountered when preparing @@ -1139,6 +1351,12 @@ don't take to this kindly. (W) You may have tried to use an 8 or 9 in a octal number. Interpretation of the octal number stopped before the 8 or 9. +=item Illegal hex digit ignored + +(W) You may have tried to use a character other than 0 - 9 or A - F in a +hexadecimal number. Interpretation of the hexadecimal number stopped +before the illegal character. + =item Illegal switch in PERL5OPT: %s (X) The PERL5OPT environment variable may only be used to set the @@ -1170,10 +1388,11 @@ for more information. script if C<$ENV{PATH}> contains a directory that is writable by the world. See L. -=item Insecure PATH +=item Insecure $ENV{%s} while running %s (F) You can't use system(), exec(), or a piped open in a setuid or -setgid script if C<$ENV{PATH}> is derived from data supplied (or +setgid script if any of C<$ENV{PATH}>, C<$ENV{IFS}>, C<$ENV{CDPATH}>, +C<$ENV{ENV}> or C<$ENV{BASH_ENV}> are derived from data supplied (or potentially supplied) by the user. The script must set the path to a known value, using trustworthy data. See L. @@ -1203,6 +1422,17 @@ and execute the specified command. (P) Something went badly wrong in the regular expression parser. +=item internal error: glob failed + +(P) Something went wrong with the external program(s) used for C +and C*.cE>. This may mean that your csh (C shell) is +broken. If so, you should change all of the csh-related variables in +config.sh: If you have tcsh, make the variables refer to it as if it +were csh (e.g. C); otherwise, make them all +empty (except that C should be C<'undef'>) so that Perl will +think csh is missing. In either case, after editing config.sh, run +C<./Configure -S> and rebuild Perl. + =item internal urp in regexp at /%s/ (P) Something went badly awry in the regular expression parser. @@ -1212,6 +1442,23 @@ and execute the specified command. (F) The range specified in a character class had a minimum character greater than the maximum character. See L. +=item Invalid conversion in %s: "%s" + +(W) Perl does not understand the given format conversion. +See L. + +=item Invalid type in pack: '%s' + +(F) The given character is not a valid pack type. See L. +(W) The given character is not a valid pack type but used to be silently +ignored. + +=item Invalid type in unpack: '%s' + +(F) The given character is not a valid unpack type. See L. +(W) The given character is not a valid unpack type but used to be silently +ignored. + =item ioctl is not implemented (F) Your machine apparently doesn't implement ioctl(), which is pretty @@ -1239,6 +1486,11 @@ L. that name, not even if you count where you were called from. See L. +=item leaving effective %s access failed + +(F) While under the C pragma, switching the real and +effective uids or gids failed. + =item listen() on closed fd (W) You tried to do a listen on a closed socket. Did you forget to check @@ -1281,12 +1533,6 @@ found where operator expected". Often the missing operator is a comma. As a general rule, you'll find it's missing near the place you were last editing. -=item Missing semicolon on previous line? - -(S) This is an educated guess made in conjunction with the message "%s -found where operator expected". Don't automatically put a semicolon on -the previous line just because you saw this message. - =item Modification of a read-only value attempted (F) You tried, directly or indirectly, to change the value of a @@ -1298,15 +1544,15 @@ catches that. But an easy way to do the same thing is: Another way is to assign to a substr() that's off the end of the string. -=item Modification of noncreatable array value attempted, subscript %d +=item Modification of non-creatable array value attempted, subscript %d (F) You tried to make an array value spring into existence, and the subscript was probably negative, even counting from end of the array backwards. -=item Modification of noncreatable hash value attempted, subscript "%s" +=item Modification of non-creatable hash value attempted, subscript "%s" -(F) You tried to make a hash value spring into existence, and it couldn't +(P) You tried to make a hash value spring into existence, and it couldn't be created for some peculiar reason. =item Module name must be constant @@ -1447,6 +1693,19 @@ your system. (F) The argument to B<-I> must follow the B<-I> immediately with no intervening space. +=item No such array field + +(F) You tried to access an array as a hash, but the field name used is +not defined. The hash at index 0 should map all valid field names to +array indices for that to work. + +=item No such field "%s" in variable %s of type %s + +(F) You tried to access a field of a typed variable where the type +does not know about the field name. The field names are looked up in +the %FIELDS hash in the type package at compile time. The %FIELDS hash +is usually set up with the 'fields' pragma. + =item No such pipe open (P) An error peculiar to VMS. The internal routine my_pclose() tried to @@ -1458,6 +1717,14 @@ an attempt to close an unopened filehandle. (W) You specified a signal name as a subscript to %SIG that was not recognized. Say C in your shell to see the valid signal names on your system. +=item no UTC offset information; assuming local time is UTC + +(S) A warning peculiar to VMS. Per was unable to find the local +timezone offset, so it's assuming that local system time is equivalent +to UTC. If it's not, define the logical name F +to translate to the number of seconds which need to be added to UTC to +get local time. + =item Not a CODE reference (F) Perl was trying to evaluate a reference to a code value (that is, a @@ -1549,10 +1816,17 @@ supplied it an uninitialized value. See L. (P) The internal pattern matching routines are out of their gourd. -=item Odd number of elements in hash list +=item Number too long + +(F) Perl limits the representation of decimal numbers in programs to about +about 250 characters. You've exceeded that length. Future versions of +Perl are likely to eliminate this arbitrary limitation. In the meantime, +try using scientific notation (e.g. "1e6" instead of "1_000_000"). + +=item Odd number of elements in hash assignment -(S) You specified an odd number of elements to a hash list, which is odd, -because hash lists come in key/value pairs. +(S) You specified an odd number of elements to initialize a hash, which +is odd, because hashes come in key/value pairs. =item Offset outside string @@ -1569,7 +1843,7 @@ will extend the buffer and zero pad the new area. (S) 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 @@ -1590,7 +1864,7 @@ if you said "*foo * 'foo'". (F) The yacc parser wanted to grow its stack so it could continue parsing, but realloc() wouldn't give it more memory, virtual or otherwise. -=item Out of memory! +=item Out of memory during request for %s (X|F) The malloc() function returned 0, indicating there was insufficient remaining memory (or virtual memory) to satisfy the request. @@ -1601,13 +1875,19 @@ However, if compiled for this, Perl may use the contents of C<$^M> as an emergency pool after die()ing with this message. In this case the error is trappable I. -=item Out of memory during request for %s +=item Out of memory during "large" request for %s (F) The malloc() function returned 0, indicating there was insufficient remaining memory (or virtual memory) to satisfy the request. However, the request was judged large enough (compile-time default is 64K), so a possibility to shut down by trapping this error is granted. +=item Out of memory during ridiculously large request + +(F) You can't allocate more than 2^31+"small amount" bytes. This error +is most likely to be caused by a typo in the Perl program. e.g., C<$arr[time]> +instead of C<$arr[$time]>. + =item page overflow (W) A single call to write() produced more lines than can fit on a page. @@ -1647,6 +1927,10 @@ it wasn't an eval context. (P) The internal do_trans() routine was called with invalid operational data. +=item panic: frexp + +(P) The library function frexp() failed, making printf("%f") impossible. + =item panic: goto (P) We popped the context stack to a context with the specified label, @@ -1753,7 +2037,7 @@ was string. (P) The lexer got into a bad state while processing a case modifier. -=item Pareneses missing around "%s" list +=item Parentheses missing around "%s" list (W) You said something like @@ -1775,7 +2059,7 @@ anyway? See L. (F) The setuid emulator in suidperl decided you were up to no good. -=item pid %d not a child +=item pid %x not a child (W) A warning peculiar to VMS. Waitpid() was asked to wait for a process which isn't a subprocess of the current process. While this is fine from VMS' @@ -1791,8 +2075,7 @@ the BSD version, which takes a pid. (W) qw() lists contain items separated by whitespace; as with literal strings, comment characters are not ignored, but are instead treated as literal data. (You may have used different delimiters than the -exclamation marks parentheses shown here; braces are also frequently -used.) +parentheses shown here; braces are also frequently used.) You probably wrote something like this: @@ -1877,6 +2160,13 @@ last argument of the previous construct, for example: (S) The subroutine being declared or defined had previously been declared or defined with a different function prototype. +=item Range iterator outside integer range + +(F) One (or both) of the numeric arguments to the range operator ".." +are outside the range which can be represented by integers internally. +One possible workaround is to force Perl to use magical string +increment by prepending "0" to your numbers. + =item Read on closed filehandle E%sE (W) The filehandle you're reading from got itself closed sometime before now. @@ -1892,16 +2182,38 @@ Check your logic flow. desired output is compiled into Perl, which entails some overhead, which is why it's currently left out of your copy. -=item Recursive inheritance detected +=item Recursive inheritance detected in package '%s' (F) More than 100 levels of inheritance were used. Probably indicates an unintended loop in your inheritance hierarchy. +=item Recursive inheritance detected while looking for method '%s' in package '%s' + +(F) More than 100 levels of inheritance were encountered while invoking a +method. Probably indicates an unintended loop in your inheritance hierarchy. + +=item Reference found where even-sized list expected + +(W) You gave a single reference where Perl was expecting a list with +an even number of elements (for assignment to a hash). This +usually means that you used the anon hash constructor when you meant +to use parens. In any case, a hash requires key/value B. + + %hash = { one => 1, two => 2, }; # WRONG + %hash = [ qw/ an anon array / ]; # WRONG + %hash = ( one => 1, two => 2, ); # right + %hash = qw( one 1 two 2 ); # also fine + =item Reference miscount in sv_replace() (W) The internal sv_replace() function was handed a new SV with a reference count of other than 1. +=item regexp *+ operand could be empty + +(F) The part of the regexp subject to either the * or + quantifier +could match an empty string. + =item regexp memory corruption (P) The regular expression engine got confused by what the regular @@ -1969,11 +2281,12 @@ or setgid bit set. This doesn't make much sense. (F) The lexer couldn't find the final delimiter of a // or m{} construct. Remember that bracketing delimiters count nesting level. +Missing the leading C<$> from a variable C<$m> may cause this error. -=item seek() on unopened file +=item %sseek() on unopened file -(W) You tried to use the seek() function on a filehandle that was either -never opened or has since been closed. +(W) You tried to use the seek() or sysseek() function on a filehandle that +was either never opened or has since been closed. =item select not implemented @@ -1998,6 +2311,11 @@ or possibly some other missing operator, such as a comma. (W) The filehandle you're sending to got itself closed sometime before now. Check your logic flow. +=item Sequence (? incomplete + +(F) A regular expression ended with an incomplete extension (?. +See L. + =item Sequence (?#... not terminated (F) A regular expression comment must be terminated by a closing @@ -2052,7 +2370,7 @@ think so. =item setruid() not implemented -(F) You tried to assign to C<$>, and your operating system doesn't support +(F) You tried to assign to C<$E>, and your operating system doesn't support the setruid() system call (or equivalent), or at least Configure didn't think so. @@ -2135,17 +2453,21 @@ L. (F) The lexer couldn't find the interior delimiter of a s/// or s{}{} construct. Remember that bracketing delimiters count nesting level. +Missing the leading C<$> from variable C<$s> may cause this error. =item Substitution replacement not terminated (F) The lexer couldn't find the final delimiter of a s/// or s{}{} construct. Remember that bracketing delimiters count nesting level. +Missing the leading C<$> from variable C<$s> may cause this error. =item substr outside of string -(W) You tried to reference a substr() that pointed outside of a string. -That is, the absolute value of the offset was larger than the length of -the string. See L. +(S),(W) You tried to reference a substr() that pointed outside of a +string. That is, the absolute value of the offset was larger than the +length of the string. See L. This warning is +mandatory if substr is used in an lvalue context (as the left hand side +of an assignment or as a subroutine argument for example). =item suidperl is no longer needed since %s @@ -2179,16 +2501,23 @@ if the error went away. Sort of the cybernetic version of S<20 questions>. instead of Perl. Check the #! line, or manually feed your script into Perl yourself. -=item System V IPC is not implemented on this machine +=item System V %s is not implemented on this machine -(F) You tried to do something with a function beginning with "sem", "shm", -or "msg". See L, for example. +(F) You tried to do something with a function beginning with "sem", +"shm", or "msg" but that System V IPC is not implemented in your +machine. In some machines the functionality can exist but be +unconfigured. Consult your system support. =item Syswrite on closed filehandle (W) The filehandle you're writing to got itself closed sometime before now. Check your logic flow. +=item Target of goto is too deeply nested + +(F) You tried to use C to reach a label that was too deeply +nested for Perl to reach. Perl is doing you a favor by refusing. + =item tell() on unopened file (W) You tried to use the tell() function on a filehandle that was either @@ -2246,10 +2575,10 @@ system call to call, silly dilly. =item Too late for "B<-T>" option (X) The #! line (or local equivalent) in a Perl script contains the -B<-T> option, but Perl was not invoked with B<-T> in its argument -list. This is an error because, by the time Perl discovers a B<-T> in -a script, it's too late to properly taint everything from the -environment. So Perl gives up. +B<-T> option, but Perl was not invoked with B<-T> in its command line. +This is an error because, by the time Perl discovers a B<-T> in a +script, it's too late to properly taint everything from the environment. +So Perl gives up. If the Perl script is being executed as a command using the #! mechanism (or its local equivalent), this error can usually be fixed @@ -2259,6 +2588,12 @@ first argument: e.g. change C to C. If the Perl script is being executed as C, then the B<-T> option must appear on the command line: C. +=item Too late for "-%s" option + +(X) The #! line (or local equivalent) in a Perl script contains the +B<-M> or B<-m> option. This is an error because B<-M> and B<-m> options +are not intended for use inside scripts. Use the C pragma instead. + =item Too many ('s =item Too many )'s @@ -2280,12 +2615,13 @@ Perl yourself. (F) The regular expression ends with an unbackslashed backslash. Backslash it. See L. -=item Translation pattern not terminated +=item Transliteration pattern not terminated (F) The lexer couldn't find the interior delimiter of a tr/// or tr[][] -construct. +or y/// or y[][] construct. Missing the leading C<$> from variables +C<$tr> or C<$y> may cause this error. -=item Translation replacement not terminated +=item Transliteration replacement not terminated (F) The lexer couldn't find the final delimiter of a tr/// or tr[][] construct. @@ -2304,8 +2640,13 @@ certain type. Arrays must be @NAME or C<@{EXPR}>. Hashes must be =item umask: argument is missing initial 0 -(W) A umask of 222 is incorrect. It should be 0222, because octal literals -always start with 0 in Perl, as in C. +(W) A umask of 222 is incorrect. It should be 0222, because octal +literals always start with 0 in Perl, as in C. + +=item umask not implemented + +(F) Your machine doesn't implement the umask function and you tried +to use it to restrict permissions for yourself (EXPR & 0700). =item Unable to create sub named "%s" @@ -2361,6 +2702,11 @@ have been defined yet. See L. (F) The format indicated doesn't seem to exist. Perhaps it's really in another package? See L. +=item Undefined value assigned to typeglob + +(W) An undefined value was assigned to a typeglob, a la C<*foo = undef>. +This does nothing. It's possible that you really mean C. + =item unexec of %s into %s failed! (F) The unexec() routine failed for some reason. See your local FSF @@ -2406,7 +2752,7 @@ script, a binary program, or a directory as a Perl program. (F) You specified a signal name to the kill() function that was not recognized. Say C in your shell to see the valid signal names on your system. -=item Unrecognized switch: -%s +=item Unrecognized switch: -%s (-h will show valid options) (F) You specified an illegal option to Perl. Don't do that. (If you think you didn't do that, check the #! line to see if it's @@ -2432,7 +2778,7 @@ the name you call Perl by to C, C, and so on. =item Unsupported function %s -(F) This machines doesn't implement the indicated function, apparently. +(F) This machine doesn't implement the indicated function, apparently. At least, Configure doesn't think so. =item Unsupported socket function "%s" called @@ -2454,7 +2800,7 @@ Use an explicit printf() or sprintf() instead. =item Use of $* is deprecated -(D) This variable magically turned on multiline pattern matching, both for +(D) This variable magically turned on multi-line pattern matching, both for you and for any luckless subroutine that you happen to call. You should use the new C and C modifiers now to do that without the dangerous action-at-a-distance effects of C<$*>. @@ -2464,12 +2810,6 @@ action-at-a-distance effects of C<$*>. (F) You attempted to use a feature of printf that is accessible from only C. This usually means there's a better way to do it in Perl. -=item Use of %s is deprecated - -(D) The construct indicated is no longer recommended for use, generally -because there's a better way to do it, and also because the old way has -bad side effects. - =item Use of bare EE to mean EE"" is deprecated (D) You are now encouraged to use the explicitly quoted form if you @@ -2481,12 +2821,53 @@ wish to use an empty line as the terminator of the here-document. subroutine's argument list, so it's better if you assign the results of a split() explicitly to an array (or list). +=item Use of inherited AUTOLOAD for non-method %s() is deprecated + +(D) As an (ahem) accidental feature, C subroutines are looked +up as methods (using the C<@ISA> hierarchy) even when the subroutines to +be autoloaded were called as plain functions (e.g. C), not +as methods (e.g. Cbar()> or C<$obj-Ebar()>). + +This bug will be rectified in Perl 5.005, which will use method lookup +only for methods' Cs. However, there is a significant base +of existing code that may be using the old behavior. So, as an +interim step, Perl 5.004 issues an optional warning when non-methods +use inherited Cs. + +The simple rule is: Inheritance will not work when autoloading +non-methods. The simple fix for old code is: In any module that used to +depend on inheriting C for non-methods from a base class named +C, execute C<*AUTOLOAD = \&BaseClass::AUTOLOAD> during startup. + +In code that currently says C you +should remove AutoLoader from @ISA and change C to +C. + +=item Use of reserved word "%s" is deprecated + +(D) The indicated bareword is a reserved word. Future versions of perl +may use it as a keyword, so you're better off either explicitly quoting +the word in a manner appropriate for its context of use, or using a +different name altogether. The warning can be suppressed for subroutine +names by either adding a C<&> prefix, or using a package qualifier, +e.g. C<&our()>, or C. + +=item Use of %s is deprecated + +(D) The construct indicated is no longer recommended for use, generally +because there's a better way to do it, and also because the old way has +bad side effects. + =item Use of uninitialized value (W) An undefined value was used as if it were already defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign an initial value to your variables. +=item Useless use of "re" pragma + +(W) You did C without any arguments. That isn't very useful. + =item Useless use of %s in void context (W) You did something without a side effect in a context that does nothing @@ -2589,6 +2970,27 @@ variables. of Perl. Check the #! line, or manually feed your script into Perl yourself. +=item perl: warning: Setting locale failed. + +(S) The whole warning message will look something like: + + perl: warning: Setting locale failed. + perl: warning: Please check that your locale settings: + LC_ALL = "En_US", + LANG = (unset) + are supported and installed on your system. + perl: warning: Falling back to the standard locale ("C"). + +Exactly what were the failed locale settings varies. In the above the +settings were that the LC_ALL was "En_US" and the LANG had no value. +This error means that Perl detected that you and/or your system +administrator have set up the so-called variable system but Perl could +not use those settings. This was not dead serious, fortunately: there +is a "default locale" called "C" that Perl can and will use, the +script will be run. Before you really fix 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 Warning: something's wrong (W) You passed warn() an empty string (the equivalent of C) or @@ -2703,7 +3105,7 @@ version of Perl, and this should not happen anyway. =item Malformed PERLLIB_PREFIX -(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form +(F) An error peculiar to OS/2. PERLLIB_PREFIX should be of the form prefix1;prefix2 @@ -2711,21 +3113,23 @@ or prefix1 prefix2 -with nonempty prefix1 and prefix2. If C is indeed a prefix of -a builtin library search path, prefix2 is substituted. The error may appear -if components are not found, or are too long. See L. +with nonempty prefix1 and prefix2. If C is indeed a prefix +of a builtin library search path, prefix2 is substituted. The error +may appear if components are not found, or are too long. See +"PERLLIB_PREFIX" in F. =item PERL_SH_DIR too long (F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the -C-shell in. See L. +C-shell in. See "PERL_SH_DIR" in F. =item Process terminated by SIG%s (W) This is a standard message issued by OS/2 applications, while *nix -applications die in silence. It is considered a feature of the OS/2 -port. One can easily disable this by appropriate sighandlers, see -L. See L. +applications die in silence. It is considered a feature of the OS/2 +port. One can easily disable this by appropriate sighandlers, see +L. See also "Process terminated by SIGTERM/SIGINT" +in F. =back