(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
temporary or readonly values) from a subroutine used as an lvalue. This
is not allowed.
+=item Can't return %s to lvalue scalar context
+
+(F) You tried to return a complete array or hash from an lvalue subroutine,
+but you called the subroutine in a way that made Perl think you meant
+to return only one value. You probably meant to write parentheses around
+the call to the subroutine, which tell Perl that the call should be in
+list context.
+
=item Can't return outside a subroutine
(F) The return statement was executed in mainline code, that is, where
(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
values cannot be returned in subroutines used in lvalue context. See
L<perlsub/"Lvalue subroutines">.
-=item Lookbehind longer than %d not implemented before << HERE in reges m/%s/
+=item Lookbehind longer than %d not implemented before << HERE %s
(F) There is currently a limit on the length of string which lookbehind can
handle. This restriction may be eased in a future release. The << HERE shows in
=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
(P) We popped the context stack to an eval context, and then discovered
it wasn't an eval context.
-=item panic: do_match
+=item panic: pp_match
(P) The internal pp_match() routine was called with invalid operational
data.
-=item panic: do_split
-
-(P) Something terrible went wrong in setting up for the split.
-
=item panic: do_subst
(P) The internal pp_subst() routine was called with invalid operational
data.
-=item panic: do_trans
+=item panic: do_trans_%s
-(P) The internal do_trans() routine was called with invalid operational
+(P) The internal do_trans routines were called with invalid operational
data.
=item panic: frexp
(P) The foreach iterator got called in a non-loop context frame.
+=item panic: pp_split
+
+(P) Something terrible went wrong in setting up for the split.
+
=item panic: realloc
(P) Something requested a negative number of bytes of realloc.
=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
you run Perl. How to really fix the problem can be found in
L<perllocale> section B<LOCALE PROBLEMS>.
+=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
+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"
(S) An attempt was made to push an unknown layer onto the Perl I/O
{min,max} construct. The << HERE shows in the regular expression about where
the problem was discovered. See L<perlre>.
-=item Quantifier unexpected on zero-length expression before << HERE in regex m/%s/
+=item Quantifier unexpected on zero-length expression before << HERE %s
(W regexp) You applied a regular expression quantifier in a place where
it makes no sense, such as on a zero-width assertion. Try putting the
not magically convert between scalars and lists for you. See
L<perlref>.
+=item Scalars leaked: %d
+
+(P) Something went wrong in Perl's internal bookkeeping of scalars:
+not all scalar variables were deallocated by the time Perl exited.
+What this usually indicates is a memory leak, which is of course bad,
+especially if the Perl program is intended to be long-running.
+
=item Script is not setuid/setgid in suidperl
(F) Oddly, the suidperl program was invoked on a script without a setuid
shows in the regular expression about where the problem was discovered. See
L<perlre>.
-=item Sequence (?{...}) not terminated or not {}-balanced in regex m/%s/
+=item Sequence (?{...}) not terminated or not {}-balanced in %s
(F) If the contents of a (?{...}) clause contains braces, they must balance
for Perl to properly detect the end of the clause. See L<perlre>.
-=item Sequence (?%s...) not implemented before << HERE mark in regex m/%s/
+=item Sequence (?%s...) not implemented before << HERE mark in %s
(F) A proposed regular expression extension has the character reserved but
has not yet been written. The << HERE shows in the regular expression about
where the problem was discovered. See L<perlre>.
-=item Sequence (?%s...) not recognized before << HERE mark in regex m/%s/
+=item Sequence (?%s...) not recognized before << HERE mark in %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/
(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 Switch (?(condition)... contains too many branches before << HERE in regex m/%s/
+=item Switch (?(condition)... contains too many branches before << HE%s
(F) A (?(condition)if-clause|else-clause) construct can have at most two
branches (the if-clause and the else-clause). If you want one or both to
(W newline) A file operation was attempted on a filename, and that
operation failed, PROBABLY because the filename contained a newline,
-PROBABLY because you forgot to chop() or chomp() it off. See
-L<perlfunc/chomp>.
+PROBABLY because you forgot to chomp() it off. See L<perlfunc/chomp>.
=item Unsupported directory function "%s" called
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
(D deprecated) This was an ill-advised attempt to emulate a poorly
defined B<awk> feature. Use an explicit printf() or sprintf() instead.
+=item Use of reference "%s" in array index
+
+(W) You tried to use a reference as an array index; this probably
+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:
+C<$array[0+$ref]>
+
=item Use of reserved word "%s" is deprecated
(D deprecated) The indicated bareword is a reserved word. Future
reference variables in outer subroutines are called or referenced, they
are automatically rebound to the current values of such variables.
-=item Variable length lookbehind not implemented before << HERE in regex m/%s/
+=item Variable length lookbehind not implemented before << HERE in %s
(F) Lookbehind is allowed only for subexpressions whose length is fixed and
known at compile time. The << HERE shows in the regular expression about where
=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