perl5004delta2
Current Perl documentation can be found at
perldoc.perl.org.
Here is our local, out-dated (pre-5.6) version:
Several new conditions will trigger warnings that were silent before. Some
only affect certain platforms. The following new warnings and errors
outline these. These messages are classified as follows (listed in
increasing order of desperation):
(W) A warning (optional).
(D) A deprecation (optional).
(S) A severe warning (mandatory).
(F) A fatal error (trappable).
(P) An internal error you should never see (trappable).
(X) A very fatal error (nontrappable).
(A) An alien error message (not generated by Perl).
- "my" variable %s masks earlier declaration in same scope
-
(W)
A lexical variable has been redeclared in the same scope, effectively eliminating all access to the previous instance. This is almost always a typographical error. Note that the earlier variable will still exist until the end of the scope or until all closure referents to it are destroyed.
- %s argument is not a HASH element or slice
-
(F) The argument to
delete() must be either a hash element, such as
$foo{$bar}
$ref->[12]->{"susie"}
or a hash slice, such as
@foo{$bar, $baz, $xyzzy}
@{$ref->[12]}{"susie", "queue"}
- Allocation too large: %lx
-
(X) You can't allocate more than
64K on an
MS-DOS machine.
- Allocation too large
-
(F) You can't allocate more than 2^31+``small amount''
bytes.
- Applying %s to %s will act on scalar(%s)
-
(W) The pattern match (//), substitution (s///), and
transliteration (tr///) operators work on scalar values. If you apply one
of them to an array or a hash, it will convert the array or hash to a
scalar value -- the length of an array, or the population info of a hash --
and then work on that scalar value. This is probably not what you meant to
do. See
grep and map for alternatives.
- Attempt to free nonexistent shared string
-
(P) Perl maintains a reference counted internal table
of strings to optimize the storage and access of hash keys and other
strings. This indicates someone tried to decrement the reference count of a
string that can no longer be found in the table.
- Attempt to use reference as lvalue in substr
-
(W) You supplied a reference as the first argument to
substr() used as an lvalue, which is pretty strange. Perhaps you forgot to dereference it first. See
substr.
- Bareword "%s" refers to nonexistent package
-
(W) You used a qualified bareword of the form
Foo:: , but the compiler saw no other uses of that namespace before that point.
Perhaps you need to predeclare a package?
- Can't redefine active sort subroutine %s
-
(F) Perl optimizes the internal handling of sort
subroutines and keeps pointers into them. You tried to redefine one such
sort subroutine when it was currently active, which is not allowed. If you
really want to do this, you should write
sort { &func } @x instead of sort func @x .
- Can't use bareword ("%s") as %s ref while "strict refs" in use
-
(F) Only hard references are allowed by ``strict
refs''. Symbolic references are disallowed. See the perlref manpage.
- Cannot resolve method `%s' overloading `%s' in package `%s'
-
(P) Internal error trying to resolve overloading
specified by a method name (as opposed to a subroutine reference).
- Constant subroutine %s redefined
-
(S) You redefined a subroutine which had previously
been eligible for inlining. See perlman:perlsub for commentary and workarounds.
- Constant subroutine %s undefined
-
(S) You undefined a subroutine which had previously
been eligible for inlining. See perlman:perlsub for commentary and workarounds.
- Copy method did not return a reference
-
(F) The method which overloads ``='' is buggy. See Copy Constructor.
- Died
-
(F) You passed
die() an empty string (the equivalent of
perlfunc:die) or you called it with no args and both $@ and $_ were empty.
- Exiting pseudo-block via %s
-
(W) You are exiting a rather special block construct
(like a sort block or subroutine) by unconventional means, such as a goto,
or a loop control statement. See sort.
- Identifier too long
-
(F) Perl limits identifiers (names for variables,
functions, etc.) to 252 characters for simple names, somewhat more for
compound names (like
$A::B ). You've exceeded Perl's limits. Future versions of Perl are likely to
eliminate these arbitrary limitations.
- Illegal character %s (carriage return)
-
(F)
A carriage return character was found in the input. This is an error, and not a warning, because carriage return characters can break multi-line strings, including here documents (e.g.,
print <<EOF; ).
- Illegal switch in PERL5OPT: %s
-
(X) The
PERL5OPT environment variable may only be used to set the following switches:
-[DIMUdmw].
- Integer overflow in hex number
-
(S) The literal hex number you have specified is too
big for your architecture. On a 32-bit architecture the largest hex literal
is 0xFFFFFFFF.
- Integer overflow in octal number
-
(S) The literal octal number you have specified is too
big for your architecture. On a 32-bit architecture the largest octal
literal is 037777777777.
- internal error: glob failed
-
(P) Something went wrong with the external
program(s) used for
glob
and <*.c> . This may mean that your csh
(C shell) is broken. If so, you should change all of
the csh-related variables in config.sh: If you have tcsh, make the
variables refer to it as if it were csh (e.g. full_csh='/usr/bin/tcsh' ); otherwise, make them all empty (except that d_csh should be perlfunc:undef) so that Perl will think csh is missing. In either case, after editing
config.sh, run
./Configure -S and rebuild Perl.
- Invalid conversion in %s: "%s"
-
(W) Perl does not understand the given format
conversion. See sprintf.
- Invalid type in pack: '%s'
-
(F) The given character is not a valid pack type. See pack.
- Invalid type in unpack: '%s'
-
(F) The given character is not a valid unpack type.
See unpack.
- Name "%s::%s" used only once: possible typo
-
(W) Typographical errors often show up as unique
variable names. If you had a good reason for having a unique name, then
just mention it again somehow to suppress the message (the
use vars pragma is provided for just this purpose).
- Null picture in formline
-
(F) The first argument to formline must be a valid
format picture specification. It was found to be empty, which probably
means you supplied it an uninitialized value. See the perlform manpage.
- Offset outside string
-
(F) You tried to do a read/write/send/recv operation
with an offset pointing outside the buffer. This is difficult to imagine.
The sole exception to this is that sysread()ing past the buffer will extend the buffer and zero pad the new area.
- Out of memory!
-
(X|F) The
malloc() function returned 0, indicating there was insufficient remaining memory (or virtual memory) to satisfy the request.
The request was judged to be small, so the possibility to trap it depends
on the way Perl was compiled. By default it is not trappable. However, if
compiled for this, Perl may use the contents of $^M as an emergency pool after
die()ing with this message.
In this case the error is trappable once.
- Out of memory during request for %s
-
(F) The
malloc() function returned 0, indicating there was insufficient remaining memory (or virtual memory) to satisfy the request. However, the request was judged large enough (compile-time default is
64K), so a possibility to shut down by trapping this error is granted.
- panic: frexp
-
(P) The library function
frexp() failed, making
printf(``%f'') impossible.
- Possible attempt to put comments in qw() list
-
(W)
qw() lists contain items separated by whitespace; as with literal strings, comment characters are not ignored, but are instead treated as literal data. (You may have used different delimiters than the parentheses shown here; braces are also frequently used.)
You probably wrote something like this:
@list = qw(
a # a comment
b # another comment
);
when you should have written this:
@list = qw(
a
b
);
If you really want comments, build your list the old-fashioned way, with
quotes and commas:
@list = (
'a', # a comment
'b', # another comment
);
- Possible attempt to separate words with commas
-
(W)
qw() lists contain items separated by whitespace; therefore commas aren't needed to separate the items. (You may have used different delimiters than the parentheses shown here; braces are also frequently used.)
You probably wrote something like this:
qw! a, b, c !;
which puts literal commas into some of the list items. Write it without
commas if you don't want them to appear in your data:
qw! a b c !;
- Scalar value @%s{%s} better written as $%s{%s}
-
(W) You've used a hash slice (indicated by @) to
select a single element of a hash. Generally it's better to ask for a
scalar value (indicated by $). The difference is that
$foo{&bar} always behaves like a scalar, both when assigning to it and when evaluating
its argument, while @foo{&bar} behaves like a list when you assign to it, and provides a list context to
its subscript, which can do weird things if you're expecting only one
subscript.
- Stub found while resolving method `%s' overloading `%s' in package `%s'
-
(P) Overloading resolution over
@ISA tree
may be broken by importing stubs. Stubs should never be implicitely
created, but explicit calls to can
may break this.
- Too late for "-T" option
-
(X) The #! line (or local equivalent) in a Perl script
contains the
-T option, but Perl was not invoked with -T in its argument list. This is an error because, by the time Perl discovers
a -T in a script, it's too late to properly taint everything from the
environment. So Perl gives up.
- untie attempted while %d inner references still exist
-
(W)
A copy of the object returned from
tie (or
tied ) was still valid when untie was called.
- Unrecognized character %s
-
(F) The Perl parser has no idea what to do with the
specified character in your Perl script (or eval). Perhaps you tried to run
a compressed script, a binary program, or a directory as a Perl program.
- Unsupported function fork
-
(F) Your version of executable does not support
forking.
Note that under some systems, like
OS/2, there may be different flavors of Perl
executables, some of which may support fork, some not. Try changing the
name you call Perl by to perl_ , perl__ , and so on.
- Use of "$$<digit>" to mean "${$}<digit>" is deprecated
-
(D) Perl versions before 5.004 misinterpreted any type
marker followed by ``$'' and a digit. For example, ``$$0'' was incorrectly
taken to mean ``${$}0'' instead of ``${$0}''. This bug is (mostly) fixed in
Perl 5.004.
However, the developers of Perl 5.004 could not fix this bug completely,
because at least two widely-used modules depend on the old meaning of
``$$0'' in a string. So Perl 5.004 still interprets ``$$<digit>'' in
the old (broken) way inside strings; but it generates this message as a
warning. And in Perl 5.005, this special treatment will cease.
- Value of %s can be "0"; test with defined()
-
(W) In a conditional expression, you used <
HANDLE>, <*> (glob), each(), or readdir() as a boolean value. Each of these constructs can return a value of ``0'';
that would make the conditional expression false, which is probably not
what you intended. When using these constructs in conditional expressions,
test their values with the defined operator.
- Variable "%s" may be unavailable
-
(W) An inner (nested) anonymous subroutine is inside a 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 perlfunc:sub syntax. Perl has specific support for shared variables in nested anonymous
subroutines; a named subroutine in between interferes with this feature.
- Variable "%s" will not stay shared
-
(W) An inner (nested) named subroutine is referencing a lexical variable defined in an outer
subroutine.
When the inner subroutine is called, it will probably 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 never share the given variable.
This problem can usually be solved by making the inner subroutine
anonymous, using the perlfunc:sub syntax. When inner anonymous subs that reference variables in outer
subroutines are called or referenced, they are automatically rebound to the
current values of such variables.
- Warning: something's wrong
-
(W) You passed
warn() an empty string (the equivalent of
perlman:perlguts) or you called it with no args and $_ was empty.
- Ill-formed logical name |%s| in prime_env_iter
-
(W)
A warning peculiar to
VMS.
A logical name was encountered when preparing to iterate over
%ENV which violates the syntactic rules governing logical names. Since it cannot be translated normally, it is skipped, and will not appear in
%ENV. This may be a benign occurrence, as some software packages might directly modify logical name tables and introduce nonstandard names, or it may indicate that a logical name table has been corrupted.
- Got an error from DosAllocMem
-
(P) An error peculiar to
OS/2. Most probably you're using an obsolete version of Perl, and this should not happen anyway.
- Malformed PERLLIB_PREFIX
-
(F) An error peculiar to
OS/2.
PERLLIB_PREFIX should be of the form
prefix1;prefix2
or
prefix1 prefix2
with nonempty prefix1 and prefix2. If prefix1 is indeed a prefix of a builtin library search path, prefix2 is substituted. The error may appear if components are not found, or are too long. See
``PERLLIB_PREFIX'' in
README.os2.
- PERL_SH_DIR too long
-
(F) An error peculiar to
OS/2.
PERL_SH_DIR is the directory to find the
sh -shell in. See
``PERL_SH_DIR'' in README.os2.
- Process terminated by SIG%s
-
(W) This is a standard message issued by
OS/2 applications, while
*nix applications die in silence. It is considered a feature of the
OS/2 port. One can easily disable this by appropriate sighandlers, see
perlman:perlipc. See also ``Process terminated by
SIGTERM/SIGINT'' in README.os2.
If you find what you think is a bug, you might check the headers of
recently posted articles in the comp.lang.perl.misc newsgroup. There may
also be information at http://www.perl.com/perl/, the Perl
Home Page.
If you believe you have an unreported bug, please run the perlbug
program included with your release. Make sure you trim your bug down to a
tiny but sufficient test case. Your bug report, along with the output of perl -V , will be sent off to <perlbug@perl.com> to be analysed by the Perl porting team.
The Changes file for exhaustive details on what changed.
The INSTALL file for how to build Perl. This file has been significantly updated for
5.004, so even veteran users should look through it.
The README file for general stuff.
The Copying file for copyright information.
Constructed by Tom Christiansen, grabbing material with permission from
innumerable contributors, with kibitzing by more than a few Perl porters.
Last update: Wed May 14 11:14:09
EDT 1997
Return to the Library
|
|