you thought. Normally it's pretty easy to disambiguate it by supplying
a missing quote, operator, parenthesis pair or declaration.
+=item Ambiguous use of %c resolved as operator %c
+
+(W ambiguous) C<%>, C<&>, and C<*> are both infix operators (modulus,
+bitwise and, and multpication), and you said something like C<*foo *
+foo> that might be interpreted as either of them. We assumed you
+meant the infix operator, but please try to make it more clear -- in
+the example given, you might write C<*foo * foo()> if you really meant
+to multiply a glob by the result of calling a function.
+
+=item Ambiguous use of %c{%s} resolved to %c%s
+
+(W ambiguous) You wrote something like C<@{foo}>, which might be
+asking for the variable C<@foo>, or it might be calling a function
+named foo, and dereferencing it as an array reference. If you wanted
+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
+
+(W ambiguous) You wrote something like C<${foo[2]}>, which might be
+looking for element number 2 of the array named C<@foo>, in which case
+please write C<$foo[2]>, or you might have meant to pass an anonymous
+arrayref to the function named foo, then do a scalar deref on the
+value it returns. If you meant that, write C<${foo([2])}>.
+
+=item Ambiguous use of -%s resolved as -&%s()
+
+(W ambiguous) You wrote something like C<-foo>, which might be the
+string C<"-foo"> (outside of C<use strict 'subs'>), or a call to the
+function C<foo>, negated. If you meant the string, just write
+C<"-foo">, and please use strict. If you meant the function call,
+write C<-foo()>.
+
=item '|' and '<' may not both be specified on command line
(F) An error peculiar to VMS. Perl does its own command line
with an assignment operator, which implies modifying the value itself.
Perhaps you need to copy the value to a temporary, and repeat that.
-=item Character following "\\c" must be ASCII
+=item Character following "\c" must be ASCII
(F) In C<\cI<X>>, I<X> must be an ASCII character.
you have also specified an explicit size for the string. See
L<perlfunc/pack>.
-=item \\c%c" more clearly written simply as "%c
+=item "\c%c" more clearly written simply as "%s"
(D deprecated) The C<\cI<X>> construct is intended to be a way to specify
non-printable characters. You used it for a printable one, which is better
-written as simply itself.
+written as simply itself, perhaps preceded by a backslash for non-word
+characters. This message may not remain as Deprecated beyond 5.13.
=item Deep recursion on subroutine "%s"
long for Perl to handle. You have to be seriously twisted to write code
that triggers this error.
-=item Deprecated character in \\N{...}; marked by <-- HERE in \\N{%s<-- HERE %s
+=item Deprecated character in \N{...}; marked by <-- HERE in \N{%s<-- HERE %s
(D deprecated) Just about anything is legal for the C<...> in C<\N{...}>.
But starting in 5.12, non-reasonable ones that don't look like names are
See Server error.
-=item Dot after %s literal is concatenation
-
-(D) You had something like 0x123.456 in your code. This is currently
-parsed as the hexadecimal number 0x123 concatenated with the decimal
-number 456, not 0x123 + 0x456/0x1000 -- we only support decimal
-decimal points. If you meant it to be a fraction, you'll need to use
-Math::BigFloat's from_hex (or friends). If you meant it to be
-concatenation, just put spaces around the dot to make it clearer. In
-5.14.0, we expect to change this to mean a hex fraction. (Of course,
-everything above applies to octal and binary constants, too.)
-
=item %s does not define %s::VERSION--version check failed
(F) You said something like "use Module 42" but the Module did not
"-", "\-". The <-- HERE shows in the regular expression about where the
problem was discovered. See L<perlre>.
-=item Fatal VMS error at %s, line %d
+=item Fatal VMS error (status=%d) at %s, line %d
(P) An error peculiar to VMS. Something untoward happened in a VMS
system service or RTL routine; Perl's exit status should provide more
(F) The parser has given up trying to parse the program after 10 errors.
Further error messages would likely be uninformative.
+=item Having no space between pattern and following word is deprecated
+
+(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:
+
+ $a =~ m/$foo/sand $bar
+ $a =~ m/$foo/s and $bar
+
+both currently mean the same thing, but it is planned to disallow the first form
+in Perl 5.16. And,
+
+ $a =~ m/$foo/and $bar
+
+will be disallowed too.
+
=item Hexadecimal number > 0xffffffff non-portable
(W portable) The hexadecimal number you specified is larger than 2**32-1
If the previous attribute had a parenthesised parameter list, perhaps that
list was terminated too soon.
+=item Invalid strict version format (%s)
+
+(F) A version number did not meet the "strict" criteria for versions.
+A "strict" version number is a positive decimal number (integer or
+decimal-fraction) without exponentiation or else a dotted-decimal
+v-string with a leading 'v' character and at least three components.
+The parenthesized text indicates which criteria were not met.
+See the L<version> module for more details on allowed version formats.
+
=item Invalid type '%s' in %s
(F) The given character is not a valid pack or unpack type.
(W) The given character is not a valid pack or unpack type but used to be
silently ignored.
-=item Invalid version format (multiple underscores)
+=item Invalid version format (%s)
-(F) Versions may contain at most a single underscore, which signals
-that the version is a beta release. See L<version> for the allowed
-version formats.
+(F) A version number did not meet the "lax" criteria for versions.
+A "lax" version number is a positive decimal number (integer or
+decimal-fraction) without exponentiation or else a dotted-decimal
+v-string. If the v-string has less than three components, it must have a
+leading 'v' character. Otherwise, the leading 'v' is optional. Both
+decimal and dotted-decimal versions may have a trailing "alpha"
+component separated by an underscore character after a fractional or
+dotted-decimal component. The parenthesized text indicates which
+criteria were not met. See the L<version> module for more details on
+allowed version formats.
-=item Invalid version format (underscores before decimal)
+=item Invalid version object
-(F) Versions may not contain decimals after the optional underscore.
-See L<version> for the allowed version formats.
+(F) The internal structure of the version object was invalid. Perhaps
+the internals were modified directly in some way or an arbitrary reference
+was blessed into the "version" class.
=item ioctl is not implemented
This modifier does not change the requirement that the brace immediately follow
the C<\N>.
+=item Missing braces on \o{}
+
+(F) A C<\o> must be followed immediately by a C<{> in double-quotish context.
+
=item Missing comma after first argument to %s function
(F) While certain functions allow you to specify a filehandle or an
(F) Missing right brace in C<\x{...}>, C<\p{...}>, C<\P{...}>, or C<\N{...}>.
-=item Missing right brace on \\N{} or unescaped left brace after \\N
+=item Missing right brace on \N{} or unescaped left brace after \N
(F)
C<\N> has two meanings.
sense to try to declare one with a package qualifier on the front. Use
local() if you want to localize a package variable.
-=item \\N in a character class must be a named character: \\N{...}
+=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.
-=item \\N{NAME} must be resolved by the lexer
+=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,
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+...}
+=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
(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
F<SYS$TIMEZONE_DIFFERENTIAL> to translate to the number of seconds which
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.
+
=item Non-string passed as bitmask
(W misc) A number has been passed as a bitmask argument to select().
the meantime, try using scientific notation (e.g. "1e6" instead of
"1_000_000").
+=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.
+
=item Octal number in vector unsupported
(F) Numbers with a leading C<0> are not currently allowed in vectors.
(P) The lexer got into a bad state while processing a case modifier.
+=item Parsing code internal error (%s)
+
+(F) Parsing code supplied by an extension violated the parser's API in
+a detectable way.
+
=item Pattern subroutine nesting without pos change exceeded limit in regex; marked by <-- HERE in m/%s/
(F) You used a pattern that uses too many nested subpattern calls without
conversion functions. This is only a problem when you're using the
'<' or '>' modifiers in (un)pack templates. See L<perlfunc/pack>.
-=item Perl_pmflag() is deprecated, and will be removed from the XS API
-
-(D deprecated) XS code called the C function C<Perl_pmflag>. This was part of
-Perl's listed public API for extending or embedding the perl interpreter. It has
-now been removed from the public API, and will be removed in a future release,
-hence XS code should be re-written not to use it.
-
=item Perl %s required--this is only version %s, stopped
(F) The module in question uses features of a version of Perl more
(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 value 7 inserted into the regular expression,
-prepend a zero to make the number at least two digits: C<\07>
+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.
(F) You used a regular expression extension that doesn't make sense. The
<-- HERE shows in the regular expression about where the problem was
-discovered. See L<perlre>.
+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. For other causes, see
+L<perlre>.
-=item Sequence \\%s... not terminated in regex; marked by <-- HERE in m/%s/
+=item Sequence \%s... not terminated in regex; marked by <-- HERE in m/%s/
(F) The regular expression expects a mandatory argument following the escape
sequence and this has been omitted or incorrectly written.
in your Perl script (or eval) near the specified column. Perhaps you tried
to run a compressed script, a binary program, or a directory as a Perl program.
-=item Unrecognized escape \\%c in character class passed through in regex; marked by <-- HERE in m/%s/
+=item Unrecognized escape \%c in character class passed through in regex; marked by <-- HERE in m/%s/
(W regexp) You used a backslash-character combination which is not
recognized by Perl inside character classes. The character was
The <-- HERE shows in the regular expression about where the
escape was discovered.
-=item Unrecognized escape \\%c passed through
+=item Unrecognized escape \%c passed through
(W misc) You used a backslash-character combination which is not
recognized by Perl. The character was understood literally, but this may
change in a future version of Perl.
-=item Unrecognized escape \\%c passed through in regex; marked by <-- HERE in m/%s/
+=item Unrecognized escape \%c passed through in regex; marked by <-- HERE in m/%s/
(W regexp) You used a backslash-character combination which is not
recognized by Perl. The character was understood literally, but this may
you should remove AutoLoader from @ISA and change C<use AutoLoader;> to
C<use AutoLoader 'AUTOLOAD';>.
-=item Use of octal value above 377 is deprecated
-
-(D deprecated, W regexp) There is a constant in the regular expression whose
-value is interpeted by Perl as octal and larger than 377 (255 decimal, 0xFF
-hex). Perl may take this to mean different things depending on the rest of
-the regular expression. If you meant such an octal value, convert it to
-hexadecimal and use C<\xHH> or C<\x{HH}> instead. If you meant to have
-part of it mean a backreference, use C<\g> for that. See L<perlre>.
-
=item Use of %s in printf format not supported
(F) You attempted to use a feature of printf that is accessible from
otherwise reasonable constructs to fail in baffling ways. C<use strict;>
instead.
+=item Use of qw(...) as parentheses is deprecated
+
+(D deprecated) You have something like C<foreach $x qw(a b c) {...}>,
+using a C<qw(...)> list literal where a parenthesised expression is
+expected. Historically the parser fooled itself into thinking that
+C<qw(...)> literals were always enclosed in parentheses, and as a result
+you could sometimes omit parentheses around them. (You could never do
+the C<foreach qw(a b c) {...}> that you might have expected, though.)
+The parser no longer lies to itself in this way. Wrap the list literal
+in parentheses, like C<foreach $x (qw(a b c)) {...}>.
+
=item Use of reference "%s" as array index
(W misc) You tried to use a reference as an array index; this probably