X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldiag.pod;h=a4c6543bd2eae5f82eb065813d72c549548936c0;hb=689c5c24fe39a249807e60d4f0bb63f4fcd80b10;hp=afcc2ccaded5a74e01ef5402e1099e9668aab423;hpb=ac7cd81aae231be8bd5734f1506e627995fef570;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldiag.pod b/pod/perldiag.pod index afcc2cc..a4c6543 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -72,7 +72,7 @@ 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 +on the operator (e.g. C) or declare the subroutine to be an object method (see L or L). @@ -112,8 +112,8 @@ which 'splits' output into two streams, such as =item Applying %s to %s will act on scalar(%s) -(W misc) The pattern match (//), substitution (s///), and -transliteration (tr///) operators work on scalar values. If you apply +(W misc) The pattern match (C), substitution (C), and +transliteration (C) 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 that scalar value. This is probably not what @@ -184,9 +184,16 @@ know which context to supply to the right side. =item Negative offset to vec in lvalue context -(F) When vec is called in an lvalue context, the second argument must be +(F) When C is called in an lvalue context, the second argument must be greater than or equal to zero. +=item Attempt to access to key '%_' in fixed hash + +(F) A hash has been marked as READONLY at the C level to turn it +into a "record" with a fixed set of keys. The failing code +has attempted to get or set the value of a key which does not +exist or to delete a key. + =item Attempt to bless into a reference (F) The CLASSNAME argument to the bless() operator is expected to be @@ -261,7 +268,7 @@ avoid this warning. used as an lvalue, which is pretty strange. Perhaps you forgot to dereference it first. See L. -=item Bad arg length for %s, is %d, should be %d +=item Bad arg length for %s, is %d, should be %s (F) You passed a buffer of the wrong size to one of msgctl(), semctl() or shmctl(). In C parlance, the correct sizes are, respectively, @@ -270,7 +277,7 @@ S. =item Bad evalled substitution pattern -(F) You've used the /e switch to evaluate the replacement for a +(F) You've used the C switch to evaluate the replacement for a substitution, but perl found a syntax error in the code to evaluate, most likely an unexpected right brace '}'. @@ -604,7 +611,7 @@ line. =item Can't exec "%s": %s -(W exec) An system(), exec(), or piped open call could not execute the +(W exec) A system(), exec(), or piped open call could not execute the named program for the indicated reason. Typical reasons include: the permissions were wrong on the file, the file wasn't found in C<$ENV{PATH}>, the executable in question was compiled for another @@ -631,7 +638,7 @@ is no builtin with the name C. =item Can't find %s character property "%s" (F) You used C<\p{}> or C<\P{}> but the character property by that name -could not be find. Maybe you mispelled the name of the property +could not be found. Maybe you misspelled the name of the property (remember that the names of character properties consist only of alphanumeric characters), or maybe you forgot the C or C prefix? @@ -1106,16 +1113,6 @@ 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 chmod() mode argument is missing initial 0 - -(W chmod) A novice will sometimes say - - chmod 777, $filename - -not realizing that 777 will be interpreted as a decimal number, -equivalent to 01411. Octal constants are introduced with a leading 0 in -Perl, as in C. - =item close() on unopened filehandle %s (W unopened) You tried to close a filehandle that was never opened. @@ -1304,6 +1301,10 @@ 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. +=item Empty %s + +(F) Empty C<\p{}> or C<\P{}>. + =item entering effective %s failed (F) While under the C pragma, switching the real and @@ -1448,7 +1449,9 @@ some time before now. Check your control flow. flock() operates on filehandles. Are you attempting to call flock() on a dirhandle by the same name? -=item Quantifier follows nothing in regex; marked by <-- HERE in m/%s/ +=item Quantifier follows nothing in regex; + +marked by <-- HERE in m/%s/ (F) You started a regular expression with a quantifier. Backslash it if you meant it literally. The <-- HERE shows in the regular expression about @@ -1626,11 +1629,11 @@ two from 1 to 32 (or 64, if your platform supports that). =item Illegal octal digit %s -(F) You used an 8 or 9 in a octal number. +(F) You used an 8 or 9 in an octal number. =item Illegal octal digit %s ignored -(W digit) You may have tried to use an 8 or 9 in a octal number. +(W digit) You may have tried to use an 8 or 9 in an octal number. Interpretation of the octal number stopped before the 8 or 9. =item Illegal switch in PERL5OPT: %s @@ -1704,7 +1707,6 @@ operations. The <-- HERE shows in the regular expression about where the problem was discovered. - =item Internal inconsistency in tracking vforks (S) A warning peculiar to VMS. Perl keeps track of the number of times @@ -1720,7 +1722,6 @@ terminate the Perl script and execute the specified command. <-- HERE shows in the regular expression about where the problem was discovered. - =item %s (...) interpreted as function (W syntax) You've run afoul of the rule that says that any list operator @@ -1836,7 +1837,7 @@ L. =item lstat() on filehandle %s -(W io) You tried to do a lstat on a filehandle. What did you mean +(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.) @@ -1846,7 +1847,9 @@ instead on the filehandle.) values cannot be returned in subroutines used in lvalue context. See L. -=item Lookbehind longer than %d not implemented in regex; marked by <-- HERE in m/%s/ +=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 @@ -1859,7 +1862,6 @@ shows in the regular expression about where the problem was discovered. prefix1;prefix2 or - prefix1 prefix2 with nonempty prefix1 and prefix2. If C is indeed a prefix of @@ -1876,13 +1878,21 @@ Perl detected something that didn't comply with UTF-8 encoding rules. Perl thought it was reading UTF-16 encoded character data but while doing it Perl met a malformed Unicode surrogate. -=item %s matches null string many times in regex; marked by <-- HERE in m/%s/ +=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 regular expression engine didn't specifically check for that. The <-- HERE shows in the regular expression about where the problem was discovered. See L. +=item "%s" may clash with future reserved word + +(W) This warning may be due to running a perl5 script through a perl4 +interpreter, especially if the word that is being warned about is +"use" or "my". + =item % may only be used in unpack (F) You can't pack a string by supplying a checksum, because the @@ -1941,6 +1951,10 @@ can vary from one line to the next. (S) 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 + +(F) Missing right brace in C<\p{...}> or C<\P{...}>. + =item Missing right curly or square bracket (F) The lexer counted more opening curly or square brackets than closing @@ -2310,7 +2324,7 @@ supplied it an uninitialized value. See L. =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 +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"). @@ -2435,6 +2449,12 @@ package-specific handler. That name might have a meaning to Perl itself some day, even though it doesn't yet. Perhaps you should use a mixed-case attribute name, instead. See L. +=item Package '%s' not found (did you use the incorrect case?) + +(W misc) You included a package file via C, but the package name +did not match the file name. It's possible that you misspelled the +package name. + =item page overflow (W io) A single call to write() produced more lines than can fit on a @@ -2668,7 +2688,7 @@ the result of the value of the environment variable PERLIO. =item perlio: invalid separator character %s in attribute list (S) When pushing layers onto the Perl I/O system, something other than a -colon or whitespace was seen between the elements of an layer list. +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. @@ -2691,7 +2711,9 @@ value of the environment variable PERLIO. process which isn't a subprocess of the current process. While this is fine from VMS' perspective, it's probably not what you intended. -=item POSIX syntax [%s] belongs inside character classes in regex; marked by <-- HERE in m/%s/ +=item POSIX syntax [%s] belongs inside character classes in regex; + +marked by <-- HERE in m/%s/ (W unsafe) The character class constructs [: :], [= =], and [. .] go I character classes, the [] are part of the construct, for example: @@ -2700,7 +2722,9 @@ implemented; they are simply placeholders for future extensions and will cause fatal errors. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item POSIX syntax [. .] is reserved for future extensions in regex; marked by <-- HERE in m/%s/ +=item POSIX syntax [. .] is reserved for future extensions in regex; + +marked by <-- HERE in m/%s/ (F regexp) Within regular expression character classes ([]) the syntax beginning with "[." and ending with ".]" is reserved for future extensions. @@ -2709,7 +2733,9 @@ expression character class, just quote the square brackets with the backslash: "\[." and ".\]". The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item POSIX syntax [= =] is reserved for future extensions in regex; marked by <-- HERE in m/%s/ +=item POSIX syntax [= =] is reserved for future extensions in regex; + +marked by <-- HERE in m/%s/ (F) Within regular expression character classes ([]) the syntax beginning with "[=" and ending with "=]" is reserved for future extensions. If you @@ -2718,7 +2744,9 @@ character class, just quote the square brackets with the backslash: "\[=" and "=\]". The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item POSIX class [:%s:] unknown in regex; marked by <-- HERE in m/%s/ +=item POSIX class [:%s:] unknown in regex; + +marked by <-- HERE in m/%s/ (F) The class in the character class [: :] syntax is unknown. The <-- HERE shows in the regular expression about where the problem was discovered. @@ -2781,6 +2809,13 @@ Perl guesses a reasonable buffer size, but puts a sentinel byte at the end of the buffer just in case. This sentinel byte got clobbered, and Perl assumes that memory is now corrupted. See L. +=item Possible unintended interpolation of %s in string + +(W ambiguous) You said something like `@foo' in a double-quoted string +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 @@ -2846,13 +2881,17 @@ in L. (S unsafe) The subroutine being declared or defined had previously been declared or defined with a different function prototype. -=item Quantifier in {,} bigger than %d in regex; marked by <-- HERE in m/%s/ +=item Quantifier in {,} bigger than %d in regex; + +marked by <-- HERE in m/%s/ (F) There is currently a limit to the size of the min and max values of the {min,max} construct. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item Quantifier unexpected on zero-length expression; marked by <-- HERE in m/%s/ +=item Quantifier unexpected on zero-length expression; + +marked by <-- HERE in m/%s/ (W regexp) You applied a regular expression quantifier in a place where it makes no sense, such as on a zero-width assertion. Try putting the @@ -2923,7 +2962,9 @@ Doing so has no effect. (W internal) The internal sv_replace() function was handed a new SV with a reference count of other than 1. -=item Reference to nonexistent group in regex; marked by <-- HERE in m/%s/ +=item Reference to nonexistent group in regex; + +marked by <-- HERE in m/%s/ (F) You used something like C<\7> in your regular expression, but there are not at least seven sets of capturing parentheses in the expression. If you @@ -3053,26 +3094,34 @@ before now. Check your control flow. shows in the regular expression about where the problem was discovered. See L. -=item Sequence (?{...}) not terminated or not {}-balanced in regex; marked by <-- HERE in m/%s/ +=item Sequence (?{...}) not terminated or not {}-balanced in regex; + +marked by <-- HERE in m/%s/ (F) If the contents of a (?{...}) clause contains braces, they must balance for Perl to properly detect the end of the clause. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item Sequence (?%s...) not implemented in regex; marked by <-- HERE in m/%s/ +=item Sequence (?%s...) not implemented in regex; + +marked by <-- HERE in m/%s/ (F) A proposed regular expression extension has the character reserved but has not yet been written. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ +=item Sequence (?%s...) not recognized in regex; + +marked by <-- HERE in m/%s/ (F) You used a regular expression extension that doesn't make sense. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item Sequence (?#... not terminated in regex; marked by <-- HERE in m/%s/ +=item Sequence (?#... not terminated in regex; + +marked by <-- HERE in m/%s/ (F) A regular expression comment must be terminated by a closing parenthesis. Embedded parentheses aren't allowed. The <-- HERE shows in @@ -3101,8 +3150,8 @@ account you tested it under), does not rely on any environment variables location where the CGI server can't find it, basically, more or less. Please see the following for more information: - http://www.perl.com/CPAN/doc/FAQs/cgi/idiots-guide.html - http://www.perl.com/CPAN/doc/FAQs/cgi/perl-cgi-faq.html + http://www.cpan.org/doc/FAQs/cgi/idiots-guide.html + http://www.cpan.org/doc/FAQs/cgi/perl-cgi-faq.html ftp://rtfm.mit.edu/pub/usenet/news.answers/www/cgi-faq http://hoohoo.ncsa.uiuc.edu/cgi/interface.html http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html @@ -3235,13 +3284,13 @@ L. =item Substitution pattern not terminated -(F) The lexer couldn't find the interior delimiter of a s/// or s{}{} +(F) The lexer couldn't find the interior delimiter of an 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{}{} +(F) The lexer couldn't find the final delimiter of an s/// or s{}{} construct. Remember that bracketing delimiters count nesting level. Missing the leading C<$> from variable C<$s> may cause this error. @@ -3258,7 +3307,9 @@ 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 Switch (?(condition)... contains too many branches in regex; marked by <-- HERE in m/%s/ +=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 branches (the if-clause and the else-clause). If you want one or both to @@ -3270,7 +3321,9 @@ clustering parentheses: The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item Switch condition not recognized in regex; marked by <-- HERE in m/%s/ +=item Switch condition not recognized in regex; + +marked by <-- HERE in m/%s/ (F) If the argument to the (?(...)if-clause|else-clause) construct is a number, it can be only a number. The <-- HERE shows in the regular expression @@ -3309,6 +3362,12 @@ questions>. of Perl. Check the #! line, or manually feed your script into Perl yourself. +=item syntax error in file %s at line %d, next 2 tokens "%s" + +(F) This error is likely to occur if you run a perl5 script through +a perl4 interpreter, especially if the next 2 tokens are "use strict" +or "my $var" or "our $var". + =item %s syntax OK (F) The final summary message when a C succeeds. @@ -3465,11 +3524,6 @@ certain type. Arrays must be @NAME or C<@{EXPR}>. Hashes must be %NAME or C<%{EXPR}>. No implicit dereferencing is allowed--use the {EXPR} forms as an explicit dereference. See L. -=item umask: argument is missing initial 0 - -(W umask) 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 @@ -3551,7 +3605,13 @@ representative, who probably put it there in the first place. (F) There are no byte-swapping functions for a machine with this byte order. -=item Unknown switch condition (?(%.2s in regex; marked by <-- HERE in m/%s/ +=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 is not known. The condition may be lookahead or lookbehind (the condition @@ -3616,7 +3676,9 @@ 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 in regex; marked by <-- HERE in m/%s/ +=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 recognized by Perl. This combination appears in an interpolated variable or @@ -3706,6 +3768,38 @@ 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 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 +meaning unless applied to the entire regexp: + + if ($string =~ /(?o)$pattern/) { ... } + +must be written as + + if ($string =~ /$pattern/o) { ... } + +The <-- HERE shows in the regular expression about +where the problem was discovered. See L. + +=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 +meaning unless removed from the entire regexp: + + if ($string =~ /(?-o)$pattern/o) { ... } + +must be written as + + if ($string =~ /$pattern/) { ... } + +The <-- HERE shows in the regular expression about +where the problem was discovered. See L. + =item Useless use of %s in void context (W void) You did something without a side effect in a context that does @@ -3769,6 +3863,21 @@ returns no useful value. See L. (D deprecated) You are now encouraged to use the explicitly quoted form if you wish to use an empty line as the terminator of the here-document. +=item Use of *glob{FILEHANDLE} is deprecated + +(D deprecated) You are now encouraged to use the shorter *glob{IO} form +to access the filehandle slot within a typeglob. + +=item Use of chdir('') or chdir(undef) as chdir() deprecated + +(D deprecated) chdir() with no arguments is documented to change to +$ENV{HOME} or $ENV{LOGDIR}. chdir(undef) and chdir('') share this +behavior, but that has been deprecated. In future versions they +will simply fail. + +Be careful to check that what you pass to chdir() is defined and not +blank, else you might find yourself in your home directory. + =item Use of implicit split to @_ is deprecated (D deprecated) It makes a lot of work for the compiler when you clobber @@ -3799,6 +3908,13 @@ In code that currently says C you should remove AutoLoader from @ISA and change C to C. +=item Use of "package" with no arguments is deprecated + +(D deprecated) You used the C keyword without specifying a package +name. So no namespace is current at all. Using this can cause many +otherwise reasonable constructs to fail in baffling ways. C +instead. + =item Use of %s in printf format not supported (F) You attempted to use a feature of printf that is accessible from @@ -3858,16 +3974,17 @@ program. =item Using a hash as a reference is deprecated -(D deprecated) You tried to use a hash as a reference, as in C<%foo->{"bar"}> -or C<%$ref->{"hello"}. Versions of perl <= 5.6.1 used to allow this syntax, -but shouldn't have. It is now deprecated, and will be removed in a future -version. +(D deprecated) You tried to use a hash as a reference, as in +C<< %foo->{"bar"} >> or C<< %$ref->{"hello"} >>. Versions of perl <= 5.6.1 +used to allow this syntax, but shouldn't have. It is now deprecated, and will +be removed in a future version. =item Using an array as a reference is deprecated -(D deprecated) You tried to use an array as a reference, as in C<@foo->[23]> -or C<@$ref->[99]>. Versions of perl <= 5.6.1 used to allow this syntax, but -shouldn't have. It is now deprecated, and will be removed in a future version. +(D deprecated) You tried to use an array as a reference, as in +C<< @foo->[23] >> or C<< @$ref->[99] >>. Versions of perl <= 5.6.1 used to +allow this syntax, but shouldn't have. It is now deprecated, and will be +removed in a future version. =item Value of %s can be "0"; test with defined() @@ -3949,7 +4066,9 @@ anonymous, using the C syntax. When inner anonymous subs that reference variables in outer subroutines are called or referenced, they are automatically rebound to the current values of such variables. -=item Variable length lookbehind not implemented in regex; marked by <-- HERE in m/%s/ +=item Variable length lookbehind not implemented in regex; + +marked by <-- HERE in m/%s/ (F) Lookbehind is allowed only for subexpressions whose length is fixed and known at compile time. The <-- HERE shows in the regular expression about @@ -3961,6 +4080,16 @@ where the problem was discovered. See L. its equivalent C block found an internal inconsistency with the version number. +=item v-string in use/require is non-portable + +(W) The use of v-strings is non-portable to older, pre-5.6, Perls. +If you want your scripts to be backward portable, use the floating +point version number: for example, instead of C say +C. This of course won't help: the older Perls +won't suddenly start understanding newer features, but at least +they will show a sensible error message indicating the required +minimum version. + =item Warning: something's wrong (W) You passed warn() an empty string (the equivalent of C) or @@ -4030,8 +4159,8 @@ Use a filename instead. (F) And you probably never will, because you probably don't have the sources to your kernel, and your vendor probably doesn't give a rip -about what you want. Your best bet is to use the wrapsuid script in the -eg directory to put a setuid C wrapper around your script. +about what you want. Your best bet is to put a setuid C wrapper around +your script. =item You need to quote "%s"