This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
porting/diag.t: Handle some E<> pod escapes
[perl5.git] / t / porting / diag.t
1 #!/usr/bin/perl
2
3 BEGIN {
4   @INC = '..' if -f '../TestInit.pm';
5 }
6 use TestInit qw(T); # T is chdir to the top level
7
8 use warnings;
9 use strict;
10 use Config;
11
12 require 't/test.pl';
13
14 if ( $Config{usecrosscompile} ) {
15   skip_all( "Not all files are available during cross-compilation" );
16 }
17
18 plan('no_plan');
19
20 # --make-exceptions-list outputs the list of strings that don't have
21 # perldiag.pod entries to STDERR without TAP formatting, so they can
22 # easily be put in the __DATA__ section of this file.  This was done
23 # initially so as to not create new test failures upon the initial
24 # creation of this test file.  You probably shouldn't do it again.
25 # Just add the documentation instead.
26 my $make_exceptions_list = ($ARGV[0]||'') eq '--make-exceptions-list'
27   and shift;
28
29 require 'regen/embed_lib.pl';
30
31 # Look for functions that look like they could be diagnostic ones.
32 my @functions;
33 foreach (@{(setup_embed())[0]}) {
34   next if @$_ < 2;
35   next unless $_->[2]  =~ /warn|(?<!ov)err|(\b|_)die|croak/i;
36   # The flag p means that this function may have a 'Perl_' prefix
37   # The flag s means that this function may have a 'S_' prefix
38   push @functions, $_->[2];
39   push @functions, 'Perl_' . $_->[2] if $_->[0] =~ /p/;
40   push @functions, 'S_' . $_->[2] if $_->[0] =~ /s/;
41 };
42 push @functions, 'Perl_mess';
43
44 my $regcomp_fail_re = '\b(?:(?:Simple_)?v)?FAIL[2-4]?(?:utf8f)?\b';
45 my $regcomp_re =
46    "(?<routine>ckWARN(?:\\d+)?reg\\w*|vWARN\\d+|$regcomp_fail_re)";
47 my $function_re = join '|', @functions;
48 my $source_msg_re =
49    "(?<routine>\\bDIE\\b|$function_re)";
50 my $text_re = '"(?<text>(?:\\\\"|[^"]|"\s*[A-Z_]+\s*")*)"';
51 my $source_msg_call_re = qr/$source_msg_re(?:_nocontext)? \s*
52     \((?:aTHX_)? \s*
53     (?:packWARN\d*\((?<category>.*?)\),)? \s*
54     $text_re /x;
55 my $bad_version_re = qr{BADVERSION\([^"]*$text_re};
56    $regcomp_fail_re = qr/$regcomp_fail_re\([^"]*$text_re/;
57 my $regcomp_call_re = qr/$regcomp_re.*?$text_re/;
58
59 my %entries;
60
61 # Get the ignores that are compiled into this file
62 my $reading_categorical_exceptions;
63 while (<DATA>) {
64   chomp;
65   $entries{$_}{todo} = 1;
66   $reading_categorical_exceptions and $entries{$_}{cattodo}=1;
67   /__CATEGORIES__/ and ++$reading_categorical_exceptions;
68 }
69
70 my $pod = "pod/perldiag.pod";
71 my $cur_entry;
72 open my $diagfh, "<", $pod
73   or die "Can't open $pod: $!";
74
75 my $category_re = qr/ [a-z0-9_:]+?/;    # Note: requires an initial space
76 my $severity_re = qr/ . (?: \| . )* /x; # A severity is a single char, but can
77                                         # be of the form 'S|P|W'
78 my @same_descr;
79 while (<$diagfh>) {
80   if (m/^=item (.*)/) {
81     $cur_entry = $1;
82
83     # Allow multi-line headers
84     while (<$diagfh>) {
85       if (/^\s*$/) {
86         last;
87       }
88
89       $cur_entry =~ s/ ?\z/ $_/;
90     }
91
92     $cur_entry =~ s/\n/ /gs; # Fix multi-line headers if they have \n's
93     $cur_entry =~ s/\s+\z//;
94     $cur_entry =~ s/E<lt>/</g;
95     $cur_entry =~ s/E<gt>/>/g;
96     $cur_entry =~ s,E<sol>,/,g;
97     $cur_entry =~ s/[BCIFS](?:<<< (.*?) >>>|<< (.*?) >>|<(.*?)>)/$+/g;
98
99     if (exists $entries{$cur_entry} &&  $entries{$cur_entry}{todo}
100                                     && !$entries{$cur_entry}{cattodo}) {
101         TODO: {
102             local $::TODO = "Remove the TODO entry \"$cur_entry\" from DATA as it is already in $pod near line $.";
103             ok($cur_entry);
104         }
105     }
106     # Make sure to init this here, so an actual entry in perldiag
107     # overwrites one in DATA.
108     $entries{$cur_entry}{todo} = 0;
109     $entries{$cur_entry}{line_number} = $.;
110   }
111
112   next if ! defined $cur_entry;
113
114   if (! $entries{$cur_entry}{severity}) {
115     if (/^ \( ( $severity_re )
116
117         # Can have multiple categories separated by commas
118         ( $category_re (?: , $category_re)* )? \) /x)
119     {
120       $entries{$cur_entry}{severity} = $1;
121       $entries{$cur_entry}{category} =
122         $2 && join ", ", sort split " ", $2 =~ y/,//dr;
123
124       # Record it also for other messages sharing the same description
125       @$_{qw<severity category>} =
126         @{$entries{$cur_entry}}{qw<severity category>}
127        for @same_descr;
128     }
129     elsif (! $entries{$cur_entry}{first_line} && $_ =~ /\S/) {
130
131       # Keep track of first line of text if doesn't contain a severity, so
132       # that can later examine it to determine if that is ok or not
133       $entries{$cur_entry}{first_line} = $_;
134     }
135     if (/\S/) {
136       @same_descr = ();
137     }
138     else {
139       push @same_descr, $entries{$cur_entry};
140     }
141   }
142 }
143
144 foreach my $cur_entry ( keys %entries) {
145     next if $entries{$cur_entry}{todo}; # If in this file, won't have a severity
146     if (! exists $entries{$cur_entry}{severity}
147
148             # If there is no first line, it was two =items in a row, so the
149             # second one is the one with with text, not this one.
150         && exists $entries{$cur_entry}{first_line}
151
152             # If the first line refers to another message, no need for severity
153         && $entries{$cur_entry}{first_line} !~ /^See/)
154     {
155         fail($cur_entry);
156         diag(
157             "   $pod entry at line $entries{$cur_entry}{line_number}\n"
158           . "       \"$cur_entry\"\n"
159           . "   is missing a severity and/or category"
160         );
161     }
162 }
163
164 # List from perlguts.pod "Formatted Printing of IVs, UVs, and NVs"
165 # Convert from internal formats to ones that the readers will be familiar
166 # with, while removing any format modifiers, such as precision, the
167 # presence of which would just confuse the pod's explanation
168 my %specialformats = (IVdf => 'd',
169                       UVuf => 'd',
170                       UVof => 'o',
171                       UVxf => 'x',
172                       UVXf => 'X',
173                       NVef => 'f',
174                       NVff => 'f',
175                       NVgf => 'f',
176                       HEKf256=>'s',
177                       HEKf => 's',
178                       UTF8f=> 's',
179                       SVf256=>'s',
180                       SVf32=> 's',
181                       SVf  => 's',
182                       PNf  => 's');
183 my $format_modifiers = qr/ [#0\ +-]*              # optional flags
184                           (?: [1-9][0-9]* | \* )? # optional field width
185                           (?: \. \d* )?           # optional precision
186                           (?: h|l )?              # optional length modifier
187                         /x;
188
189 my $specialformats =
190  join '|', sort { length $b cmp length $a } keys %specialformats;
191 my $specialformats_re = qr/%$format_modifiers"\s*($specialformats)(\s*")?/;
192
193 if (@ARGV) {
194   check_file($_) for @ARGV;
195   exit;
196 }
197 open my $fh, '<', 'MANIFEST' or die "Can't open MANIFEST: $!";
198 while (my $file = <$fh>) {
199     chomp $file;
200     $file =~ s/\s+.*//;
201     next unless $file =~ /\.(?:c|cpp|h|xs|y)\z/ or $file =~ /^perly\./;
202     # OS/2 extensions have never been migrated to ext/, hence the special case:
203     next if $file =~ m!\A(?:ext|dist|cpan|lib|t|os2/OS2)/!
204             && $file !~ m!\Aext/DynaLoader/!;
205     check_file($file);
206 }
207 close $fh or die $!;
208
209 # Standardize messages with variants into the form that appears
210 # in perldiag.pod -- useful for things without a diag_listed_as annotation
211 sub standardize {
212   my ($name) = @_;
213
214   if    ( $name =~ m/^(Invalid strict version format) \([^\)]*\)/ ) {
215     $name = "$1 (\%s)";
216   }
217   elsif ( $name =~ m/^(Invalid version format) \([^\)]*\)/ ) {
218     $name = "$1 (\%s)";
219   }
220   elsif ($name =~ m/^panic: /) {
221     $name = "panic: \%s";
222   }
223
224   return $name;
225 }
226
227 sub check_file {
228   my ($codefn) = @_;
229
230   print "# Checking $codefn\n";
231
232   open my $codefh, "<", $codefn
233     or die "Can't open $codefn: $!";
234
235   my $listed_as;
236   my $listed_as_line;
237   my $sub = 'top of file';
238   while (<$codefh>) {
239     chomp;
240     # Getting too much here isn't a problem; we only use this to skip
241     # errors inside of XS modules, which should get documented in the
242     # docs for the module.
243     if (m<^[^#\s]> and $_ !~ m/^[{}]*$/) {
244       $sub = $_;
245     }
246     next if $sub =~ m/^XS/;
247     if (m</\*\s*diag_listed_as: (.*?)\s*\*/>) {
248       $listed_as = $1;
249       $listed_as_line = $.+1;
250     }
251     elsif (m</\*\s*diag_listed_as: (.*?)\s*\z>) {
252       $listed_as = $1;
253       my $finished;
254       while (<$codefh>) {
255         if (m<\*/>) {
256           $listed_as .= $` =~ s/^\s*/ /r =~ s/\s+\z//r;
257           $listed_as_line = $.+1;
258           $finished = 1;
259           last;
260         }
261         else {
262           $listed_as .= s/^\s*/ /r =~ s/\s+\z//r;
263         }
264       }
265       if (!$finished) { $listed_as = undef }
266     }
267     next if /^#/;
268
269     my $multiline = 0;
270     # Loop to accumulate the message text all on one line.
271     if (m/(?!^)\b(?:$source_msg_re(?:_nocontext)?|$regcomp_re)\s*\(/) {
272       while (not m/\);\s*$/) {
273         my $nextline = <$codefh>;
274         # Means we fell off the end of the file.  Not terribly surprising;
275         # this code tries to merge a lot of things that aren't regular C
276         # code (preprocessor stuff, long comments).  That's OK; we don't
277         # need those anyway.
278         last if not defined $nextline;
279         chomp $nextline;
280         $nextline =~ s/^\s+//;
281         $_ =~ s/\\$//;
282         # Note that we only want to do this where *both* are true.
283         if ($_ =~ m/"\s*$/ and $nextline =~ m/^"/) {
284           $_ =~ s/"\s*$//;
285           $nextline =~ s/^"//;
286         }
287         $_ .= $nextline;
288         ++$multiline;
289       }
290     }
291     # This should happen *after* unwrapping, or we don't reformat the things
292     # in later lines.
293
294     s/$specialformats_re/"%$specialformats{$1}" .  (defined $2 ? '' : '"')/ge;
295
296     # Remove any remaining format modifiers, but not in %%
297     s/ (?<!%) % $format_modifiers ( [dioxXucsfeEgGp] ) /%$1/xg;
298
299     # The %"foo" thing needs to happen *before* this regex.
300     # diag($_);
301     # DIE is just return Perl_die
302     my ($name, $category, $routine);
303     if (/\b$source_msg_call_re/) {
304       ($name, $category, $routine) = ($+{'text'}, $+{'category'}, $+{'routine'});
305       # Sometimes the regexp will pick up too much for the category
306       # e.g., WARN_UNINITIALIZED), PL_warn_uninit_sv ... up to the next )
307       $category && $category =~ s/\).*//s;
308       if (/win32_croak_not_implemented\(/) {
309         $name .= " not implemented!"
310       }
311     }
312     elsif (/$bad_version_re/) {
313       ($name, $category) = ($+{'text'}, undef);
314     }
315     elsif (/$regcomp_fail_re/) {
316       #  FAIL("foo") -> "foo in regex m/%s/"
317       # vFAIL("foo") -> "foo in regex; marked by <-- HERE in m/%s/"
318       ($name, $category) = ($+{'text'}, undef);
319       $name .=
320         " in regex" . ("; marked by <-- HERE in" x /vFAIL/) . " m/%s/";
321     }
322     elsif (/$regcomp_call_re/) {
323       # vWARN/ckWARNreg("foo") -> "foo in regex; marked by <-- HERE in m/%s/
324       ($name, $category, $routine) = ($+{'text'}, undef, $+{'routine'});
325       $name .= " in regex; marked by <-- HERE in m/%s/";
326       $category = 'WARN_REGEXP';
327       if ($routine =~ /dep/) {
328         $category .= ',WARN_DEPRECATED';
329       }
330     }
331     else {
332       next;
333     }
334
335     # Try to guess what the severity should be.  In the case of
336     # Perl_ck_warner and other _ck_ functions, we can tell whether it is
337     # a severe/default warning or no by the _d suffix.  In the case of
338     # other warn functions we cannot tell, because Perl_warner may be pre-
339     # ceded by if(ckWARN) or if(ckWARN_d).
340     my $severity = !$routine                   ? '[PFX]'
341                  :  $routine =~ /warn.*_d\z/   ? '[DS]'
342                  :  $routine =~ /ck_warn/      ?  'W'
343                  :  $routine =~ /warner/       ? '[WDS]'
344                  :  $routine =~ /warn/         ?  'S'
345                  :  $routine =~ /ckWARN.*dep/  ?  'D'
346                  :  $routine =~ /ckWARN\d*reg_d/? 'S'
347                  :  $routine =~ /ckWARN\d*reg/ ?  'W'
348                  :  $routine =~ /vWARN\d/      ? '[WDS]'
349                  :                             '[PFX]';
350     my $categories;
351     if (defined $category) {
352       $category =~ s/__/::/g;
353       $categories =
354         join ", ",
355               sort map {s/^WARN_//; lc $_} split /\s*[|,]\s*/, $category;
356     }
357     if ($listed_as and $listed_as_line == $. - $multiline) {
358       $name = $listed_as;
359     } else {
360       # The form listed in perldiag ignores most sorts of fancy printf
361       # formatting, or makes it more perlish.
362       $name =~ s/%%/%/g;
363       $name =~ s/%l[ud]/%d/g;
364       $name =~ s/%\.(\d+|\*)s/\%s/g;
365       $name =~ s/(?:%s){2,}/%s/g;
366       $name =~ s/(\\")|("\s*[A-Z_]+\s*")/$1 ? '"' : '%s'/egg;
367       $name =~ s/\\t/\t/g;
368       $name =~ s/\\n/\n/g;
369       $name =~ s/\s+$//;
370       $name =~ s/(\\)\\/$1/g;
371     }
372
373     # Extra explanatory info on an already-listed error, doesn't
374     # need it's own listing.
375     next if $name =~ m/^\t/;
376
377     # Happens fairly often with PL_no_modify.
378     next if $name eq '%s';
379
380     # Special syntax for magic comment, allows ignoring the fact
381     # that it isn't listed.  Only use in very special circumstances,
382     # like this script failing to notice that the Perl_croak call is
383     # inside an #if 0 block.
384     next if $name eq 'SKIPME';
385
386     next if $name=~/\[TESTING\]/; # ignore these as they are works in progress
387
388     check_message(standardize($name),$codefn,$severity,$categories);
389   }
390 }
391
392 sub check_message {
393     my($name,$codefn,$severity,$categories,$partial) = @_;
394     my $key = $name =~ y/\n/ /r;
395     my $ret;
396
397     # Try to reduce printf() formats to simplest forms
398     # Really this should be matching %s, etc like diagnostics.pm does
399
400     # Kill flags
401     $key =~ s/%[#0\-+]/%/g;
402
403     # Kill width
404     $key =~ s/\%(\d+|\*)/%/g;
405
406     # Kill precision
407     $key =~ s/\%\.(\d+|\*)/%/g;
408
409     if (exists $entries{$key} and
410           # todo + cattodo means it is not found and it is not in the
411           # regular todo list, either
412           !$entries{$key}{todo} || !$entries{$key}{cattodo}) {
413       $ret = 1;
414       if ( $entries{$key}{seen}++ ) {
415         # no need to repeat entries we've tested
416       } elsif ($entries{$key}{todo}) {
417         TODO: {
418           no warnings 'once';
419           local $::TODO = 'in DATA';
420           # There is no listing, but it is in the list of exceptions.  TODO FAIL.
421           fail($key);
422           diag(
423             "    Message '$name'\n    from $codefn line $. is not listed in $pod\n".
424             "    (but it wasn't documented in 5.10 either, so marking it TODO)."
425           );
426         }
427       } else {
428         # We found an actual valid entry in perldiag.pod for this error.
429         pass($key);
430
431         return $ret
432           if $entries{$key}{cattodo};
433
434         # Now check the category and severity
435
436         # Cache our severity qr thingies
437         use feature 'state';
438         state %qrs;
439         my $qr = $qrs{$severity} ||= qr/$severity/;
440
441         like($entries{$key}{severity}, $qr,
442           $severity =~ /\[/
443             ? "severity is one of $severity for $key"
444             : "severity is $severity for $key");
445
446         is($entries{$key}{category}, $categories,
447            ($categories ? "categories are [$categories]" : "no category")
448              . " for $key");
449       }
450     } elsif ($partial) {
451       # noop
452     } else {
453       my $ok;
454       if ($name =~ /\n/) {
455         $ok = 1;
456         check_message($_,$codefn,$severity,$categories,1) or $ok = 0, last
457           for split /\n/, $name;
458       }
459       if ($ok) {
460         # noop
461       } elsif ($make_exceptions_list) {
462         # We're making an updated version of the exception list, to
463         # stick in the __DATA__ section.  I honestly can't think of
464         # a situation where this is the right thing to do, but I'm
465         # leaving it here, just in case one of my descendents thinks
466         # it's a good idea.
467         print STDERR "$key\n";
468       } else {
469         # No listing found, and no excuse either.
470         # Find the correct place in perldiag.pod, and add a stanza beginning =item $name.
471         fail($name);
472         diag("    Message '$name'\n    from $codefn line $. is not listed in $pod");
473       }
474       # seen it, so only fail once for this message
475       $entries{$name}{seen}++;
476     }
477
478     die if $name =~ /%$/;
479     return $ret;
480 }
481
482 # Lists all missing things as of the inauguration of this script, so we
483 # don't have to go from "meh" to perfect all at once.
484
485 # PLEASE DO NOT ADD TO THIS LIST.  Instead, write an entry in
486 # pod/perldiag.pod for your new (warning|error).  Nevertheless,
487 # listing exceptions here when this script is not smart enough
488 # to recognize the messages is not so bad, as long as there are
489 # entries in perldiag.
490
491 # Entries after __CATEGORIES__ are those that are in perldiag but fail the
492 # severity/category test.
493
494 # Also FIXME this test, as the first entry in TODO *is* covered by the
495 # description: Malformed UTF-8 character (%s)
496 __DATA__
497 Malformed UTF-8 character (unexpected non-continuation byte 0x%x, immediately after start byte 0x%x)
498
499 Cannot apply "%s" in non-PerlIO perl
500 Cannot set timer
501 Can't find DLL name for the module `%s' by the handle %d, rc=%u=%x
502 Can't find string terminator %c%s%c anywhere before EOF
503 Can't fix broken locale name "%s"
504 Can't get short module name from a handle
505 Can't load DLL `%s', possible problematic module `%s'
506 Can't locate %s:   %s
507 Can't pipe "%s": %s
508 Can't set type on DOS
509 Can't spawn: %s
510 Can't spawn "%s": %s
511 Can't %s script `%s' with ARGV[0] being `%s'
512 Can't %s "%s": %s
513 Can't %s `%s' with ARGV[0] being `%s' (looking for executables only, not found)
514 Can't use string ("%s"%s) as a subroutine ref while "strict refs" in use
515 Character(s) in '%c' format wrapped in %s
516 chown not implemented!
517 clear %s
518 Code missing after '/' in pack
519 Code missing after '/' in unpack
520 Could not find version 1.1 of winsock dll
521 Could not find version 2.0 of winsock dll
522 '%c' outside of string in pack
523 Debug leaking scalars child failed%s with errno %d: %s
524 detach of a thread which could not start
525 detach on an already detached thread
526 detach on a thread with a waiter
527 '/' does not take a repeat count in %s
528 -Dp not implemented on this platform
529 Empty array reference given to mod2fname
530 endhostent not implemented!
531 endnetent not implemented!
532 endprotoent not implemented!
533 endservent not implemented!
534 Error loading module '%s': %s
535 Error reading "%s": %s
536 execl not implemented!
537 EVAL without pos change exceeded limit in regex
538 Filehandle opened only for %sput
539 Filehandle %s opened only for %sput
540 Filehandle STD%s reopened as %s only for input
541 file_type not implemented on DOS
542 filter_del can only delete in reverse order (currently)
543 fork() not available
544 fork() not implemented!
545 YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET! FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!
546 free %s
547 Free to wrong pool %p not %p
548 Function "endnetent" not implemented in this version of perl.
549 Function "endprotoent" not implemented in this version of perl.
550 Function "endservent" not implemented in this version of perl.
551 Function "getnetbyaddr" not implemented in this version of perl.
552 Function "getnetbyname" not implemented in this version of perl.
553 Function "getnetent" not implemented in this version of perl.
554 Function "getprotobyname" not implemented in this version of perl.
555 Function "getprotobynumber" not implemented in this version of perl.
556 Function "getprotoent" not implemented in this version of perl.
557 Function "getservbyport" not implemented in this version of perl.
558 Function "getservent" not implemented in this version of perl.
559 Function "getsockopt" not implemented in this version of perl.
560 Function "recvmsg" not implemented in this version of perl.
561 Function "sendmsg" not implemented in this version of perl.
562 Function "sethostent" not implemented in this version of perl.
563 Function "setnetent" not implemented in this version of perl.
564 Function "setprotoent" not implemented in this version of perl.
565 Function "setservent"  not implemented in this version of perl.
566 Function "setsockopt" not implemented in this version of perl.
567 Function "tcdrain" not implemented in this version of perl.
568 Function "tcflow" not implemented in this version of perl.
569 Function "tcflush" not implemented in this version of perl.
570 Function "tcsendbreak" not implemented in this version of perl.
571 get %s %p %p %p
572 gethostent not implemented!
573 getnetbyaddr not implemented!
574 getnetbyname not implemented!
575 getnetent not implemented!
576 getprotoent not implemented!
577 getpwnam returned invalid UIC %o for user "%s"
578 getservent not implemented!
579 glob failed (can't start child: %s)
580 glob failed (child exited with status %d%s)
581 Got an error from DosAllocMem: %i
582 Goto undefined subroutine
583 Goto undefined subroutine &%s
584 Got signal %d
585 ()-group starts with a count in %s
586 Illegal binary digit '%c' ignored
587 Illegal character %sin prototype for %s : %s
588 Illegal hexadecimal digit '%c' ignored
589 Illegal octal digit '%c' ignored
590 INSTALL_PREFIX too long: `%s'
591 Invalid argument to sv_cat_decode
592 Invalid range "%c-%c" in transliteration operator
593 Invalid separator character %c%c%c in PerlIO layer specification %s
594 Invalid TOKEN object ignored
595 Invalid type '%c' in pack
596 Invalid type '%c' in %s
597 Invalid type '%c' in unpack
598 Invalid type ',' in %s
599 ioctl implemented only on sockets
600 ioctlsocket not implemented!
601 join with a thread with a waiter
602 killpg not implemented!
603 List form of pipe open not implemented
604 Looks like we have no PM; will not load DLL %s without $ENV{PERL_ASIF_PM}
605 Malformed integer in [] in %s
606 Malformed %s
607 Malformed UTF-8 character (fatal)
608 Missing (suid) fd script name
609 More than one argument to open
610 More than one argument to open(,':%s')
611 No message queue
612 No %s allowed while running setgid
613 No %s allowed with (suid) fdscript
614 Not an XSUB reference
615 Not a reference given to mod2fname
616 Not array reference given to mod2fname
617 Operator or semicolon missing before %c%s
618 Out of memory during list extend
619 panic queryaddr
620 Parse error
621 PerlApp::TextQuery: no arguments, please
622 POSIX syntax [%c %c] is reserved for future extensions in regex; marked by <-- HERE in m/%s/
623 ptr wrong %p != %p fl=%x nl=%p e=%p for %d
624 QUITing...
625 Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)
626 recursion detected in %s
627 Regexp *+ operand could be empty in regex; marked by <-- HERE in m/%s/
628 Reversed %c= operator
629 %s: Can't parse EXE/DLL name: '%s'
630 %s(%f) failed
631 %sCompilation failed in require
632 %s: Error stripping dirs from EXE/DLL/INSTALLDIR name
633 sethostent not implemented!
634 setnetent not implemented!
635 setprotoent not implemented!
636 set %s %p %p %p
637 setservent not implemented!
638 %s free() ignored (RMAGIC, PERL_CORE)
639 %s has too many errors.
640 SIG%s handler "%s" not defined.
641 %s in %s
642 Size magic not implemented
643 %s: name `%s' too long
644 %s not implemented!
645 %s number > %s non-portable
646 %srealloc() %signored
647 %s in regex m/%s/
648 %s on %s %s
649 socketpair not implemented!
650 %s: %s
651 Starting Full Screen process with flag=%d, mytype=%d
652 Starting PM process with flag=%d, mytype=%d
653 sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%f U_V is 0x%x, IV_MAX is 0x%x
654 switching effective gid is not implemented
655 switching effective uid is not implemented
656 System V IPC is not implemented on this machine
657 Terminating on signal SIG%s(%d)
658 The crypt() function is not implemented on NetWare
659 The flock() function is not implemented on NetWare
660 The rewinddir() function is not implemented on NetWare
661 The seekdir() function is not implemented on NetWare
662 The telldir() function is not implemented on NetWare
663 This perl was compiled without taint support. Cowardly refusing to run with -t or -T flags
664 This version of OS/2 does not support %s.%s
665 Too deeply nested ()-groups in %s
666 Too many args on %s line of "%s"
667 U0 mode on a byte string
668 unable to find VMSPIPE.COM for i/o piping
669 Unable to locate winsock library!
670 Unexpected program mode %d when morphing back from PM
671 Unrecognized character %s; marked by <-- HERE after %s<-- HERE near column %d
672 Unstable directory path, current directory changed unexpectedly
673 Unterminated compressed integer in unpack
674 Usage: %s(%s)
675 Usage: %s::%s(%s)
676 Usage: CODE(0x%x)(%s)
677 Usage: File::Copy::rmscopy(from,to[,date_flag])
678 Usage: VMS::Filespec::candelete(spec)
679 Usage: VMS::Filespec::fileify(spec)
680 Usage: VMS::Filespec::pathify(spec)
681 Usage: VMS::Filespec::rmsexpand(spec[,defspec])
682 Usage: VMS::Filespec::unixify(spec)
683 Usage: VMS::Filespec::unixpath(spec)
684 Usage: VMS::Filespec::unixrealpath(spec)
685 Usage: VMS::Filespec::vmsify(spec)
686 Usage: VMS::Filespec::vmspath(spec)
687 Usage: VMS::Filespec::vmsrealpath(spec)
688 Use of inherited AUTOLOAD for non-method %s::%s() is deprecated
689 utf8 "\x%X" does not map to Unicode
690 Value of logical "%s" too long. Truncating to %i bytes
691 waitpid: process %x is not a child of process %x
692 Wide character
693 Wide character in $/
694 win32_get_osfhandle() TBD on this platform
695 win32_open_osfhandle() TBD on this platform
696 Within []-length '*' not allowed in %s
697 Within []-length '%c' not allowed in %s
698 Wrong size of loadOrdinals array: expected %d, actual %d
699 Wrong syntax (suid) fd script name "%s"
700 'X' outside of string in %s
701 'X' outside of string in unpack
702
703 __CATEGORIES__
704
705 # This is a warning, but is currently followed immediately by a croak (toke.c)
706 Illegal character \%o (carriage return)
707
708 # Because uses WARN_MISSING as a synonym for WARN_UNINITIALIZED (sv.c)
709 Missing argument in %s
710
711 # This message can be both fatal and non-
712 False [] range "%s" in regex; marked by <-- HERE in m/%s/