X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=5fdeb70ab8c9d407612f0773a094567c12f4afb1;hb=92c2ed055315fc5be2c58f97c40236945f31f32e;hp=9f16761239a0b4cc56d8deedf498dd1a1e09b501;hpb=2c268ad5f2bec64cb74406f2e1af30ddc0dc3b9f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 9f16761..5fdeb70 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -188,10 +188,6 @@ 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 transliteration (tr///) @@ -211,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 @@ -320,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 @@ -459,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; @@ -496,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 @@ -663,6 +697,13 @@ 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, @@ -693,11 +734,6 @@ to exist. (F) List assignment to %ENV is not supported on some systems, notably VMS. -=item Can't mktemp() - -(F) The mktemp() routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. - =item Can't modify %s in %s (F) You aren't allowed to assign to the item indicated, or otherwise try to @@ -828,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. @@ -883,11 +925,6 @@ 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 @@ -899,11 +936,6 @@ Perhaps you need to copy the value to a temporary, and repeat that. (F) A string of a form C was given to prototype(), but there is no builtin with the name C. -=item Cannot open temporary file - -(F) The create routine failed for some reason while trying to process -a B<-e> switch. Maybe your /tmp partition is full, or clobbered. - =item Cannot resolve method `%s' overloading `%s' in package `%s' (F|P) Error resolving overloading specified by a method name (as @@ -953,6 +985,18 @@ to 01411. Octal constants are introduced with a leading 0 in Perl, as in C. 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 @@ -1060,6 +1104,27 @@ 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 @@ -1092,6 +1157,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 or 'MyPackage'); + =item Fatal VMS error at %s, line %d (P) An error peculiar to VMS. Something untoward happened in a VMS system @@ -1270,6 +1342,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 @@ -1301,10 +1379,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. @@ -1451,13 +1530,13 @@ 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 be created for some peculiar reason. @@ -1600,6 +1679,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 @@ -1709,10 +1801,10 @@ about 250 characters. You've exceeded that length. Future versions of Perl are likely to eliminate this arbitrary limitation. In the meantime, try using scientific notation (e.g. "1e6" instead of "1_000_000"). -=item Odd number of elements in hash list +=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 @@ -1729,7 +1821,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 @@ -1750,7 +1842,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. @@ -1761,13 +1853,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. @@ -1917,7 +2015,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 @@ -1955,8 +2053,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: @@ -2041,6 +2138,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. @@ -2056,11 +2160,28 @@ 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 @@ -2169,6 +2290,7 @@ or possibly some other missing operator, such as a comma. Check your logic flow. =item Sequence (? incomplete + (F) A regular expression ended with an incomplete extension (?. See L. @@ -2494,8 +2616,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" @@ -2551,6 +2678,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 @@ -2622,7 +2754,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 @@ -2682,7 +2814,7 @@ a split() explicitly to an array (or list). (D) As an (ahem) accidental feature, C subroutines are looked up as methods (using the C<@ISA> hierarchy) even when the subroutines to be autoloaded were called as plain functions (e.g. C), not -as methods (e.g. Cbar()> or C<$obj->bar()>). +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 @@ -2697,7 +2829,16 @@ 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. +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 @@ -2711,6 +2852,10 @@ bad side effects. 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