cool quote for perldebug
[p5sagit/p5-mst-13.2.git] / pod / perldiag.pod
index 05d04bd..c0eb857 100644 (file)
@@ -12,7 +12,7 @@ desperation):
     (S) A severe warning (mandatory).
     (F) A fatal error (trappable).
     (P) An internal error you should never see (trappable).
-    (X) A very fatal error (non-trappable).
+    (X) A very fatal error (nontrappable).
     (A) An alien error message (not generated by Perl).
 
 Optional warnings are enabled by using the B<-w> switch.  Warnings may
@@ -23,7 +23,7 @@ L<perlfunc/eval>.
 
 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
 
@@ -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.
@@ -174,7 +186,7 @@ the return value of your socket() call?  See L<perlfunc/accept>.
 
 =item Allocation too large: %lx
 
-(X) You can't allocate more than 64K on an MSDOS machine.
+(X) You can't allocate more than 64K on an MS-DOS machine.
 
 =item Allocation too large
 
@@ -237,7 +249,7 @@ know which context to supply to the right side.
 be garbage collected on exit.  An SV was discovered to be outside any
 of those arenas.
 
-=item Attempt to free non-existent shared string
+=item Attempt to free nonexistent shared string
 
 (P) Perl maintains a reference counted internal table of strings to
 optimize the storage and access of hash keys and other strings.  This
@@ -338,7 +350,7 @@ Perl yourself.
 
 (F) With "strict subs" in use, a bareword is only allowed as a
 subroutine identifier, in curly braces or to the left of the "=>" symbol.
-Perhaps you need to pre-declare a subroutine?
+Perhaps you need to predeclare a subroutine?
 
 =item BEGIN failed--compilation aborted
 
@@ -389,7 +401,7 @@ will be considered a block that loops once.  See L<perlfunc/last>.
 there isn't a current block.  Note that an "if" or "else" block doesn't
 count as a "loopish" block, as doesn't a block given to sort().  You can
 usually double the curlies to get the same effect though, because the inner
-curlies will be considered a block that loops once.  See L<perlfunc/last>.
+curlies will be considered a block that loops once.  See L<perlfunc/next>.
 
 =item Can't "redo" outside a block
 
@@ -397,7 +409,7 @@ curlies will be considered a block that loops once.  See L<perlfunc/last>.
 there isn't a current block.  Note that an "if" or "else" block doesn't
 count as a "loopish" block, as doesn't a block given to sort().  You can
 usually double the curlies to get the same effect though, because the inner
-curlies will be considered a block that loops once.  See L<perlfunc/last>.
+curlies will be considered a block that loops once.  See L<perlfunc/redo>.
 
 =item Can't bless non-reference value
 
@@ -406,7 +418,7 @@ encapsulation of objects.  See L<perlobj>.
 
 =item Can't break at that line
 
-(S) A warning intended for while running within the debugger, indicating
+(S) A warning intended to only be printed while running within the debugger, indicating
 the line number specified wasn't the location of a statement that could
 be stopped at.
 
@@ -418,7 +430,7 @@ in it, let alone methods.  See L<perlobj>.
 
 =item Can't call method "%s" on unblessed reference
 
-(F) A method call must know what package it's supposed to run in.  It
+(F) A method call must know in what package it's supposed to run.  It
 ordinarily finds this out from the object reference you supply, but
 you didn't supply an object reference in this case.  A reference isn't
 an object reference until it has been blessed.  See L<perlobj>.
@@ -478,10 +490,10 @@ They must have ordinary identifiers as names.
 
 (S) The creation of the new file failed for the indicated reason.
 
-=item Can't do in-place edit without backup
+=item Can't do inplace edit without backup
 
-(F) You're on a system such as MSDOS that gets confused if you try reading
-from a deleted (but still opened) file.  You have to say B<-i>C<.bak>, or some
+(F) You're on a system such as MS-DOS that gets confused if you try reading
+from a deleted (but still opened) file.  You have to say C<-i.bak>, or some
 such.
 
 =item Can't do inplace edit: %s E<gt> 14 characters
@@ -543,8 +555,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
 
@@ -563,14 +586,6 @@ levels, the following is missing its final parenthesis:
 
 (F) A fatal error occurred while trying to fork while opening a pipeline.
 
-=item Unsupported function fork
-
-(F) Your version of executable does not support forking.
-
-Note that under some systems, like OS/2, there may be different flavors of
-Perl executables, some of which may support fork, some not. Try changing
-the name you call Perl by to C<perl_>, C<perl__>, and so on.
-
 =item Can't get filespec - stale stat buffer?
 
 (S) A warning peculiar to VMS.  This arises because of the difference between
@@ -605,12 +620,12 @@ 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<perlfunc/goto>.
 
-=item Can't localize a reference
+=item Can't localize through a reference
 
-(F) You said something like C<local $$ref>, 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<local $$ref>, 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
 
@@ -619,12 +634,19 @@ 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 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<AutoSplit> the file, say, by
+doing C<make install>.
+
 =item Can't locate %s in @INC
 
 (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 environment variable to say where the extra library is,
-or maybe the script needs to add the library name to @INC.  Or maybe
+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
 you just misspelled the name of the file.  See L<perlfunc/require>.
 
 =item Can't locate object method "%s" via package "%s"
@@ -638,6 +660,10 @@ method, nor does any of its base classes.  See L<perlobj>.
 (W) The @ISA array contained the name of another package that doesn't seem
 to exist.
 
+=item Can't make list assignment to \%ENV on this system
+
+(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
@@ -648,7 +674,7 @@ a B<-e> switch.  Maybe your /tmp partition is full, or clobbered.
 (F) You aren't allowed to assign to the item indicated, or otherwise try to
 change it, such as with an auto-increment.
 
-=item Can't modify non-existent substring
+=item Can't modify nonexistent substring
 
 (P) The internal routine that does assignment to a substr() was handed
 a NULL.
@@ -660,8 +686,11 @@ buffer.
 
 =item Can't open %s: %s
 
-(S) An in-place 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 C<E<lt>E<gt>>
+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
 
@@ -696,6 +725,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<sort { &func } @x> instead of C<sort func @x>.
+
 =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
@@ -799,7 +835,7 @@ are disallowed.  See L<perlref>.
 =item Can't use an undefined value as %s reference
 
 (F) A value used as either a hard reference or a symbolic reference must
-be a defined value.  This helps to de-lurk some insidious errors.
+be a defined value.  This helps to delurk some insidious errors.
 
 =item Can't use global %s in "my"
 
@@ -850,6 +886,12 @@ 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<require> statement.
+Perl uses this generic message when none of the errors that it encountered
+were severe enough to halt compilation immediately.
+
 =item connect() on closed fd
 
 (W) You tried to do a connect on a closed socket.  Did you forget to check
@@ -888,10 +930,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 C<E<lt>E<lt>FOO>, the label
+C<FOO> 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.
@@ -906,7 +954,7 @@ On the other hand, maybe you just meant %hash and got carried away.
 (F) You passed die() an empty string (the equivalent of C<die "">) or
 you called it with no args and both C<$@> and C<$_> were empty.
 
-=item Do you need to pre-declare %s?
+=item Do you need to predeclare %s?
 
 (S) This is an educated guess made in conjunction with the message "%s
 found where operator expected".  It often means a subroutine or module
@@ -951,6 +999,13 @@ 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 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.
@@ -1100,24 +1155,31 @@ 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
 to iterate over %ENV which violates the syntactic rules governing logical
 names.  Because it cannot be translated normally, it is skipped, and will not
 appear in %ENV.  This may be a benign occurrence, as some software packages
-might directly modify logical name tables and introduce non-standard names,
+might directly modify logical name tables and introduce nonstandard names,
 or it may indicate that a logical name table has been corrupted.
 
 =item Illegal character %s (carriage return)
 
 (F) A carriage return character was found in the input.  This is an
 error, and not a warning, because carriage return characters can break
-here documents (e.g., C<print E<lt>E<lt>EOF;>).
-  
-Under UNIX, this error is usually caused by executing Perl code --
+multi-line strings, including here documents (e.g., C<print E<lt>E<lt>EOF;>).
+
+Under Unix, this error is usually caused by executing Perl code --
 either the main program, a module, or an eval'd string -- that was
-transferred over a network connection from a non-UNIX system without
+transferred over a network connection from a non-Unix system without
 properly converting the text file format.
 
 Under systems that use something other than '\n' to delimit lines of
@@ -1147,6 +1209,11 @@ 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 switch in PERL5OPT: %s
+
+(X) The PERL5OPT environment variable may only be used to set the
+following switches: B<-[DIMUdmw]>.
+
 =item In string, @%s now must be written as \@%s
 
 (F) It used to be that Perl would try to guess whether you wanted an
@@ -1206,6 +1273,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<glob>
+and C<E<lt>*.cE<gt>>.  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<full_csh='/usr/bin/tcsh'>); otherwise, make them all
+empty (except that C<d_csh> 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.
@@ -1215,6 +1293,19 @@ and execute the specified command.
 (F) The range specified in a character class had a minimum character
 greater than the maximum character.  See L<perlre>.
 
+=item Invalid conversion in %s: "%s"
+
+(W) Perl does not understand the given format conversion.
+See L<perlfunc/sprintf>.
+
+=item Invalid type in pack: '%s'
+
+(F) The given character is not a valid pack type.  See L<perlfunc/pack>.
+
+=item Invalid type in unpack: '%s'
+
+(F) The given character is not a valid unpack type.  See L<perlfunc/unpack>.
+
 =item ioctl is not implemented
 
 (F) Your machine apparently doesn't implement ioctl(), which is pretty
@@ -1284,12 +1375,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
@@ -1301,13 +1386,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 non-creatable array value attempted, subscript %d
+=item Modification of noncreatable 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 non-creatable hash value attempted, subscript "%s"
+=item Modification of noncreatable 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.
@@ -1382,7 +1467,7 @@ this error was triggered?
 =item No command into which to pipe on command line
 
 (F) An error peculiar to VMS.  Perl handles its own command line redirection,
-and found a '|' at the end of the command line, so it doesn't know whither you
+and found a '|' at the end of the command line, so it doesn't know where you
 want to pipe the output from this command.
 
 =item No DB::DB routine defined
@@ -1422,7 +1507,7 @@ from which to read data for stdin.
 
 (F) An error peculiar to VMS.  Perl handles its own command line redirection,
 and found a lone 'E<gt>' at the end of the command line, so it doesn't know
-whither you wanted to redirect stdout.
+where you wanted to redirect stdout.
 
 =item No output file after E<gt> or E<gt>E<gt> on command line
 
@@ -1552,6 +1637,13 @@ supplied it an uninitialized value.  See L<perlform>.
 
 (P) The internal pattern matching routines are out of their gourd.
 
+=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 list
 
 (S) You specified an odd number of elements to a hash list, which is odd,
@@ -1596,7 +1688,7 @@ but realloc() wouldn't give it more memory, virtual or otherwise.
 =item Out of memory!
 
 (X|F) The malloc() function returned 0, indicating there was insufficient
-remaining memory (or virtual memory) to satisfy the request. 
+remaining memory (or virtual memory) to satisfy the request.
 
 The request was judged to be small, so the possibility to trap it
 depends on the way perl was compiled.  By default it is not trappable.
@@ -1650,6 +1742,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,
@@ -1799,7 +1895,7 @@ used.)
 
 You probably wrote something like this:
 
-    @list = qw( 
+    @list = qw(
        a # a comment
         b # another comment
     );
@@ -1807,8 +1903,8 @@ You probably wrote something like this:
 when you should have written this:
 
     @list = qw(
-       a 
-        b 
+       a
+        b
     );
 
 If you really want comments, build your list the
@@ -1826,7 +1922,7 @@ aren't needed to separate the items.  (You may have used different
 delimiters than the parentheses shown here; braces are also frequently
 used.)
 
-You probably wrote something like this: 
+You probably wrote something like this:
 
     qw! a, b, c !;
 
@@ -1869,16 +1965,16 @@ Check your logic flow.
 
 =item Probable precedence problem on %s
 
-(W) The compiler found a bare word where it expected a conditional,
+(W) The compiler found a bareword where it expected a conditional,
 which often indicates that an || or && was parsed as part of the
 last argument of the previous construct, for example:
 
     open FOO || die;
 
-=item Prototype mismatch: (%s) vs (%s)
+=item Prototype mismatch: %s vs %s
 
-(S) The subroutine being defined had a pre-declared (forward) declaration
-with a different function prototype.
+(S) The subroutine being declared or defined had previously been declared
+or defined with a different function prototype.
 
 =item Read on closed filehandle E<lt>%sE<gt>
 
@@ -1887,7 +1983,7 @@ Check your logic flow.
 
 =item Reallocation too large: %lx
 
-(F) You can't allocate more than 64K on an MSDOS machine.
+(F) You can't allocate more than 64K on an MS-DOS machine.
 
 =item Recompile perl with B<-D>DEBUGGING to use B<-D> switch
 
@@ -1965,18 +2061,18 @@ L<perlref>.
 
 =item Script is not setuid/setgid in suidperl
 
-(F) Oddly, the suidperl program was invoked on a script with its setuid
-or setgid bit not set.  This doesn't make much sense.
+(F) Oddly, the suidperl program was invoked on a script without a setuid
+or setgid bit set.  This doesn't make much sense.
 
 =item Search pattern not terminated
 
 (F) The lexer couldn't find the final delimiter of a // or m{}
 construct.  Remember that bracketing delimiters count nesting level.
 
-=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 been closed since.
+(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
 
@@ -2001,6 +2097,10 @@ 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<perlre>.
+
 =item Sequence (?#... not terminated
 
 (F) A regular expression comment must be terminated by a closing
@@ -2055,7 +2155,7 @@ think so.
 
 =item setruid() not implemented
 
-(F) You tried to assign to C<$<lt>>, and your operating system doesn't support
+(F) You tried to assign to C<$E<lt>>, and your operating system doesn't support
 the setruid() system call (or equivalent), or at least Configure didn't
 think so.
 
@@ -2102,7 +2202,7 @@ See L<perlfunc/split>.
 =item Stat on unopened file E<lt>%sE<gt>
 
 (W) You tried to use the stat() function (or an equivalent file test)
-on a filehandle that was either never opened or has been closed since.
+on a filehandle that was either never opened or has since been closed.
 
 =item Statement unlikely to be reached
 
@@ -2146,9 +2246,11 @@ construct.  Remember that bracketing delimiters count nesting level.
 
 =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<perlfunc/substr>.
+(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<perlfunc/substr>.  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
 
@@ -2192,10 +2294,15 @@ or "msg".  See L<perlfunc/semctl>, for example.
 (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<goto> 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
-never opened or has been closed since.
+never opened or has since been closed.
 
 =item Test on unopened file E<lt>%sE<gt>
 
@@ -2249,10 +2356,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
@@ -2262,6 +2369,12 @@ first argument: e.g. change C<perl -n -T> to C<perl -T -n>.
 If the Perl script is being executed as C<perl scriptname>, then the
 B<-T> option must appear on the command line: C<perl -T scriptname>.
 
+=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<use> pragma instead.
+
 =item Too many ('s
 
 =item Too many )'s
@@ -2394,14 +2507,15 @@ See L<perlre>.
 
 =item Unquoted string "%s" may clash with future reserved word
 
-(W) You used a bare word that might someday be claimed as a reserved word.
+(W) You used a bareword that might someday be claimed as a reserved word.
 It's best to put such a word in quotes, or capitalize it somehow, or insert
 an underbar into it.  You might also declare it as a subroutine.
 
-=item Unrecognized character \%03o ignored
+=item Unrecognized character %s
 
-(S) A garbage character was found in the input, and ignored, in case it's
-a weird control character on an EBCDIC machine, or some such.
+(F) The Perl parser has no idea what to do with the specified character
+in your Perl script (or eval).  Perhaps you tried to run a compressed
+script, a binary program, or a directory as a Perl program.
 
 =item Unrecognized signal name "%s"
 
@@ -2418,12 +2532,20 @@ supplying the bad switch on your behalf.)
 
 (W) A file operation was attempted on a filename, and that operation
 failed, PROBABLY because the filename contained a newline, PROBABLY
-because you forgot to chop() or chomp() it off.  See L<perlfunc/chop>.
+because you forgot to chop() or chomp() it off.  See L<perlfunc/chomp>.
 
 =item Unsupported directory function "%s" called
 
 (F) Your machine doesn't support opendir() and readdir().
 
+=item Unsupported function fork
+
+(F) Your version of executable does not support forking.
+
+Note that under some systems, like OS/2, there may be different flavors of
+Perl executables, some of which may support fork, some not. Try changing
+the name you call Perl by to C<perl_>, C<perl__>, and so on.
+
 =item Unsupported function %s
 
 (F) This machines doesn't implement the indicated function, apparently.
@@ -2441,6 +2563,18 @@ a term, so it's looking for the corresponding right angle bracket, and not
 finding it.  Chances are you left some needed parentheses out earlier in
 the line, and you really meant a "less than".
 
+=item Use of "$$<digit>" to mean "${$}<digit>" is deprecated
+
+(D) Perl versions before 5.004 misinterpreted any type marker followed
+by "$" and a digit.  For example, "$$0" was incorrectly taken to mean
+"${$}0" instead of "${$0}".  This bug is (mostly) fixed in Perl 5.004.
+
+However, the developers of Perl 5.004 could not fix this bug completely,
+because at least two widely-used modules depend on the old meaning of
+"$$0" in a string.  So Perl 5.004 still interprets "$$<digit>" in the
+old (broken) way inside strings; but it generates this message as a
+warning.  And in Perl 5.005, this special treatment will cease.
+
 =item Use of $# is deprecated
 
 (D) This was an ill-advised attempt to emulate a poorly defined B<awk> feature.
@@ -2458,16 +2592,10 @@ 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 E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated
 
 (D) You are now encouraged to use the explicitly quoted form if you
-wish to use a blank line as the terminator of the here-document.
+wish to use an empty line as the terminator of the here-document.
 
 =item Use of implicit split to @_ is deprecated
 
@@ -2475,6 +2603,30 @@ wish to use a blank 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<AUTOLOAD> 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<Foo::bar()>), not
+as methods (e.g. C<Foo->bar()> or C<$obj->bar()>).
+
+This bug will be rectified in Perl 5.005, which will use method lookup
+only for methods' C<AUTOLOAD>s.  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 C<AUTOLOAD>s.
+
+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<AUTOLOAD> for non-methods from a base class named
+C<BaseClass>, execute C<*AUTOLOAD = \&BaseClass::AUTOLOAD> during startup.
+
+=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
@@ -2574,7 +2726,7 @@ will I<never> share the given variable.
 This problem can usually be solved by making the inner subroutine
 anonymous, using the C<sub {}> syntax.  When inner anonymous subs that
 reference variables in outer subroutines are called or referenced,
-they are automatically re-bound to the current values of such
+they are automatically rebound to the current values of such
 variables.
 
 =item Variable syntax
@@ -2697,7 +2849,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
 
@@ -2705,21 +2857,23 @@ or
 
     prefix1 prefix2
 
-with non-empty prefix1 and prefix2. If C<prefix1> 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<perlos2/"PERLLIB_PREFIX">.
+with nonempty prefix1 and prefix2.  If C<prefix1> 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<README.os2>.
 
 =item PERL_SH_DIR too long
 
-(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the 
-C<sh>-shell in. See L<perlos2/"PERL_SH_DIR">.
+(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
+C<sh>-shell in.  See "PERL_SH_DIR" in F<README.os2>.
 
 =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<perlipc/"Signals">.  See L<perlos2/"Process terminated by SIGTERM/SIGINT">.
+applications die in silence.  It is considered a feature of the OS/2
+port.  One can easily disable this by appropriate sighandlers, see
+L<perlipc/"Signals">.  See also "Process terminated by SIGTERM/SIGINT"
+in F<README.os2>.
 
 =back