X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FFatal.pm;h=69866d9f66384b4275a93a24ccb822718b5df2bd;hb=ad91da88822a061453a454578ec2246dd493ffdd;hp=0ea5963df0b0eb6f6941dee81f67b0bb69ef33df;hpb=3b825e419da1c361eab06a1e6d287276c0aef241;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/Fatal.pm b/lib/Fatal.pm index 0ea5963..69866d9 100644 --- a/lib/Fatal.pm +++ b/lib/Fatal.pm @@ -5,7 +5,7 @@ use Carp; use strict; our($AUTOLOAD, $Debug, $VERSION); -$VERSION = 1.03; +$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