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