X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/a58ac25e92f5a203cf2a2bbf7dff77aade544833..ee872193302939c724fd6c2c18071c621bfac6c4:/pod/perldiag.pod diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 3e4e978..b90a141 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -76,17 +76,6 @@ on the operator (e.g. C) or declare the subroutine to be an object method (see L or L). -=item Ambiguous overloaded argument to %s resolved as %s - -(W ambiguous) You called C, C or C on an object that had -overloading of C<%{}> or C<@{}> or both. In such a case, the object is -dereferenced according to its overloading, not its underlying reference type. -The warning is issued when C<%{}> overloading exists on a blessed arrayref, -when C<@{}> overloading exists on a blessed hashref, or when both overloadings -are defined (in which case C<%{}> is used). You can force the interpretation -of the object by explicitly dereferencing it as an array or hash instead of -passing the object itself to C, C or C. - =item Ambiguous range in transliteration operator (F) You wrote something like C which doesn't mean anything at @@ -119,7 +108,9 @@ the varable, you can just write C<@foo>. If you wanted to call the function, write C<@{foo()}> ... or you could just not have a variable and a function with the same name, and save yourself a lot of trouble. -=item Ambiguous use of %c{%s%s} resolved to %c%s%s +=item Ambiguous use of %c{%s[...]} resolved to %c%s[...] + +=item Ambiguous use of %c{%s{...}} resolved to %c%s{...} (W ambiguous) You wrote something like C<${foo[2]}> (where foo represents the name of a Perl keyword), which might be looking for @@ -144,6 +135,18 @@ string C<"-foo">, or a call to the function C, negated. If you meant the string, just write C<"-foo">. If you meant the function call, write C<-foo()>. +=item Ambiguous use of 's//le...' resolved as 's// le...'; Rewrite as 's//el' if you meant 'use locale rules and evaluate rhs as an expression'. In Perl 5.16, it will be resolved the other way + +(W deprecated, ambiguous) You wrote a pattern match with substitution +immediately followed by "le". In Perl 5.14 and earlier, this is +resolved as meaning to take the result of the substitution, and see if +it is stringwise less-than-or-equal-to what follows in the expression. +Having the "le" immediately following a pattern is deprecated behavior, +so in Perl 5.16, this expression will be resolved as meaning to do the +pattern match using the rules of the current locale, and evaluate the +rhs as an expression when doing the substitution. In 5.14, if you want +the latter interpretation, you can simply write "el" instead. + =item '|' and '<' may not both be specified on command line (F) An error peculiar to VMS. Perl does its own command line @@ -175,13 +178,6 @@ hash) and then work on that scalar value. This is probably not what you meant to do. See L and L for alternatives. -=item Args must match #! line - -(F) The setuid emulator requires that the arguments Perl was invoked -with match the arguments specified on the #! line. Since some systems -impose a one-argument limit on the #! line, try combining switches; -for example, turn C<-w -U> into C<-wU>. - =item Arg too short for msgsnd (F) msgsnd() requires a string at least as long as sizeof(long). @@ -785,9 +781,11 @@ nesting levels, the following is missing its final parenthesis: print q(The character '(' starts a side comment.); -If you're getting this error from a here-document, you may have included -unseen whitespace before or after your closing tag. A good programmer's -editor will have a way to help you find these characters. +If you're getting this error from a here-document, you may have +included unseen whitespace before or after your closing tag or there +may not be a linebreak after it. A good programmer's editor will have +a way to help you find these characters (or lack of characters). See +L for the full details on here-documents. =item Can't find Unicode property definition "%s" @@ -1367,7 +1365,7 @@ template code following the slash. See L. =item Code point 0x%X is not Unicode, no properties match it; all inverse properties do -(W utf8) You had a code point above the Unicode maximum of U+10FFFF. +(W utf8, non_unicode) You had a code point above the Unicode maximum of U+10FFFF. Perl allows strings to contain a superset of Unicode code points, up to the limit of what is storable in an unsigned integer on @@ -1525,6 +1523,15 @@ array is empty, just use C for example. checks for an undefined I value. If you want to see if the hash is empty, just use C for example. +=item (?(DEFINE)....) does not allow branches in regex; marked by <-- HERE in m/%s/ + +(F) You used something like C<(?(DEFINE)...|..)> which is illegal. The +most likely cause of this error is that you left out a parenthesis inside +of the C<....> part. + +The <-- HERE shows in the regular expression about where the problem was +discovered. + =item %s defines neither package nor VERSION--version check failed (F) You said something like "use Module 42" but in the Module file @@ -1940,14 +1947,14 @@ earlier in the line, and you really meant a "less than". =item gmtime(%f) too large -(W overflow) You called C with an number that was larger than +(W overflow) You called C with a number that was larger than it can reliably handle and C probably returned the wrong date. This warning is also triggered with nan (the special not-a-number value). =item gmtime(%f) too small -(W overflow) You called C with an number that was smaller than +(W overflow) You called C with a number that was smaller than it can reliably handle and C probably returned the wrong date. This warning is also triggered with nan (the special not-a-number value). @@ -1991,8 +1998,11 @@ Further error messages would likely be uninformative. (D syntax) -You had a word that isn't a regex modifier immediately following a pattern -without an intervening space. For example, the two constructs: +You had a word that isn't a regex modifier immediately following a +pattern without an intervening space. If you are trying to use the C +flags on a substitution, use C instead. Otherwise, add white space +between the pattern and following word to eliminate the warning. As an +example of the latter, the two constructs: $a =~ m/$foo/sand $bar $a =~ m/$foo/s and $bar @@ -2169,6 +2179,14 @@ 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. +=item Insecure user-defined property %s + +(F) Perl detected tainted data when trying to compile a regular +expression that contains a call to a user-defined character property +function, i.e. C<\p{IsFoo}> or C<\p{InFoo}>. +See L and L. + + =item Integer overflow in format string for %s (F) The indexes and widths specified in the format string of C @@ -2248,6 +2266,12 @@ The escape was replaced with REPLACEMENT CHARACTER (U+FFFD) instead. The <-- HERE shows in the regular expression about where the escape was discovered. +=item Invalid hexadecimal number in \N{U+...} + +(F) The character constant represented by C<...> is not a valid hexadecimal +number. Either it is empty, or you tried to use a character other than +0 - 9 or A - F, a - f in a hexadecimal number. + =item Invalid mro name: '%s' (F) You tried to C or C, @@ -2346,8 +2370,9 @@ previous versions of perl the use of C<$*> enabled or disabled multi-line matching within a string. Instead of using C<$*> you should use the C (and maybe C) regexp -modifiers. (In older versions: when C<$*> was set to a true value then -all regular expressions behaved as if they were written using C.) +modifiers. You can enable C for a lexical scope (even a whole file) +with C. (In older versions: when C<$*> was set to a true value +then all regular expressions behaved as if they were written using C.) =item $# is no longer supported @@ -2402,11 +2427,10 @@ an undefined value for the length. See L. =item Lexing code attempted to stuff non-Latin-1 character into Latin-1 input (F) An extension is attempting to insert text into the current parse -(using L or similar), but -tried to insert a character that couldn't be part of the current input. -This is an inherent pitfall of the stuffing mechanism, and one of the -reasons to avoid it. Where it is necessary to stuff, stuffing only -plain ASCII is recommended. +(using L or similar), but tried to insert a character +that couldn't be part of the current input. This is an inherent pitfall +of the stuffing mechanism, and one of the reasons to avoid it. Where it +is necessary to stuff, stuffing only plain ASCII is recommended. =item Lexing code internal error (%s) @@ -2421,14 +2445,14 @@ L. =item localtime(%f) too large -(W overflow) You called C with an number that was larger +(W overflow) You called C with a number that was larger than it can reliably handle and C probably returned the wrong date. This warning is also triggered with nan (the special not-a-number value). =item localtime(%f) too small -(W overflow) You called C with an number that was smaller +(W overflow) You called C with a number that was smaller than it can reliably handle and C probably returned the wrong date. This warning is also triggered with nan (the special not-a-number value). @@ -2467,14 +2491,14 @@ the definition. values cannot be returned in subroutines used in lvalue context. See L. -=item Malformed integer in [] in pack +=item Malformed integer in [] in pack -(F) Between the brackets enclosing a numeric repeat count only digits +(F) Between the brackets enclosing a numeric repeat count only digits are permitted. See L. =item Malformed integer in [] in unpack -(F) Between the brackets enclosing a numeric repeat count only digits +(F) Between the brackets enclosing a numeric repeat count only digits are permitted. See L. =item Malformed PERLLIB_PREFIX @@ -2514,37 +2538,29 @@ message. See also L. -=item Malformed UTF-16 surrogate - -(F) Perl thought it was reading UTF-16 encoded character data but while -doing it Perl met a malformed Unicode surrogate. - =item Malformed UTF-8 returned by \N (F) The charnames handler returned malformed UTF-8. -=item Malformed UTF-8 string in pack +=item Malformed UTF-8 string in '%c' format in unpack -(F) You tried to pack something that didn't comply with UTF-8 encoding +(F) You tried to unpack something that didn't comply with UTF-8 encoding rules and perl was unable to guess how to make more progress. -=item Malformed UTF-8 string in unpack +=item Malformed UTF-8 string in pack -(F) You tried to unpack something that didn't comply with UTF-8 encoding +(F) You tried to pack something that didn't comply with UTF-8 encoding rules and perl was unable to guess how to make more progress. -=item Malformed UTF-8 string in '%c' format in unpack +=item Malformed UTF-8 string in unpack (F) You tried to unpack something that didn't comply with UTF-8 encoding rules and perl was unable to guess how to make more progress. -=item Maximal count of pending signals (%u) exceeded +=item Malformed UTF-16 surrogate -(F) Perl aborted due to a too high number of signals pending. This -usually indicates that your operating system tried to deliver signals -too fast (with a very high priority), starving the perl process from -resources it would need to reach a point where it can process signals -safely. (See L.) +(F) 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/ @@ -2553,6 +2569,14 @@ regular expression engine didn't specifically check for that. The <-- HERE shows in the regular expression about where the problem was discovered. See L. +=item Maximal count of pending signals (%u) exceeded + +(F) Perl aborted due to too high a number of signals pending. This +usually indicates that your operating system tried to deliver signals +too fast (with a very high priority), starving the perl process from +resources it would need to reach a point where it can process signals +safely. (See L.) + =item "%s" may clash with future reserved word (W) This warning may be due to running a perl5 script through a perl4 @@ -2598,10 +2622,10 @@ immediately after the switch, without intervening spaces. =item Missing braces on \N{} (F) Wrong syntax of character name literal C<\N{charname}> within -double-quotish context. This can also happen when there is a space (or -comment) between the C<\N> and the C<{> in a regex with the C modifier. -This modifier does not change the requirement that the brace immediately follow -the C<\N>. +double-quotish context. This can also happen when there is a space +(or comment) between the C<\N> and the C<{> in a regex with the C modifier. +This modifier does not change the requirement that the brace immediately +follow the C<\N>. =item Missing braces on \o{} @@ -2645,30 +2669,29 @@ can vary from one line to the next. =item Missing right brace on \N{} or unescaped left brace after \N -(F) -C<\N> has two meanings. +(F) C<\N> has two meanings. -The traditional one has it followed by a name enclosed -in braces, meaning the character (or sequence of characters) given by that name. -Thus C<\N{ASTERISK}> is another way of writing C<*>, valid in both -double-quoted strings and regular expression patterns. In patterns, it doesn't -have the meaning an unescaped C<*> does. +The traditional one has it followed by a name enclosed in braces, +meaning the character (or sequence of characters) given by that +name. Thus C<\N{ASTERISK}> is another way of writing C<*>, valid in both +double-quoted strings and regular expression patterns. In patterns, +it doesn't have the meaning an unescaped C<*> does. -Starting in Perl 5.12.0, C<\N> also can have an additional meaning (only) in -patterns, namely to match a non-newline character. (This is short for -C<[^\n]>, and like C<.> but is not affected by the C regex modifier.) +Starting in Perl 5.12.0, C<\N> also can have an additional meaning (only) +in patterns, namely to match a non-newline character. (This is short +for C<[^\n]>, and like C<.> but is not affected by the C regex modifier.) -This can lead to some ambiguities. When C<\N> is not followed immediately by a -left brace, Perl assumes the C<[^\n]> meaning. Also, if -the braces form a valid quantifier such as C<\N{3}> or C<\N{5,}>, Perl assumes -that this means to match the given quantity of non-newlines (in these examples, -3; and 5 or more, respectively). In all other case, where there is a C<\N{> -and a matching C<}>, Perl assumes that a character name is desired. +This can lead to some ambiguities. When C<\N> is not followed immediately +by a left brace, Perl assumes the C<[^\n]> meaning. Also, if the braces +form a valid quantifier such as C<\N{3}> or C<\N{5,}>, Perl assumes that this +means to match the given quantity of non-newlines (in these examples, +3; and 5 or more, respectively). In all other case, where there is a +C<\N{> and a matching C<}>, Perl assumes that a character name is desired. -However, if there is no matching C<}>, Perl doesn't know if it was mistakenly -omitted, or if C<[^\n]{> was desired, and -raises this error. If you meant the former, add the right brace; if you meant -the latter, escape the brace with a backslash, like so: C<\N\{> +However, if there is no matching C<}>, Perl doesn't know if it was +mistakenly omitted, or if C<[^\n]{> was desired, and raises this error. +If you meant the former, add the right brace; if you meant the latter, +escape the brace with a backslash, like so: C<\N\{> =item Missing right curly or square bracket @@ -2749,23 +2772,37 @@ See L. (F) Lexically scoped subroutines are not yet implemented. Don't try that yet. -=item "%s" variable %s can't be in a package +=item "my" variable %s can't be in a package (F) Lexically scoped variables aren't in a package, so it doesn't make sense to try to declare one with a package qualifier on the front. Use local() if you want to localize a package variable. +=item Name "%s::%s" used only once: possible typo + +(W once) 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 C declaration is +provided for this purpose. + +NOTE: This warning detects symbols that have been used only once so $c, @c, +%c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered +the same; if a program uses $c only once but also uses any of the others it +will not trigger this warning. + =item \N in a character class must be a named character: \N{...} (F) The new (5.12) meaning of C<\N> as C<[^\n]> is not valid in a bracketed -character class, for the same reason that C<.> in a character class loses its -specialness: it matches almost everything, which is probably not what you want. +character class, for the same reason that C<.> in a character class loses +its specialness: it matches almost everything, which is probably not +what you want. =item \N{NAME} must be resolved by the lexer -(F) When compiling a regex pattern, an unresolved named character or sequence -was encountered. This can happen in any of several ways that bypass the lexer, -such as using single-quotish context, or an extra backslash in double quotish: +(F) When compiling a regex pattern, an unresolved named character or +sequence was encountered. This can happen in any of several ways that +bypass the lexer, such as using single-quotish context, or an extra +backslash in double-quotish: $re = '\N{SPACE}'; # Wrong! $re = "\\N{SPACE}"; # Wrong! @@ -2791,24 +2828,6 @@ C<\N> is separated by spaces from the C<{>, in which case, remove the spaces. /\N {SPACE}/x; # Wrong! /\N{SPACE}/x; # ok -=item Name "%s::%s" used only once: possible typo - -(W once) 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 C declaration is -provided for this purpose. - -NOTE: This warning detects symbols that have been used only once so $c, @c, -%c, *c, &c, sub c{}, c(), and c (the filehandle or format) are considered -the same; if a program uses $c only once but also uses any of the others it -will not trigger this warning. - -=item Invalid hexadecimal number in \N{U+...} - -(F) The character constant represented by C<...> is not a valid hexadecimal -number. Either it is empty, or you tried to use a character other than 0 - 9 -or A - F, a - f in a hexadecimal number. - =item Negative '/' count in unpack (F) The length count obtained from a length/code unpack operation was @@ -2861,7 +2880,7 @@ One possible cause for this is that you expected to have imported a constant to your name space with B or B while no such importing took place, it may for example be that your operating system does not support that particular constant. Hopefully you did use an -explicit import list for the constants you expect to see, please see +explicit import list for the constants you expect to see; please see L and L. While an explicit import list would probably have caught this error earlier it naturally does not remedy the fact that your operating system still does not support that @@ -2878,7 +2897,7 @@ doesn't know where you want to pipe the output from this command. =item No DB::DB routine defined (F) The currently executing code was compiled with the B<-d> switch, but -for some reason the current debugger (e.g. F or a C +for some reason the current debugger (e.g. F or a C module) didn't define a routine to be called at the beginning of each statement. @@ -2894,10 +2913,6 @@ for some reason the current debugger (e.g. F or a C module) didn't define a C 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 @@ -2915,11 +2930,6 @@ matching counterpart. See L. redirection, and found a '<' on the command line, but can't find the name of the file from which to read data for stdin. -=item No #! line - -(F) The setuid emulator requires that scripts have a well-formed #! line -even on machines that don't support the #! construct. - =item No next::method '%s' found for %s (F) C found no further instances of this method name @@ -2969,6 +2979,7 @@ your system. (F) The indicated command line switch needs a mandatory argument, but you haven't specified one. + =item No such class field "%s" in variable %s of type %s (F) You tried to access a key from a hash through the indicated typed variable @@ -2977,13 +2988,13 @@ package has restricted the set of allowed keys using the L pragma. =item No such class %s -(F) You provided a class qualifier in a "my", "our" or "state" declaration, but -this class doesn't exist at this point in your program. +(F) You provided a class qualifier in a "my", "our" or "state" +declaration, but this class doesn't exist at this point in your program. =item No such hook: %s -(F) You specified a signal hook that was not recognized by Perl. Currently, Perl -accepts C<__DIE__> and C<__WARN__> as valid signal hooks +(F) You specified a signal hook that was not recognized by Perl. +Currently, Perl accepts C<__DIE__> and C<__WARN__> as valid signal hooks. =item No such pipe open @@ -3028,11 +3039,11 @@ find out what kind of ref it really was. See L. a reference to something else instead. You can use the ref() function to find out what kind of ref it really was. See L. -=item Not a perl script +=item Not an unblessed ARRAY reference -(F) The setuid emulator requires that scripts have a well-formed #! line -even on machines that don't support the #! construct. The line must -mention perl. +(F) You passed a reference to a blessed array to C, C or +another array function. These only accept unblessed array references +or arrays beginning explicitly with C<@>. =item Not a SCALAR reference @@ -3077,14 +3088,15 @@ need to be added to UTC to get local time. =item Non-octal character '%c'. Resolved as "%s" -(W digit) In parsing an octal numeric constant, a character was unexpectedly -encountered that isn't octal. The resulting value is as indicated. +(W digit) In parsing an octal numeric constant, a character was +unexpectedly encountered that isn't octal. The resulting value is as +indicated. =item Non-string passed as bitmask (W misc) A number has been passed as a bitmask argument to select(). Use the vec() function to construct the file descriptor bitmasks for -select. See L +select. See L. =item Null filename used @@ -3124,8 +3136,9 @@ the meantime, try using scientific notation (e.g. "1e6" instead of =item Number with no digits -(F) Perl was looking for a number but found nothing that looked like a number. -This happens, for example with C<\o{}>, with no number between the braces. +(F) Perl was looking for a number but found nothing that looked like +a number. This happens, for example with C<\o{}>, with no number between +the braces. =item Octal number in vector unsupported @@ -3139,8 +3152,6 @@ future version. (4294967295) and therefore non-portable between systems. See L for more on portability concerns. -See also L for writing portable code. - =item Odd number of arguments for overload::constant (W overload) The call to overload::constant contained an odd number of @@ -3204,33 +3215,35 @@ and is deprecated. (F) An attempt was made to perform an overloaded operation for which no handler was defined. While some handlers can be autogenerated in terms of other handlers, there is no default handler for any operation, unless -C overloading key is specified to be true. See L. +the C overloading key is specified to be true. See L. -=item Operation "%s" returns its argument for UTF-16 surrogate U+%X +=item Operation "%s" returns its argument for non-Unicode code point 0x%X -(W) You performed an operation requiring Unicode semantics on a Unicode -surrogate. Unicode frowns upon the use of surrogates for anything but -storing strings in UTF-16, but semantics are (reluctantly) defined for -the surrogates, and they are to do nothing for this operation. Because -the use of surrogates can be dangerous, Perl warns. +(W utf8, non_unicode) You performed an operation requiring Unicode +semantics on a code +point that is not in Unicode, so what it should do is not defined. Perl +has chosen to have it do nothing, and warn you. If the operation shown is "ToFold", it means that case-insensitive matching in a regular expression was done on the code point. If you know what you are doing you can turn off this warning by -C. +C. -=item Operation "%s" returns its argument for non-Unicode code point 0x%X +=item Operation "%s" returns its argument for UTF-16 surrogate U+%X -(W) You performed an operation requiring Unicode semantics on a code -point that is not in Unicode, so what it should do is not defined. Perl -has chosen to have it do nothing, and warn you. +(W utf8, surrogate) You performed an operation requiring Unicode +semantics on a Unicode +surrogate. Unicode frowns upon the use of surrogates for anything but +storing strings in UTF-16, but semantics are (reluctantly) defined for +the surrogates, and they are to do nothing for this operation. Because +the use of surrogates can be dangerous, Perl warns. If the operation shown is "ToFold", it means that case-insensitive matching in a regular expression was done on the code point. If you know what you are doing you can turn off this warning by -C. +C. =item Operator or semicolon missing before %s @@ -3328,30 +3341,6 @@ package-specific handler. That name might have a meaning to Perl itself some day, even though it doesn't yet. Perhaps you should use a mixed-case attribute name, instead. See L. -=item \p{} uses Unicode rules, not locale rules - -(W) You compiled a regular expression that contained a Unicode property -match (C<\p> or C<\P>), but the regular expression is also being told to -use the run-time locale, not Unicode. Instead, use a POSIX character -class, which should know about the locale's rules. -(See L.) - -Even if the run-time locale is ISO 8859-1 (Latin1), which is a subset of -Unicode, some properties will give results that are not valid for that -subset. - -Here are a couple of examples to help you see what's going on. If the -locale is ISO 8859-7, the character at code point 0xD7 is the "GREEK -CAPITAL LETTER CHI". But in Unicode that code point means the -"MULTIPLICATION SIGN" instead, and C<\p> always uses the Unicode -meaning. That means that C<\p{Alpha}> won't match, but C<[[:alpha:]]> -should. Only in the Latin1 locale are all the characters in the same -positions as they are in Unicode. But, even here, some properties give -incorrect results. An example is C<\p{Changes_When_Uppercased}> which -is true for "LATIN SMALL LETTER Y WITH DIAERESIS", but since the upper -case of that character is not in Latin1, in that locale it doesn't -change when upper cased. - =item pack/unpack repeat count overflow (F) You can't specify a repeat count so large that it overflows your @@ -3434,13 +3423,6 @@ repeatedly, but each time something re-created entries in the glob. Most likely the glob contains an object with a reference back to the glob and a destructor that adds a new object to the glob. -=item panic: hfreeentries failed to free hash - -(P) The internal routine used to clear a hash's entries tried repeatedly, -but each time something added more entries to the hash. Most likely the hash -contains an object with a reference back to the hash and a destructor that -adds a new object to the hash. - =item panic: INTERPCASEMOD (P) The lexer got into a bad state at a case modifier. @@ -3560,8 +3542,8 @@ was string. =item panic: unimplemented op %s (#%d) called -(P) The compiler is screwed up and attempted to use an op that isn't permitted -at run time. +(P) The compiler is screwed up and attempted to use an op that isn't +permitted at run time. =item panic: utf16_to_utf8: odd bytelen @@ -3615,6 +3597,15 @@ redirected it with select().) "Can't locate object method \"%s\" via package \"%s\"". It often means that a method requires a package that has not been loaded. +=item Perl folding rules are not up-to-date for 0x%x; please use the perlbug utility to report + +(W regex, deprecated) You used a regular expression with +case-insensitive matching, and there is a bug in Perl in which the +built-in regular expression folding rules are not accurate. This may +lead to incorrect results. Please report this as a bug using the +"perlbug" utility. (This message is marked deprecated, so that it by +default will be turned-on.) + =item Perl_my_%s() not available (F) Your platform has very uncommon byte-order and integer size, @@ -3654,9 +3645,9 @@ This error means that Perl detected that you and/or your operating system supplier and/or system administrator have set up the so-called locale 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 +Perl can and will use, and 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 L section B. =item pid %x not a child @@ -3773,13 +3764,6 @@ higher precedence of C<==>. This is probably not what you want. (If you really meant to write this, disable the warning, or, better, put the parentheses explicitly and write C<$x & ($y == 0)>). -=item Possible unintended interpolation of %s in string - -(W ambiguous) You said something like `@foo' in a double-quoted string -but there was no array C<@foo> in scope at the time. If you wanted a -literal @foo, then write it as \@foo; otherwise find out what happened -to the array you apparently lost track of. - =item Possible unintended interpolation of $\ in regex (W ambiguous) You said something like C in a regex. @@ -3794,6 +3778,13 @@ If instead you intended to match the word 'foo' at the end of the line followed by whitespace and the word 'bar' on the next line then you can use C (for example: C). +=item Possible unintended interpolation of %s in string + +(W ambiguous) You said something like `@foo' in a double-quoted string +but there was no array C<@foo> in scope at the time. If you wanted a +literal @foo, then write it as \@foo; otherwise find out what happened +to the array you apparently lost track of. + =item Precedence problem: open %s should be open(%s) (S precedence) The old irregular construct @@ -3846,6 +3837,30 @@ declared or defined with a different function prototype. (F) You've omitted the closing parenthesis in a function prototype definition. +=item \p{} uses Unicode rules, not locale rules + +(W) You compiled a regular expression that contained a Unicode property +match (C<\p> or C<\P>), but the regular expression is also being told to +use the run-time locale, not Unicode. Instead, use a POSIX character +class, which should know about the locale's rules. +(See L.) + +Even if the run-time locale is ISO 8859-1 (Latin1), which is a subset of +Unicode, some properties will give results that are not valid for that +subset. + +Here are a couple of examples to help you see what's going on. If the +locale is ISO 8859-7, the character at code point 0xD7 is the "GREEK +CAPITAL LETTER CHI". But in Unicode that code point means the +"MULTIPLICATION SIGN" instead, and C<\p> always uses the Unicode +meaning. That means that C<\p{Alpha}> won't match, but C<[[:alpha:]]> +should. Only in the Latin1 locale are all the characters in the same +positions as they are in Unicode. But, even here, some properties give +incorrect results. An example is C<\p{Changes_When_Uppercased}> which +is true for "LATIN SMALL LETTER Y WITH DIAERESIS", but since the upper +case of that character is not in Latin1, in that locale it doesn't +change when upper cased. + =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 @@ -3915,11 +3930,14 @@ which is why it's currently left out of your copy. believes it found an infinite loop in the C<@ISA> hierarchy. This is a crude check that bails out after 100 levels of C<@ISA> depth. -=item Recursive inheritance detected while looking for method %s +=item refcnt_dec: fd %d%s -(F) More than 100 levels of inheritance were encountered while invoking -a method. Probably indicates an unintended loop in your inheritance -hierarchy. +=item refcnt: fd %d%s + +=item refcnt_inc: fd %d%s + +(P) Perl's I/O implementation failed an internal consistency check. If +you see this message, something is very wrong. =item Reference found where even-sized list expected @@ -3941,30 +3959,21 @@ Doing so has no effect. =item Reference miscount in sv_replace() (W internal) The internal sv_replace() function was handed a new SV with -a reference count of other than 1. +a reference count other than 1. =item Reference to invalid group 0 (F) You used C<\g0> or similar in a regular expression. You may refer to capturing parentheses only with strictly positive integers (normal backreferences) or with strictly negative integers (relative -backreferences), but using 0 does not make sense. +backreferences). Using 0 does not make sense. =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 -wanted to have the character with ordinal 7 inserted into the regular expression, -prepend zeroes to make it three digits long: C<\007> - -The <-- HERE shows in the regular expression about where the problem was -discovered. - -=item Reference to nonexistent or unclosed group in regex; marked by <-- HERE in m/%s/ - -(F) You used something like C<\g{-7}> in your regular expression, but there are -not at least seven sets of closed capturing parentheses in the expression before -where the C<\g{-7}> was located. +not at least seven sets of capturing parentheses in the expression. If +you wanted to have the character with ordinal 7 inserted into the regular +expression, prepend zeroes to make it three digits long: C<\007> The <-- HERE shows in the regular expression about where the problem was discovered. @@ -3972,18 +3981,18 @@ discovered. =item Reference to nonexistent named group in regex; marked by <-- HERE in m/%s/ (F) You used something like C<\k'NAME'> or C<< \k >> in your regular -expression, but there is no corresponding named capturing parentheses such -as C<(?'NAME'...)> or C<(?...). Check if the name has been spelled -correctly both in the backreference and the declaration. +expression, but there is no corresponding named capturing parentheses +such as C<(?'NAME'...)> or C<< (?...) >>. Check if the name has been +spelled correctly both in the backreference and the declaration. The <-- HERE shows in the regular expression about where the problem was discovered. -=item (?(DEFINE)....) does not allow branches in regex; marked by <-- HERE in m/%s/ +=item Reference to nonexistent or unclosed group in regex; marked by <-- HERE in m/%s/ -(F) You used something like C<(?(DEFINE)...|..)> which is illegal. The -most likely cause of this error is that you left out a parenthesis inside -of the C<....> part. +(F) You used something like C<\g{-7}> in your regular expression, but there +are not at least seven sets of closed capturing parentheses in the +expression before where the C<\g{-7}> was located. The <-- HERE shows in the regular expression about where the problem was discovered. @@ -3993,6 +4002,26 @@ discovered. (P) The regular expression engine got confused by what the regular expression compiler gave it. +=item Regexp modifier "/%c" may appear a maximum of twice + +=item Regexp modifier "/%c" may not appear twice + +(F syntax, regexp) The regular expression pattern had too many occurrences +of the specified modifier. Remove the extraneous ones. + +=item Regexp modifier "%c" may not appear after the "-" + +(F regexp) Turning off the given modifier has the side effect of turning +on another one. Perl currently doesn't allow this. Reword the regular +expression to use the modifier you want to turn on (and place it before +the minus), instead of the one you want to turn off. + +=item Regexp modifiers "/%c" and "/%c" are mutually exclusive + +(F syntax, regexp) The regular expression pattern had more than one of these +mutually exclusive modifiers. Retain only the modifier that is +supposed to be there. + =item Regexp out of space (P) A "can't happen" error, because safemalloc() should have caught it @@ -4013,7 +4042,7 @@ are meaningless. =item Reversed %s= operator (W syntax) You wrote your assignment operator backwards. The = must -always comes last, to avoid ambiguity with subsequent unary operators. +always come last, to avoid ambiguity with subsequent unary operators. =item rewinddir() attempted on invalid dirhandle %s @@ -4078,16 +4107,16 @@ C) leading to some ambiguous constructions being wrongly parsed. One way to disambiguate the parsing is to put parentheses around the conditional expression, i.e. C<(foo) ? 0 : 1>. -=item %sseek() on unopened filehandle - -(W unopened) You tried to use the seek() or sysseek() function on a -filehandle that was either never opened or has since been closed. - =item seekdir() attempted on invalid dirhandle %s (W io) The dirhandle you are doing a seekdir() on is either closed or not really a dirhandle. Check your control flow. +=item %sseek() on unopened filehandle + +(W unopened) You tried to use the seek() or sysseek() function on a +filehandle that was either never opened or has since been closed. + =item select not implemented (F) This machine doesn't implement the select() system call. @@ -4134,9 +4163,7 @@ where the problem was discovered. See L. <-- HERE shows in the regular expression about where the problem was discovered. This happens when using the C<(?^...)> construct to tell Perl to use the default regular expression modifiers, and you -redundantly specify a default modifier; or having a modifier that can't -be turned off (such as C<"p"> or C<"l">) after a minus; or specifying -more than one of the C<"d">, C<"l">, or C<"u"> modifiers. For other +redundantly specify a default modifier. For other causes, see L. =item Sequence \%s... not terminated in regex; marked by <-- HERE in m/%s/ @@ -4153,12 +4180,12 @@ L. =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 +(F) If the contents of a (?{...}) clause contain braces, they must balance +for Perl to detect the end of the clause properly. The <-- HERE shows in the regular expression about where the problem was discovered. See L. -=item "500 Server error" +=item Z<>500 Server error See Server error. @@ -4222,16 +4249,6 @@ didn't think so. forget to check the return value of your socket() call? See L. -=item Setuid/gid script is writable by world - -(F) The setuid emulator won't run a script that is writable by the -world, because the world might have written on it already. - -=item Setuid script not plain file - -(F) The setuid emulator won't run a script that isn't read from a file, -but from a socket, a pipe or another device. - =item shm%s not implemented (F) You don't have System V shared memory IPC on your system. @@ -4302,6 +4319,12 @@ unless there was a failure. You probably wanted to use system() instead, which does return. To suppress this warning, put the exec() in a block by itself. +=item "state" variable %s can't be in a package + +(F) Lexically scoped variables aren't in a package, so it doesn't make +sense to try to declare one with a package qualifier on the front. Use +local() if you want to localize a package variable. + =item stat() on unopened filehandle %s (W unopened) You tried to use the stat() function on a filehandle that @@ -4351,7 +4374,7 @@ assignment or as a subroutine argument for example). =item sv_upgrade from type %d down to type %d -(P) Perl tried to force the upgrade an SV to a type which was actually +(P) Perl tried to force the upgrade of an SV to a type which was actually inferior to its current type. =item Switch (?(condition)... contains too many branches in regex; marked by <-- HERE in m/%s/ @@ -4368,16 +4391,16 @@ discovered. See L. =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 -about where the problem was discovered. See L. +(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 about where the problem was discovered. See L. =item switching effective %s is not implemented (F) While under the C pragma, we cannot switch the real and effective uids or gids. -=item %s syntax +=item %s syntax OK (F) The final summary message when a C succeeds. @@ -4445,16 +4468,16 @@ know about your kind of stdio. You'll have to use a filename instead. (F) You tried to use C to reach a label that was too deeply nested for Perl to reach. Perl is doing you a favor by refusing. -=item tell() on unopened filehandle - -(W unopened) You tried to use the tell() function on a filehandle that -was either never opened or has since been closed. - =item telldir() attempted on invalid dirhandle %s (W io) The dirhandle you tried to telldir() is either closed or not really a dirhandle. Check your control flow. +=item tell() on unopened filehandle + +(W unopened) You tried to use the tell() function on a filehandle that +was either never opened or has since been closed. + =item That use of $[ is unsupported (F) Assignment to C<$[> is now strictly circumscribed, and interpreted @@ -4619,10 +4642,10 @@ certain type. Arrays must be @NAME or C<@{EXPR}>. Hashes must be %NAME or C<%{EXPR}>. No implicit dereferencing is allowed--use the {EXPR} forms as an explicit dereference. See L. -=item Type of argument to %s must be hashref or arrayref +=item Type of argument to %s must be unblessed hashref or arrayref -(F) You called C, C or C with an argument that was -expected to be a reference to a hash or a reference to an array. +(F) You called C, C or C with a scalar argument that +was not a reference to an unblessed hash or array. =item umask not implemented @@ -4701,11 +4724,23 @@ representative, who probably put it there in the first place. =item Unicode non-character U+%X is illegal for open interchange -(W utf8) Certain codepoints, such as U+FFFE and U+FFFF, are defined by the +(W utf8, nonchar) Certain codepoints, such as U+FFFE and U+FFFF, are +defined by the Unicode standard to be non-characters. Those are legal codepoints, but are reserved for internal use; so, applications shouldn't attempt to exchange them. If you know what you are doing you can turn -off this warning by C. +off this warning by C. + +=item Unicode surrogate U+%X is illegal in UTF-8 + +(W utf8, surrogate) You had a UTF-16 surrogate in a context where they are +not considered acceptable. These code points, between U+D800 and +U+DFFF (inclusive), are used by Unicode only for UTF-16. However, Perl +internally allows all unsigned integer code points (up to the size limit +available on your platform), including surrogates. But these can cause +problems when being input or output, which is likely where this message +came from. If you really really know what you are doing you can turn +off this warning by C. =item Unknown BYTEORDER @@ -4741,11 +4776,17 @@ subvert Perl's population of %ENV for nefarious purposes. =item Unknown switch condition (?(%s 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 -is true if the lookahead or lookbehind is true), a (?{...}) construct (the -condition is true if the code evaluates to a true value), or a number (the -condition is true if the set of capturing parentheses named by the number -matched). +is not known. The condition must be one of the following: + + (1) (2) ... true if 1st, 2nd, etc., capture matched + () ('NAME') true if named capture matched + (?=...) (?<=...) true if subpattern matches + (?!...) (?. @@ -4760,21 +4801,20 @@ of the C<-C> switch for the list of known options. (F) You specified an unknown Unicode option. See L documentation of the C<-C> switch for the list of known options. -=item Unknown warnings category '%s' - -(F) An error issued by the C pragma. You specified a warnings -category that is unknown to perl at this point. - -Note that if you want to enable a warnings category registered by a module -(e.g. C), you must have imported this module - =item Unknown verb pattern '%s' in regex; marked by <-- HERE in m/%s/ (F) You either made a typo or have incorrectly put a C<*> quantifier after an open brace in your pattern. Check the pattern and review L for details on legal verb patterns. -first. +=item Unknown warnings category '%s' + +(F) An error issued by the C pragma. You specified a warnings +category that is unknown to perl at this point. + +Note that if you want to enable a warnings category registered by a +module (e.g. C), you must have loaded this +module first. =item unmatched [ in regex; marked by <-- HERE in m/%s/ @@ -4897,16 +4937,6 @@ character to get your parentheses to balance. See L. compressed integer format and could not be converted to an integer. See L. -=item Unterminated verb pattern in regex; marked by <-- HERE in m/%s/ - -(F) You used a pattern of the form C<(*VERB)> but did not terminate -the pattern with a C<)>. Fix the pattern and retry. - -=item Unterminated verb pattern argument in regex; marked by <-- HERE in m/%s/ - -(F) You used a pattern of the form C<(*VERB:ARG)> but did not terminate -the pattern with a C<)>. Fix the pattern and retry. - =item Unterminated \g{...} pattern in regex; marked by <-- HERE in m/%s/ (F) You missed a close brace on a \g{..} pattern (group reference) in @@ -4919,6 +4949,16 @@ 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". +=item Unterminated verb pattern argument in regex; marked by <-- HERE in m/%s/ + +(F) You used a pattern of the form C<(*VERB:ARG)> but did not terminate +the pattern with a C<)>. Fix the pattern and retry. + +=item Unterminated verb pattern in regex; marked by <-- HERE in m/%s/ + +(F) You used a pattern of the form C<(*VERB)> but did not terminate +the pattern with a C<)>. Fix the pattern and retry. + =item untie attempted while %d inner references still exist (W untie) A copy of the object returned from C (or C) was @@ -5086,15 +5126,6 @@ error, so C<:=> can be reclaimed as a new operator in the future. If you need an empty attribute list, for example in a code generator, add a space before the C<=>. -=item Use of ?PATTERN? without explicit operator is deprecated - -(D deprecated) You have written something like C, for a regular -expression that matches only once. Starting this term directly with -the question mark delimiter is now deprecated, so that the question mark -will be available for use in new operators in the future. Write C -instead, explicitly using the C operator: the question mark delimiter -still invokes match-once behaviour. - =item Use of freed value in iteration (F) Perhaps you modified the iterated array within the loop? @@ -5126,11 +5157,11 @@ scope is deprecated and should be avoided. =item Use of inherited AUTOLOAD for non-method %s() is deprecated -(D deprecated) As an (ahem) accidental feature, C subroutines -are looked up as methods (using the C<@ISA> hierarchy) even when the -subroutines to be autoloaded were called as plain functions (e.g. -C), not as methods (e.g. C<< Foo->bar() >> or C<< -$obj->bar() >>). +(D deprecated) As an (ahem) accidental feature, C +subroutines are looked up as methods (using the C<@ISA> hierarchy) +even when the subroutines to be autoloaded were called as plain +functions (e.g. C), not as methods (e.g. C<< Foo->bar() >> or +C<< $obj->bar() >>). This bug will be rectified in future by using method lookup only for methods' Cs. However, there is a significant base of existing @@ -5159,6 +5190,12 @@ only C. This usually means there's a better way to do it in Perl. generally because there's a better way to do it, and also because the old way has bad side effects. +=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. Use a filename instead. + =item Use of %s on a handle without * is deprecated (D deprecated) You used C, C or C on a scalar but that @@ -5171,18 +5208,14 @@ there is currently no way to tie the scalar itself when it holds a typeglob, and no way to untie a scalar that has had a typeglob assigned to it. -=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. Use a filename instead. - -=item Use of "package" with no arguments is deprecated +=item Use of ?PATTERN? without explicit operator is deprecated -(D deprecated) You used the C 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 -instead. +(D deprecated) You have written something like C, for a regular +expression that matches only once. Starting this term directly with +the question mark delimiter is now deprecated, so that the question mark +will be available for use in new operators in the future. Write C +instead, explicitly using the C operator: the question mark delimiter +still invokes match-once behaviour. =item Use of qw(...) as parentheses is deprecated @@ -5203,7 +5236,7 @@ to be huge numbers, and so usually indicates programmer error. If you really do mean it, explicitly numify your reference, like so: C<$array[0+$ref]>. This warning is not given for overloaded objects, -either, because you can overload the numification and stringification +however, because you can overload the numification and stringification operators and then you presumably know what you are doing. =item Use of reserved word "%s" is deprecated @@ -5251,39 +5284,38 @@ C<< @foo->[23] >> or C<< @$ref->[99] >>. Versions of perl <= 5.6.1 used to allow this syntax, but shouldn't have. It is now deprecated, and will be removed in a future version. -=item Using !~ with %s doesn't make sense - -(F) Using the C operator with C, C or C is -currently reserved for future use, as the exact behaviour has not -been decided. (Simply returning the boolean opposite of the -modified string is usually not particularly useful.) - =item Using just the first character returned by \N{} in character class (W) A charnames handler may return a sequence of more than one character. Currently all but the first one are discarded when used in a regular expression pattern bracketed character class. -=item Using just the first characters returned by \N{} +=item Using !~ with %s doesn't make sense -(W) A charnames handler may return a sequence of characters. There is a finite -limit as to the number of characters that can be used, which this sequence -exceeded. In the message, the characters in the sequence are separated by -dots, and each is shown by its ordinal in hex. Anything to the left of the -C was retained; anything to the right was discarded. +(F) Using the C operator with C, C or C is +currently reserved for future use, as the exact behaviour has not +been decided. (Simply returning the boolean opposite of the +modified string is usually not particularly useful.) -=item Unicode surrogate U+%X is illegal in UTF-8 +=item User-defined case-mapping '%s' is deprecated + +(W deprecated) You defined a function, such as C that overrides +the standard case mapping, such as C gives. This feature is being +deprecated due to its many issues, as documented in +L. +It is planned to remove this feature in Perl 5.16. A CPAN module +providing improved functionality is being prepared. =item UTF-16 surrogate U+%X -(W utf8) You had a UTF-16 surrogate in a context where they are +(W utf8, surrogate) You had a UTF-16 surrogate in a context where they are not considered acceptable. These code points, between U+D800 and U+DFFF (inclusive), are used by Unicode only for UTF-16. However, Perl internally allows all unsigned integer code points (up to the size limit available on your platform), including surrogates. But these can cause problems when being input or output, which is likely where this message came from. If you really really know what you are doing you can turn -off this warning by C. +off this warning by C. =item Value of %s can be "0"; test with defined() @@ -5346,11 +5378,11 @@ known at compile time. See L. =item "%s" variable %s masks earlier declaration in same %s -(W misc) A "my", "our" or "state" variable has been redeclared in the current -scope or statement, 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. +(W misc) A "my", "our" or "state" variable has been redeclared in the +current scope or statement, 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. =item Variable syntax @@ -5440,7 +5472,7 @@ filehandle with an encoding, see L and L. (F) The count in the (un)pack template may be replaced by C<[TEMPLATE]> only if C