Style issue
[p5sagit/p5-mst-13.2.git] / pod / perldiag.pod
index 4dd8d40..a47dda1 100644 (file)
@@ -187,6 +187,13 @@ know which context to supply to the right side.
 (F) When C<vec> 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
@@ -536,9 +543,9 @@ quotas or other plumbing problems.
 
 =item Can't declare class for non-scalar %s in "%s"
 
-(S) Currently, only scalar variables can declared with a specific class
-qualifier in a "my" or "our" declaration.  The semantics may be extended
-for other types of variables in future.
+(F) Currently, only scalar variables can be declared with a specific
+class qualifier in a "my" or "our" declaration.  The semantics may be
+extended for other types of variables in future.
 
 =item Can't declare %s in "%s"
 
@@ -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
@@ -1282,6 +1289,11 @@ something that isn't defined yet, you don't actually have to define the
 subroutine or package before the current location.  You can use an empty
 "sub foo;" or "package FOO;" to enter a "forward" declaration.
 
+=item dump() better written as CORE::dump()
+
+(W misc) You used the obsolescent C<dump()> built-in function, without fully
+qualifying it as C<CORE::dump()>.  Maybe it's a typo.  See L<perlfunc/dump>.
+
 =item Duplicate free() ignored
 
 (S malloc) An internal routine called free() on something that had
@@ -1294,6 +1306,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<use filetest> pragma, switching the real and
@@ -1456,7 +1472,7 @@ to the end of your file without finding such a line.
 (W redefine) You redefined a format.  To suppress this warning, say
 
     {
-       no warnings;
+       no warnings 'redefine';
        eval "format NAME =...";
     }
 
@@ -1594,6 +1610,11 @@ when Perl was built using standard options.  For some reason, your
 version of Perl appears to have been built without this support.  Talk
 to your Perl administrator.
 
+=item Illegal character in prototype for %s : %s
+
+(W syntax) An illegal character was found in a prototype declaration.  Legal
+characters in prototypes are $, @, %, *, ;, [, ], &, and \.
+
 =item Illegal division by zero
 
 (F) You tried to divide a number by 0.  Either something was wrong in
@@ -1618,17 +1639,17 @@ 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
 
 (X) The PERL5OPT environment variable may only be used to set the
-following switches: B<-[DIMUdmw]>.
+following switches: B<-[DIMUdmtw]>.
 
 =item Ill-formed CRTL environ value "%s"
 
@@ -1826,7 +1847,7 @@ L<perlfunc/listen>.
 
 =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.)
 
@@ -1858,6 +1879,13 @@ 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 L<perlos2>.
 
+=item Malformed prototype for %s: %s
+
+(F) You tried to use a function with a malformed prototype.  The
+syntax of function prototypes is given a brief compile-time check for
+obvious errors like invalid characters.  A more rigorous check is run
+when the function is called.
+
 =item Malformed UTF-8 character (%s)
 
 Perl detected something that didn't comply with UTF-8 encoding rules.
@@ -1940,6 +1968,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
@@ -2175,6 +2207,11 @@ immediately after the switch, without intervening spaces.
 (F) The indicated command line switch needs a mandatory argument, but
 you haven't specified one.
 
+=item No such class %s
+
+(F) You provided a class qualifier in a "my" or "our" declaration, but
+this class doesn't exist at this point in your program.
+
 =item No such pipe open
 
 (P) An error peculiar to VMS.  The internal routine my_pclose() tried to
@@ -2309,7 +2346,7 @@ supplied it an uninitialized value.  See L<perlform>.
 =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").
@@ -2333,6 +2370,11 @@ See also L<perlport> for writing portable code.
 (W) The call to overload::constant contained an odd number of arguments.
 The arguments should come in pairs.
 
+=item Odd number of elements in anonymous hash
+
+(W misc) You specified an odd number of elements to initialize a hash,
+which is odd, because hashes come in key/value pairs.
+
 =item Odd number of elements in hash assignment
 
 (W misc) You specified an odd number of elements to initialize a hash,
@@ -2673,7 +2715,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.
 
@@ -2696,11 +2738,15 @@ 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 P must have an explicit size
+
+(F) The unpack format P must have an explicit size, not "*".
+
 =item POSIX syntax [%s] belongs inside character classes in regex;
 
 marked by <-- HERE in m/%s/
 
-(W unsafe) The character class constructs [: :], [= =], and [. .]  go
+(W regexp) The character class constructs [: :], [= =], and [. .]  go
 I<inside> character classes, the [] are part of the construct, for example:
 /[012[:alpha:]345]/.  Note that [= =] and [. .] are not currently
 implemented; they are simply placeholders for future extensions and will
@@ -2863,7 +2909,7 @@ in L<perlos2>.
 
 =item Prototype mismatch: %s vs %s
 
-(S unsafe) The subroutine being declared or defined had previously been
+(S prototype) 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;
@@ -3135,11 +3181,9 @@ 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
-       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
+       http://www.perl.org/CGI_MetaFAQ.html
+       http://www.htmlhelp.org/faq/cgifaq.html
+       http://www.w3.org/Security/Faq/
 
 You should also look at L<perlfaq9>.
 
@@ -3256,7 +3300,7 @@ C<can> may break this.
 (W redefine) You redefined a subroutine.  To suppress this warning, say
 
     {
-       no warnings;
+       no warnings 'redefine';
        eval "sub name { ... }";
     }
 
@@ -3269,13 +3313,13 @@ L<perlop/"Quote and Quote-like Operators">.
 
 =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.
 
@@ -3476,11 +3520,11 @@ BEGIN block.
 
 =item Too many )'s
 
+=item Too many ('s
+
 (A) You've accidentally run your script through B<csh> instead of Perl.
 Check the #! line, or manually feed your script into Perl yourself.
 
-=item Too many ('s
-
 =item Trailing \ in regex m/%s/
 
 (F) The regular expression ends with an unbackslashed backslash.
@@ -3584,6 +3628,11 @@ Check the #! line, or manually feed your script into Perl yourself.
 (F) The unexec() routine failed for some reason.  See your local FSF
 representative, who probably put it there in the first place.
 
+=item Unicode character %s is illegal
+
+(W utf8) Certain Unicode characters have been designated off-limits by
+the Unicode standard and should not be generated.  If you really know
+what you are doing you can turn off this warning by C<no warnings 'utf8';>.
 
 =item Unknown BYTEORDER
 
@@ -3829,6 +3878,14 @@ about.
 
 (W) You did C<use re;> without any arguments.   That isn't very useful.
 
+=item Useless use of sort in scalar context
+
+(W void) You used sort in scalar context, as in :
+
+    my $x = sort @y;
+
+This is not very useful, and perl currently optimizes this away.
+
 =item Useless use of %s with no values
 
 (W syntax) You used the push() or unshift() function with no arguments
@@ -3848,6 +3905,21 @@ returns no useful value.  See L<perlmod>.
 (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
@@ -3945,17 +4017,27 @@ 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 
+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 
+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 UTF-16 surrogate %s
+
+(W utf8) You tried to generate half of an UTF-16 surrogate by
+requesting a Unicode character between the code points 0xD800 and
+0xDFFF (inclusive).  That range is reserved exclusively for the use of
+UTF-16 encoding (by having two 16-bit UCS-2 characters); but Perl
+encodes its characters in UTF-8, so what you got is a very illegal
+character.  If you really know what you are doing you can turn off
+this warning by C<no warnings 'utf8';>.
+
 =item Value of %s can be "0"; test with defined()
 
 (W misc) In a conditional expression, you used <HANDLE>, <*> (glob),
@@ -4050,6 +4132,16 @@ where the problem was discovered. See L<perlre>.
 its equivalent C<BEGIN> 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<use 5.6.1> say
+C<use 5.006_001>.  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<warn "">) or
@@ -4119,7 +4211,7 @@ 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 put a setuid C wrapper around 
+about what you want.  Your best bet is to put a setuid C wrapper around
 your script.
 
 =item You need to quote "%s"