(A) An alien error message (not generated by Perl).
The majority of messages from the first three classifications above
-(W, D & S) can be controlled using the C<warnings> pragma.
+(W, D & S) can be controlled using the C<warnings> pragma.
If a message can be controlled by the C<warnings> pragma, its warning
category is included with the classification letter in the description
(F) A string of a form C<CORE::word> was given to prototype(), but there
is no builtin with the name C<word>.
+=item Can't find %s character property "%s"
+
+(F) You used C<\p{}> or C<\P{}> but the character property by that name
+could not be find. Maybe you mispelled the name of the property
+(remember that the names of character properties consist only of
+alphanumeric characters), or maybe you forgot the C<Is> or C<In> prefix?
+
=item Can't find label %s
(F) You said to goto a label that isn't mentioned anywhere that it's
unseen whitespace before or after your closing tag. A good programmer's
editor will have a way to help you find these characters.
-=item Can't find %s property definition %s
+=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
(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.
+that $ref will still be a reference.
=item Can't locate %s
redirection, and couldn't open the pipe into which to send data destined
for stdout.
-=item Can't open perl script "%s": %s
+=item Can't open perl script%s: %s
(F) The script you specified can't be opened for the indicated reason.
though, because the inner curlies will be considered a block that
loops once. See L<perlfunc/redo>.
-=item Can't remove %s: %s, skipping file
+=item Can't remove %s: %s, skipping file
(S inplace) You requested an inplace edit without creating a backup
file. Perl was unable to remove the original file to replace it with
(F) A value used as either a hard reference or a symbolic reference must
be a defined value. This helps to delurk some insidious errors.
+=item Can't use anonymous symbol table for method lookup
+
+(P) The internal routine that does method lookup was handed a symbol
+table that doesn't have a name. Symbol tables can become anonymous
+for example by undefining stashes: C<undef %Some::Package::>.
+
=item Can't use bareword ("%s") as %s ref while "strict refs" in use
(F) Only hard references are allowed by "strict refs". Symbolic
references are disallowed. See L<perlref>.
-=item Can't use %%! because Errno.pm is not available
+=item Can't use %! because Errno.pm is not available
(F) The first time the %! hash is used, perl automatically loads the
Errno.pm module. The Errno module is expected to tie the %! hash to
=item Copy method did not return a reference
-(F) The method which overloads "=" is buggy. See
+(F) The method which overloads "=" is buggy. See
L<overload/Copy Constructor>.
=item CORE::%s is not a keyword
(D deprecated) defined() is not usually useful on arrays because it
checks for an undefined I<scalar> value. If you want to see if the
-array is empty, just use C<if (@array) { # not empty }> for example.
+array is empty, just use C<if (@array) { # not empty }> for example.
=item defined(%hash) is deprecated
(D deprecated) defined() is not usually useful on hashes because it
checks for an undefined I<scalar> value. If you want to see if the hash
-is empty, just use C<if (%hash) { # not empty }> for example.
+is empty, just use C<if (%hash) { # not empty }> for example.
=item Delimiter for here document is too long
(W syntax) You've run afoul of the rule that says that any list operator
followed by parentheses turns into a function, with all the list
-operators arguments found inside the parentheses. See
+operators arguments found inside the parentheses. See
L<perlop/Terms and List Operators (Leftward)>.
=item Invalid %s attribute: %s
=item invalid [] range "%s" in regexp
(F) The range specified in a character class had a minimum character
-greater than the maximum character. See L<perlre>.
+greater than the maximum character. One possibility is that you
+forgot the C<{}> from your ending C<\x{}> - C<\x> without the curly
+braces can go only up to C<ff>. See L<perlre>.
=item invalid [] range "%s" in transliteration operator
(W unopened) You tried ioctl() on a filehandle that was never opened.
Check you control flow and number of arguments.
+=item IO::Socket::atmark not implemented on this architecture
+
+(F) Your machine doesn't implement the sockatmark() functionality,
+neither as a system call or an ioctl call (SIOCATMARK).
+
=item `%s' is not a code reference
(W) The second (fourth, sixth, ...) argument of overload::constant needs
=item Misplaced _ in number
-(W syntax) An underline in a decimal constant wasn't on a 3-digit boundary.
+(W syntax) An underscore (underbar) in a numeric constant either
+immediately followed an earlier underscore, or an underscore began or
+ended a numeric constant, or its fractional part (in the case of
+decimal constants) began or ended with an underscore.
=item Missing %sbrace%s on \N{}
$x = 1;
foreach my $n ($x, 2) {
$n *= 2; # modifies the $x, but fails on attempt to modify the 2
- }
+ }
=item Modification of non-creatable array value attempted, %s
=item panic: utf16_to_utf8: odd bytelen
(P) Something tried to call utf16_to_utf8 with an odd (as opposed
-to even) byte length.
+to even) byte length.
=item Parentheses missing around "%s" list
=item perlio: argument list not closed for layer "%s"
-(S) When pusing a layer with arguments onto the Perl I/O system you forgot
+(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
-data between external and internal representations.) Perl assumed that
-the argument list finished at the next : or the end of the layer
-specification. If your program didn't explicitly request the failing
-operation, it may be the result of the value of the environment variable
-PERLIO.
+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
+
+(S) When pushing layers onto the Perl I/O system, something other than a
+colon or whitespace was seen between the elements of an layer list.
+If the previous attribute had a parenthesised parameter list, perhaps that
+list was terminated too soon.
=item perlio: unknown layer "%s"
(F) You used a regular expression extension that doesn't make sense.
The << HERE shows in the regular expression about
-where the problem was discovered.
+where the problem was discovered.
See L<perlre>.
=item Sequence (?#... not terminated in regex m/%s/
throws away the left argument, which is not what you want. See
L<perlref> for more on this.
+This warning will not be issued for numerical constants equal to 0 or 1
+since they are often used in statements like
+
+ 1 while sub_with_side_effects() ;
+
+String constants that would normally evaluate to 0 or 1 are warned
+about.
+
=item Useless use of "re" pragma
(W) You did C<use re;> without any arguments. That isn't very useful.
+=item Useless use of %s with no values
+
+(W syntax) You used the push() or unshift() function with no arguments
+apart from the array, like C<push(@x)> or C<unshift(@foo)>. That won't
+usually have any effect on the array, so is completely useless. It's
+possible in principle that push(@tied_array) could have some effect
+if the array is tied to a class which implements a PUSH method. If so,
+you can write it as C<push(@tied_array,())> to avoid this warning.
+
=item "use" not allowed in expression
(F) The "use" keyword is recognized and executed at compile time, and
isn't what you mean, because references tend to be huge numbers which
take you out of memory, and so usually indicates programmer error.
-If you really do mean it, explicitly numify your reference, like so:
+If you really do mean it, explicitly numify your reference, like so:
C<$array[0+$ref]>
=item Use of reserved word "%s" is deprecated
=item Wide character in %s
-(F) Perl met a wide character (>255) when it wasn't expecting one.
+(W utf8) Perl met a wide character (>255) when it wasn't expecting one.
=item write() on closed filehandle %s