-//depot/perl/pod/perldiag.pod#272 - edit change 14824 (text)
=head1 NAME
perldiag - various Perl diagnostics
=over 4
+=item A thread exited while %d other threads were still running
+
+(W) When using threaded Perl, a thread (not necessarily the main
+thread) exited while there were still other threads running.
+Usually it's a good idea to first collect the return values of the
+created threads by joining them, and only then exit from then main
+thread. See L<threads>.
+
=item accept() on closed socket %s
(W closed) You tried to do an accept on a closed socket. Did you forget
must either both be scalars or both be lists. Otherwise Perl won't
know which context to supply to the right side.
-=item Attempt to access key '%_' in fixed hash
+=item Attempt to access disallowed key '%s' in a restricted hash
+
+(F) The failing code has attempted to get or set a key which is not in
+the current set of allowed keys of a restricted hash.
+
+=item Attempt to clear a restricted hash
+
+(F) It is currently not allowed to clear a restricted hash, even if the
+new hash would contain the same keys as before. This may change in
+the future.
-(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 delete readonly key '%s' from a restricted hash
+
+(F) The failing code attempted to delete a key whose value has been
+declared readonly from a restricted hash.
+
+=item Attempt to delete disallowed key '%s' from a restricted hash
+
+(F) The failing code attempted to delete from a restricted hash a key
+which is not in its key set.
=item Attempt to bless into a reference
=item Can't find %s property definition %s
(F) You may have tried to use C<\p> which means a Unicode property for
-example \p{Lu} is all uppercase letters. Escape the C<\p>, either
+example \p{Lu} is all uppercase letters. if you did mean to use a
+Unicode property, see L<perlunicode> for the list of known properties.
+If you didn't mean to use a Unicode property, escape the C<\p>, either
C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until
possible C<\E>).
functioning as a class, but that package doesn't define that particular
method, nor does any of its base classes. See L<perlobj>.
+=item Can't locate PerlIO%s
+
+(F) You tried to use in open() a PerlIO layer that does not exist,
+e.g. open(FH, ">:nosuchlayer", "somefile").
+
=item (perhaps you forgot to load "%s"?)
(F) This is an educated guess made in conjunction with the message
is because you don't have read permission for a file which you named on
the command line.
+=item Can't open a reference
+
+(W io) You tried to open a scalar reference for reading or writing,
+using the 3-arg open() syntax :
+
+ open FH, '>', $ref;
+
+but your version of perl is compiled without perlio, and this form of
+open is not supported.
+
=item Can't open bidirectional pipe
(W pipe) You tried to say C<open(CMD, "|cmd|")>, which is not supported.
that it is simpler or backtracks less. (See L<perlfaq2> for information
on I<Mastering Regular Expressions>.)
+=item cond_broadcast() called on unlocked variable
+
+(W threads) Within a thread-enabled program, you tried to call
+cond_broadcast() on a variable which wasn't locked. The cond_broadcast()
+function is used to wake up another thread that is waiting in a
+cond_wait(). To ensure that the signal isn't sent before the other thread
+has a chance to enter the wait, it is usual for the signaling thread to
+first wait for a lock on variable. This lock attempt will only succeed
+after the other thread has entered cond_wait() and thus relinquished the
+lock.
+
+
+=item cond_signal() called on unlocked variable
+
+(W threads) Within a thread-enabled program, you tried to call
+cond_signal() on a variable which wasn't locked. The cond_signal()
+function is used to wake up another thread that is waiting in a
+cond_wait(). To ensure that the signal isn't sent before the other thread
+has a chance to enter the wait, it is usual for the signaling thread to
+first wait for a lock on variable. This lock attempt will only succeed
+after the other thread has entered cond_wait() and thus relinquished the
+lock.
+
=item connect() on closed socket %s
(W closed) You tried to do a connect on a closed socket. Did you forget
=item Constant subroutine %s redefined
-(S|W redefine) You redefined a subroutine which had previously been
+(S) You redefined a subroutine which had previously been
eligible for inlining. See L<perlsub/"Constant Functions"> for
commentary and workarounds.
=item Empty %s
-(F) Empty C<\p{}> or C<\P{}>.
+(F) C<\p> and C<\P> are used to introduce a named Unicode property, as
+described in L<perlunicode> and L<perlre>. You used C<\p> or C<\P> in
+a regular expression without specifying the property name.
=item entering effective %s failed
=item Exiting format via %s
-(W exiting) You are exiting an eval by unconventional means, such as a
+(W exiting) You are exiting a format by unconventional means, such as a
goto, or a loop control statement.
=item Exiting pseudo-block via %s
Failure of user callbacks dispatched using the C<G_KEEPERR> flag could
also result in this warning. See L<perlcall/G_KEEPERR>.
+=item In EBCDIC the v-string components cannot exceed 2147483647
+
+(F) An error peculiar to EBCDIC. Internally, v-strings are stored as
+Unicode code points, and encoded in EBCDIC as UTF-EBCDIC. The UTF-EBCDIC
+encoding is limited to code points no larger than 2147483647 (0x7FFFFFFF).
+
=item Insecure dependency in %s
(F) You tried to do something that the tainting mechanism didn't like.
Perl detected something that didn't comply with UTF-8 encoding rules.
+One possible cause is that you read in data that you thought to be in
+UTF-8 but it wasn't (it was for example legacy 8-bit data). Another
+possibility is careless use of utf8::upgrade().
+
=item Malformed UTF-16 surrogate
Perl thought it was reading UTF-16 encoded character data but while
some day, even though it doesn't yet. Perhaps you should use a
mixed-case attribute name, instead. See L<attributes>.
-=item Package '%s' not found (did you use the incorrect case?)
-
-(W misc) You included a package file via C<use>, 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
=item perlio: argument list not closed for layer "%s"
-(S) When pushing a layer with arguments onto the Perl I/O system you forgot
-the ) that closes the argument list. (Layers take care of transforming
+(W layer) When pushing a layer with arguments onto the Perl I/O system you
+forgot the ) that closes the argument list. (Layers take care of transforming
data between external and internal representations.) Perl stopped parsing
the layer list at this point and did not attempt to push this layer.
If your program didn't explicitly request the failing operation, it may be
the result of the value of the environment variable PERLIO.
-=item perlio: invalid separator character %s in attribute list
+=item perlio: invalid separator character %s in layer specification list %s
-(S) When pushing layers onto the Perl I/O system, something other than a
+(W layer) When pushing layers onto the Perl I/O system, something other than a
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.
=item perlio: unknown layer "%s"
-(S) An attempt was made to push an unknown layer onto the Perl I/O
+(W layer) An attempt was made to push an unknown layer onto the Perl I/O
system. (Layers take care of transforming data between external and
internal representations.) Note that some layers, such as C<mmap>,
are not supported in all environments. If your program didn't
target of the change to
%ENV which produced the warning.
+=item thread failed to start: %s
+
+(F) The entry point function of threads->create() failed for some reason.
+
=item times not implemented
(F) Your version of the C library apparently doesn't do times(). I
(F) The second argument of 3-argument open() is not among the list
of valid modes: C<< < >>, C<< > >>, C<<< >> >>>, C<< +< >>,
-C<< +> >>, C<<< +>> >>>, C<-|>, C<|->.
+C<< +> >>, C<<< +>> >>>, C<-|>, C<|->, C<< <& >>, C<< >& >>.
=item Unknown process %x sent message to prime_env_iter: %s
(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 /c modifier is meaningless in s///
+
+(W regexp) You used the /c modifier in a substitution. The /c
+modifier is not presently meaningful in substitutions.
+
+=item Use of /c modifier is meaningless without /g
+
+(W regexp) You used the /c modifier with a regex operand, but didn't
+use the /g modifier. Currently, /c is meaningful only when /g is
+used. (This may change in the future.)
+
+=item Use of /g modifier is meaningless in split
+
+(W regexp) You used the /g modifier on the pattern for a C<split>
+operator. Since C<split> always tries to match the pattern
+repeatedly, the C</g> has no effect.
+
=item Use of *glob{FILEHANDLE} is deprecated
(D deprecated) You are now encouraged to use the shorter *glob{IO} form