This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Correct 'map' documentation to reflect operation on a list.
[perl5.git] / pod / perldiag.pod
index fa9cd5e..6d82cde 100644 (file)
@@ -44,22 +44,6 @@ letter.
 
 =over 4
 
-=item A signature parameter must start with '$', '@' or '%'
-
-(F) Each subroutine signature parameter declaration must start with a valid
-sigil; for example:
-
-    sub foo ($a, $, $b = 1, @c) {}
-
-=item A slurpy parameter may not have a default value
-
-(F) Only scalar subroutine signature parameters may have a default value;
-for example:
-
-    sub foo ($a = 1)        {} # legal
-    sub foo (@a = (1))      {} # invalid
-    sub foo (%a = (a => b)) {} # invalid
-
 =item accept() on closed socket %s
 
 (W closed) You tried to do an accept on a closed socket.  Did you forget
@@ -237,6 +221,22 @@ Auto-decrement> for details.
 (W syntax) You called stat() on an array, but the array will be
 coerced to a scalar - the number of elements in the array.
 
+=item A signature parameter must start with '$', '@' or '%'
+
+(F) Each subroutine signature parameter declaration must start with a valid
+sigil; for example:
+
+    sub foo ($a, $, $b = 1, @c) {}
+
+=item A slurpy parameter may not have a default value
+
+(F) Only scalar subroutine signature parameters may have a default value;
+for example:
+
+    sub foo ($a = 1)        {} # legal
+    sub foo (@a = (1))      {} # invalid
+    sub foo (%a = (a => b)) {} # invalid
+
 =item assertion botched: %s
 
 (X) The malloc package that comes with Perl had an internal failure.
@@ -555,14 +555,14 @@ The C<strict> pragma is useful in avoiding such errors.
 =item Bareword in require maps to empty filename
 
 (F) The bareword form of require has been invoked with a filename which could
-not have been generated by a valid bareword permitted by the parser. You
+not have been generated by a valid bareword permitted by the parser.  You
 shouldn't be able to get this error from Perl code, but XS code may throw it
 if it passes an invalid module name to C<Perl_load_module>.
 
 =item Bareword in require must not start with a double-colon: "%s"
 
 (F) In C<require Bare::Word>, the bareword is not allowed to start with a
-double-colon. Write C<require ::Foo::Bar> as  C<require Foo::Bar> instead.
+double-colon.  Write C<require ::Foo::Bar> as  C<require Foo::Bar> instead.
 
 =item Bareword "%s" not allowed while "strict subs" in use
 
@@ -735,9 +735,9 @@ Perl code, but are only used internally.
 
 (F) Some XS code tried to use C<sv_catpvfn()> or a related function with a
 format string that specifies explicit indexes for some of the elements, and
-using a C-style variable-argument list (a C<va_list>). This is not currently
-supported. XS authors wanting to do this must instead construct a C array of
-C<SV*> scalars containing the arguments.
+using a C-style variable-argument list (a C<va_list>).  This is not currently
+supported.  XS authors wanting to do this must instead construct a C array
+of C<SV*> scalars containing the arguments.
 
 =item Can only compress unsigned integers in pack
 
@@ -2529,7 +2529,9 @@ than the floating point supports.
 =item Hexadecimal float: exponent underflow
 
 (W overflow) The hexadecimal floating point has a smaller exponent
-than the floating point supports.
+than the floating point supports.  With the IEEE 754 floating point,
+this may also mean that the subnormals (formerly known as denormals)
+are being used, which may or may not be an error.
 
 =item Hexadecimal float: internal error (%s)
 
@@ -2592,11 +2594,19 @@ declaration.  The '_' in a prototype must be followed by a ';',
 indicating the rest of the parameters are optional, or one of '@'
 or '%', since those two will accept 0 or more final parameters.
 
+=item Illegal character \%o (carriage return)
+
+(F) Perl normally treats carriage returns in the program text as
+it would any other whitespace, which means you should never see
+this error 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 following sigil in a subroutine signature
 
 (F) A parameter in a subroutine signature contained an unexpected character
-following the C<$>, C<@> or C<%> sigil character. Normally the sigil
-should be followed by the variable name or C<=> etc. Perhaps you are
+following the C<$>, C<@> or C<%> sigil character.  Normally the sigil
+should be followed by the variable name or C<=> etc.  Perhaps you are
 trying use a prototype while in the scope of C<use feature 'signatures'>?
 For example:
 
@@ -2608,14 +2618,6 @@ For example:
             :prototype($$) {}  # legal
 
 
-=item Illegal character \%o (carriage return)
-
-(F) Perl normally treats carriage returns in the program text as it
-would any other whitespace, which means you should never see this error
-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 illegalproto) An illegal character was found in a prototype declaration.
@@ -2739,11 +2741,10 @@ either consume text or fail.
 
 =item Initialization of state variables in list context currently forbidden
 
-(F) Currently the implementation of "state" only permits the
-initialization of scalar variables in scalar context.  Re-write
-C<state ($a) = 42> as C<state $a = 42> to change from list to scalar
-context.  Constructions such as C<state (@a) = foo()> will be
-supported in a future perl release.
+(F) C<state> only permits initializing a single scalar variable, in scalar
+context.  So C<state $a = 42> is allowed, but not C<state ($a) = 42>.  To apply
+state semantics to a hash or array, store a hash or array reference in a
+scalar variable.
 
 =item %%s[%s] in scalar context better written as $%s[%s]
 
@@ -4061,6 +4062,19 @@ kind of ref it really was.  See L<perlref>.
 reference to something else instead.  You can use the ref() function to
 find out what kind of ref it really was.  See L<perlref>.
 
+=item '#' not allowed immediately following a sigil in a subroutine signature
+
+(F) In a subroutine signature definition, a comment following a sigil
+(C<$>, C<@> or C<%>), needs to be separated by whitespace or a commma etc., in
+particular to avoid confusion with the C<$#> variable.  For example:
+
+    # bad
+    sub f ($# ignore first arg
+           , $b) {}
+    # good
+    sub f ($, # ignore first arg
+           $b) {}
+
 =item Not an ARRAY reference
 
 (F) Perl was trying to evaluate a reference to an array value, but found
@@ -4094,19 +4108,6 @@ doesn't somehow point to a valid subroutine.  See L<overload>.
 (W syntax) A format specified more picture fields than the next line
 supplied.  See L<perlform>.
 
-=item '#' not allowed immediately following a sigil in a subroutine signature
-
-(F) In a subroutine signature definition, a comment following a sigil
-(C<$>, C<@> or C<%>), needs to be separated by whitespace or a commma etc.,
-in particular to avoid confusion with the C<$#> variable. For example:
-
-    # bad
-    sub f ($# ignore first arg
-           , $b) {}
-    # good
-    sub f ($, # ignore first arg
-           $b) {}
-
 =item %s: not found
 
 (A) You've accidentally run your script through the Bourne shell instead
@@ -5542,7 +5543,7 @@ setting C<$/> to undef, with the exception that this warning would be
 thrown.
 
 You are recommended to change your code to set C<$/> to C<undef> explicitly
-if you wish to slurp the file. In future versions of Perl assigning
+if you wish to slurp the file.  In future versions of Perl assigning
 a reference to will throw a fatal error.
 
 =item Setting $/ to %s reference is forbidden
@@ -6900,7 +6901,10 @@ points up to 0x10FFFF, but Perl allows much larger ones.  However, the
 largest possible ones break the perl interpreter in some constructs,
 including causing it to hang in a few cases.  The known problem areas
 are in C<tr///>, regular expression pattern matching using quantifiers,
-and as the upper limits in loops.
+as quote delimiters in C<qI<X>...I<X>> (where I<X> is the C<chr()> of a large
+code point), and as the upper limits in loops.
+There may be other breakages as well.  If you get this warning, and
+things aren't working correctly, you probably have found one of these.
 
 If your code is to run on various platforms, keep in mind that the upper
 limit depends on the platform.  It is much larger on 64-bit word sizes
@@ -7251,7 +7255,7 @@ argument or check that you are using the right verb.
 =item Version control conflict marker
 
 (F) The parser found a line starting with C<E<lt><<<<<<>,
-C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>. These may be left by a
+C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>.  These may be left by a
 version control system to mark conflicts after a failed merge operation.
 
 =item Version number must be a constant number
@@ -7290,8 +7294,8 @@ when its reference count reached zero while it was still open, e.g.:
 
 Because various errors may only be detected by close() (e.g. buffering could
 allow the C<print> in this example to return true even when the disk is full),
-it is dangerous to ignore its result. So when it happens implicitly, perl will
-signal errors by warning.
+it is dangerous to ignore its result.  So when it happens implicitly, perl
+will signal errors by warning.
 
 B<Prior to version 5.22.0, perl ignored such errors>, so the common idiom shown
 above was liable to cause B<silent data loss>.