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