This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
The new(er) way of controlling Unicode I/O (and other) features;
[perl5.git] / pod / perldiag.pod
index a08837d..8c59189 100644 (file)
@@ -165,6 +165,11 @@ or a hash or array slice, such as:
 name, and not a subroutine call.  C<exists &sub()> will generate this
 error.
 
+=item '%s' trapped by operation mask
+
+(F) You tried to use an operator from a Safe compartment in which it's
+disallowed. See L<Safe>.
+
 =item Argument "%s" isn't numeric%s
 
 (W numeric) The indicated string was fed as an argument to an operator
@@ -461,6 +466,24 @@ checking.  Alternatively, if you are certain that you're calling the
 function correctly, you may put an ampersand before the name to avoid
 the warning.  See L<perlsub>.
 
+=item Can only compress unsigned integers
+
+(F) An argument to pack("w",...) was not an integer.  The BER compressed
+integer format can only be used with positive integers, and you attempted
+to compress something else.  See L<perlfunc/pack>.
+
+=item Cannot compress integer
+
+(F) An argument to pack("w",...) was too large to compress.  The BER
+compressed integer format can only be used with positive integers, and you
+attempted to compress Infinity or a very large number (> 1e308).
+See L<perlfunc/pack>.
+
+=item Cannot compress negative numbers
+
+(F) An argument to pack("w",...) was negative.  The BER compressed integer
+format can only be used with positive integers.  See L<perlfunc/pack>.
+
 =item / cannot take a count
 
 (F) You had an unpack template indicating a counted-length string, but
@@ -1481,17 +1504,19 @@ PDP-11 or something?
 
 =item Filehandle %s opened only for input
 
-(W io) You tried to write on a read-only filehandle.  If you intended it
-to be a read-write filehandle, you needed to open it with "+<" or "+>"
-or "+>>" instead of with "<" or nothing.  If you intended only to write
-the file, use ">" or ">>".  See L<perlfunc/open>.
+(W io) You tried to write on a read-only filehandle.  If you intended
+it to be a read-write filehandle, you needed to open it with "+<" or
+"+>" or "+>>" instead of with "<" or nothing.  If you intended only to
+write the file, use ">" or ">>".  See L<perlfunc/open>.
 
 =item Filehandle %s opened only for output
 
-(W io) You tried to read from a filehandle opened only for writing.
-If you intended it to be a read/write filehandle, you needed to open it
+(W io) You tried to read from a filehandle opened only for writing, If
+you intended it to be a read/write filehandle, you needed to open it
 with "+<" or "+>" or "+>>" instead of with "<" or nothing.  If you
 intended only to read from the file, use "<".  See L<perlfunc/open>.
+Another possibility is that you attempted to open filedescriptor 0
+(also known as STDIN) for output (maybe you closed STDIN earlier?).
 
 =item Filehandle %s reopened as %s only for input
 
@@ -1691,6 +1716,11 @@ to your Perl administrator.
 (W syntax) An illegal character was found in a prototype declaration.  Legal
 characters in prototypes are $, @, %, *, ;, [, ], &, and \.
 
+=item Illegal declaration of anonymous subroutine
+
+(F) When using the C<sub> keyword to construct an anonymous subroutine,
+you must always specify a block of code. See L<perlsub>.
+
 =item Illegal division by zero
 
 (F) You tried to divide a number by 0.  Either something was wrong in
@@ -1777,9 +1807,9 @@ the world.  See L<perlsec>.
 
 (F) You can't use system(), exec(), or a piped open in a setuid or
 setgid script if any of C<$ENV{PATH}>, C<$ENV{IFS}>, C<$ENV{CDPATH}>,
-C<$ENV{ENV}> or C<$ENV{BASH_ENV}> are derived from data supplied (or
-potentially supplied) by the user.  The script must set the path to a
-known value, using trustworthy data.  See L<perlsec>.
+C<$ENV{ENV}>, C<$ENV{BASH_ENV}> or C<$ENV{TERM}> are derived from data
+supplied (or potentially supplied) by the user.  The script must set
+the path to a known value, using trustworthy data.  See L<perlsec>.
 
 =item Integer overflow in %s number
 
@@ -1793,6 +1823,15 @@ transparently promotes all numbers to a floating point representation
 internally--subject to loss of precision errors in subsequent
 operations.
 
+=item Integer overflow in version
+
+(F) Some portion of a version initialization is too large for the
+size of integers for your architecture.  This is not a warning
+because there is no rational reason for a version to try and use a
+element larger than typically 2**32.  This is usually caused by
+trying to use some odd mathematical operation as a version, like
+100/9.
+
 =item Internal disaster in regex; marked by <-- HERE in m/%s/
 
 (P) Something went badly wrong in the regular expression parser.
@@ -1844,7 +1883,7 @@ C<{}> from your ending C<\x{}> - C<\x> without the curly braces can go only
 up to C<ff>.  The <-- HERE shows in the regular expression about where the
 problem was discovered.  See L<perlre>.
 
-=item Invalid [] range "%s" in transliteration operator
+=item Invalid range "%s" in transliteration operator
 
 (F) The range specified in the tr/// or y/// operator had a minimum
 character greater than the maximum character.  See L<perlop>.
@@ -1869,6 +1908,17 @@ L<perlfunc/unpack>.
 (W unpack) The given character is not a valid unpack type but used to be
 silently ignored.
 
+=item Invalid version format (multiple underscores)
+
+(F) Versions may contain at most a single underscore, which signals
+that the version is a beta release.  See L<version> for the allowed
+version formats.
+
+=item Invalid version format (underscores before decimal)
+
+(F) Versions may not contain decimals after the optional underscore.
+See L<version> for the allowed version formats.
+
 =item ioctl is not implemented
 
 (F) Your machine apparently doesn't implement ioctl(), which is pretty
@@ -2039,6 +2089,11 @@ double-quotish context.
 C<open(FH, "command |")> construction, but the command was missing or
 blank.
 
+=item Missing control char name in \c
+
+(F) A double-quoted string ended with "\c", without the required control
+character name.
+
 =item Missing name in "my sub"
 
 (F) The reserved syntax for lexically scoped subroutines requires that
@@ -2928,6 +2983,18 @@ 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<perlfunc/ioctl>.
 
+=item Possible precedence problem on bitwise %c operator
+
+(W precedence) Your program uses a bitwise logical operator in conjunction
+with a numeric comparison operator, like this :
+
+    if ($x & $y == 0) { ... }
+
+This expression is actually equivalent to C<$x & ($y == 0)>, due to the
+higher precedence of C<==>. This is probably not what you want. (If you
+really meant to write this, disable the warning, or, better, write
+C<$x & ($y == 0 ? 1 : 0)>).
+
 =item Possible unintended interpolation of %s in string
 
 (W ambiguous) You said something like `@foo' in a double-quoted string
@@ -3033,6 +3100,14 @@ are outside the range which can be represented by integers internally.
 One possible workaround is to force Perl to use magical string increment
 by prepending "0" to your numbers.
 
+=item read() on closed filehandle %s
+
+(W closed) You tried to read from a closed filehandle.
+
+=item read() on unopened filehandle %s
+
+(W unopened) You tried to read from a filehandle that was never opened.
+
 =item readline() on closed filehandle %s
 
 (W closed) The filehandle you're reading from got itself closed sometime
@@ -3179,6 +3254,11 @@ or setgid bit set.  This doesn't make much sense.
 construct.  Remember that bracketing delimiters count nesting level.
 Missing the leading C<$> from a variable C<$m> may cause this error.
 
+Note that since Perl 5.9.0 a // can also be the I<defined-or>
+construct, not just the empty search pattern.  Therefore code written
+in Perl 5.9.0 or later that uses the // as the I<defined-or> can be
+misparsed by pre-5.9.0 Perls as a non-terminated search pattern.
+
 =item %sseek() on unopened filehandle
 
 (W unopened) You tried to use the seek() or sysseek() function on a
@@ -3502,6 +3582,14 @@ or "my $var" or "our $var".
 
 (F) The final summary message when a C<perl -c> succeeds.
 
+=item sysread() on closed filehandle %s
+
+(W closed) You tried to read from a closed filehandle.
+
+=item sysread() on unopened filehandle %s
+
+(W unopened) You tried to read from a filehandle that was never opened.
+
 =item System V %s is not implemented on this machine
 
 (F) You tried to do something with a function beginning with "sem",
@@ -3580,6 +3668,13 @@ target of the change to
 (F) Your version of the C library apparently doesn't do times().  I
 suspect you're not running on Unix.
 
+=item To%s: illegal mapping '%s'
+
+(F) You tried to define a customized To-mapping for lc(), lcfirst,
+uc(), or ucfirst() (or their string-inlined versions), but you
+specified an illegal mapping.
+See L<perlunicode/"User-Defined Character Properties">.
+
 =item Too few args to syscall
 
 (F) There has to be at least one argument to syscall() to specify the
@@ -3775,6 +3870,16 @@ iterating over it, and someone else stuck a message in the stream of
 data Perl expected.  Someone's very confused, or perhaps trying to
 subvert Perl's population of %ENV for nefarious purposes.
 
+=item Unknown Unicode option letter '%c'
+
+You specified an unknown Unicode option.  See L<perlrun> documentation
+of the C<-C> switch for the list of known options.
+
+=item Unknown Unicode option value %x
+
+You specified an unknown Unicode option.  See L<perlrun> documentation
+of the C<-C> switch for the list of known options.
+
 =item Unknown warnings category '%s'
 
 (F) An error issued by the C<warnings> pragma. You specified a warnings