perldiag3
Current Perl documentation can be found at
perldoc.perl.org.
Here is our local, out-dated (pre-5.6) version:
- Type of arg %d to %s must be %s (not %s)
-
(F) This function requires the argument in that
position to be of a certain type. Arrays must be
@NAME or @{EXPR} . Hashes must be %NAME or %{EXPR} . No implicit dereferencing is allowed--use the
{EXPR} forms as an explicit dereference. See the perlref manpage.
- umask: argument is missing initial 0
-
(W)
A umask of 222 is incorrect. It should be 0222, because octal literals always start with 0 in Perl, as in
C.
- umask not implemented
-
(F) Your machine doesn't implement the umask function and you tried to use it to restrict permissions for yourself
(EXPR & 0700).
- Unable to create sub named "%s"
-
(F) You attempted to create or access a subroutine
with an illegal name.
- Unbalanced context: %d more PUSHes than POPs
-
(W) The exit code detected an internal inconsistency
in how many execution contexts were entered and left.
- Unbalanced saves: %d more saves than restores
-
(W) The exit code detected an internal inconsistency
in how many values were temporarily localized.
- Unbalanced scopes: %d more ENTERs than LEAVEs
-
(W) The exit code detected an internal inconsistency
in how many blocks were entered and left.
- Unbalanced tmps: %d more allocs than frees
-
(W) The exit code detected an internal inconsistency
in how many mortal scalars were allocated and freed.
- Undefined format "%s" called
-
(F) The format indicated doesn't seem to exist.
Perhaps it's really in another package? See the perlform manpage.
- Undefined sort subroutine "%s" called
-
(F) The sort comparison routine specified doesn't seem
to exist. Perhaps it's in a different package? See sort.
- Undefined subroutine &%s called
-
(F) The subroutine indicated hasn't been defined, or
if it was, it has since been undefined.
- Undefined subroutine called
-
(F) The anonymous subroutine you're trying to call
hasn't been defined, or if it was, it has since been undefined.
- Undefined subroutine in sort
-
(F) The sort comparison routine specified is declared
but doesn't seem to have been defined yet. See sort.
- Undefined top format "%s" called
-
(F) The format indicated doesn't seem to exist.
Perhaps it's really in another package? See the perlform manpage.
- Undefined value assigned to typeglob
-
(W) An undefined value was assigned to a typeglob, a
la
*foo = undef . This does nothing. It's possible that you really mean undef *foo .
- unexec of %s into %s failed!
-
(F) The
unexec() routine failed for some reason. See your local
FSF representative, who probably put it there in the first place.
- Unknown BYTEORDER
-
(F) There are no byte-swapping functions for a machine
with this byte order.
- unmatched () in regexp
-
(F) Unbackslashed parentheses must always be balanced
in regular expressions. If you're a vi user, the % key is valuable for
finding the matching parenthesis. See the perlre manpage.
- Unmatched right bracket
-
(F) The lexer counted more closing curly brackets
(braces) than opening ones, so you're probably missing an opening bracket.
As a general rule, you'll find the missing one (so to speak) near the place
you were last editing.
- unmatched [] in regexp
-
(F) The brackets around a character class must match.
If you wish to include a closing bracket in a character class, backslash it
or put it first. See the perlre manpage.
- Unquoted string "%s" may clash with future reserved word
-
(W) You used a bareword that might someday be claimed
as a reserved word. It's best to put such a word in quotes, or capitalize
it somehow, or insert an underbar into it. You might also declare it as a
subroutine.
- 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.
- Unrecognized signal name "%s"
-
(F) You specified a signal name to the
kill() function that was not recognized. Say
kill -l in your shell to see the valid signal names on your system.
- Unrecognized switch: -%s (-h will show valid options)
-
(F) You specified an illegal option to Perl. Don't do
that. (If you think you didn't do that, check the #! line to see if it's
supplying the bad switch on your behalf.)
- Unsuccessful %s on filename containing newline
-
(W)
A file operation was attempted on a filename, and that operation failed,
PROBABLY because the filename contained a newline,
PROBABLY because you forgot to
chop() or
chomp() it off. See
chomp.
- Unsupported directory function "%s" called
-
(F) Your machine doesn't support
opendir() and
readdir().
- 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.
- Unsupported function %s
-
(F) This machine doesn't implement the indicated
function, apparently. At least, Configure doesn't think so.
- Unsupported socket function "%s" called
-
(F) Your machine doesn't support the Berkeley socket
mechanism, or at least that's what Configure thought.
- Unterminated ltgt operator
-
(F) The lexer saw a left angle bracket in a place
where it was expecting a term, so it's looking for the corresponding right
angle bracket, and not finding it. Chances are you left some needed
parentheses out earlier in the line, and you really meant a ``less than''.
- 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.
- Use of $# is deprecated
-
(D) This was an ill-advised attempt to emulate a
poorly defined awk feature. Use an explicit
printf() or
sprintf() instead.
- Use of $* is deprecated
-
(D) 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 perlman:perlop and perlman:perlop modifiers now to do that without the dangerous action-at-a-distance effects
of
$* .
- Use of %s in printf format not supported
-
(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.
- Use of bare ltlt to mean ltlt"" is deprecated
-
(D) 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.
- Use of implicit split to @_ is deprecated
-
(D) It makes a lot of work for the compiler when you clobber a subroutine's argument list, so it's better if you assign the results of a
split() explicitly to an array (or list).
- Use of inherited AUTOLOAD for non-method %s() is deprecated
-
(D) As an (ahem) accidental feature,
AUTOLOAD subroutines are looked up as methods (using the @ISA hierarchy) even when the subroutines to be autoloaded were called as plain
functions (e.g. Foo::bar() ), not as methods (e.g. Foo->bar() or $obj->bar() ).
This bug will be rectified in Perl 5.005, which will use method lookup only
for methods' AUTOLOAD s. However, there is a significant base of existing code that may be using
the old behavior. So, as an interim step, Perl 5.004 issues an optional
warning when non-methods use inherited AUTOLOAD s.
The simple rule is: Inheritance will not work when autoloading non-methods.
The simple fix for old code is: In any module that used to depend on
inheriting AUTOLOAD for non-methods from a base class named
BaseClass , execute *AUTOLOAD = \&BaseClass::AUTOLOAD during startup.
In code that currently says use AutoLoader; @ISA = qw(AutoLoader); you should remove AutoLoader from @ISA and change use AutoLoader; to
use AutoLoader 'AUTOLOAD'; .
- Use of reserved word "%s" is deprecated
-
(D) The indicated bareword is a reserved word. Future
versions of perl may use it as a keyword, so you're better off either
explicitly quoting the word in a manner appropriate for its context of use,
or using a different name altogether. The warning can be suppressed for
subroutine names by either adding a
& prefix, or using a package qualifier, e.g. &our() , or Foo::our() .
- Use of %s is deprecated
-
(D) 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.
- Use of uninitialized value
-
(W) An undefined value was used as if it were already
defined. It was interpreted as a ``'' or a 0, but maybe it was a mistake.
To suppress this warning assign an initial value to your variables.
- Useless use of "re" pragma
-
(W) You did
use re; without any arguments. That isn't very useful.
- Useless use of %s in void context
-
(W) You did something without a side effect in a context that does nothing with the return value, such as a statement that doesn't return a value from a block, or the left side of a scalar comma operator. Very often this points not to stupidity on your part, but a failure of Perl to parse your program the way you thought it would. For example, you'd get this if you mixed up your
C precedence with Python precedence and said
$one, $two = 1, 2;
when you meant to say
($one, $two) = (1, 2);
Another common error is to use ordinary parentheses to construct a list
reference when you should be using square or curly brackets, for example,
if you say
$array = (1,2);
when you should have said
$array = [1,2];
The square brackets explicitly turn a list value into a scalar value, while
parentheses do not. So when a parenthesized list is evaluated in a scalar
context, the comma is treated like C's comma operator, which throws away
the left argument, which is not what you want. See
the perlref manpage for more on this.
- 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.
- 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" is not imported%s
-
(F) While ``use strict'' in effect, you referred to a
global variable that you apparently thought was imported from another
module, because something else of the same name (usually a subroutine) is
exported by that module. It usually means you put the wrong funny character
on the front of your variable.
- 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.
- Variable syntax
-
(A) You've accidentally run your script through csh instead of Perl. Check the #! line, or manually feed your script into Perl
yourself.
- perl: warning: Setting locale failed.
-
(S) The whole warning message will look something
like:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = "En_US",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Exactly what were the failed locale settings varies. In the above the settings were that the
LC_ALL was ``En_US'' and the
LANG had no value. This error means that Perl detected that you and/or your system administrator have set up the so-called variable system but Perl could not use those settings. This was not dead serious, fortunately: there is a ``default locale'' called
``C'' that Perl can and will use, the script will be run. Before you really fix the problem, however, you will get the same error message each time you run Perl. How to really fix the problem can be found in
the perllocale manpage section LOCALE PROBLEMS.
- 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.
- Warning: unable to close filehandle %s properly
-
(S) The implicit
close() done by an
open() got an error indication on the
close(). This usually indicates your file system ran out of disk space.
- Warning: Use of "%s" without parentheses is ambiguous
-
(S) You wrote a unary operator followed by something
that looks like a binary operator that could also have been interpreted as
a term or unary operator. For instance, if you know that the rand function
has a default argument of 1.0, and you write
rand + 5;
you may
THINK you wrote the same thing as
rand() + 5;
but in actual fact, you got
rand(+5);
So put in parentheses to say what you really mean.
- Write on closed filehandle
-
(W) The filehandle you're writing to got itself closed
sometime before now. Check your logic flow.
- X outside of string
-
(F) You had a pack template that specified a relative
position before the beginning of the string being unpacked. See pack.
- x outside of string
-
(F) You had a pack template that specified a relative
position after the end of the string being unpacked. See pack.
- Xsub "%s" called in sort
-
(F) The use of an external subroutine as a sort
comparison is not yet supported.
- Xsub called in sort
-
(F) The use of an external subroutine as a sort
comparison is not yet supported.
- You can't use -l on a filehandle
-
(F)
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. Use a filename instead.
- YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!
-
(F) And you probably never will, because you probably don't have the sources to your kernel, and your vendor probably doesn't give a rip about what you want. Your best bet is to use the wrapsuid script in the eg directory to put a setuid
C wrapper around your script.
- You need to quote "%s"
-
(W) You assigned a bareword as a signal handler name. Unfortunately, you already have a subroutine of that name declared, which means that Perl 5 will try to call the subroutine when the assignment is executed, which is probably not what you want. (If it
IS what you want, put an & in front.)
- [gs]etsockopt() on closed fd
-
(W) You tried to get or set a socket option on a closed socket. Did you forget to check the return value of your
socket() call? See
getsockopt.
- \1 better written as $1
-
(W) Outside of patterns, backreferences live on as
variables. The use of backslashes is grandfathered on the right-hand side
of a substitution, but stylistically it's better to use the variable form
because other Perl programmers will expect it, and it works better if there
are more than 9 backreferences.
- '|' and 'lt' may not both be specified on command line
-
(F) An error peculiar to
VMS. Perl does its own command line redirection, and found that
STDIN was a pipe, and that you also tried to redirect
STDIN using '<'. Only one
STDIN stream to a customer, please.
- '|' and 'gt' may not both be specified on command line
-
(F) An error peculiar to
VMS. Perl does its own command line redirection, and thinks you tried to redirect stdout both to a file and into a pipe to another command. You need to choose one or the other, though nothing's stopping you from piping into a program or Perl script which 'splits' output into two streams, such as
open(OUT,">$ARGV[0]") or die "Can't write to $ARGV[0]: $!";
while (<STDIN>) {
print;
print OUT;
}
close OUT;
- 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.
Return to the Library
|
|