1package Fatal; 2 3use 5.008; # 5.8.x needed for autodie 4use Carp; 5use strict; 6use warnings; 7use Tie::RefHash; # To cache subroutine refs 8 9use constant PERL510 => ( $] >= 5.010 ); 10 11use constant LEXICAL_TAG => q{:lexical}; 12use constant VOID_TAG => q{:void}; 13use constant INSIST_TAG => q{!}; 14 15use constant ERROR_NOARGS => 'Cannot use lexical %s with no arguments'; 16use constant ERROR_VOID_LEX => VOID_TAG.' cannot be used with lexical scope'; 17use constant ERROR_LEX_FIRST => LEXICAL_TAG.' must be used as first argument'; 18use constant ERROR_NO_LEX => "no %s can only start with ".LEXICAL_TAG; 19use constant ERROR_BADNAME => "Bad subroutine name for %s: %s"; 20use constant ERROR_NOTSUB => "%s is not a Perl subroutine"; 21use constant ERROR_NOT_BUILT => "%s is neither a builtin, nor a Perl subroutine"; 22use constant ERROR_NOHINTS => "No user hints defined for %s"; 23 24use constant ERROR_CANT_OVERRIDE => "Cannot make the non-overridable builtin %s fatal"; 25 26use constant ERROR_NO_IPC_SYS_SIMPLE => "IPC::System::Simple required for Fatalised/autodying system()"; 27 28use constant ERROR_IPC_SYS_SIMPLE_OLD => "IPC::System::Simple version %f required for Fatalised/autodying system(). We only have version %f"; 29 30use constant ERROR_AUTODIE_CONFLICT => q{"no autodie '%s'" is not allowed while "use Fatal '%s'" is in effect}; 31 32use constant ERROR_FATAL_CONFLICT => q{"use Fatal '%s'" is not allowed while "no autodie '%s'" is in effect}; 33 34use constant ERROR_58_HINTS => q{Non-subroutine %s hints for %s are not supported under Perl 5.8.x}; 35 36# Older versions of IPC::System::Simple don't support all the 37# features we need. 38 39use constant MIN_IPC_SYS_SIMPLE_VER => 0.12; 40 41# All the Fatal/autodie modules share the same version number. 42our $VERSION = '2.06_01'; 43 44our $Debug ||= 0; 45 46# EWOULDBLOCK values for systems that don't supply their own. 47# Even though this is defined with our, that's to help our 48# test code. Please don't rely upon this variable existing in 49# the future. 50 51our %_EWOULDBLOCK = ( 52 MSWin32 => 33, 53); 54 55# We have some tags that can be passed in for use with import. 56# These are all assumed to be CORE:: 57 58my %TAGS = ( 59 ':io' => [qw(:dbm :file :filesys :ipc :socket 60 read seek sysread syswrite sysseek )], 61 ':dbm' => [qw(dbmopen dbmclose)], 62 ':file' => [qw(open close flock sysopen fcntl fileno binmode 63 ioctl truncate)], 64 ':filesys' => [qw(opendir closedir chdir link unlink rename mkdir 65 symlink rmdir readlink umask)], 66 ':ipc' => [qw(:msg :semaphore :shm pipe)], 67 ':msg' => [qw(msgctl msgget msgrcv msgsnd)], 68 ':threads' => [qw(fork)], 69 ':semaphore'=>[qw(semctl semget semop)], 70 ':shm' => [qw(shmctl shmget shmread)], 71 ':system' => [qw(system exec)], 72 73 # Can we use qw(getpeername getsockname)? What do they do on failure? 74 # TODO - Can socket return false? 75 ':socket' => [qw(accept bind connect getsockopt listen recv send 76 setsockopt shutdown socketpair)], 77 78 # Our defaults don't include system(), because it depends upon 79 # an optional module, and it breaks the exotic form. 80 # 81 # This *may* change in the future. I'd love IPC::System::Simple 82 # to be a dependency rather than a recommendation, and hence for 83 # system() to be autodying by default. 84 85 ':default' => [qw(:io :threads)], 86 87 # Version specific tags. These allow someone to specify 88 # use autodie qw(:1.994) and know exactly what they'll get. 89 90 ':1.994' => [qw(:default)], 91 ':1.995' => [qw(:default)], 92 ':1.996' => [qw(:default)], 93 ':1.997' => [qw(:default)], 94 ':1.998' => [qw(:default)], 95 ':1.999' => [qw(:default)], 96 ':1.999_01' => [qw(:default)], 97 ':2.00' => [qw(:default)], 98 ':2.01' => [qw(:default)], 99 ':2.02' => [qw(:default)], 100 ':2.03' => [qw(:default)], 101 ':2.04' => [qw(:default)], 102 ':2.05' => [qw(:default)], 103 ':2.06' => [qw(:default)], 104 ':2.06_01' => [qw(:default)], 105); 106 107$TAGS{':all'} = [ keys %TAGS ]; 108 109# This hash contains subroutines for which we should 110# subroutine() // die() rather than subroutine() || die() 111 112my %Use_defined_or; 113 114# CORE::open returns undef on failure. It can legitimately return 115# 0 on success, eg: open(my $fh, '-|') || exec(...); 116 117@Use_defined_or{qw( 118 CORE::fork 119 CORE::recv 120 CORE::send 121 CORE::open 122 CORE::fileno 123 CORE::read 124 CORE::readlink 125 CORE::sysread 126 CORE::syswrite 127 CORE::sysseek 128 CORE::umask 129)} = (); 130 131# Cached_fatalised_sub caches the various versions of our 132# fatalised subs as they're produced. This means we don't 133# have to build our own replacement of CORE::open and friends 134# for every single package that wants to use them. 135 136my %Cached_fatalised_sub = (); 137 138# Every time we're called with package scope, we record the subroutine 139# (including package or CORE::) in %Package_Fatal. This allows us 140# to detect illegal combinations of autodie and Fatal, and makes sure 141# we don't accidently make a Fatal function autodying (which isn't 142# very useful). 143 144my %Package_Fatal = (); 145 146# The first time we're called with a user-sub, we cache it here. 147# In the case of a "no autodie ..." we put back the cached copy. 148 149my %Original_user_sub = (); 150 151# Is_fatalised_sub simply records a big map of fatalised subroutine 152# refs. It means we can avoid repeating work, or fatalising something 153# we've already processed. 154 155my %Is_fatalised_sub = (); 156tie %Is_fatalised_sub, 'Tie::RefHash'; 157 158# We use our package in a few hash-keys. Having it in a scalar is 159# convenient. The "guard $PACKAGE" string is used as a key when 160# setting up lexical guards. 161 162my $PACKAGE = __PACKAGE__; 163my $PACKAGE_GUARD = "guard $PACKAGE"; 164my $NO_PACKAGE = "no $PACKAGE"; # Used to detect 'no autodie' 165 166# Here's where all the magic happens when someone write 'use Fatal' 167# or 'use autodie'. 168 169sub import { 170 my $class = shift(@_); 171 my $void = 0; 172 my $lexical = 0; 173 my $insist_hints = 0; 174 175 my ($pkg, $filename) = caller(); 176 177 @_ or return; # 'use Fatal' is a no-op. 178 179 # If we see the :lexical flag, then _all_ arguments are 180 # changed lexically 181 182 if ($_[0] eq LEXICAL_TAG) { 183 $lexical = 1; 184 shift @_; 185 186 # If we see no arguments and :lexical, we assume they 187 # wanted ':default'. 188 189 if (@_ == 0) { 190 push(@_, ':default'); 191 } 192 193 # Don't allow :lexical with :void, it's needlessly confusing. 194 if ( grep { $_ eq VOID_TAG } @_ ) { 195 croak(ERROR_VOID_LEX); 196 } 197 } 198 199 if ( grep { $_ eq LEXICAL_TAG } @_ ) { 200 # If we see the lexical tag as the non-first argument, complain. 201 croak(ERROR_LEX_FIRST); 202 } 203 204 my @fatalise_these = @_; 205 206 # Thiese subs will get unloaded at the end of lexical scope. 207 my %unload_later; 208 209 # This hash helps us track if we've alredy done work. 210 my %done_this; 211 212 # NB: we're using while/shift rather than foreach, since 213 # we'll be modifying the array as we walk through it. 214 215 while (my $func = shift @fatalise_these) { 216 217 if ($func eq VOID_TAG) { 218 219 # When we see :void, set the void flag. 220 $void = 1; 221 222 } elsif ($func eq INSIST_TAG) { 223 224 $insist_hints = 1; 225 226 } elsif (exists $TAGS{$func}) { 227 228 # When it's a tag, expand it. 229 push(@fatalise_these, @{ $TAGS{$func} }); 230 231 } else { 232 233 # Otherwise, fatalise it. 234 235 # Check to see if there's an insist flag at the front. 236 # If so, remove it, and insist we have hints for this sub. 237 my $insist_this; 238 239 if ($func =~ s/^!//) { 240 $insist_this = 1; 241 } 242 243 # TODO: Even if we've already fatalised, we should 244 # check we've done it with hints (if $insist_hints). 245 246 # If we've already made something fatal this call, 247 # then don't do it twice. 248 249 next if $done_this{$func}; 250 251 # We're going to make a subroutine fatalistic. 252 # However if we're being invoked with 'use Fatal qw(x)' 253 # and we've already been called with 'no autodie qw(x)' 254 # in the same scope, we consider this to be an error. 255 # Mixing Fatal and autodie effects was considered to be 256 # needlessly confusing on p5p. 257 258 my $sub = $func; 259 $sub = "${pkg}::$sub" unless $sub =~ /::/; 260 261 # If we're being called as Fatal, and we've previously 262 # had a 'no X' in scope for the subroutine, then complain 263 # bitterly. 264 265 if (! $lexical and $^H{$NO_PACKAGE}{$sub}) { 266 croak(sprintf(ERROR_FATAL_CONFLICT, $func, $func)); 267 } 268 269 # We're not being used in a confusing way, so make 270 # the sub fatal. Note that _make_fatal returns the 271 # old (original) version of the sub, or undef for 272 # built-ins. 273 274 my $sub_ref = $class->_make_fatal( 275 $func, $pkg, $void, $lexical, $filename, 276 ( $insist_this || $insist_hints ) 277 ); 278 279 $done_this{$func}++; 280 281 $Original_user_sub{$sub} ||= $sub_ref; 282 283 # If we're making lexical changes, we need to arrange 284 # for them to be cleaned at the end of our scope, so 285 # record them here. 286 287 $unload_later{$func} = $sub_ref if $lexical; 288 } 289 } 290 291 if ($lexical) { 292 293 # Dark magic to have autodie work under 5.8 294 # Copied from namespace::clean, that copied it from 295 # autobox, that found it on an ancient scroll written 296 # in blood. 297 298 # This magic bit causes %^H to be lexically scoped. 299 300 $^H |= 0x020000; 301 302 # Our package guard gets invoked when we leave our lexical 303 # scope. 304 305 push(@ { $^H{$PACKAGE_GUARD} }, autodie::Scope::Guard->new(sub { 306 $class->_install_subs($pkg, \%unload_later); 307 })); 308 309 } 310 311 return; 312 313} 314 315# The code here is originally lifted from namespace::clean, 316# by Robert "phaylon" Sedlacek. 317# 318# It's been redesigned after feedback from ikegami on perlmonks. 319# See http://perlmonks.org/?node_id=693338 . Ikegami rocks. 320# 321# Given a package, and hash of (subname => subref) pairs, 322# we install the given subroutines into the package. If 323# a subref is undef, the subroutine is removed. Otherwise 324# it replaces any existing subs which were already there. 325 326sub _install_subs { 327 my ($class, $pkg, $subs_to_reinstate) = @_; 328 329 my $pkg_sym = "${pkg}::"; 330 331 while(my ($sub_name, $sub_ref) = each %$subs_to_reinstate) { 332 333 my $full_path = $pkg_sym.$sub_name; 334 335 # Copy symbols across to temp area. 336 337 no strict 'refs'; ## no critic 338 339 local *__tmp = *{ $full_path }; 340 341 # Nuke the old glob. 342 { no strict; delete $pkg_sym->{$sub_name}; } ## no critic 343 344 # Copy innocent bystanders back. Note that we lose 345 # formats; it seems that Perl versions up to 5.10.0 346 # have a bug which causes copying formats to end up in 347 # the scalar slot. Thanks to Ben Morrow for spotting this. 348 349 foreach my $slot (qw( SCALAR ARRAY HASH IO ) ) { 350 next unless defined *__tmp{ $slot }; 351 *{ $full_path } = *__tmp{ $slot }; 352 } 353 354 # Put back the old sub (if there was one). 355 356 if ($sub_ref) { 357 358 no strict; ## no critic 359 *{ $pkg_sym . $sub_name } = $sub_ref; 360 } 361 } 362 363 return; 364} 365 366sub unimport { 367 my $class = shift; 368 369 # Calling "no Fatal" must start with ":lexical" 370 if ($_[0] ne LEXICAL_TAG) { 371 croak(sprintf(ERROR_NO_LEX,$class)); 372 } 373 374 shift @_; # Remove :lexical 375 376 my $pkg = (caller)[0]; 377 378 # If we've been called with arguments, then the developer 379 # has explicitly stated 'no autodie qw(blah)', 380 # in which case, we disable Fatalistic behaviour for 'blah'. 381 382 my @unimport_these = @_ ? @_ : ':all'; 383 384 while (my $symbol = shift @unimport_these) { 385 386 if ($symbol =~ /^:/) { 387 388 # Looks like a tag! Expand it! 389 push(@unimport_these, @{ $TAGS{$symbol} }); 390 391 next; 392 } 393 394 my $sub = $symbol; 395 $sub = "${pkg}::$sub" unless $sub =~ /::/; 396 397 # If 'blah' was already enabled with Fatal (which has package 398 # scope) then, this is considered an error. 399 400 if (exists $Package_Fatal{$sub}) { 401 croak(sprintf(ERROR_AUTODIE_CONFLICT,$symbol,$symbol)); 402 } 403 404 # Record 'no autodie qw($sub)' as being in effect. 405 # This is to catch conflicting semantics elsewhere 406 # (eg, mixing Fatal with no autodie) 407 408 $^H{$NO_PACKAGE}{$sub} = 1; 409 410 if (my $original_sub = $Original_user_sub{$sub}) { 411 # Hey, we've got an original one of these, put it back. 412 $class->_install_subs($pkg, { $symbol => $original_sub }); 413 next; 414 } 415 416 # We don't have an original copy of the sub, on the assumption 417 # it's core (or doesn't exist), we'll just nuke it. 418 419 $class->_install_subs($pkg,{ $symbol => undef }); 420 421 } 422 423 return; 424 425} 426 427# TODO - This is rather terribly inefficient right now. 428 429# NB: Perl::Critic's dump-autodie-tag-contents depends upon this 430# continuing to work. 431 432{ 433 my %tag_cache; 434 435 sub _expand_tag { 436 my ($class, $tag) = @_; 437 438 if (my $cached = $tag_cache{$tag}) { 439 return $cached; 440 } 441 442 if (not exists $TAGS{$tag}) { 443 croak "Invalid exception class $tag"; 444 } 445 446 my @to_process = @{$TAGS{$tag}}; 447 448 my @taglist = (); 449 450 while (my $item = shift @to_process) { 451 if ($item =~ /^:/) { 452 push(@to_process, @{$TAGS{$item}} ); 453 } else { 454 push(@taglist, "CORE::$item"); 455 } 456 } 457 458 $tag_cache{$tag} = \@taglist; 459 460 return \@taglist; 461 462 } 463 464} 465 466# This code is from the original Fatal. It scares me. 467# It is 100% compatible with the 5.10.0 Fatal module, right down 468# to the scary 'XXXX' comment. ;) 469 470sub fill_protos { 471 my $proto = shift; 472 my ($n, $isref, @out, @out1, $seen_semi) = -1; 473 while ($proto =~ /\S/) { 474 $n++; 475 push(@out1,[$n,@out]) if $seen_semi; 476 push(@out, $1 . "{\$_[$n]}"), next if $proto =~ s/^\s*\\([\@%\$\&])//; 477 push(@out, "\$_[$n]"), next if $proto =~ s/^\s*([_*\$&])//; 478 push(@out, "\@_[$n..\$#_]"), last if $proto =~ s/^\s*(;\s*)?\@//; 479 $seen_semi = 1, $n--, next if $proto =~ s/^\s*;//; # XXXX ???? 480 die "Internal error: Unknown prototype letters: \"$proto\""; 481 } 482 push(@out1,[$n+1,@out]); 483 return @out1; 484} 485 486# This is a backwards compatible version of _write_invocation. It's 487# recommended you don't use it. 488 489sub write_invocation { 490 my ($core, $call, $name, $void, @args) = @_; 491 492 return Fatal->_write_invocation( 493 $core, $call, $name, $void, 494 0, # Lexical flag 495 undef, # Sub, unused in legacy mode 496 undef, # Subref, unused in legacy mode. 497 @args 498 ); 499} 500 501# This version of _write_invocation is used internally. It's not 502# recommended you call it from external code, as the interface WILL 503# change in the future. 504 505sub _write_invocation { 506 507 my ($class, $core, $call, $name, $void, $lexical, $sub, $sref, @argvs) = @_; 508 509 if (@argvs == 1) { # No optional arguments 510 511 my @argv = @{$argvs[0]}; 512 shift @argv; 513 514 return $class->_one_invocation($core,$call,$name,$void,$sub,! $lexical, $sref, @argv); 515 516 } else { 517 my $else = "\t"; 518 my (@out, @argv, $n); 519 while (@argvs) { 520 @argv = @{shift @argvs}; 521 $n = shift @argv; 522 523 push @out, "${else}if (\@_ == $n) {\n"; 524 $else = "\t} els"; 525 526 push @out, $class->_one_invocation($core,$call,$name,$void,$sub,! $lexical, $sref, @argv); 527 } 528 push @out, qq[ 529 } 530 die "Internal error: $name(\@_): Do not expect to get ", scalar(\@_), " arguments"; 531 ]; 532 533 return join '', @out; 534 } 535} 536 537 538# This is a slim interface to ensure backward compatibility with 539# anyone doing very foolish things with old versions of Fatal. 540 541sub one_invocation { 542 my ($core, $call, $name, $void, @argv) = @_; 543 544 return Fatal->_one_invocation( 545 $core, $call, $name, $void, 546 undef, # Sub. Unused in back-compat mode. 547 1, # Back-compat flag 548 undef, # Subref, unused in back-compat mode. 549 @argv 550 ); 551 552} 553 554# This is the internal interface that generates code. 555# NOTE: This interface WILL change in the future. Please do not 556# call this subroutine directly. 557 558# TODO: Whatever's calling this code has already looked up hints. Pass 559# them in, rather than look them up a second time. 560 561sub _one_invocation { 562 my ($class, $core, $call, $name, $void, $sub, $back_compat, $sref, @argv) = @_; 563 564 565 # If someone is calling us directly (a child class perhaps?) then 566 # they could try to mix void without enabling backwards 567 # compatibility. We just don't support this at all, so we gripe 568 # about it rather than doing something unwise. 569 570 if ($void and not $back_compat) { 571 Carp::confess("Internal error: :void mode not supported with $class"); 572 } 573 574 # @argv only contains the results of the in-built prototype 575 # function, and is therefore safe to interpolate in the 576 # code generators below. 577 578 # TODO - The following clobbers context, but that's what the 579 # old Fatal did. Do we care? 580 581 if ($back_compat) { 582 583 # Use Fatal qw(system) will never be supported. It generated 584 # a compile-time error with legacy Fatal, and there's no reason 585 # to support it when autodie does a better job. 586 587 if ($call eq 'CORE::system') { 588 return q{ 589 croak("UNIMPLEMENTED: use Fatal qw(system) not supported."); 590 }; 591 } 592 593 local $" = ', '; 594 595 if ($void) { 596 return qq/return (defined wantarray)?$call(@argv): 597 $call(@argv) || croak "Can't $name(\@_)/ . 598 ($core ? ': $!' : ', \$! is \"$!\"') . '"' 599 } else { 600 return qq{return $call(@argv) || croak "Can't $name(\@_)} . 601 ($core ? ': $!' : ', \$! is \"$!\"') . '"'; 602 } 603 } 604 605 # The name of our original function is: 606 # $call if the function is CORE 607 # $sub if our function is non-CORE 608 609 # The reason for this is that $call is what we're actualling 610 # calling. For our core functions, this is always 611 # CORE::something. However for user-defined subs, we're about to 612 # replace whatever it is that we're calling; as such, we actually 613 # calling a subroutine ref. 614 615 my $human_sub_name = $core ? $call : $sub; 616 617 # Should we be testing to see if our result is defined, or 618 # just true? 619 620 my $use_defined_or; 621 622 my $hints; # All user-sub hints, including list hints. 623 624 if ( $core ) { 625 626 # Core hints are built into autodie. 627 628 $use_defined_or = exists ( $Use_defined_or{$call} ); 629 630 } 631 else { 632 633 # User sub hints are looked up using autodie::hints, 634 # since users may wish to add their own hints. 635 636 require autodie::hints; 637 638 $hints = autodie::hints->get_hints_for( $sref ); 639 640 # We'll look up the sub's fullname. This means we 641 # get better reports of where it came from in our 642 # error messages, rather than what imported it. 643 644 $human_sub_name = autodie::hints->sub_fullname( $sref ); 645 646 } 647 648 # Checks for special core subs. 649 650 if ($call eq 'CORE::system') { 651 652 # Leverage IPC::System::Simple if we're making an autodying 653 # system. 654 655 local $" = ", "; 656 657 # We need to stash $@ into $E, rather than using 658 # local $@ for the whole sub. If we don't then 659 # any exceptions from internal errors in autodie/Fatal 660 # will mysteriously disappear before propogating 661 # upwards. 662 663 return qq{ 664 my \$retval; 665 my \$E; 666 667 668 { 669 local \$@; 670 671 eval { 672 \$retval = IPC::System::Simple::system(@argv); 673 }; 674 675 \$E = \$@; 676 } 677 678 if (\$E) { 679 680 # TODO - This can't be overridden in child 681 # classes! 682 683 die autodie::exception::system->new( 684 function => q{CORE::system}, args => [ @argv ], 685 message => "\$E", errno => \$!, 686 ); 687 } 688 689 return \$retval; 690 }; 691 692 } 693 694 local $" = ', '; 695 696 # If we're going to throw an exception, here's the code to use. 697 my $die = qq{ 698 die $class->throw( 699 function => q{$human_sub_name}, args => [ @argv ], 700 pragma => q{$class}, errno => \$!, 701 context => \$context, return => \$retval, 702 eval_error => \$@ 703 ) 704 }; 705 706 if ($call eq 'CORE::flock') { 707 708 # flock needs special treatment. When it fails with 709 # LOCK_UN and EWOULDBLOCK, then it's not really fatal, it just 710 # means we couldn't get the lock right now. 711 712 require POSIX; # For POSIX::EWOULDBLOCK 713 714 local $@; # Don't blat anyone else's $@. 715 716 # Ensure that our vendor supports EWOULDBLOCK. If they 717 # don't (eg, Windows), then we use known values for its 718 # equivalent on other systems. 719 720 my $EWOULDBLOCK = eval { POSIX::EWOULDBLOCK(); } 721 || $_EWOULDBLOCK{$^O} 722 || _autocroak("Internal error - can't overload flock - EWOULDBLOCK not defined on this system."); 723 724 require Fcntl; # For Fcntl::LOCK_NB 725 726 return qq{ 727 728 my \$context = wantarray() ? "list" : "scalar"; 729 730 # Try to flock. If successful, return it immediately. 731 732 my \$retval = $call(@argv); 733 return \$retval if \$retval; 734 735 # If we failed, but we're using LOCK_NB and 736 # returned EWOULDBLOCK, it's not a real error. 737 738 if (\$_[1] & Fcntl::LOCK_NB() and \$! == $EWOULDBLOCK ) { 739 return \$retval; 740 } 741 742 # Otherwise, we failed. Die noisily. 743 744 $die; 745 746 }; 747 } 748 749 # AFAIK everything that can be given an unopned filehandle 750 # will fail if it tries to use it, so we don't really need 751 # the 'unopened' warning class here. Especially since they 752 # then report the wrong line number. 753 754 # Other warnings are disabled because they produce excessive 755 # complaints from smart-match hints under 5.10.1. 756 757 my $code = qq[ 758 no warnings qw(unopened uninitialized numeric); 759 760 if (wantarray) { 761 my \@results = $call(@argv); 762 my \$retval = \\\@results; 763 my \$context = "list"; 764 765 ]; 766 767 if ( $hints and ( ref($hints->{list} ) || "" ) eq 'CODE' ) { 768 769 # NB: Subroutine hints are passed as a full list. 770 # This differs from the 5.10.0 smart-match behaviour, 771 # but means that context unaware subroutines can use 772 # the same hints in both list and scalar context. 773 774 $code .= qq{ 775 if ( \$hints->{list}->(\@results) ) { $die }; 776 }; 777 } 778 elsif ( PERL510 and $hints ) { 779 $code .= qq{ 780 if ( \@results ~~ \$hints->{list} ) { $die }; 781 }; 782 } 783 elsif ( $hints ) { 784 croak sprintf(ERROR_58_HINTS, 'list', $sub); 785 } 786 else { 787 $code .= qq{ 788 # An empty list, or a single undef is failure 789 if (! \@results or (\@results == 1 and ! defined \$results[0])) { 790 $die; 791 } 792 } 793 } 794 795 # Tidy up the end of our wantarray call. 796 797 $code .= qq[ 798 return \@results; 799 } 800 ]; 801 802 803 # Otherwise, we're in scalar context. 804 # We're never in a void context, since we have to look 805 # at the result. 806 807 $code .= qq{ 808 my \$retval = $call(@argv); 809 my \$context = "scalar"; 810 }; 811 812 if ( $hints and ( ref($hints->{scalar} ) || "" ) eq 'CODE' ) { 813 814 # We always call code refs directly, since that always 815 # works in 5.8.x, and always works in 5.10.1 816 817 return $code .= qq{ 818 if ( \$hints->{scalar}->(\$retval) ) { $die }; 819 return \$retval; 820 }; 821 822 } 823 elsif (PERL510 and $hints) { 824 return $code . qq{ 825 826 if ( \$retval ~~ \$hints->{scalar} ) { $die }; 827 828 return \$retval; 829 }; 830 } 831 elsif ( $hints ) { 832 croak sprintf(ERROR_58_HINTS, 'scalar', $sub); 833 } 834 835 return $code . 836 ( $use_defined_or ? qq{ 837 838 $die if not defined \$retval; 839 840 return \$retval; 841 842 } : qq{ 843 844 return \$retval || $die; 845 846 } ) ; 847 848} 849 850# This returns the old copy of the sub, so we can 851# put it back at end of scope. 852 853# TODO : Check to make sure prototypes are restored correctly. 854 855# TODO: Taking a huge list of arguments is awful. Rewriting to 856# take a hash would be lovely. 857 858# TODO - BACKCOMPAT - This is not yet compatible with 5.10.0 859 860sub _make_fatal { 861 my($class, $sub, $pkg, $void, $lexical, $filename, $insist) = @_; 862 my($name, $code, $sref, $real_proto, $proto, $core, $call, $hints); 863 my $ini = $sub; 864 865 $sub = "${pkg}::$sub" unless $sub =~ /::/; 866 867 # Figure if we're using lexical or package semantics and 868 # twiddle the appropriate bits. 869 870 if (not $lexical) { 871 $Package_Fatal{$sub} = 1; 872 } 873 874 # TODO - We *should* be able to do skipping, since we know when 875 # we've lexicalised / unlexicalised a subroutine. 876 877 $name = $sub; 878 $name =~ s/.*::// or $name =~ s/^&//; 879 880 warn "# _make_fatal: sub=$sub pkg=$pkg name=$name void=$void\n" if $Debug; 881 croak(sprintf(ERROR_BADNAME, $class, $name)) unless $name =~ /^\w+$/; 882 883 if (defined(&$sub)) { # user subroutine 884 885 # NOTE: Previously we would localise $@ at this point, so 886 # the following calls to eval {} wouldn't interfere with anything 887 # that's already in $@. Unfortunately, it would also stop 888 # any of our croaks from triggering(!), which is even worse. 889 890 # This could be something that we've fatalised that 891 # was in core. 892 893 if ( $Package_Fatal{$sub} and do { local $@; eval { prototype "CORE::$name" } } ) { 894 895 # Something we previously made Fatal that was core. 896 # This is safe to replace with an autodying to core 897 # version. 898 899 $core = 1; 900 $call = "CORE::$name"; 901 $proto = prototype $call; 902 903 # We return our $sref from this subroutine later 904 # on, indicating this subroutine should be placed 905 # back when we're finished. 906 907 $sref = \&$sub; 908 909 } else { 910 911 # If this is something we've already fatalised or played with, 912 # then look-up the name of the original sub for the rest of 913 # our processing. 914 915 $sub = $Is_fatalised_sub{\&$sub} || $sub; 916 917 # A regular user sub, or a user sub wrapping a 918 # core sub. 919 920 $sref = \&$sub; 921 $proto = prototype $sref; 922 $call = '&$sref'; 923 require autodie::hints; 924 925 $hints = autodie::hints->get_hints_for( $sref ); 926 927 # If we've insisted on hints, but don't have them, then 928 # bail out! 929 930 if ($insist and not $hints) { 931 croak(sprintf(ERROR_NOHINTS, $name)); 932 } 933 934 # Otherwise, use the default hints if we don't have 935 # any. 936 937 $hints ||= autodie::hints::DEFAULT_HINTS(); 938 939 } 940 941 } elsif ($sub eq $ini && $sub !~ /^CORE::GLOBAL::/) { 942 # Stray user subroutine 943 croak(sprintf(ERROR_NOTSUB,$sub)); 944 945 } elsif ($name eq 'system') { 946 947 # If we're fatalising system, then we need to load 948 # helper code. 949 950 # The business with $E is to avoid clobbering our caller's 951 # $@, and to avoid $@ being localised when we croak. 952 953 my $E; 954 955 { 956 local $@; 957 958 eval { 959 require IPC::System::Simple; # Only load it if we need it. 960 require autodie::exception::system; 961 }; 962 $E = $@; 963 } 964 965 if ($E) { croak ERROR_NO_IPC_SYS_SIMPLE; } 966 967 # Make sure we're using a recent version of ISS that actually 968 # support fatalised system. 969 if ($IPC::System::Simple::VERSION < MIN_IPC_SYS_SIMPLE_VER) { 970 croak sprintf( 971 ERROR_IPC_SYS_SIMPLE_OLD, MIN_IPC_SYS_SIMPLE_VER, 972 $IPC::System::Simple::VERSION 973 ); 974 } 975 976 $call = 'CORE::system'; 977 $name = 'system'; 978 $core = 1; 979 980 } elsif ($name eq 'exec') { 981 # Exec doesn't have a prototype. We don't care. This 982 # breaks the exotic form with lexical scope, and gives 983 # the regular form a "do or die" beaviour as expected. 984 985 $call = 'CORE::exec'; 986 $name = 'exec'; 987 $core = 1; 988 989 } else { # CORE subroutine 990 my $E; 991 { 992 local $@; 993 $proto = eval { prototype "CORE::$name" }; 994 $E = $@; 995 } 996 croak(sprintf(ERROR_NOT_BUILT,$name)) if $E; 997 croak(sprintf(ERROR_CANT_OVERRIDE,$name)) if not defined $proto; 998 $core = 1; 999 $call = "CORE::$name"; 1000 } 1001 1002 if (defined $proto) { 1003 $real_proto = " ($proto)"; 1004 } else { 1005 $real_proto = ''; 1006 $proto = '@'; 1007 } 1008 1009 my $true_name = $core ? $call : $sub; 1010 1011 # TODO: This caching works, but I don't like using $void and 1012 # $lexical as keys. In particular, I suspect our code may end up 1013 # wrapping already wrapped code when autodie and Fatal are used 1014 # together. 1015 1016 # NB: We must use '$sub' (the name plus package) and not 1017 # just '$name' (the short name) here. Failing to do so 1018 # results code that's in the wrong package, and hence has 1019 # access to the wrong package filehandles. 1020 1021 if (my $subref = $Cached_fatalised_sub{$class}{$sub}{$void}{$lexical}) { 1022 $class->_install_subs($pkg, { $name => $subref }); 1023 return $sref; 1024 } 1025 1026 $code = qq[ 1027 sub$real_proto { 1028 local(\$", \$!) = (', ', 0); # TODO - Why do we do this? 1029 ]; 1030 1031 # Don't have perl whine if exec fails, since we'll be handling 1032 # the exception now. 1033 $code .= "no warnings qw(exec);\n" if $call eq "CORE::exec"; 1034 1035 my @protos = fill_protos($proto); 1036 $code .= $class->_write_invocation($core, $call, $name, $void, $lexical, $sub, $sref, @protos); 1037 $code .= "}\n"; 1038 warn $code if $Debug; 1039 1040 # I thought that changing package was a monumental waste of 1041 # time for CORE subs, since they'll always be the same. However 1042 # that's not the case, since they may refer to package-based 1043 # filehandles (eg, with open). 1044 # 1045 # There is potential to more aggressively cache core subs 1046 # that we know will never want to interact with package variables 1047 # and filehandles. 1048 1049 { 1050 no strict 'refs'; ## no critic # to avoid: Can't use string (...) as a symbol ref ... 1051 1052 my $E; 1053 1054 { 1055 local $@; 1056 $code = eval("package $pkg; use Carp; $code"); ## no critic 1057 $E = $@; 1058 } 1059 1060 if (not $code) { 1061 croak("Internal error in autodie/Fatal processing $true_name: $E"); 1062 1063 } 1064 } 1065 1066 # Now we need to wrap our fatalised sub inside an itty bitty 1067 # closure, which can detect if we've leaked into another file. 1068 # Luckily, we only need to do this for lexical (autodie) 1069 # subs. Fatal subs can leak all they want, it's considered 1070 # a "feature" (or at least backwards compatible). 1071 1072 # TODO: Cache our leak guards! 1073 1074 # TODO: This is pretty hairy code. A lot more tests would 1075 # be really nice for this. 1076 1077 my $leak_guard; 1078 1079 if ($lexical) { 1080 1081 $leak_guard = qq< 1082 package $pkg; 1083 1084 sub$real_proto { 1085 1086 # If we're inside a string eval, we can end up with a 1087 # whacky filename. The following code allows autodie 1088 # to propagate correctly into string evals. 1089 1090 my \$caller_level = 0; 1091 1092 my \$caller; 1093 1094 while ( (\$caller = (caller \$caller_level)[1]) =~ m{^\\(eval \\d+\\)\$} ) { 1095 1096 # If our filename is actually an eval, and we 1097 # reach it, then go to our autodying code immediatately. 1098 1099 goto &\$code if (\$caller eq \$filename); 1100 \$caller_level++; 1101 } 1102 1103 # We're now out of the eval stack. 1104 1105 # If we're called from the correct file, then use the 1106 # autodying code. 1107 goto &\$code if ((caller \$caller_level)[1] eq \$filename); 1108 1109 # Oh bother, we've leaked into another file. Call the 1110 # original code. Note that \$sref may actually be a 1111 # reference to a Fatalised version of a core built-in. 1112 # That's okay, because Fatal *always* leaks between files. 1113 1114 goto &\$sref if \$sref; 1115 >; 1116 1117 1118 # If we're here, it must have been a core subroutine called. 1119 # Warning: The following code may disturb some viewers. 1120 1121 # TODO: It should be possible to combine this with 1122 # write_invocation(). 1123 1124 foreach my $proto (@protos) { 1125 local $" = ", "; # So @args is formatted correctly. 1126 my ($count, @args) = @$proto; 1127 $leak_guard .= qq< 1128 if (\@_ == $count) { 1129 return $call(@args); 1130 } 1131 >; 1132 } 1133 1134 $leak_guard .= qq< croak "Internal error in Fatal/autodie. Leak-guard failure"; } >; 1135 1136 # warn "$leak_guard\n"; 1137 1138 my $E; 1139 { 1140 local $@; 1141 1142 $leak_guard = eval $leak_guard; ## no critic 1143 1144 $E = $@; 1145 } 1146 1147 die "Internal error in $class: Leak-guard installation failure: $E" if $E; 1148 } 1149 1150 my $installed_sub = $leak_guard || $code; 1151 1152 $class->_install_subs($pkg, { $name => $installed_sub }); 1153 1154 $Cached_fatalised_sub{$class}{$sub}{$void}{$lexical} = $installed_sub; 1155 1156 # Cache that we've now overriddent this sub. If we get called 1157 # again, we may need to find that find subroutine again (eg, for hints). 1158 1159 $Is_fatalised_sub{$installed_sub} = $sref; 1160 1161 return $sref; 1162 1163} 1164 1165# This subroutine exists primarily so that child classes can override 1166# it to point to their own exception class. Doing this is significantly 1167# less complex than overriding throw() 1168 1169sub exception_class { return "autodie::exception" }; 1170 1171{ 1172 my %exception_class_for; 1173 my %class_loaded; 1174 1175 sub throw { 1176 my ($class, @args) = @_; 1177 1178 # Find our exception class if we need it. 1179 my $exception_class = 1180 $exception_class_for{$class} ||= $class->exception_class; 1181 1182 if (not $class_loaded{$exception_class}) { 1183 if ($exception_class =~ /[^\w:']/) { 1184 confess "Bad exception class '$exception_class'.\nThe '$class->exception_class' method wants to use $exception_class\nfor exceptions, but it contains characters which are not word-characters or colons."; 1185 } 1186 1187 # Alas, Perl does turn barewords into modules unless they're 1188 # actually barewords. As such, we're left doing a string eval 1189 # to make sure we load our file correctly. 1190 1191 my $E; 1192 1193 { 1194 local $@; # We can't clobber $@, it's wrong! 1195 eval "require $exception_class"; ## no critic 1196 $E = $@; # Save $E despite ending our local. 1197 } 1198 1199 # We need quotes around $@ to make sure it's stringified 1200 # while still in scope. Without them, we run the risk of 1201 # $@ having been cleared by us exiting the local() block. 1202 1203 confess "Failed to load '$exception_class'.\nThis may be a typo in the '$class->exception_class' method,\nor the '$exception_class' module may not exist.\n\n $E" if $E; 1204 1205 $class_loaded{$exception_class}++; 1206 1207 } 1208 1209 return $exception_class->new(@args); 1210 } 1211} 1212 1213# For some reason, dying while replacing our subs doesn't 1214# kill our calling program. It simply stops the loading of 1215# autodie and keeps going with everything else. The _autocroak 1216# sub allows us to die with a vegence. It should *only* ever be 1217# used for serious internal errors, since the results of it can't 1218# be captured. 1219 1220sub _autocroak { 1221 warn Carp::longmess(@_); 1222 exit(255); # Ugh! 1223} 1224 1225package autodie::Scope::Guard; 1226 1227# This code schedules the cleanup of subroutines at the end of 1228# scope. It's directly inspired by chocolateboy's excellent 1229# Scope::Guard module. 1230 1231sub new { 1232 my ($class, $handler) = @_; 1233 1234 return bless $handler, $class; 1235} 1236 1237sub DESTROY { 1238 my ($self) = @_; 1239 1240 $self->(); 1241} 1242 12431; 1244 1245__END__ 1246 1247=head1 NAME 1248 1249Fatal - Replace functions with equivalents which succeed or die 1250 1251=head1 SYNOPSIS 1252 1253 use Fatal qw(open close); 1254 1255 open(my $fh, "<", $filename); # No need to check errors! 1256 1257 use File::Copy qw(move); 1258 use Fatal qw(move); 1259 1260 move($file1, $file2); # No need to check errors! 1261 1262 sub juggle { . . . } 1263 Fatal->import('juggle'); 1264 1265=head1 BEST PRACTICE 1266 1267B<Fatal has been obsoleted by the new L<autodie> pragma.> Please use 1268L<autodie> in preference to C<Fatal>. L<autodie> supports lexical scoping, 1269throws real exception objects, and provides much nicer error messages. 1270 1271The use of C<:void> with Fatal is discouraged. 1272 1273=head1 DESCRIPTION 1274 1275C<Fatal> provides a way to conveniently replace 1276functions which normally return a false value when they fail with 1277equivalents which raise exceptions if they are not successful. This 1278lets you use these functions without having to test their return 1279values explicitly on each call. Exceptions can be caught using 1280C<eval{}>. See L<perlfunc> and L<perlvar> for details. 1281 1282The do-or-die equivalents are set up simply by calling Fatal's 1283C<import> routine, passing it the names of the functions to be 1284replaced. You may wrap both user-defined functions and overridable 1285CORE operators (except C<exec>, C<system>, C<print>, or any other 1286built-in that cannot be expressed via prototypes) in this way. 1287 1288If the symbol C<:void> appears in the import list, then functions 1289named later in that import list raise an exception only when 1290these are called in void context--that is, when their return 1291values are ignored. For example 1292 1293 use Fatal qw/:void open close/; 1294 1295 # properly checked, so no exception raised on error 1296 if (not open(my $fh, '<', '/bogotic') { 1297 warn "Can't open /bogotic: $!"; 1298 } 1299 1300 # not checked, so error raises an exception 1301 close FH; 1302 1303The use of C<:void> is discouraged, as it can result in exceptions 1304not being thrown if you I<accidentally> call a method without 1305void context. Use L<autodie> instead if you need to be able to 1306disable autodying/Fatal behaviour for a small block of code. 1307 1308=head1 DIAGNOSTICS 1309 1310=over 4 1311 1312=item Bad subroutine name for Fatal: %s 1313 1314You've called C<Fatal> with an argument that doesn't look like 1315a subroutine name, nor a switch that this version of Fatal 1316understands. 1317 1318=item %s is not a Perl subroutine 1319 1320You've asked C<Fatal> to try and replace a subroutine which does not 1321exist, or has not yet been defined. 1322 1323=item %s is neither a builtin, nor a Perl subroutine 1324 1325You've asked C<Fatal> to replace a subroutine, but it's not a Perl 1326built-in, and C<Fatal> couldn't find it as a regular subroutine. 1327It either doesn't exist or has not yet been defined. 1328 1329=item Cannot make the non-overridable %s fatal 1330 1331You've tried to use C<Fatal> on a Perl built-in that can't be 1332overridden, such as C<print> or C<system>, which means that 1333C<Fatal> can't help you, although some other modules might. 1334See the L</"SEE ALSO"> section of this documentation. 1335 1336=item Internal error: %s 1337 1338You've found a bug in C<Fatal>. Please report it using 1339the C<perlbug> command. 1340 1341=back 1342 1343=head1 BUGS 1344 1345C<Fatal> clobbers the context in which a function is called and always 1346makes it a scalar context, except when the C<:void> tag is used. 1347This problem does not exist in L<autodie>. 1348 1349"Used only once" warnings can be generated when C<autodie> or C<Fatal> 1350is used with package filehandles (eg, C<FILE>). It's strongly recommended 1351you use scalar filehandles instead. 1352 1353=head1 AUTHOR 1354 1355Original module by Lionel Cons (CERN). 1356 1357Prototype updates by Ilya Zakharevich <ilya@math.ohio-state.edu>. 1358 1359L<autodie> support, bugfixes, extended diagnostics, C<system> 1360support, and major overhauling by Paul Fenwick <pjf@perltraining.com.au> 1361 1362=head1 LICENSE 1363 1364This module is free software, you may distribute it under the 1365same terms as Perl itself. 1366 1367=head1 SEE ALSO 1368 1369L<autodie> for a nicer way to use lexical Fatal. 1370 1371L<IPC::System::Simple> for a similar idea for calls to C<system()> 1372and backticks. 1373 1374=cut 1375