The Fatal module makes functions fail more spectacularly. It replaces functions that normally return false upon failure with wrappers that raise an exception if the real function returns false. That way you can safely use these functions without testing their return values explicitly on each call.
Both user-defined functions and built-in functions may be wrapped, except for those built-ins that cannot be expressed via prototypes. Attempting to override a nonoverridable built-in raises an exception. These include system, print, printf, exec, split, grep, and map--or more generally, any FUNC for which prototype "CORE::FUNC" returns false, including the prototype function itself.
If the symbol :void appears in the import list, functions named later in the list are limited to raising an exception when the function is called in void context--that is, when the return value is ignored. (Be careful about the last statement in a subroutine.) For example:
use Fatal qw(:void open close); # open properly checked, so no exception is raised on failure. if (open(FH, "< /nonesuch") { warn "no /nonesuch: $!"; } # close not properly checked, so failure raises an exception. close FH;
Copyright © 2001 O'Reilly & Associates. All rights reserved.