Following b0e687f7 Win32 requires an -I..\lib for makedef.pl and x2p\*.PL
[p5sagit/p5-mst-13.2.git] / pod / perldiag.pod
index 5a3fed5..1f7bc0b 100644 (file)
@@ -306,7 +306,21 @@ of an array and later assigning through that reference. For example
 used as an lvalue, which is pretty strange.  Perhaps you forgot to
 dereference it first.  See L<perlfunc/substr>.
 
-=item Bad arg length for %s, is %d, should be %s
+=item Attribute "locked" is deprecated
+
+(D deprecated) You have used the attributes pragam to modify the "locked"
+attribute on a code reference. The :locked attribute is obsolete, has had no
+effect since 5005 threads were removed, and will be removed in the next major
+release of Perl 5.
+
+=item Attribute "unique" is deprecated
+
+(D deprecated) You have used the attributes pragam to modify the "unique"
+attribute on an array, hash or scalar reference. The :unique attribute has
+had no effect since Perl 5.8.8, and will be removed in the next major
+release of Perl 5.
+
+=item Bad arg length for %s, is %d, should be %d
 
 (F) You passed a buffer of the wrong size to one of msgctl(), semctl()
 or shmctl().  In C parlance, the correct sizes are, respectively,
@@ -651,24 +665,6 @@ inplace editing with the B<-i> switch.  The file was ignored.
 regexp to match something 0 times, just put {0}. The <-- HERE shows in the
 regular expression about where the problem was discovered. See L<perlre>.
 
-=item Can't do setegid!
-
-(P) The setegid() call failed for some reason in the setuid emulator of
-suidperl.
-
-=item Can't do seteuid!
-
-(P) The setuid emulator of suidperl failed for some reason.
-
-=item Can't do setuid
-
-(F) This typically means that ordinary perl tried to exec suidperl to do
-setuid emulation, but couldn't exec it.  It looks for a name of the form
-sperl5.000 in the same directory that the perl executable resides under
-the name perl5.000, typically /usr/local/bin on Unix machines.  If the
-file is there, check the execute permissions.  If it isn't, ask your
-sysadmin why he and/or she removed it.
-
 =item Can't do waitpid with flags
 
 (F) This machine doesn't have either waitpid() or wait4(), so only
@@ -834,6 +830,12 @@ processes, Perl has reset the signal to its default value.  This
 situation typically indicates that the parent program under which Perl
 may be running (e.g. cron) is being very careless.
 
+=item Can't kill a non-numeric process ID
+
+(F) Process identifiers must be (signed) integers.  It is a fatal error to
+attempt to kill() an undefined, empty-string or otherwise non-numeric
+process identifier.
+
 =item Can't "last" outside a loop block
 
 (F) A "last" statement was executed to break out of the current block,
@@ -1036,17 +1038,12 @@ probably because you don't have write permission to the directory.
 (P) An error peculiar to VMS.  Perl thought stdin was a pipe, and tried
 to reopen it to accept binary data.  Alas, it failed.
 
-=item Can't resolve method `%s' overloading `%s' in package `%s'
+=item Can't resolve method "%s" overloading "%s" in package "%s"
 
 (F|P) Error resolving overloading specified by a method name (as opposed
 to a subroutine reference): no such method callable via the package. If
 method name is C<???>, this is an internal error.
 
-=item Can't reswap uid and euid
-
-(P) The setreuid() call failed for some reason in the setuid emulator of
-suidperl.
-
 =item Can't return %s from lvalue subroutine
 
 (F) Perl detected an attempt to return illegal lvalues (such as
@@ -1071,11 +1068,6 @@ list context.
 (P) For some reason you can't fstat() the script even though you have it
 open already.  Bizarre.
 
-=item Can't swap uid and euid
-
-(P) The setreuid() call failed for some reason in the setuid emulator of
-suidperl.
-
 =item Can't take log of %g
 
 (F) For ordinary real numbers, you can't take the logarithm of a
@@ -1155,6 +1147,11 @@ that is already inside a group with a byte-order modifier.
 For example you cannot force little-endianness on a type that
 is inside a big-endian group.
 
+=item Can't use keyword '%s' as a label
+
+(F) You attempted to use a reserved keyword, such as C<print> or C<BEGIN>,
+as a statement label. This is disallowed since Perl 5.11.0.
+
 =item Can't use "my %s" in sort comparison
 
 (F) The global variables $a and $b are reserved for sort comparisons.
@@ -1422,6 +1419,9 @@ L<perlfunc/pack>.
 infinite recursion, unless you're writing strange benchmark programs, in
 which case it indicates something else.
 
+This threshold can be changed from 100, by recompiling the F<perl> binary,
+setting the C pre-processor macro C<PERL_SUB_DEPTH_WARN> to the desired value.
+
 =item defined(@array) is deprecated
 
 (D deprecated) defined() is not usually useful on arrays because it
@@ -1629,7 +1629,7 @@ variable and glob that.
 
 (F) The C<exec> function is not implemented in MacPerl. See L<perlport>.
 
-=item Execution of %s aborted due to compilation errors
+=item Execution of %s aborted due to compilation errors.
 
 (F) The final summary message when a Perl compilation fails.
 
@@ -1853,7 +1853,7 @@ unspecified destination.  See L<perlfunc/goto>.
 supposed to follow something: a template character or a ()-group.
  See L<perlfunc/pack>.
 
-=item %s had compilation errors
+=item %s had compilation errors.
 
 (F) The final summary message when a C<perl -c> fails.
 
@@ -1956,7 +1956,7 @@ two from 1 to 32 (or 64, if your platform supports that).
 (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
+=item Illegal switch in PERL5OPT: -%c
 
 (X) The PERL5OPT environment variable may only be used to set the
 following switches: B<-[CDIMUdmtw]>.
@@ -2178,7 +2178,7 @@ strange for a machine that supports C.
 (W unopened) You tried ioctl() on a filehandle that was never opened.
 Check you control flow and number of arguments.
 
-=item IO layers (like "%s") unavailable
+=item IO layers (like '%s') unavailable
 
 (F) Your Perl has not been configured to have PerlIO, and therefore
 you cannot use IO layers.  To have PerlIO Perl must be configured
@@ -2192,8 +2192,12 @@ neither as a system call or an ioctl call (SIOCATMARK).
 =item $* is no longer supported
 
 (S deprecated, syntax) The special variable C<$*>, deprecated in older perls, has
-been removed as of 5.9.0 and is no longer supported. You should use the
-C<//m> and C<//s> regexp modifiers instead.
+been removed as of 5.9.0 and is no longer supported. In previous versions of perl the use of
+C<$*> enabled or disabled multi-line matching within a string.
+
+Instead of using C<$*> you should use the C</m> (and maybe C</s>) regexp
+modifiers. (In older versions: when C<$*> was set to a true value then all regular
+expressions behaved as if they were written using C</m>.)
 
 =item $# is no longer supported
 
@@ -2344,9 +2348,9 @@ rules and perl was unable to guess how to make more progress.
 (F) You tried to unpack something that didn't comply with UTF-8 encoding
 rules and perl was unable to guess how to make more progress.
 
-=item Maximal count of pending signals (%s) exceeded
+=item Maximal count of pending signals (%d) exceeded
 
-(F) Perl aborted due to a too important number of signals pending. This
+(F) Perl aborted due to a too high number of signals pending. This
 usually indicates that your operating system tried to deliver signals
 too fast (with a very high priority), starving the perl process from
 resources it would need to reach a point where it can process signals
@@ -2435,7 +2439,7 @@ can vary from one line to the next.
 
 =item Missing right brace on %s
 
-(F) Missing right brace in C<\p{...}> or C<\P{...}>.
+(F) Missing right brace in C<\x{...}>, C<\p{...}> or C<\P{...}>.
 
 =item Missing right curly or square bracket
 
@@ -2489,7 +2493,7 @@ couldn't be created for some peculiar reason.
 you omitted the name of the module.  Consult L<perlrun> for full details
 about C<-M> and C<-m>.
 
-=item More than one argument to open
+=item More than one argument to '%s' open
 
 (F) The C<open> function has been asked to open multiple files. This
 can happen if you are trying to open a pipe to a command that takes a
@@ -3297,10 +3301,6 @@ 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<perllocale> section B<LOCALE PROBLEMS>.
 
-=item Permission denied
-
-(F) The setuid emulator in suidperl decided you were up to no good.
-
 =item pid %x not a child
 
 (W exec) A warning peculiar to VMS.  Waitpid() was asked to wait for a
@@ -3436,24 +3436,6 @@ If instead you intended to match the word 'foo' at the end of the line
 followed by whitespace and the word 'bar' on the next line then you can use
 C<m/$(?)\/> (for example: C<m/foo$(?)\s+bar/>).
 
-=item pragma "attrs" is deprecated, use "sub NAME : ATTRS" instead
-
-(D deprecated) You have written something like this:
-
-    sub doit
-    {
-        use attrs qw(locked);
-    }
-
-You should use the new declaration syntax instead.
-
-    sub doit : locked
-    {
-        ...
-
-The C<use attrs> pragma is now obsolete, and is only provided for
-backward-compatibility. See L<perlsub/"Subroutine Attributes">.
-
 =item Precedence problem: open %s should be open(%s)
 
 (S precedence) The old irregular construct
@@ -3725,11 +3707,6 @@ as a list, you need to look into how references work, because Perl will
 not magically convert between scalars and lists for you.  See
 L<perlref>.
 
-=item Script is not setuid/setgid in suidperl
-
-(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{}
@@ -3932,6 +3909,12 @@ superfluous.
 (W signal) The signal handler named in %SIG doesn't, in fact, exist.
 Perhaps you put it into the wrong package?
 
+=item Smart matching a non-overloaded object breaks encapsulation
+
+(F) You should not use the C<~~> operator on an object that does not
+overload it: Perl refuses to use the object's underlying structure for
+the smart match.
+
 =item sort is now a reserved word
 
 (F) An ancient error message that almost nobody ever runs into anymore.
@@ -3975,7 +3958,7 @@ a block by itself.
 (W unopened) You tried to use the stat() function on a filehandle that
 was either never opened or has since been closed.
 
-=item Stub found while resolving method "%s" overloading "%s"
+=item Stub found while resolving method "%s" overloading "%s" in package "%s"
 
 (P) Overloading resolution over @ISA tree may be broken by importation
 stubs.  Stubs should never be implicitly created, but explicit calls to
@@ -4017,11 +4000,6 @@ length of the string.  See L<perlfunc/substr>.  This warning is fatal 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
-
-(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 sv_upgrade from type %d down to type %d
 
 (P) Perl tried to force the upgrade an SV to a type which was actually
@@ -4191,18 +4169,18 @@ suspect you're not running on Unix.
 =item "-T" is on the #! line, it must also be used on the command line
 
 (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 command line.
+B<-T> option (or the 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 by
-editing the #! line so that the B<-T> option is a part of Perl's first
-argument: e.g. change C<perl -n -T> to C<perl -T -n>.
+editing the #! line so that the B<-%c> option is a part of Perl's first
+argument: e.g. change C<perl -n -%c> to C<perl -%c -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>.
+B<-%c> option must appear on the command line: C<perl -%c scriptname>.
 
 =item To%s: illegal mapping '%s'
 
@@ -4223,8 +4201,15 @@ system call to call, silly dilly.
 =item Too late for "-%s" option
 
 (X) The #! line (or local equivalent) in a Perl script contains the
-B<-M>, B<-m> or B<-C> option.  This is an error because those options
-are not intended for use inside scripts.  Use the C<use> pragma instead.
+B<-M>, B<-m> or B<-C> option.
+
+In the case of B<-M> and B<-m>, this is an error because those options are
+not intended for use inside scripts.  Use the C<use> pragma instead.
+
+The B<-C> option only works if it is specified on the command line as well
+(with the same sequence of letters or numbers following). Either specify
+this option on the command line, or, if your system supports it, make your
+script executable and run it directly instead of passing it to perl. 
 
 =item Too late to run %s block
 
@@ -4463,10 +4448,10 @@ 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 %s in column %d
+=item Unrecognized character %s; marked by <-- HERE after %s near column %d
 
 (F) The Perl parser has no idea what to do with the specified character
-in your Perl script (or eval) at the specified column.  Perhaps you tried 
+in your Perl script (or eval) near the specified column.  Perhaps you tried 
 to run a compressed script, a binary program, or a directory as a Perl program.
 
 =item Unrecognized escape \\%c in character class passed through in regex; marked by <-- HERE in m/%s/
@@ -4697,6 +4682,11 @@ you can write it as C<push(@tied_array,())> to avoid this warning.
 (F) The "use" keyword is recognized and executed at compile time, and
 returns no useful value.  See L<perlmod>.
 
+=item Use of assignment to $[ is deprecated
+
+(D deprecated) The C<$[> variable (index of the first element in an array)
+is deprecated. See L<perlvar/"$[">.
+
 =item Use of bare << to mean <<"" is deprecated
 
 (D deprecated, W syntax) You are now encouraged to use the explicitly quoted
@@ -4752,12 +4742,6 @@ to access the filehandle slot within a typeglob.
 operator.  Since C<split> always tries to match the pattern
 repeatedly, the C</g> has no effect.
 
-=item Use of implicit split to @_ is deprecated
-
-(D deprecated, W syntax) It makes a lot of work for the compiler when you
-clobber a 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 deprecated) As an (ahem) accidental feature, C<AUTOLOAD> subroutines
@@ -5024,7 +5008,7 @@ So put in parentheses to say what you really mean.
 
 =item Wide character in %s
 
-(W utf8) Perl met a wide character (>255) when it wasn't expecting
+(S utf8) Perl met a wide character (>255) when it wasn't expecting
 one.  This warning is by default on for I/O (like print).  The easiest
 way to quiet this warning is simply to add the C<:utf8> layer to the
 output, e.g. C<binmode STDOUT, ':utf8'>.  Another way to turn off the