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