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