summaryrefslogtreecommitdiff
path: root/lib/Carp.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Carp.pm')
-rw-r--r--lib/Carp.pm37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/Carp.pm b/lib/Carp.pm
new file mode 100644
index 0000000000..5daba5c289
--- /dev/null
+++ b/lib/Carp.pm
@@ -0,0 +1,37 @@
+package Carp;
+
+# This package implements handy routines for modules that wish to throw
+# exceptions outside of the current package.
+
+require Exporter;
+@ISA = Exporter;
+@EXPORT = qw(confess croak carp);
+
+sub longmess {
+ my $error = shift;
+ my $mess = "";
+ my $i = 2;
+ my ($pack,$file,$line,$sub);
+ while (($pack,$file,$line,$sub) = caller($i++)) {
+ $mess .= "\t$sub " if $error eq "called";
+ $mess .= "$error at $file line $line\n";
+ $error = "called";
+ }
+ $mess || $error;
+}
+
+sub shortmess {
+ my $error = shift;
+ my ($curpack) = caller(1);
+ my $i = 2;
+ my ($pack,$file,$line,$sub);
+ while (($pack,$file,$line,$sub) = caller($i++)) {
+ return "$error at $file line $line\n" if $pack ne $curpack;
+ }
+ longmess $error;
+}
+
+sub confess { die longmess @_; }
+sub croak { die shortmess @_; }
+sub carp { warn shortmess @_; }
+