Re: [PATCH] remove leaveit from toke.c:scan_const
[p5sagit/p5-mst-13.2.git] / pod / perldiag.pod
index e1f6795..d5e44c7 100644 (file)
@@ -361,6 +361,12 @@ by setting environment variable C<PERL_BADFREE> to 1.
 (P) An internal request asked to add an array entry to something that
 wasn't a symbol table entry.
 
+=item Bad symbol for dirhandle
+
+(P) An internal request asked to add a dirhandle entry to something
+that wasn't a symbol table entry.
+
+
 =item Bad symbol for filehandle
 
 (P) An internal request asked to add a filehandle entry to something
@@ -480,6 +486,13 @@ See L<perlfunc/pack>.
 (F) An argument to pack("w",...) was negative.  The BER compressed integer
 format can only be used with positive integers.  See L<perlfunc/pack>.
 
+=item Cannot convert a reference to %s to typeglob
+
+(F) You manipulated Perl's symbol table directly, stored a reference in it,
+then tried to access that symbol via conventional Perl syntax. The access
+triggers Perl to autovivify that typeglob, but it there is no legal conversion
+from that type of reference to a typeglob.
+
 =item Can only compress unsigned integers in pack
 
 (F) An argument to pack("w",...) was not an integer.  The BER compressed
@@ -491,6 +504,15 @@ to compress something else.  See L<perlfunc/pack>.
 (F) Only hard references may be blessed.  This is how Perl "enforces"
 encapsulation of objects.  See L<perlobj>.
 
+=item Can't "break" in a loop topicalizer
+
+(F) You called C<break>, but you're in a C<foreach> block rather than
+a C<given> block. You probably meant to use C<next> or C<last>.
+
+=item Can't "break" outside a given block
+
+(F) You called C<break>, but you're not inside a C<given> block.
+
 =item Can't call method "%s" in empty package "%s"
 
 (F) You called a method correctly, and it correctly indicated a package
@@ -566,6 +588,11 @@ but then $foo no longer contains a glob.
 (F) Certain types of SVs, in particular real symbol table entries
 (typeglobs), can't be forced to stop being what they are.
 
+=item Can't "continue" outside a when block
+
+(F) You called C<continue>, but you're not inside a C<when>
+or C<default> block.
+
 =item Can't create pipe mailbox
 
 (P) An error peculiar to VMS.  The process is suffering from exhausted
@@ -1049,19 +1076,13 @@ redefined subroutine while the old routine is running.  Go figure.
 (F) You tried to unshift an "unreal" array that can't be unshifted, such
 as the main Perl stack.
 
-=item Can't upgrade that kind of scalar
+=item Can't upgrade %s (%d) to %d
 
 (P) The internal sv_upgrade routine adds "members" to an SV, making it
 into a more specialized kind of SV.  The top several SV types are so
 specialized, however, that they cannot be interconverted.  This message
 indicates that such a conversion was attempted.
 
-=item Can't upgrade to undef
-
-(P) The undefined SV is the bottom of the totem pole, in the scheme of
-upgradability.  Upgrading to undef indicates an error in the code
-calling sv_upgrade.
-
 =item Can't use anonymous symbol table for method lookup
 
 (F) The internal routine that does method lookup was handed a symbol
@@ -1144,6 +1165,13 @@ expression pattern.  Trying to do this in ordinary Perl code produces a
 value that prints out looking like SCALAR(0xdecaf).  Use the $1 form
 instead.
 
+=item Can't use "when" outside a topicalizer
+
+(F) You have used a when() block that is neither inside a C<foreach>
+loop nor a C<given> block. (Note that this error is issued on exit
+from the C<when> block, so you won't get the error if the match fails,
+or if you use an explicit C<continue>.)
+
 =item Can't weaken a nonreference
 
 (F) You attempted to weaken something that was not a reference.  Only
@@ -1237,6 +1265,11 @@ uses the character values modulus 256 instead, as if you had provided:
 
 (W unopened) You tried to close a filehandle that was never opened.
 
+=item closedir() attempted on invalid dirhandle %s
+
+(W io) The dirhandle you tried to close is either closed or not really
+a dirhandle.  Check your control flow.
+
 =item Code missing after '/'
 
 (F) You had a (sub-)template that ends with a '/'. There must be another
@@ -1301,6 +1334,14 @@ specified in the C<\N{...}> escape.  Perhaps you forgot to load the
 corresponding C<overload> or C<charnames> pragma?  See L<charnames> and
 L<overload>.
 
+=item Constant(%s)%s: %s in regex; marked by <-- HERE in m/%s/
+
+(F) The parser found inconsistencies while attempting to find 
+the character name specified in the C<\N{...}> escape.  Perhaps you 
+forgot to load the corresponding C<charnames> pragma?  
+See L<charnames>.
+
+
 =item Constant is not %s reference
 
 (F) A constant value (perhaps declared using the C<use constant> pragma)
@@ -1389,13 +1430,18 @@ conditional. Some people have exploited this bug to achieve a kind of
 static variable. Since we intend to fix this bug, we don't want people
 relying on this behavior. You can achieve a similar static effect by
 declaring the variable in a separate block outside the function, eg
-    
+
     sub f { my $x if 0; return $x++ }
 
 becomes
 
     { my $x; sub f { return $x++ } }
 
+Beginning with perl 5.9.4, you can also use C<state> variables to
+have lexicals that are initialized only once (see L<feature>):
+
+    sub f { state $x; return $x++ }
+
 =item DESTROY created new reference to dead object '%s'
 
 (F) A DESTROY() method created a new reference to the object which is
@@ -1473,6 +1519,10 @@ subroutine or package before the current location.  You can use an empty
 (W misc) You used the obsolescent C<dump()> built-in function, without fully
 qualifying it as C<CORE::dump()>.  Maybe it's a typo.  See L<perlfunc/dump>.
 
+=item dump is not supported
+
+(F) Your machine doesn't support dump/undump.
+
 =item Duplicate free() ignored
 
 (S malloc) An internal routine called free() on something that had
@@ -1799,6 +1849,13 @@ about 250 characters for simple names, and somewhat more for compound
 names (like C<$A::B>).  You've exceeded Perl's limits.  Future versions
 of Perl are likely to eliminate these arbitrary limitations.
 
+=item Ignoring %s in character class in regex; marked by <-- HERE in m/%s/
+
+(W) Named unicode character escapes (\N{...}) may return multi-char
+or zero length sequences. When such an escape is used in a character class
+its behaviour is not well defined. Check that the correct escape has 
+been used, and the correct charname handler is in scope.
+
 =item Illegal binary digit %s
 
 (F) You used a digit other than 0 or 1 in a binary number.
@@ -1939,6 +1996,12 @@ transparently promotes all numbers to a floating point representation
 internally--subject to loss of precision errors in subsequent
 operations.
 
+=item Integer overflow in format string for %s
+
+(F) The indexes and widths specified in the format string of C<printf()>
+or C<sprintf()> are too large.  The numbers must not overflow the size of
+integers for your architecture.
+
 =item Integer overflow in version
 
 (F) Some portion of a version initialization is too large for the
@@ -2701,10 +2764,13 @@ which is odd, because hashes come in key/value pairs.
 
 =item Offset outside string
 
-(F) You tried to do a read/write/send/recv operation with an offset
-pointing outside the buffer.  This is difficult to imagine.  The sole
-exception to this is that C<sysread()>ing past the buffer will extend
-the buffer and zero pad the new area.
+(F, W layer) You tried to do a read/write/send/recv/seek operation
+with an offset pointing outside the buffer.  This is difficult to
+imagine.  The sole exceptions to this are that zero padding will
+take place when going past the end of the string when either
+C<sysread()>ing a file, or when seeking past the end of a scalar opened
+for I/O (in anticipation of future reads and to imitate the behaviour
+with real files).
 
 =item %s() on unopened %s
 
@@ -2878,6 +2944,11 @@ data.
 (P) The internal do_trans routines were called with invalid operational
 data.
 
+=item panic: fold_constants JMPENV_PUSH returned %d
+
+(P) While attempting folding constants an exception other than an C<eval>
+failure was caught.
+
 =item panic: frexp
 
 (P) The library function frexp() failed, making printf("%f") impossible.
@@ -2887,6 +2958,13 @@ data.
 (P) We popped the context stack to a context with the specified label,
 and then discovered it wasn't a context we know how to do a goto in.
 
+=item panic: hfreeentries failed to free hash
+
+(P) The internal routine used to clear a hashes 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.
@@ -2927,10 +3005,6 @@ references to an object.
 
 (P) Something tried to allocate more memory than possible.
 
-=item panic: null array
-
-(P) One of the internal array routines was passed a null AV pointer.
-
 =item panic: pad_alloc
 
 (P) The compiler got confused about which scratch pad it was allocating
@@ -3310,6 +3384,11 @@ are outside the range which can be represented by integers internally.
 One possible workaround is to force Perl to use magical string increment
 by prepending "0" to your numbers.
 
+=item readdir() attempted on invalid dirhandle %s
+
+(W io) The dirhandle you're reading from is either closed or not really 
+a dirhandle.  Check your control flow.
+
 =item readline() on closed filehandle %s
 
 (W closed) The filehandle you're reading from got itself closed sometime
@@ -3402,6 +3481,11 @@ terminates. You might use ^# instead.  See L<perlform>.
 (W syntax) You wrote your assignment operator backwards.  The = must
 always comes last, to avoid ambiguity with subsequent unary operators.
 
+=item rewinddir() attempted on invalid dirhandle %s
+
+(W io) The dirhandle you tried to do a rewinddir() on is either closed or not
+really a dirhandle.  Check your control flow.
+
 =item Runaway format
 
 (F) Your format contained the ~~ repeat-until-blank sequence, but it
@@ -3478,6 +3562,11 @@ the conditional expression, i.e. C<(foo) ? 0 : 1>.
 (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 select not implemented
 
 (F) This machine doesn't implement the select() system call.
@@ -3674,6 +3763,16 @@ L<perlfunc/splice>.
 iterate more times than there are characters of input, which is what
 happened.) See L<perlfunc/split>.
 
+=item State variable %s will be reinitialized
+
+(W misc) You're declaring a C<state> variable inside a list. The list
+assignment will be treated by perl as a regular assignment, which means
+that the C<state> variable will be reinitialized each time the statement
+is run. The solution to have it initialized only once is to write the
+assignment on its own line, as in:
+
+    state $var = 42;
+
 =item Statement unlikely to be reached
 
 (W exec) You did an exec() with some statement after it other than a
@@ -3707,7 +3806,7 @@ C<can> may break this.
 (P) The substitution was looping infinitely.  (Obviously, a substitution
 shouldn't iterate more times than there are characters of input, which
 is what happened.)  See the discussion of substitution in
-L<perlop/"Quote and Quote-like Operators">.
+L<perlop/"Regexp Quote-Like Operators">.
 
 =item Substitution pattern not terminated
 
@@ -3835,6 +3934,11 @@ for Perl to reach.  Perl is doing you a favor by refusing.
 (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 That use of $[ is unsupported
 
 (F) Assignment to C<$[> is now strictly circumscribed, and interpreted
@@ -3872,8 +3976,7 @@ instead.
 
 =item The 'unique' attribute may only be applied to 'our' variables
 
-(F) Currently this attribute is not supported on C<my> or C<sub>
-declarations.  See L<perlfunc/our>.
+(F) This attribute was never supported on C<my> or C<sub> declarations.
 
 =item This Perl can't reset CRTL environ elements (%s)
 
@@ -4170,23 +4273,24 @@ subroutine.
 in your Perl script (or eval).  Perhaps you tried to run a compressed
 script, a binary program, or a directory as a Perl program.
 
-=item /%s/: Unrecognized escape \\%c in character class passed through
+=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
 understood literally.
+The <-- HERE shows in the regular expression about where the
+escape was discovered.
 
 =item Unrecognized escape \\%c passed through
 
 (W misc) You used a backslash-character combination which is not
-recognized by Perl.
+recognized by Perl.  The character was understood literally.
 
 =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. This combination appears in an interpolated variable or
-a C<'>-delimited regular expression. The character was understood
-literally. The <-- HERE shows in the regular expression about where the
+recognized by Perl.  The character was understood literally.
+The <-- HERE shows in the regular expression about where the
 escape was discovered.
 
 =item Unrecognized signal name "%s"
@@ -4643,6 +4747,11 @@ are automatically rebound to the current values of such variables.
 its equivalent C<BEGIN> block found an internal inconsistency with
 the version number.
 
+=item Version string '%s' contains invalid data; ignoring: '%s'
+
+(W misc) The version string contains invalid characters at the end, which
+are being ignored.
+
 =item v-string in use/require is non-portable
 
 (W portable) The use of v-strings is non-portable to older, pre-5.6, Perls.