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