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).
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"}
substr() used as an lvalue, which is pretty strange. Perhaps you forgot to dereference it first. See
substr.
Foo::, but the compiler saw no other uses of that namespace before that point.
Perhaps you need to predeclare a package?
sort { &func } @x instead of sort func @x.
die() an empty string (the equivalent of
perlfunc:die) or you called it with no args and both $@ and $_ were empty.
$A::B). You've exceeded Perl's limits. Future versions of Perl are likely to
eliminate these arbitrary limitations.
print <<EOF;).
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.
use vars pragma is provided for just this purpose).
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.
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.
frexp() failed, making
printf(``%f'') impossible.
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
);
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 !;
$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.
@ISA tree
may be broken by importing stubs. Stubs should never be implicitely
created, but explicit calls to can
may break this.
tied) was still valid when untie was called.
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.
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.
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.
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.
warn() an empty string (the equivalent of
perlman:perlguts) or you called it with no args and $_ was empty.
%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.
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.
sh-shell in. See
``PERL_SH_DIR'' in README.os2.
*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