This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add missing <fh> line # phrase to Carp messages
authortlhackque <tlhackque@yahoo.com>
Fri, 16 Dec 2011 04:48:21 +0000 (20:48 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 16 Dec 2011 05:38:02 +0000 (21:38 -0800)
Carp::croak is documented in the camel book as "working like die does,
except misdirecting blame to the caller."

Perldoc says "croak - die of errors (from perspective of caller)".

This is almost true, however careful inspection reveals that croak
does not include file position information ( ", <fh> line $." ) as die
does (when it can).

It turns out that it *is* possible to determine the current file han-
dle (although I wish it were easier).

Carp should do this and add it to the traceback, as it really is use-
ful information.

dist/Carp/lib/Carp.pm

index 187cef4..95503d3 100644 (file)
@@ -286,7 +286,17 @@ sub ret_backtrace {
     }
 
     my %i = caller_info($i);
-    $mess = "$err at $i{file} line $i{line}$tid_msg\n";
+    $mess = "$err at $i{file} line $i{line}$tid_msg";
+    if( defined $. ) {
+        local $@ = '';
+        eval {
+            die;
+        };
+        if($@ =~ /^Died at .*(, <.*?> line \d+).$/ ) {
+            $mess .= $1;
+        }
+    }
+    $mess .= "\n";
 
     while ( my %i = caller_info( ++$i ) ) {
         $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n";