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