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