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