X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FFatal.pm;h=69866d9f66384b4275a93a24ccb822718b5df2bd;hb=eb6393247e5113feb0b19b71cbdee87eebedbbb7;hp=9b0f28aa122b048ec274f88d8ea41d1d907486a6;hpb=14fe70c2d1778829732c0549106909ab5b329425;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/Fatal.pm b/lib/Fatal.pm index 9b0f28a..69866d9 100644 --- a/lib/Fatal.pm +++ b/lib/Fatal.pm @@ -1,11 +1,11 @@ package Fatal; -use 5.6.1; +use 5.006_001; use Carp; use strict; our($AUTOLOAD, $Debug, $VERSION); -$VERSION = 1.02; +$VERSION = 1.05; $Debug = 0 unless defined $Debug; @@ -38,7 +38,7 @@ sub fill_protos { $n++; push(@out1,[$n,@out]) if $seen_semi; push(@out, $1 . "{\$_[$n]}"), next if $proto =~ s/^\s*\\([\@%\$\&])//; - push(@out, "\$_[$n]"), next if $proto =~ s/^\s*([*\$&])//; + push(@out, "\$_[$n]"), next if $proto =~ s/^\s*([_*\$&])//; push(@out, "\@_[$n..\$#_]"), last if $proto =~ s/^\s*(;\s*)?\@//; $seen_semi = 1, $n--, next if $proto =~ s/^\s*;//; # XXXX ???? die "Unknown prototype letters: \"$proto\""; @@ -99,7 +99,8 @@ sub _make_fatal { $sref = \&$sub; $proto = prototype $sref; $call = '&$sref'; - } elsif ($sub eq $ini) { # Stray user subroutine + } elsif ($sub eq $ini && $sub !~ /^CORE::GLOBAL::/) { + # Stray user subroutine die "$sub is not a Perl subroutine" } else { # CORE subroutine $proto = eval { prototype "CORE::$name" }; @@ -177,10 +178,16 @@ values are ignored. For example # not checked, so error raises an exception close FH; +=head1 BUGS + +You should not fatalize functions that are called in list context, because this +module tests whether a function has failed by testing the boolean truth of its +return value in scalar context. + =head1 AUTHOR -Lionel.Cons@cern.ch +Lionel Cons (CERN). -prototype updates by Ilya Zakharevich ilya@math.ohio-state.edu +Prototype updates by Ilya Zakharevich . =cut