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