| 1 |
package Carp; |
| 2 |
|
| 3 |
our $VERSION = '1.04'; |
| 4 |
|
| 5 |
=head1 NAME |
| 6 |
|
| 7 |
carp - warn of errors (from perspective of caller) |
| 8 |
|
| 9 |
cluck - warn of errors with stack backtrace |
| 10 |
(not exported by default) |
| 11 |
|
| 12 |
croak - die of errors (from perspective of caller) |
| 13 |
|
| 14 |
confess - die of errors with stack backtrace |
| 15 |
|
| 16 |
shortmess - return the message that carp and croak produce |
| 17 |
|
| 18 |
longmess - return the message that cluck and confess produce |
| 19 |
|
| 20 |
=head1 SYNOPSIS |
| 21 |
|
| 22 |
use Carp; |
| 23 |
croak "We're outta here!"; |
| 24 |
|
| 25 |
use Carp qw(cluck); |
| 26 |
cluck "This is how we got here!"; |
| 27 |
|
| 28 |
print FH Carp::shortmess("This will have caller's details added"); |
| 29 |
print FH Carp::longmess("This will have stack backtrace added"); |
| 30 |
|
| 31 |
=head1 DESCRIPTION |
| 32 |
|
| 33 |
The Carp routines are useful in your own modules because |
| 34 |
they act like die() or warn(), but with a message which is more |
| 35 |
likely to be useful to a user of your module. In the case of |
| 36 |
cluck, confess, and longmess that context is a summary of every |
| 37 |
call in the call-stack. For a shorter message you can use carp, |
| 38 |
croak or shortmess which report the error as being from where |
| 39 |
your module was called. There is no guarantee that that is where |
| 40 |
the error was, but it is a good educated guess. |
| 41 |
|
| 42 |
You can also alter the way the output and logic of C<Carp> works, by |
| 43 |
changing some global variables in the C<Carp> namespace. See the |
| 44 |
section on C<GLOBAL VARIABLES> below. |
| 45 |
|
| 46 |
Here is a more complete description of how shortmess works. What |
| 47 |
it does is search the call-stack for a function call stack where |
| 48 |
it hasn't been told that there shouldn't be an error. If every |
| 49 |
call is marked safe, it then gives up and gives a full stack |
| 50 |
backtrace instead. In other words it presumes that the first likely |
| 51 |
looking potential suspect is guilty. Its rules for telling whether |
| 52 |
a call shouldn't generate errors work as follows: |
| 53 |
|
| 54 |
=over 4 |
| 55 |
|
| 56 |
=item 1. |
| 57 |
|
| 58 |
Any call from a package to itself is safe. |
| 59 |
|
| 60 |
=item 2. |
| 61 |
|
| 62 |
Packages claim that there won't be errors on calls to or from |
| 63 |
packages explicitly marked as safe by inclusion in @CARP_NOT, or |
| 64 |
(if that array is empty) @ISA. The ability to override what |
| 65 |
@ISA says is new in 5.8. |
| 66 |
|
| 67 |
=item 3. |
| 68 |
|
| 69 |
The trust in item 2 is transitive. If A trusts B, and B |
| 70 |
trusts C, then A trusts C. So if you do not override @ISA |
| 71 |
with @CARP_NOT, then this trust relationship is identical to, |
| 72 |
"inherits from". |
| 73 |
|
| 74 |
=item 4. |
| 75 |
|
| 76 |
Any call from an internal Perl module is safe. (Nothing keeps |
| 77 |
user modules from marking themselves as internal to Perl, but |
| 78 |
this practice is discouraged.) |
| 79 |
|
| 80 |
=item 5. |
| 81 |
|
| 82 |
Any call to Carp is safe. (This rule is what keeps it from |
| 83 |
reporting the error where you call carp/croak/shortmess.) |
| 84 |
|
| 85 |
=back |
| 86 |
|
| 87 |
=head2 Forcing a Stack Trace |
| 88 |
|
| 89 |
As a debugging aid, you can force Carp to treat a croak as a confess |
| 90 |
and a carp as a cluck across I<all> modules. In other words, force a |
| 91 |
detailed stack trace to be given. This can be very helpful when trying |
| 92 |
to understand why, or from where, a warning or error is being generated. |
| 93 |
|
| 94 |
This feature is enabled by 'importing' the non-existent symbol |
| 95 |
'verbose'. You would typically enable it by saying |
| 96 |
|
| 97 |
perl -MCarp=verbose script.pl |
| 98 |
|
| 99 |
or by including the string C<MCarp=verbose> in the PERL5OPT |
| 100 |
environment variable. |
| 101 |
|
| 102 |
Alternately, you can set the global variable C<$Carp::Verbose> to true. |
| 103 |
See the C<GLOBAL VARIABLES> section below. |
| 104 |
|
| 105 |
=cut |
| 106 |
|
| 107 |
# This package is heavily used. Be small. Be fast. Be good. |
| 108 |
|
| 109 |
# Comments added by Andy Wardley <abw@kfs.org> 09-Apr-98, based on an |
| 110 |
# _almost_ complete understanding of the package. Corrections and |
| 111 |
# comments are welcome. |
| 112 |
|
| 113 |
# The members of %Internal are packages that are internal to perl. |
| 114 |
# Carp will not report errors from within these packages if it |
| 115 |
# can. The members of %CarpInternal are internal to Perl's warning |
| 116 |
# system. Carp will not report errors from within these packages |
| 117 |
# either, and will not report calls *to* these packages for carp and |
| 118 |
# croak. They replace $CarpLevel, which is deprecated. The |
| 119 |
# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval |
| 120 |
# text and function arguments should be formatted when printed. |
| 121 |
|
| 122 |
# Comments added by Jos I. Boumans <kane@dwim.org> 11-Aug-2004 |
| 123 |
# I can not get %CarpInternal or %Internal to work as advertised, |
| 124 |
# therefor leaving it out of the below documentation. |
| 125 |
# $CarpLevel may be decprecated according to the last comment, but |
| 126 |
# after 6 years, it's still around and in heavy use ;) |
| 127 |
|
| 128 |
=pod |
| 129 |
|
| 130 |
=head1 GLOBAL VARIABLES |
| 131 |
|
| 132 |
=head2 $Carp::CarpLevel |
| 133 |
|
| 134 |
This variable determines how many call frames are to be skipped when |
| 135 |
reporting where an error occurred on a call to one of C<Carp>'s |
| 136 |
functions. For example: |
| 137 |
|
| 138 |
$Carp::CarpLevel = 1; |
| 139 |
sub bar { .... or _error('Wrong input') } |
| 140 |
sub _error { Carp::carp(@_) } |
| 141 |
|
| 142 |
This would make Carp report the error as coming from C<bar>'s caller, |
| 143 |
rather than from C<_error>'s caller, as it normally would. |
| 144 |
|
| 145 |
Defaults to C<0>. |
| 146 |
|
| 147 |
=head2 $Carp::MaxEvalLen |
| 148 |
|
| 149 |
This variable determines how many characters of a string-eval are to |
| 150 |
be shown in the output. Use a value of C<0> to show all text. |
| 151 |
|
| 152 |
Defaults to C<0>. |
| 153 |
|
| 154 |
=head2 $Carp::MaxArgLen |
| 155 |
|
| 156 |
This variable determines how many characters of each argument to a |
| 157 |
function to print. Use a value of C<0> to show the full length of the |
| 158 |
argument. |
| 159 |
|
| 160 |
Defaults to C<64>. |
| 161 |
|
| 162 |
=head2 $Carp::MaxArgNums |
| 163 |
|
| 164 |
This variable determines how many arguments to each function to show. |
| 165 |
Use a value of C<0> to show all arguments to a function call. |
| 166 |
|
| 167 |
Defaults to C<8>. |
| 168 |
|
| 169 |
=head2 $Carp::Verbose |
| 170 |
|
| 171 |
This variable makes C<Carp> use the C<longmess> function at all times. |
| 172 |
This effectively means that all calls to C<carp> become C<cluck> and |
| 173 |
all calls to C<croak> become C<confess>. |
| 174 |
|
| 175 |
Note, this is analogous to using C<use Carp 'verbose'>. |
| 176 |
|
| 177 |
Defaults to C<0>. |
| 178 |
|
| 179 |
=cut |
| 180 |
|
| 181 |
|
| 182 |
$CarpInternal{Carp}++; |
| 183 |
$CarpInternal{warnings}++; |
| 184 |
$CarpLevel = 0; # How many extra package levels to skip on carp. |
| 185 |
# How many calls to skip on confess. |
| 186 |
# Reconciling these notions is hard, use |
| 187 |
# %Internal and %CarpInternal instead. |
| 188 |
$MaxEvalLen = 0; # How much eval '...text...' to show. 0 = all. |
| 189 |
$MaxArgLen = 64; # How much of each argument to print. 0 = all. |
| 190 |
$MaxArgNums = 8; # How many arguments to print. 0 = all. |
| 191 |
$Verbose = 0; # If true then make shortmess call longmess instead |
| 192 |
|
| 193 |
require Exporter; |
| 194 |
@ISA = ('Exporter'); |
| 195 |
@EXPORT = qw(confess croak carp); |
| 196 |
@EXPORT_OK = qw(cluck verbose longmess shortmess); |
| 197 |
@EXPORT_FAIL = qw(verbose); # hook to enable verbose mode |
| 198 |
|
| 199 |
=head1 BUGS |
| 200 |
|
| 201 |
The Carp routines don't handle exception objects currently. |
| 202 |
If called with a first argument that is a reference, they simply |
| 203 |
call die() or warn(), as appropriate. |
| 204 |
|
| 205 |
=cut |
| 206 |
|
| 207 |
# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl") |
| 208 |
# then the following method will be called by the Exporter which knows |
| 209 |
# to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word |
| 210 |
# 'verbose'. |
| 211 |
|
| 212 |
sub export_fail { |
| 213 |
shift; |
| 214 |
$Verbose = shift if $_[0] eq 'verbose'; |
| 215 |
return @_; |
| 216 |
} |
| 217 |
|
| 218 |
|
| 219 |
# longmess() crawls all the way up the stack reporting on all the function |
| 220 |
# calls made. The error string, $error, is originally constructed from the |
| 221 |
# arguments passed into longmess() via confess(), cluck() or shortmess(). |
| 222 |
# This gets appended with the stack trace messages which are generated for |
| 223 |
# each function call on the stack. |
| 224 |
|
| 225 |
sub longmess { |
| 226 |
{ |
| 227 |
local($@, $!); |
| 228 |
# XXX fix require to not clear $@ or $!? |
| 229 |
# don't use require unless we need to (for Safe compartments) |
| 230 |
require Carp::Heavy unless $INC{"Carp/Heavy.pm"}; |
| 231 |
} |
| 232 |
# Icky backwards compatibility wrapper. :-( |
| 233 |
my $call_pack = caller(); |
| 234 |
if ($Internal{$call_pack} or $CarpInternal{$call_pack}) { |
| 235 |
return longmess_heavy(@_); |
| 236 |
} |
| 237 |
else { |
| 238 |
local $CarpLevel = $CarpLevel + 1; |
| 239 |
return longmess_heavy(@_); |
| 240 |
} |
| 241 |
} |
| 242 |
|
| 243 |
|
| 244 |
# shortmess() is called by carp() and croak() to skip all the way up to |
| 245 |
# the top-level caller's package and report the error from there. confess() |
| 246 |
# and cluck() generate a full stack trace so they call longmess() to |
| 247 |
# generate that. In verbose mode shortmess() calls longmess() so |
| 248 |
# you always get a stack trace |
| 249 |
|
| 250 |
sub shortmess { # Short-circuit &longmess if called via multiple packages |
| 251 |
{ |
| 252 |
local($@, $!); |
| 253 |
# XXX fix require to not clear $@ or $!? |
| 254 |
# don't use require unless we need to (for Safe compartments) |
| 255 |
require Carp::Heavy unless $INC{"Carp/Heavy.pm"}; |
| 256 |
} |
| 257 |
# Icky backwards compatibility wrapper. :-( |
| 258 |
my $call_pack = caller(); |
| 259 |
local @CARP_NOT = caller(); |
| 260 |
shortmess_heavy(@_); |
| 261 |
} |
| 262 |
|
| 263 |
|
| 264 |
# the following four functions call longmess() or shortmess() depending on |
| 265 |
# whether they should generate a full stack trace (confess() and cluck()) |
| 266 |
# or simply report the caller's package (croak() and carp()), respectively. |
| 267 |
# confess() and croak() die, carp() and cluck() warn. |
| 268 |
|
| 269 |
sub croak { die shortmess @_ } |
| 270 |
sub confess { die longmess @_ } |
| 271 |
sub carp { warn shortmess @_ } |
| 272 |
sub cluck { warn longmess @_ } |
| 273 |
|
| 274 |
1; |