Fix RTCPAN#107225 : longmess returns 1 on ref.
authorShlomi Fish <shlomif@shlomifish.org>
Sun, 6 Mar 2016 18:37:25 +0000 (20:37 +0200)
committerTony Cook <tony@develop-help.com>
Mon, 7 Mar 2016 04:36:55 +0000 (15:36 +1100)
See: https://rt.cpan.org/Public/Bug/Display.html?id=107225 . Also
discovered as a bug in perl -d by me (= Shlomi Fish) and reported
after the original report. longmess() returns "1" when called in scalar
context if passed a reference.

dist/Carp/lib/Carp.pm
dist/Carp/lib/Carp/Heavy.pm
dist/Carp/t/Carp.t

index 9421c74..f39302d 100644 (file)
@@ -87,7 +87,7 @@ BEGIN {
     }
 }
 
-our $VERSION = '1.38';
+our $VERSION = '1.39';
 $VERSION =~ tr/_//d;
 
 our $MaxEvalLen = 0;
@@ -445,7 +445,9 @@ sub long_error_loc {
 }
 
 sub longmess_heavy {
-    return @_ if ref( $_[0] );    # don't break references as exceptions
+    if ( ref( $_[0] ) ) {   # don't break references as exceptions
+        return wantarray ? @_ : $_[0];
+    }
     my $i = long_error_loc();
     return ret_backtrace( $i, @_ );
 }
index 91a42d1..6ac932a 100644 (file)
@@ -2,7 +2,7 @@ package Carp::Heavy;
 
 use Carp ();
 
-our $VERSION = '1.38';
+our $VERSION = '1.39';
 $VERSION =~ tr/_//d;
 
 # Carp::Heavy was merged into Carp in version 1.12.  Any mismatched versions
index a18e3b4..9ecdf88 100644 (file)
@@ -3,7 +3,7 @@ no warnings "once";
 use Config;
 
 use IPC::Open3 1.0103 qw(open3);
-use Test::More tests => 65;
+use Test::More tests => 66;
 
 sub runperl {
     my(%args) = @_;
@@ -39,6 +39,24 @@ BEGIN {
   );
 }
 
+package MyClass;
+
+sub new { return bless +{ field => ['value1', 'SecondVal'] }; }
+
+package main;
+
+{
+    my $err = Carp::longmess(MyClass->new);
+
+    # See:
+    # https://rt.cpan.org/Public/Bug/Display.html?id=107225
+    is_deeply(
+        $err->{field},
+        ['value1', 'SecondVal',],
+        "longmess returns sth meaningful in scalar context when passed a ref.",
+    );
+}
+
 {
     local $SIG{__WARN__} = sub {
         like $_[0], qr/ok (\d+)\n at.+\b(?i:carp\.t) line \d+\.$/, 'ok 2\n';