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