=over 4
-=item A thread exited while %d other threads were still running
-
-(W) When using threaded Perl, a thread (not necessarily the main
-thread) exited while there were still other threads running.
-Usually it's a good idea to first collect the return values of the
-created threads by joining them, and only then exit from then main
-thread. See L<threads>.
-
=item accept() on closed socket %s
(W closed) You tried to do an accept on a closed socket. Did you forget
=item '!' allowed only after types %s
-(F) The '!' is allowed in pack() and unpack() only after certain types.
+(F) The '!' is 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 &
must either both be scalars or both be lists. Otherwise Perl won't
know which context to supply to the right side.
+=item A thread exited while %d threads were running
+
+(W) When using threaded Perl, a thread (not necessarily the main
+thread) exited while there were still other threads running.
+Usually it's a good idea to first collect the return values of the
+created threads by joining them, and only then exit from the main
+thread. See L<threads>.
+
=item Attempt to access disallowed key '%s' in a restricted hash
(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 clear a restricted hash
-
-(F) It is currently not allowed to clear a restricted hash, even if the
-new hash would contain the same keys as before. This may change in
-the future.
-
=item Attempt to delete readonly key '%s' from a restricted hash
(F) The failing code attempted to delete a key whose value has been
bless $self, "$proto";
+=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 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 free non-arena SV: 0x%lx
(P internal) All SV objects are supposed to be allocated from arenas
(P) One of the internal hash routines was passed a null HV pointer.
-=item Bad index while coercing array into hash
-
-(F) The index looked up in the hash found as the 0'th element of a
-pseudo-hash is not legal. Index values must be at 1 or greater.
-See L<perlref>.
-
=item Badly placed ()'s
(A) You've accidentally run your script through B<csh> instead
(P) Perl detected an attempt to copy an internal value that is not
copyable.
-=item B<-P> not allowed for setuid/setgid script
-
-(F) The script would have to be opened by the C preprocessor by name,
-which provides a race condition that breaks security.
-
=item Buffer overflow in prime_env_iter: %s
(W internal) A warning peculiar to VMS. While Perl was preparing to
function correctly, you may put an ampersand before the name to avoid
the warning. See L<perlsub>.
-=item / cannot take a count
+=item Cannot compress integer in pack
-(F) You had an unpack template indicating a counted-length string, but
-you have also specified an explicit size for the string. See
-L<perlfunc/pack>.
+(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 in pack
+
+(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 Can only compress unsigned integers in pack
+
+(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 Can't bless non-reference value
found in the PATH, or at least not with the correct permissions. The
script exists in the current directory, but PATH prohibits running it.
+=item Can't find %s property definition %s
+
+(F) You may have tried to use C<\p> which means a Unicode property (for
+example C<\p{Lu}> is all uppercase letters). If you did mean to use a
+Unicode property, see L<perlunicode> for the list of known properties.
+If you didn't mean to use a Unicode property, escape the C<\p>, either
+by C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until
+possible C<\E>).
+
=item Can't find string terminator %s anywhere before EOF
(F) Perl strings can stretch over multiple lines. This message means
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
-
-(F) You may have tried to use C<\p> which means a Unicode property for
-example \p{Lu} is all uppercase letters. if you did mean to use a
-Unicode property, see L<perlunicode> for the list of known properties.
-If you didn't mean to use a Unicode property, escape the C<\p>, either
-C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until
-possible C<\E>).
-
=item Can't fork
(F) A fatal error occurred while trying to fork while opening a
localize a package variable of the same name, qualify it with the
package name.
-=item Can't localize pseudo-hash element
-
-(F) You said something like C<< local $ar->{'key'} >>, where $ar is a
-reference to a pseudo-hash. That hasn't been implemented yet, but you
-can get a similar effect by localizing the corresponding array element
-directly -- C<< local $ar->[$ar->[0]{'key'}] >>.
-
=item Can't localize through a reference
(F) You said something like C<local $$ref>, which Perl can't currently
(F) You tried to use in open() a PerlIO layer that does not exist,
e.g. open(FH, ">:nosuchlayer", "somefile").
-=item (perhaps you forgot to load "%s"?)
-
-(F) This is an educated guess made in conjunction with the message
-"Can't locate object method \"%s\" via package \"%s\"". It often means
-that a method requires a package that has not been loaded.
-
=item Can't locate package %s for @%s::ISA
(W syntax) The @ISA array contained the name of another package that
temporary or readonly values) from a subroutine used as an lvalue. This
is not allowed.
+=item Can't return outside a subroutine
+
+(F) The return statement was executed in mainline code, that is, where
+there was no subroutine call to return out of. See L<perlsub>.
+
=item Can't return %s to lvalue scalar context
(F) You tried to return a complete array or hash from an lvalue subroutine,
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
-there was no subroutine call to return out of. See L<perlsub>.
-
=item Can't stat script "%s"
(P) For some reason you can't fstat() the script even though you have it
upgradability. Upgrading to undef indicates an error in the code
calling sv_upgrade.
-=item Can't use an undefined value as %s reference
-
-(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 an undefined value as %s reference
+
+(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 bareword ("%s") as %s ref while "strict refs" in use
(F) Only hard references are allowed by "strict refs". Symbolic
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
+=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
+=item Character in "c" format wrapped in pack
(W pack) You said
(W unopened) You tried to close a filehandle that was never opened.
+=item Code missing after '/'
+
+(F) You had a (sub-)template that ends with a '/'. There must be another
+template code following the slash. See L<perlfunc/pack>.
+
=item %s: Command not found
(A) You've accidentally run your script through B<csh> instead of Perl.
after the other thread has entered cond_wait() and thus relinquished the
lock.
-
=item cond_signal() called on unlocked variable
(W threads) Within a thread-enabled program, you tried to call
(P) The malloc package that comes with Perl had an internal failure.
-=item C<-p> destination: %s
+=item Count after length/code in unpack
-(F) An error occurred during the implicit output invoked by the C<-p>
-command-line switch. (This output goes to STDOUT unless you've
-redirected it with select().)
-
-=item C<-T> and C<-B> not implemented on filehandles
-
-(F) Perl can't peek at the stdio buffer of filehandles when it doesn't
-know about your kind of stdio. You'll have to use a filename instead.
+(F) You had an unpack template indicating a counted-length string, but
+you have also specified an explicit size for the string. See
+L<perlfunc/pack>.
=item Deep recursion on subroutine "%s"
(F) You said something like "use Module 42" but the Module did not
define a C<$VERSION.>
+=item '/' does not take a repeat count
+
+(F) You cannot put a repeat count of any kind right after the '/' code.
+See L<perlfunc/pack>.
+
=item Don't know how to handle magic of type '%s'
(P) The internal handling of magical variables has been cursed.
=item Exiting format via %s
-(W exiting) You are exiting an eval by unconventional means, such as a
+(W exiting) You are exiting a format by unconventional means, such as a
goto, or a loop control statement.
=item Exiting pseudo-block via %s
=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
+(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
+
+(W io) You opened for reading a filehandle that got the same filehandle id
+as STDOUT or STDERR. This occured because you closed STDOUT or STDERR
+previously.
+
+=item Filehandle STDIN reopened as %s only for output
+
+(W io) You opened for writing a filehandle that got the same filehandle id
+as STDIN. This occured because you closed STDIN previously.
=item Final $ should be \$ or $name
filehandles. Are you attempting to call flock() on a dirhandle by the
same name?
-=item Quantifier follows nothing in regex;
-
-marked by <-- HERE in m/%s/
-
-(F) You started a regular expression with a quantifier. Backslash it if you
-meant it literally. The <-- HERE shows in the regular expression about
-where the problem was discovered. See L<perlre>.
-
=item Format not terminated
(F) A format must be terminated by a line with a solitary dot. Perl got
(F) Unlike with "next" or "last", you're not allowed to goto an
unspecified destination. See L<perlfunc/goto>.
-=item %s-group starts with a count
+=item ()-group starts with a count
-(F) In pack/unpack a ()-group started with a count. A count is
+(F) A ()-group started with a count. A count is
supposed to follow something: a template character or a ()-group.
+ See L<perlfunc/pack>.
=item %s had compilation errors
(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
didn't see the expected delimiter between key and value, so the line was
ignored.
+=item Impossible to activate assertion call
+
+(W assertions) You're calling an assertion function in a block that is
+not under the control of the C<assertions> pragma.
+
=item (in cleanup) %s
(W misc) This prefix usually indicates that a DESTROY() method raised
(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
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.
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>.
parenthesised parameter list, perhaps that list was terminated too soon.
See L<attributes>.
-=item Invalid type in pack: '%s'
+=item Invalid type '%s' in %s
-(F) The given character is not a valid pack type. See L<perlfunc/pack>.
-(W pack) The given character is not a valid pack type but used to be
+(F) The given character is not a valid pack or unpack type.
+See L<perlfunc/pack>.
+(W) The given character is not a valid pack or unpack type but used to be
silently ignored.
-=item Invalid type in unpack: '%s'
+=item Invalid version format (multiple underscores)
-(F) The given character is not a valid unpack type. See
-L<perlfunc/unpack>.
-(W unpack) The given character is not a valid unpack type but used to be
-silently ignored.
+(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) While under the C<use filetest> pragma, switching the real and
effective uids or gids failed.
+=item length/code after end of string in unpack
+
+(F) While unpacking, the string buffer was alread used up when an unpack
+length/code combination tried to obtain more data. This results in
+an undefined value for the length. See L<perlfunc/pack>.
+
=item listen() on closed socket %s
(W closed) You tried to do a listen on a closed socket. Did you forget
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 Lvalue subs returning %s not implemented yet
(F) Due to limitations in the current implementation, array and hash
values cannot be returned in subroutines used in lvalue context. See
L<perlsub/"Lvalue subroutines">.
-=item Lookbehind longer than %d not implemented in regex;
+=item Malformed integer in [] in pack
-marked by <-- HERE in m/%s/
+(F) Between the brackets enclosing a numeric repeat count only digits
+are permitted. See L<perlfunc/pack>.
-(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 Malformed integer in [] in unpack
+
+(F) Between the brackets enclosing a numeric repeat count only digits
+are permitted. See L<perlfunc/pack>.
=item Malformed PERLLIB_PREFIX
Perl thought it was reading UTF-16 encoded character data but while
doing it Perl met a malformed Unicode surrogate.
-=item %s matches null string many times in regex;
-
-marked by <-- HERE in m/%s/
+=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
regular expression engine didn't specifically check for that. The <-- HERE
interpreter, especially if the word that is being warned about is
"use" or "my".
-=item % may only be used in unpack
+=item % may not be used in pack
(F) You can't pack a string by supplying a checksum, because the
checksumming process loses information, and you can't go the other way.
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
(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*
+=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 be followed by a, A or Z
+=item '/' must follow a numeric type in unpack
-(F) You had an unpack template indicating a counted-length string, which
-must be followed by one of the letters a, A or Z to indicate what sort
-of string is to be unpacked. See L<perlfunc/pack>.
-
-=item / must follow a numeric type
-
-(F) You had an unpack template that contained a '#', but this did not
-follow some numeric unpack specification. See L<perlfunc/pack>.
+(F) You had an unpack template that contained a '/', but this did not
+follow some unpack specification producing a numeric value.
+See L<perlfunc/pack>.
=item "my sub" not yet implemented
again somehow to suppress the message. The C<our> declaration is
provided for this purpose.
+=item Negative '/' count in unpack
+
+(F) The length count obtained from a length/code unpack operation was
+negative. See L<perlfunc/pack>.
+
=item Negative length
(F) You tried to do a read/write/send/recv operation with a buffer
will be another way to do what you want that is, if not secure, at least
securable. See L<perlsec>.
-=item No B<-e> allowed in setuid scripts
-
-(F) A setuid script can't be specified by the user.
-
=item No comma allowed after %s
(F) A list operator that has a filehandle or "indirect object" is not
didn't define a DB::sub routine to be called at the beginning of each
ordinary subroutine call.
+=item No B<-e> allowed in setuid scripts
+
+(F) A setuid script can't be specified by the user.
+
=item No error file after 2> or 2>> on command line
(F) An error peculiar to VMS. Perl handles its own command line
redirection, and found a '2>' or a '2>>' on the command line, but can't
find the name of the file to which to write data destined for stderr.
+=item No group ending character '%c' found in template
+
+(F) A pack or unpack template has an opening '(' or '[' without its
+matching counterpart. See L<perlfunc/pack>.
+
=item No input file after < on command line
(F) An error peculiar to VMS. Perl handles its own command line
close a pipe which hadn't been opened. This should have been caught
earlier as an attempt to close an unopened filehandle.
-=item No such pseudo-hash field "%s"
-
-(F) You tried to access an array as a hash, but the field name used is
-not defined. The hash at index 0 should map all valid field names to
-array indices for that to work.
-
-=item No such pseudo-hash field "%s" in variable %s of type %s
-
-(F) You tried to access a field of a typed variable where the type does
-not know about the field name. The field names are looked up in the
-%FIELDS hash in the type package at compile time. The %FIELDS hash is
-%usually set up with the 'fields' pragma.
-
=item No such signal: SIG%s
(W signal) You specified a signal name as a subscript to %SIG that was
of Perl. Check the #! line, or manually feed your script into Perl
yourself.
-=item %s not allowed in length fields
-
-(F) The count in the (un)pack template may be replaced by C<[TEMPLATE]> only if
-C<TEMPLATE> always matches the same amount of packed bytes. Redesign
-the template.
-
=item no UTC offset information; assuming local time is UTC
(S) A warning peculiar to VMS. Perl was unable to find the local
exception to this is that C<sysread()>ing past the buffer will extend
the buffer and zero pad the new area.
-=item -%s on unopened filehandle %s
-
-(W unopened) You tried to invoke a file test operator on a filehandle
-that isn't open. Check your control flow. See also L<perlfunc/-X>.
-
=item %s() on unopened %s
(W unopened) An I/O operation was attempted on a filehandle that was
never initialized. You need to do an open(), a sysopen(), or a socket()
call, or call a constructor from the FileHandle package.
+=item -%s on unopened filehandle %s
+
+(W unopened) You tried to invoke a file test operator on a filehandle
+that isn't open. Check your control flow. See also L<perlfunc/-X>.
+
=item oops: oopsAV
(S internal) An internal warning that the grammar is screwed up.
remaining memory (or virtual memory) to satisfy the request. Perl has
no option but to exit immediately.
+At least in Unix you may be able to get past this by increasing your
+process datasize limits: in csh/tcsh use C<limit> and
+C<limit datasize n> (where C<n> is the number of kilobytes) to check
+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 "large" request for %s
(F) The malloc() function returned 0, indicating there was insufficient
parsing, but realloc() wouldn't give it more memory, virtual or
otherwise.
-=item @ outside of string
+=item '@' outside of string in unpack
-(F) You had a pack template that specified an absolute position outside
+(F) You had a template that specified an absolute position outside
the string being unpacked. See L<perlfunc/pack>.
=item %s package attribute may clash with future reserved word: %s
some day, even though it doesn't yet. Perhaps you should use a
mixed-case attribute name, instead. See L<attributes>.
+=item pack/unpack repeat count overflow
+
+(F) You can't specify a repeat count so large that it overflows your
+signed integers. See L<perlfunc/pack>.
+
=item page overflow
(W io) A single call to write() produced more lines than can fit on a
(P) We popped the context stack to an eval context, and then discovered
it wasn't an eval context.
-=item panic: pp_match%s
-
-(P) The internal pp_match() routine was called with invalid operational
-data.
-
=item panic: do_subst
(P) The internal pp_subst() routine was called with invalid operational
(P) The foreach iterator got called in a non-loop context frame.
+=item panic: pp_match%s
+
+(P) The internal pp_match() routine was called with invalid operational
+data.
+
=item panic: pp_split
(P) Something terrible went wrong in setting up for the split.
Remember that "my", "our", and "local" bind tighter than comma.
+=item C<-p> destination: %s
+
+(F) An error occurred during the implicit output invoked by the C<-p>
+command-line switch. (This output goes to STDOUT unless you've
+redirected it with select().)
+
+=item (perhaps you forgot to load "%s"?)
+
+(F) This is an educated guess made in conjunction with the message
+"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"
+
+(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.
+
=item Perl %s required--this is only version %s, stopped
(F) The module in question uses features of a version of Perl more
(F) An error peculiar to OS/2. PERL_SH_DIR is the directory to find the
C<sh>-shell in. See "PERL_SH_DIR" in L<perlos2>.
+=item PERL_SIGNALS illegal: "%s"
+
+See L<perlrun/PERL_SIGNALS> for legal values.
+
=item perl: warning: Setting locale failed.
(S) The whole warning message will look something like:
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"
-
-(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.
-
=item Permission denied
(F) The setuid emulator in suidperl decided you were up to no good.
process which isn't a subprocess of the current process. While this is
fine from VMS' perspective, it's probably not what you intended.
-=item P must have an explicit size
+=item 'P' must have an explicit size in unpack
(F) The unpack format P must have an explicit size, not "*".
-=item POSIX syntax [%s] belongs inside character classes in regex;
+=item B<-P> not allowed for setuid/setgid script
+
+(F) The script would have to be opened by the C preprocessor by name,
+which provides a race condition that breaks security.
+
+=item POSIX class [:%s:] unknown in regex; marked by <-- HERE in m/%s/
+
+(F) The class in the character class [: :] syntax is unknown. The <-- HERE
+shows in the regular expression about where the problem was discovered.
+Note that the POSIX character classes do B<not> have the C<is> prefix
+the corresponding C interfaces have: in other words, it's C<[[:print:]]>,
+not C<isprint>. See L<perlre>.
+
+=item POSIX getpgrp can't take an argument
+
+(F) Your system has POSIX getpgrp(), which takes no argument, unlike
+the BSD version, which takes a pid.
-marked by <-- HERE in m/%s/
+=item POSIX syntax [%s] belongs inside character classes in regex; marked by <-- HERE in m/%s/
(W regexp) The character class constructs [: :], [= =], and [. .] go
I<inside> character classes, the [] are part of the construct, for example:
cause fatal errors. The <-- HERE shows in the regular expression about
where the problem was discovered. See L<perlre>.
-=item POSIX syntax [. .] is reserved for future extensions in regex;
-
-marked by <-- HERE in m/%s/
+=item POSIX syntax [. .] is reserved for future extensions in regex; marked by <-- HERE in m/%s/
(F regexp) Within regular expression character classes ([]) the syntax
beginning with "[." and ending with ".]" is reserved for future extensions.
backslash: "\[." and ".\]". The <-- HERE shows in the regular expression
about where the problem was discovered. See L<perlre>.
-=item POSIX syntax [= =] is reserved for future extensions in regex;
-
-marked by <-- HERE in m/%s/
+=item POSIX syntax [= =] is reserved for future extensions in regex; marked by <-- HERE in m/%s/
(F) Within regular expression character classes ([]) the syntax beginning
with "[=" and ending with "=]" is reserved for future extensions. If you
and "=\]". The <-- HERE shows in the regular expression about where the
problem was discovered. See L<perlre>.
-=item POSIX class [:%s:] unknown in regex;
-
-marked by <-- HERE in m/%s/
-
-(F) The class in the character class [: :] syntax is unknown. The <-- HERE
-shows in the regular expression about where the problem was discovered.
-Note that the POSIX character classes do B<not> have the C<is> prefix
-the corresponding C interfaces have: in other words, it's C<[[:print:]]>,
-not C<isprint>. See L<perlre>.
-
-=item POSIX getpgrp can't take an argument
-
-(F) Your system has POSIX getpgrp(), which takes no argument, unlike
-the BSD version, which takes a pid.
-
=item Possible attempt to put comments in qw() list
(W qw) qw() lists contain items separated by whitespace; as with literal
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
=item Prototype not terminated
-(F) You've omitted the closing parenthesis in a function prototype
+(F) You've omitted the closing parenthesis in a function prototype
definition.
-=item Quantifier in {,} bigger than %d in regex;
+=item Quantifier follows nothing in regex; marked by <-- HERE in m/%s/
-marked by <-- HERE in m/%s/
+(F) You started a regular expression with a quantifier. Backslash it if you
+meant it literally. The <-- HERE shows in the regular expression about
+where the problem was discovered. See L<perlre>.
+
+=item Quantifier in {,} bigger than %d in regex; marked by <-- HERE in m/%s/
(F) There is currently a limit to the size of the min and max values of the
{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;
-
-marked by <-- HERE in m/%s/
+=item Quantifier unexpected on zero-length expression; marked by <-- HERE in m/%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
(W closed) The filehandle you're reading from got itself closed sometime
before now. Check your control flow.
+=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 Reallocation too large: %lx
(F) You can't allocate more than 64K on an MS-DOS machine.
(W internal) The internal sv_replace() function was handed a new SV with
a reference count of other than 1.
-=item Reference to nonexistent group in regex;
-
-marked by <-- HERE in m/%s/
+=item Reference to nonexistent group in regex; marked by <-- HERE in m/%s/
(F) You used something like C<\7> in your regular expression, but there are
not at least seven sets of capturing parentheses in the expression. If you
(P) A "can't happen" error, because safemalloc() should have caught it
earlier.
-=item Repeat count in pack overflows
-
-(F) You can't specify a repeat count so large that it overflows your
-signed integers. See L<perlfunc/pack>.
-
-=item Repeat count in unpack overflows
-
-(F) You can't specify a repeat count so large that it overflows your
-signed integers. See L<perlfunc/unpack>.
-
=item Reversed %s= operator
(W syntax) You wrote your assignment operator backwards. The = must
themselves, either by using ^ instead of @ (for scalar variables), or by
shifting or popping (for array variables). See L<perlform>.
+=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 Scalar value @%s[%s] better written as $%s[%s]
(W syntax) You've used an array slice (indicated by @) to select a
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
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
shows in the regular expression about where the problem was discovered. See
L<perlre>.
-=item Sequence (?{...}) not terminated or not {}-balanced in regex;
-
-marked by <-- HERE in m/%s/
-
-(F) If the contents of a (?{...}) clause contains braces, they must balance
-for Perl to properly detect the end of the clause. The <-- HERE shows in
-the regular expression about where the problem was discovered. See
-L<perlre>.
-
-=item Sequence (?%s...) not implemented in regex;
-
-marked by <-- HERE in m/%s/
+=item Sequence (?%s...) not implemented in regex; marked by <-- HERE in m/%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 in regex;
-
-marked by <-- HERE in m/%s/
+=item Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%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. See L<perlre>.
-=item Sequence (?#... not terminated in regex;
-
-marked by <-- HERE in m/%s/
+=item Sequence (?#... not terminated in regex; marked by <-- HERE in m/%s/
(F) A regular expression comment must be terminated by a closing
parenthesis. Embedded parentheses aren't allowed. The <-- HERE shows in
the regular expression about where the problem was discovered. See
L<perlre>.
+=item Sequence (?{...}) not terminated or not {}-balanced in regex; marked by <-- HERE in m/%s/
+
+(F) If the contents of a (?{...}) clause contains braces, they must balance
+for Perl to properly detect the end of the clause. The <-- HERE shows in
+the regular expression about where the problem was discovered. See
+L<perlre>.
+
=item 500 Server error
See Server error.
(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 in regex;
-
-marked by <-- HERE in m/%s/
+=item Switch (?(condition)... contains too many branches in regex; marked by <-- HERE in m/%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
The <-- HERE shows in the regular expression about where the problem was
discovered. See L<perlre>.
-=item Switch condition not recognized in regex;
-
-marked by <-- HERE in m/%s/
+=item Switch condition not recognized in regex; marked by <-- HERE in m/%s/
(F) If the argument to the (?(...)if-clause|else-clause) construct is a
number, it can be only a number. The <-- HERE shows in the regular expression
a perl4 interpreter, especially if the next 2 tokens are "use strict"
or "my $var" or "our $var".
-=item %s syntax OK
+=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.
+
+=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",
(W closed) The filehandle you're writing to got itself closed sometime
before now. Check your control flow.
+=item C<-T> and C<-B> not implemented on filehandles
+
+(F) Perl can't peek at the stdio buffer of filehandles when it doesn't
+know about your kind of stdio. You'll have to use a filename instead.
+
=item Target of goto is too deeply nested
(F) You tried to use C<goto> to reach a label that was too deeply nested
(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 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 deeply nested ()-groups
+
+(F) Your template contains ()-groups with a ridiculously deep nesting level.
+
=item Too few args to syscall
(F) There has to be at least one argument to syscall() to specify the
system call to call, silly dilly.
+=item Too late for "-%s" option
+
+(X) The #! line (or local equivalent) in a Perl script contains the
+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
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 for "-%s" option
-
-(X) The #! line (or local equivalent) in a Perl script contains the
-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 to run %s block
(W void) A CHECK or INIT block is being defined during run time proper,
=item Too many )'s
+(A) You've accidentally run your script through B<csh> instead of Perl.
+Check the #! line, or manually feed your script into Perl yourself.
+
=item Too many ('s
(A) You've accidentally run your script through B<csh> instead of Perl.
(F) The lexer couldn't find the final delimiter of a tr/// or tr[][]
construct.
+=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 truncate not implemented
(F) Your machine doesn't implement a file truncation mechanism that
You tried to use an unknown subpragma of the "re" pragma.
-=item Unknown switch condition (?(%.2s in regex;
+=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<< >& >>.
-marked by <-- HERE in m/%s/
+=item Unknown process %x sent message to prime_env_iter: %s
+
+(P) An error peculiar to VMS. Perl was reading values for %ENV before
+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 switch condition (?(%.2s in regex; marked by <-- HERE in m/%s/
(F) The condition part of a (?(condition)if-clause|else-clause) construct
is not known. The condition may be lookahead or lookbehind (the condition
The <-- HERE shows in the regular expression about where the problem was
discovered. See L<perlre>.
-=item Unknown open() mode '%s'
+=item Unknown Unicode option letter '%c'
-(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<< >& >>.
+You specified an unknown Unicode option. See L<perlrun> documentation
+of the C<-C> switch for the list of known options.
-=item Unknown process %x sent message to prime_env_iter: %s
+=item Unknown Unicode option value %x
-(P) An error peculiar to VMS. Perl was reading values for %ENV before
-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.
+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'
recognized by Perl inside character classes. The character was
understood literally.
-=item Unrecognized escape \\%c passed through in regex;
-
-marked by <-- HERE in m/%s/
+=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
recognized by Perl. This combination appears in an interpolated variable or
(W untie) A copy of the object returned from C<tie> (or C<tied>) was
still valid when C<untie> was called.
-=item Useless (?%s) - use /%s modifier in regex;
+=item Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/
-marked by <-- HERE in m/%s/
-
-(W regexp) You have used an internal modifier such as (?o) that has no
-meaning unless applied to the entire regexp:
+(W regexp) You have used an internal modifier such as (?-o) that has no
+meaning unless removed from the entire regexp:
- if ($string =~ /(?o)$pattern/) { ... }
+ if ($string =~ /(?-o)$pattern/o) { ... }
must be written as
- if ($string =~ /$pattern/o) { ... }
+ if ($string =~ /$pattern/) { ... }
The <-- HERE shows in the regular expression about
where the problem was discovered. See L<perlre>.
-=item Useless (?-%s) - don't use /%s modifier in regex;
+=item Useless (?%s) - use /%s modifier in regex; marked by <-- HERE in m/%s/
-marked by <-- HERE in m/%s/
-
-(W regexp) You have used an internal modifier such as (?-o) that has no
-meaning unless removed from the entire regexp:
+(W regexp) You have used an internal modifier such as (?o) that has no
+meaning unless applied to the entire regexp:
- if ($string =~ /(?-o)$pattern/o) { ... }
+ if ($string =~ /(?o)$pattern/) { ... }
must be written as
- if ($string =~ /$pattern/) { ... }
+ if ($string =~ /$pattern/o) { ... }
The <-- HERE shows in the regular expression about
where the problem was discovered. See L<perlre>.
(D deprecated) You are now encouraged to use the explicitly quoted form
if you wish to use an empty line as the terminator of the here-document.
+=item Use of chdir('') or chdir(undef) as chdir() deprecated
+
+(D deprecated) chdir() with no arguments is documented to change to
+$ENV{HOME} or $ENV{LOGDIR}. chdir(undef) and chdir('') share this
+behavior, but that has been deprecated. In future versions they
+will simply fail.
+
+Be careful to check that what you pass to chdir() is defined and not
+blank, else you might find yourself in your home directory.
+
=item Use of /c modifier is meaningless in s///
(W regexp) You used the /c modifier in a substitution. The /c
use the /g modifier. Currently, /c is meaningful only when /g is
used. (This may change in the future.)
-=item Use of /g modifier is meaningless in split
-
-(W regexp) You used the /g modifier on the pattern for a C<split>
-operator. Since C<split> always tries to match the pattern
-repeatedly, the C</g> has no effect.
-
=item Use of *glob{FILEHANDLE} is deprecated
(D deprecated) You are now encouraged to use the shorter *glob{IO} form
to access the filehandle slot within a typeglob.
-=item Use of chdir('') or chdir(undef) as chdir() deprecated
-
-(D deprecated) chdir() with no arguments is documented to change to
-$ENV{HOME} or $ENV{LOGDIR}. chdir(undef) and chdir('') share this
-behavior, but that has been deprecated. In future versions they
-will simply fail.
+=item Use of /g modifier is meaningless in split
-Be careful to check that what you pass to chdir() is defined and not
-blank, else you might find yourself in your home directory.
+(W regexp) You used the /g modifier on the pattern for a C<split>
+operator. Since C<split> always tries to match the pattern
+repeatedly, the C</g> has no effect.
=item Use of implicit split to @_ is deprecated
you should remove AutoLoader from @ISA and change C<use AutoLoader;> to
C<use AutoLoader 'AUTOLOAD';>.
-=item Use of -l on filehandle %s
-
-(W io) A filehandle represents an opened file, and when you opened the file
-it already went past any symlink you are presumably trying to look for.
-The operation returned C<undef>. Use a filename instead.
-
-=item Use of "package" with no arguments is deprecated
-
-(D deprecated) You used the C<package> keyword without specifying a package
-name. So no namespace is current at all. Using this can cause many
-otherwise reasonable constructs to fail in baffling ways. C<use strict;>
-instead.
-
=item Use of %s in printf format not supported
(F) You attempted to use a feature of printf that is accessible from
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
+defined B<awk> feature. Use an explicit printf() or sprintf() instead.
+
=item Use of %s is deprecated
(D deprecated) The construct indicated is no longer recommended for use,
generally because there's a better way to do it, and also because the
old way has bad side effects.
-=item Use of $# is deprecated
+=item Use of freed value in iteration (perhaps you modified the iterated array within the loop?)
-(D deprecated) This was an ill-advised attempt to emulate a poorly
-defined B<awk> feature. Use an explicit printf() or sprintf() instead.
+(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
+it already went past any symlink you are presumably trying to look for.
+The operation returned C<undef>. Use a filename instead.
+
+=item Use of "package" with no arguments is deprecated
+
+(D deprecated) You used the C<package> keyword without specifying a package
+name. So no namespace is current at all. Using this can cause many
+otherwise reasonable constructs to fail in baffling ways. C<use strict;>
+instead.
=item Use of reference "%s" as array index
-(W) You tried to use a reference as an array index; this probably
+(W misc) You tried to use a reference as an array index; this probably
isn't what you mean, because references in numerical context tend
to be huge numbers, and so usually indicates programmer error.
=item Use of tainted arguments in %s is deprecated
-(W taint) You have supplied C<system()> or C<exec()> with multiple
+(W taint, deprecated) You have supplied C<system()> or C<exec()> with multiple
arguments and at least one of them is tainted. This used to be allowed
but will become a fatal error in a future version of perl. Untaint your
arguments. See L<perlsec>.
that module. It usually means you put the wrong funny character on the
front of your variable.
+=item Variable length lookbehind not implemented in regex; marked by <-- HERE in m/%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 the problem was discovered. See L<perlre>.
+
=item "%s" variable %s masks earlier declaration in same %s
(W misc) A "my" or "our" variable has been redeclared in the current
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 in regex;
-
-marked by <-- HERE in m/%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 the problem was discovered. See L<perlre>.
-
=item Version number must be a constant number
(P) The attempt to translate a C<use Module n.n LIST> statement into
=item v-string in use/require is non-portable
-(W) The use of v-strings is non-portable to older, pre-5.6, Perls.
+(W portable) The use of v-strings is non-portable to older, pre-5.6, Perls.
If you want your scripts to be backward portable, use the floating
point version number: for example, instead of C<use 5.6.1> say
C<use 5.006_001>. This of course won't help: the older Perls
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>.
+=item Within []-length '%c' not allowed
+
+(F) The count in the (un)pack template may be replaced by C<[TEMPLATE]> only if
+C<TEMPLATE> always matches the same amount of packed bytes that can be
+determined from the template alone. This is not possible if it contains an
+of the codes @, /, U, u, w or a *-length. Redesign the template.
+
=item write() on closed filehandle %s
(W closed) The filehandle you're writing to got itself closed sometime
before now. Check your control flow.
-=item X outside of string
+=item 'X' outside of string
-(F) You had a pack template that specified a relative position before
-the beginning of the string being unpacked. See L<perlfunc/pack>.
+(F) You had a (un)pack template that specified a relative position before
+the beginning of the string being (un)packed. See L<perlfunc/pack>.
-=item x outside of string
+=item 'x' outside of string in unpack
(F) You had a pack template that specified a relative position after
the end of the string being unpacked. See L<perlfunc/pack>.