(X) You can't allocate more than 64K on an MS-DOS machine.
-=item '!' allowed only after types %s
+=item '%c' allowed only after types %s
-(F) The '!' is allowed in pack() or unpack() only after certain types.
-See L<perlfunc/pack>.
+(F) The modifiers '!', '<' and '>' are allowed in pack() or unpack() only
+after certain types. See L<perlfunc/pack>.
=item Ambiguous call resolved as CORE::%s(), qualify as such or use &
that expected a numeric value instead. If you're fortunate the message
will identify which operator was so unfortunate.
+=item Argument list not closed for PerlIO layer "%s"
+
+(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 Array @%s missing the @ in argument %d of %s()
(D deprecated) Really old Perl let you omit the @ on array names in some
(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 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
(F) The CLASSNAME argument to the bless() operator is expected to be
point. For example, it'd be kind of silly to put a B<-x> on the #!
line.
+=item Can't %s %s-endian %ss on this platform
+
+(F) Your platform's byte-order is neither big-endian nor little-endian,
+or it has a very strange pointer size. Packing and unpacking big- or
+little-endian floating point values and pointers may not be possible.
+See L<perlfunc/pack>.
+
=item Can't exec "%s": %s
(W exec) A system(), exec(), or piped open call could not execute the
inner curlies will be considered a block that loops once. See
L<perlfunc/last>.
+=item Can't load '%s' for module %s
+
+(F) The module you tried to load failed to load a dynamic extension. This
+may either mean that you upgraded your version of perl to one that is
+incompatible with your old dynamic extensions (which is known to happen
+between major versions of perl), or (more likely) that your dynamic
+extension was built against an older version of the library that is
+installed on your system. You may need to rebuild your old dynamic
+extensions.
+
=item Can't localize lexical variable %s
(F) You used local on a variable name that was previously declared as a
are a misprint in a function/method name or a failure to C<AutoSplit>
the file, say, by doing C<make install>.
+=item Can't locate loadable object for module %s in @INC
+
+(F) The module you loaded is trying to load an external library, like
+for example, C<foo.so> or C<bar.dll>, but the L<DynaLoader> module was
+unable to locate this library. See L<DynaLoader>.
+
=item Can't locate object method "%s" via package "%s"
(F) You called a method correctly, and it correctly indicated a package
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 Can't locate package %s for @%s::ISA
(W syntax) The @ISA array contained the name of another package that
doesn't seem to exist.
+=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 Can't make list assignment to \%ENV on this system
(F) List assignment to %ENV is not supported on some systems, notably
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
(F) The script you specified can't be opened for the indicated reason.
-=item Can't provide tied hash usage; use keys(%hash) to test if empty
-
-(F) When a hash is evaluated in scalar context, bucket usage is
-returned if the hash is populated, and false is returned if the hash
-is empty. Bucket usage is not currently available for tied hashes.
-To test if a hash is empty or populated, use keys(%hash) in scalar
-context instead.
+If you're debugging a script that uses #!, and normally relies on the
+shell's $PATH search, the -S option causes perl to do that search, so
+you don't have to type the path or C<`which $scriptname`>.
=item Can't read CRTL environ
=item Can't use anonymous symbol table for method lookup
-(P) The internal routine that does method lookup was handed a symbol
+(F) 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::>.
Errno.pm module. The Errno module is expected to tie the %! hash to
provide symbolic names for C<$!> errno values.
+=item Can't use both '<' and '>' after type '%c' in %s
+
+(F) A type cannot be forced to have both big-endian and little-endian
+byte-order at the same time, so this combination of modifiers is not
+allowed. See L<perlfunc/pack>.
+
=item Can't use %s for loop variable
(F) Only a simple scalar variable may be used as a loop variable on a
have variables in your program that looked like magical variables but
weren't.
+=item Can't use '%c' in a group with different byte-order in %s
+
+(F) You attempted to force a different byte-order on a type
+that is already inside a group with a byte-order modifier.
+For example you cannot force little-endianness on a type that
+is inside a big-endian group.
+
=item Can't use "my %s" in sort comparison
(F) The global variables $a and $b are reserved for sort comparisons.
with an assignment operator, which implies modifying the value itself.
Perhaps you need to copy the value to a temporary, and repeat that.
-=item Character in "C" format wrapped in pack
+=item Character in 'C' format wrapped in pack
(W pack) You said
If you actually want to pack Unicode codepoints, use the C<"U"> format
instead.
-=item Character in "c" format wrapped in pack
+=item Character in 'W' format wrapped in pack
+
+(W pack) You said
+
+ pack("U0W", $x)
+
+where $x is either less than 0 or more than 255. However, C<U0>-mode expects
+all values to fall in the interval [0, 255], so Perl behaved as if you
+meant:
+
+ pack("U0W", $x & 255)
+
+=item Character in 'c' format wrapped in pack
(W pack) You said
If you actually want to pack Unicode codepoints, use the C<"U"> format
instead.
+=item Character in '%c' format wrapped in unpack
+
+(W unpack) You tried something like
+
+ unpack("H", "\x{2a1}")
+
+where the format expects to process a byte (a character with a value
+below 256), but a higher value was provided instead. Perl uses the value
+modulus 256 instead, as if you had provided:
+
+ unpack("H", "\x{a1}")
+
+=item Character(s) in '%c' format wrapped in pack
+
+(W pack) You tried something like
+
+ pack("u", "\x{1f3}b")
+
+where the format expects to process a sequence of bytes (character with a
+value below 256), but some of the characters had a higher value. Perl
+uses the character values modulus 256 instead, as if you had provided:
+
+ pack("u", "\x{f3}b")
+
+=item Character(s) in '%c' format wrapped in unpack
+
+(W unpack) You tried something like
+
+ unpack("s", "\x{1f3}b")
+
+where the format expects to process a sequence of bytes (character with a
+value below 256), but some of the characters had a higher value. Perl
+uses the character values modulus 256 instead, as if you had provided:
+
+ unpack("s", "\x{f3}b")
+
=item close() on unopened filehandle %s
(W unopened) You tried to close a filehandle that was never opened.
long for Perl to handle. You have to be seriously twisted to write code
that triggers this error.
+=item Deprecated use of my() in false conditional
+
+(D deprecated) You used a declaration similar to C<my $x if 0>.
+There has been a long-standing bug in Perl that causes a lexical variable
+not to be cleared at scope exit when its declaration includes a false
+conditional. Some people have exploited this bug to achieve a kind of
+static variable. Since we intend to fix this bug, we don't want people
+relying on this behavior. You can achieve a similar static effect by
+declaring the variable in a separate block outside the function, eg
+
+ sub f { my $x if 0; return $x++ }
+
+becomes
+
+ { my $x; sub f { return $x++ } }
+
+=item DESTROY created new reference to dead object '%s'
+
+(F) A DESTROY() method created a new reference to the object which is
+just being DESTROYed. Perl is confused, and prefers to abort rather than
+to create a dangling reference.
+
=item Did not produce a valid header
See Server error.
=item (Do you need to predeclare %s?)
-(S) This is an educated guess made in conjunction with the message "%s
-found where operator expected". It often means a subroutine or module
+(S syntax) This is an educated guess made in conjunction with the message
+"%s found where operator expected". It often means a subroutine or module
name is being referenced that hasn't been declared yet. This may be
because of ordering problems in your file, or because of a missing
"sub", "package", "require", or "use" statement. If you're referencing
(S malloc) An internal routine called free() on something that had
already been freed.
+=item Duplicate modifier '%c' after '%c' in %s
+
+(W) You have applied the same modifier more than once after a type
+in a pack template. See L<perlfunc/pack>.
+
=item elseif should be elsif
-(S) There is no keyword "elseif" in Perl because Larry thinks it's ugly.
-Your code will be interpreted as an attempt to call a method named
+(S syntax) There is no keyword "elseif" in Perl because Larry thinks it's
+ugly. Your code will be interpreted as an attempt to call a method named
"elseif" for the class returned by the following block. This is
unlikely to be what you want.
(F) While under the C<use filetest> pragma, switching the real and
effective uids or gids failed.
+=item %ENV is aliased to %s
+
+(F) You're running under taint mode, and the C<%ENV> variable has been
+aliased to another hash, so it doesn't reflect anymore the state of the
+program's environment. This is potentially insecure.
+
=item Error converting file specification %s
(F) An error peculiar to VMS. Because Perl may have to deal with file
(F) Your machine apparently doesn't implement fcntl(). What is this, a
PDP-11 or something?
+=item Field too wide in 'u' format in pack
+
+(W pack) Each line in an uuencoded string start with a length indicator
+which can't encode values above 63. So there is no point in asking for
+a line length bigger than that. Perl will behave as if you specified
+C<u63> as format.
+
=item Filehandle %s opened only for input
(W io) You tried to write on a read-only filehandle. If you intended
happens to be missing. So you have to put either the backslash or the
name.
-=item Final @ should be \@ or @name
-
-(F) You must now decide whether the final @ in a string was meant to be
-a literal "at" sign, or was meant to introduce a variable name that
-happens to be missing. So you have to put either the backslash or the
-name.
-
=item flock() on closed filehandle %s
(W closed) The filehandle you're attempting to flock() got itself closed
=item %s found where operator expected
-(S) The Perl lexer knows whether to expect a term or an operator. If it
-sees what it knows to be a term when it was expecting to see an
+(S syntax) The Perl lexer knows whether to expect a term or an operator.
+If it sees what it knows to be a term when it was expecting to see an
operator, it gives you this warning. Usually it indicates that an
operator or delimiter was omitted, such as a semicolon.
(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 declaration of subroutine %s
+
+(F) A subroutine was not declared correctly. See L<perlsub>.
+
=item Illegal division by zero
(F) You tried to divide a number by 0. Either something was wrong in
(F) You can't use system(), exec(), or a piped open in a setuid or
setgid script if C<$ENV{PATH}> contains a directory that is writable by
-the world. See L<perlsec>.
+the world. Also, the PATH must not contain any relative directory.
+See L<perlsec>.
=item Insecure $ENV{%s} while running %s
parenthesised parameter list, perhaps that list was terminated too soon.
See L<attributes>.
+=item Invalid separator character %s in PerlIO layer specification %s
+
+(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 Invalid type '%s' in %s
(F) The given character is not a valid pack or unpack type.
(W unopened) You tried ioctl() on a filehandle that was never opened.
Check you control flow and number of arguments.
+=item IO layers (like "%s") unavailable
+
+(F) Your Perl has not been configured to have PerlIO, and therefore
+you cannot use IO layers. To have PerlIO Perl must be configured
+with 'useperlio'.
+
=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 $* is no longer supported
+
+(D deprecated) The special variable C<$*>, deprecated in older perls, has
+been removed as of 5.9.0 and is no longer supported. You should use the
+C<//m> and C<//s> regexp modifiers instead.
+
=item `%s' is not a code reference
(W overload) The second (fourth, sixth, ...) argument of overload::constant
to check the return value of your socket() call? See
L<perlfunc/listen>.
-=item lstat() on filehandle %s
-
-(W io) You tried to do an lstat on a filehandle. What did you mean
-by that? lstat() makes sense only on filenames. (Perl did a fstat()
-instead on the filehandle.)
-
=item Lookbehind longer than %d not implemented in regex; marked by <-- HERE in m/%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 the regular expression about where the problem was discovered.
+=item lstat() on filehandle %s
+
+(W io) You tried to do an lstat on a filehandle. What did you mean
+by that? lstat() makes sense only on filenames. (Perl did a fstat()
+instead on the filehandle.)
+
=item Lvalue subs returning %s not implemented yet
(F) Due to limitations in the current implementation, array and hash
=item Malformed UTF-8 character (%s)
-Perl detected something that didn't comply with UTF-8 encoding rules.
+(W utf8) 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
Perl thought it was reading UTF-16 encoded character data but while
doing it Perl met a malformed Unicode surrogate.
+=item Malformed UTF-8 string in pack
+
+(F) You tried to pack something that didn't comply with UTF-8 encoding
+rules and perl was unable to guess how to make more progress.
+
+=item Malformed UTF-8 string in unpack
+
+(F) You tried to unpack something that didn't comply with UTF-8 encoding
+rules and perl was unable to guess how to make more progress.
+
+=item Malformed UTF-8 string in '%c' format in unpack
+
+(F) You tried to unpack something that didn't comply with UTF-8 encoding
+rules and perl was unable to guess how to make more progress.
+
=item %s matches null string many times in regex; marked by <-- HERE in m/%s/
(W regexp) The pattern you've specified would be an infinite loop if the
(W syntax) An underscore (underbar) in a numeric constant did not
separate two digits.
+=item Missing argument to -%c
+
+(F) The argument to the indicated command line switch must follow
+immediately after the switch, without intervening spaces.
+
=item Missing %sbrace%s on \N{}
(F) Wrong syntax of character name literal C<\N{charname}> within
=item (Missing operator before %s?)
-(S) This is an educated guess made in conjunction with the message "%s
-found where operator expected". Often the missing operator is a comma.
+(S syntax) This is an educated guess made in conjunction with the message
+"%s found where operator expected". Often the missing operator is a comma.
=item Missing right brace on %s
=item (Missing semicolon on previous line?)
-(S) This is an educated guess made in conjunction with the message "%s
-found where operator expected". Don't automatically put a semicolon on
+(S syntax) This is an educated guess made in conjunction with the message
+"%s found where operator expected". Don't automatically put a semicolon on
the previous line just because you saw this message.
=item Modification of a read-only value attempted
(W syntax) Multidimensional arrays aren't written like C<$foo[1,2,3]>.
They're written like C<$foo[1][2][3]>, as in C.
-=item '/' must be followed by 'a*', 'A*' or 'Z*'
-
-(F) You had a pack template indicating a counted-length string,
-Currently the only things that can have their length counted are a*, A*
-or Z*. See L<perlfunc/pack>.
-
=item '/' must follow a numeric type in unpack
(F) You had an unpack template that contained a '/', but this did not
again somehow to suppress the message. The C<our> declaration is
provided for this purpose.
+NOTE: This warning detects symbols that have been used only once so $c, @c,
+%c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered
+the same; if a program uses $c only once but also uses any of the others it
+will not trigger this warning.
+
=item Negative '/' count in unpack
(F) The length count obtained from a length/code unpack operation was
(F) Configure didn't find anything resembling the setreuid() call for
your system.
-=item No space allowed after -%c
-
-(F) The argument to the indicated command line switch must follow
-immediately after the switch, without intervening spaces.
-
=item No %s specified for -%c
(F) The indicated command line switch needs a mandatory argument, but
you haven't specified one.
+=item No such class field "%s" in variable %s of type %s
+
+(F) You tried to access a key from a hash through the indicated typed variable
+but that key is not allowed by the package of the same type. The indicated
+package has restricted the set of allowed keys using the L<fields> pragma.
+
=item No such class %s
(F) You provided a class qualifier in a "my" or "our" declaration, but
the current limits and change them, and in ksh/bash/zsh use C<ulimit -a>
and C<ulimit -d n>, respectively.
+=item Out of memory during %s extend
+
+(X) An attempt was made to extend an array, a list, or a string beyond
+the largest possible memory allocation.
+
=item Out of memory during "large" request for %s
(F) The malloc() function returned 0, indicating there was insufficient
(F) You had a template that specified an absolute position outside
the string being unpacked. See L<perlfunc/pack>.
+=item '@' outside of string with malformed UTF-8 in unpack
+
+(F) You had a template that specified an absolute position outside
+the string being unpacked. The string being unpacked was also invalid
+UTF-8. See L<perlfunc/pack>.
+
=item %s package attribute may clash with future reserved word: %s
(W reserved) A lowercase attribute name was used that had a
(P) Failed an internal consistency check while trying to reset a weak
reference.
+=item panic: Devel::DProf inconsistent subroutine return
+
+(P) Devel::DProf called a subroutine that exited using goto(LABEL),
+last(LABEL) or next(LABEL). Leaving that way a subroutine called from
+an XSUB will lead very probably to a crash of the interpreter. This is
+a bug that will hopefully one day get fixed.
+
=item panic: die %s
(P) We popped the context stack to an eval context, and then discovered
(P) The compiler is screwed up with respect to the map() function.
+=item panic: memory wrap
+
+(P) Something tried to allocate more memory than possible.
+
=item panic: null array
(P) One of the internal array routines was passed a null AV pointer.
(P) The compiler attempted to do a goto, or something weird like that.
-=item panic: yylex
-
-(P) The lexer got into a bad state while processing a case modifier.
-
=item panic: utf16_to_utf8: odd bytelen
(P) Something tried to call utf16_to_utf8 with an odd (as opposed
to even) byte length.
+=item panic: yylex
+
+(P) The lexer got into a bad state while processing a case modifier.
+
=item Parentheses missing around "%s" list
(W parenthesis) You said something like
"Can't locate object method \"%s\" via package \"%s\"". It often means
that a method requires a package that has not been loaded.
-=item perlio: argument list not closed for layer "%s"
+=item Perl_my_%s() not available
-(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 layer specification list %s
-
-(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"
-
-(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
-explicitly request the failing operation, it may be the result of the
-value of the environment variable PERLIO.
+(F) Your platform has very uncommon byte-order and integer size,
+so it was not possible to set up some or all fixed-width byte-order
+conversion functions. This is only a problem when you're using the
+'<' or '>' modifiers in (un)pack templates. See L<perlfunc/pack>.
=item Perl %s required--this is only version %s, stopped
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)>).
+really meant to write this, disable the warning, or, better, put the
+parentheses explicitly and write C<$x & ($y == 0)>).
=item Possible unintended interpolation of %s in string
(P) A "can't happen" error, because safemalloc() should have caught it
earlier.
+=item Repeated format line will never terminate (~~ and @# incompatible)
+
+(F) Your format containes the ~~ repeat-until-blank sequence and a
+numeric field that will never go blank so that the repetition never
+terminates. You might use ^# instead. See L<perlform>.
+
=item Reversed %s= operator
(W syntax) You wrote your assignment operator backwards. The = must
(F) The setuid emulator won't run a script that is writable by the
world, because the world might have written on it already.
+=item Setuid script not plain file
+
+(F) The setuid emulator won't run a script that isn't read from a file,
+but from a socket, a pipe or another device.
+
=item shm%s not implemented
(F) You don't have System V shared memory IPC on your system.
+=item !=~ should be !~
+
+(W syntax) The non-matching operator is !~, not !=~. !=~ will be
+interpreted as the != (numeric not equal) and ~ (1's complement)
+operators: probably not what you intended.
+
=item <> should be quotes
(F) You wrote C<< require <file> >> when you should have written
(F) While under the C<use filetest> pragma, we cannot switch the real
and effective uids or gids.
+=item %s syntax
+
+(F) The final summary message when a C<perl -c> succeeds.
+
=item syntax error
(F) Probably means you had a syntax error. Common reasons include:
a perl4 interpreter, especially if the next 2 tokens are "use strict"
or "my $var" or "our $var".
-=item %s syntax
-
-(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.
past the symlink to get to the real file. Use an actual filename
instead.
+=item The 'unique' attribute may only be applied to 'our' variables
+
+(F) Currently this attribute is not supported on C<my> or C<sub>
+declarations. See L<perlfunc/our>.
+
=item This Perl can't reset CRTL environ elements (%s)
=item This Perl can't set CRTL environ elements (%s=%s)
(F) The entry point function of threads->create() failed for some reason.
-=item Tied variable freed while still in use
-
-(F) An access method for a tied variable (e.g. FETCH) did something to
-free the variable. Since continuing the current operation is likely
-to result in a coredump, Perl is bailing out instead.
-
=item times not implemented
(F) Your version of the C library apparently doesn't do times(). I
suspect you're not running on Unix.
+=item "-T" is on the #! line, it must also be used on the command line
+
+(X) The #! line (or local equivalent) in a Perl script contains the
+B<-T> option, but Perl was not invoked with B<-T> in its command line.
+This is an error because, by the time Perl discovers a B<-T> in a
+script, it's too late to properly taint everything from the environment.
+So Perl gives up.
+
+If the Perl script is being executed as a command using the #!
+mechanism (or its local equivalent), this error can usually be fixed by
+editing the #! line so that the B<-T> option is a part of Perl's first
+argument: e.g. change C<perl -n -T> to C<perl -T -n>.
+
+If the Perl script is being executed as C<perl scriptname>, then the
+B<-T> option must appear on the command line: C<perl -T scriptname>.
+
=item To%s: illegal mapping '%s'
(F) You tried to define a customized To-mapping for lc(), lcfirst,
B<-M> or B<-m> option. This is an error because B<-M> and B<-m> options
are not intended for use inside scripts. Use the C<use> pragma instead.
-=item Too late for "B<-T>" option
-
-(X) The #! line (or local equivalent) in a Perl script contains the
-B<-T> option, but Perl was not invoked with B<-T> in its command line.
-This is an error because, by the time Perl discovers a B<-T> in a
-script, it's too late to properly taint everything from the environment.
-So Perl gives up.
-
-If the Perl script is being executed as a command using the #!
-mechanism (or its local equivalent), this error can usually be fixed by
-editing the #! line so that the B<-T> option is a part of Perl's first
-argument: e.g. change C<perl -n -T> to C<perl -T -n>.
-
-If the Perl script is being executed as C<perl scriptname>, then the
-B<-T> option must appear on the command line: C<perl -T scriptname>.
-
=item Too late to run %s block
(W void) A CHECK or INIT block is being defined during run time proper,
=item Transliteration replacement not terminated
-(F) The lexer couldn't find the final delimiter of a tr/// or tr[][]
-construct.
+(F) The lexer couldn't find the final delimiter of a tr///, tr[][],
+y/// or y[][] construct.
=item '%s' trapped by operation mask
(F) There are no byte-swapping functions for a machine with this byte
order.
-=item Unknown "re" subpragma '%s' (known ones are: %s)
-
-You tried to use an unknown subpragma of the "re" pragma.
-
=item Unknown open() mode '%s'
(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<< >& >>.
+=item Unknown PerlIO layer "%s"
+
+(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
+explicitly request the failing operation, it may be the result of the
+value of the environment variable PERLIO.
+
=item Unknown process %x sent message to prime_env_iter: %s
(P) An error peculiar to VMS. Perl was reading values for %ENV before
data Perl expected. Someone's very confused, or perhaps trying to
subvert Perl's population of %ENV for nefarious purposes.
+=item Unknown "re" subpragma '%s' (known ones are: %s)
+
+You tried to use an unknown subpragma of the "re" pragma.
+
=item Unknown switch condition (?(%.2s in regex; marked by <-- HERE in m/%s/
(F) The condition part of a (?(condition)if-clause|else-clause) construct
recognized by Perl inside character classes. The character was
understood literally.
+=item Unrecognized escape \\%c passed through
+
+(W misc) You used a backslash-character combination which is not
+recognized by Perl.
+
=item Unrecognized escape \\%c passed through in regex; marked by <-- HERE in m/%s/
(W regexp) You used a backslash-character combination which is not
literally. The <-- HERE shows in the regular expression about where the
escape was discovered.
-=item Unrecognized escape \\%c passed through
-
-(W misc) You used a backslash-character combination which is not
-recognized by Perl.
-
=item Unrecognized signal name "%s"
(F) You specified a signal name to the kill() function that was not
of Perl executables, some of which may support fork, some not. Try
changing the name you call Perl by to C<perl_>, C<perl__>, and so on.
-=item Unsupported script encoding
+=item Unsupported script encoding %s
(F) Your program file begins with a Unicode Byte Order Mark (BOM) which
-declares it to be in a Unicode encoding that Perl cannot yet read.
+declares it to be in a Unicode encoding that Perl cannot read.
=item Unsupported socket function "%s" called
(W untie) A copy of the object returned from C<tie> (or C<tied>) was
still valid when C<untie> was called.
+=item Usage: POSIX::%s(%s)
+
+(F) You called a POSIX function with incorrect arguments.
+See L<POSIX/FUNCTIONS> for more information.
+
+=item Usage: Win32::%s(%s)
+
+(F) You called a Win32 function with incorrect arguments.
+See L<Win32> for more information.
+
=item Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/
(W regexp) You have used an internal modifier such as (?-o) that has no
The <-- HERE shows in the regular expression about
where the problem was discovered. See L<perlre>.
+=item Useless localization of %s
+
+(W syntax) The localization of lvalues such as C<local($x=10)> is
+legal, but in fact the local() currently has no effect. This may change at
+some point in the future, but in the meantime such code is discouraged.
+
=item Useless (?%s) - use /%s modifier in regex; marked by <-- HERE in m/%s/
(W regexp) You have used an internal modifier such as (?o) that has no
use the /g modifier. Currently, /c is meaningful only when /g is
used. (This may change in the future.)
+=item Use of freed value in iteration
+
+(F) Perhaps you modified the iterated array within the loop?
+This error is typically caused by code like the following:
+
+ @a = (3,4);
+ @a = () for (1,2,@a);
+
+You are not supposed to modify arrays while they are being iterated over.
+For speed and efficiency reasons, Perl internally does not do full
+reference-counting of iterated items, hence deleting such an item in the
+middle of an iteration causes Perl to see a freed value.
+
=item Use of *glob{FILEHANDLE} is deprecated
(D deprecated) You are now encouraged to use the shorter *glob{IO} form
(F) You attempted to use a feature of printf that is accessible from
only C. This usually means there's a better way to do it in Perl.
-=item Use of $* is deprecated
-
-(D deprecated) This variable magically turned on multi-line pattern
-matching, both for you and for any luckless subroutine that you happen
-to call. You should use the new C<//m> and C<//s> modifiers now to do
-that without the dangerous action-at-a-distance effects of C<$*>.
-
=item Use of $# is deprecated
(D deprecated) This was an ill-advised attempt to emulate a poorly
generally because there's a better way to do it, and also because the
old way has bad side effects.
-=item Use of freed value in iteration (perhaps you modified the iterated array within the loop?)
-
-(F) This is typically caused by code like the following:
-
- @a = (3,4);
- @a = () for (1,2,@a);
-
-You are not supposed to modify arrays while they are being iterated over.
-For speed and efficiency reasons, Perl internally does not do full
-reference-counting of iterated items, hence deleting such an item in the
-middle of an iteration causes Perl to see a freed value.
-
=item Use of -l on filehandle %s
(W io) A filehandle represents an opened file, and when you opened the file
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.
-To help you figure out what was undefined, perl tells you what operation
-you used the undefined value in. Note, however, that perl optimizes your
-program and the operation displayed in the warning may not necessarily
-appear literally in your program. For example, C<"that $foo"> is
-usually optimized into C<"that " . $foo>, and the warning will refer to
-the C<concatenation (.)> operator, even though there is no C<.> in your
-program.
+To help you figure out what was undefined, perl will try to tell you the
+name of the variable (if any) that was undefined. In some cases it cannot
+do this, so it also tells you what operation you used the undefined value
+in. Note, however, that perl optimizes your program and the operation
+displayed in the warning may not necessarily appear literally in your
+program. For example, C<"that $foo"> is usually optimized into C<"that "
+. $foo>, and the warning will refer to the C<concatenation (.)> operator,
+even though there is no C<.> in your program.
=item Using a hash as a reference is deprecated
longer than 1024 characters. The return value has been truncated to
1024 characters.
+=item Variable "%s" is not available
+
+(W closure) During compilation, an inner named subroutine or eval is
+attempting to capture an outer lexical that is not currently available.
+This can happen for one of two reasons. First, the outer lexical may be
+declared in an outer anonymous subroutine that has not yet been created.
+(Remember that named subs are created at compile time, while anonymous
+subs are created at run-time.) For example,
+
+ sub { my $a; sub f { $a } }
+
+At the time that f is created, it can't capture the current value of $a,
+since the anonymous subroutine hasn't been created yet. Conversely,
+the following won't give a warning since the anonymous subroutine has by
+now been created and is live:
+
+ sub { my $a; eval 'sub f { $a }' }->();
+
+The second situation is caused by an eval accessing a variable that has
+gone out of scope, for example,
+
+ sub f {
+ my $a;
+ sub { eval '$a' }
+ }
+ f()->();
+
+Here, when the '$a' in the eval is being compiled, f() is not currently being
+executed, so its $a is not available for capture.
+
=item Variable "%s" is not imported%s
(F) While "use strict" in effect, you referred to a global variable that
earlier variable will still exist until the end of the scope or until
all closure referents to it are destroyed.
-=item Variable "%s" may be unavailable
-
-(W closure) An inner (nested) I<anonymous> subroutine is inside a
-I<named> subroutine, and outside that is another subroutine; and the
-anonymous (innermost) subroutine is referencing a lexical variable
-defined in the outermost subroutine. For example:
-
- sub outermost { my $a; sub middle { sub { $a } } }
-
-If the anonymous subroutine is called or referenced (directly or
-indirectly) from the outermost subroutine, it will share the variable as
-you would expect. But if the anonymous subroutine is called or
-referenced when the outermost subroutine is not active, it will see the
-value of the shared variable as it was before and during the *first*
-call to the outermost subroutine, which is probably not what you want.
-
-In these circumstances, it is usually best to make the middle subroutine
-anonymous, using the C<sub {}> syntax. Perl has specific support for
-shared variables in nested anonymous subroutines; a named subroutine in
-between interferes with this feature.
-
=item Variable syntax
(A) You've accidentally run your script through B<csh> instead
=item Variable "%s" will not stay shared
(W closure) An inner (nested) I<named> subroutine is referencing a
-lexical variable defined in an outer subroutine.
+lexical variable defined in an outer named subroutine.
-When the inner subroutine is called, it will probably see the value of
+When the inner subroutine is called, it will see the value of
the outer subroutine's variable as it was before and during the *first*
call to the outer subroutine; in this case, after the first call to the
outer subroutine is complete, the inner and outer subroutines will no
longer share a common value for the variable. In other words, the
variable will no longer be shared.
-Furthermore, if the outer subroutine is anonymous and references a
-lexical variable outside itself, then the outer and inner subroutines
-will I<never> share the given variable.
-
This problem can usually be solved by making the inner subroutine
anonymous, using the C<sub {}> syntax. When inner anonymous subs that
-reference variables in outer subroutines are called or referenced, they
+reference variables in outer subroutines are created, they
are automatically rebound to the current values of such variables.
=item Version number must be a constant number
=item Wide character in %s
(W utf8) Perl met a wide character (>255) when it wasn't expecting
-one. This warning is by default on for I/O (like print) but can be
-turned off by C<no warnings 'utf8';>. You are supposed to explicitly
-mark the filehandle with an encoding, see L<open> and L<perlfunc/binmode>.
+one. This warning is by default on for I/O (like print). The easiest
+way to quiet this warning is simply to add the C<:utf8> layer to the
+output, e.g. C<binmode STDOUT, ':utf8'>. Another way to turn off the
+warning is to add C<no warnings 'utf8';> but that is often closer to
+cheating. In general, you are supposed to explicitly mark the
+filehandle with an encoding, see L<open> and L<perlfunc/binmode>.
=item Within []-length '%c' not allowed
(W closed) The filehandle you're writing to got itself closed sometime
before now. Check your control flow.
+=item %s "\x%s" does not map to Unicode
+
+When reading in different encodings Perl tries to map everything
+into Unicode characters. The bytes you read in are not legal in
+this encoding, for example
+
+ utf8 "\xE4" does not map to Unicode
+
+if you try to read in the a-diaereses Latin-1 as UTF-8.
+
=item 'X' outside of string
(F) You had a (un)pack template that specified a relative position before
assignment is executed, which is probably not what you want. (If it IS
what you want, put an & in front.)
+=item Your random numbers are not that random
+
+(F) When trying to initialise the random seed for hashes, Perl could
+not get any randomness out of your system. This usually indicates
+Something Very Wrong.
+
=back
=cut