Carp -- shortmess and longmess

From: Haakon Riiser (hakonrk_at_fys.uio.no)
Date: 07/26/04


Date: Mon, 26 Jul 2004 12:29:52 +0000 (UTC)

perldoc Carp says:

  carp - warn of errors (from perspective of caller)
  cluck - warn of errors with stack backtrace
            (not exported by default)
  croak - die of errors (from perspective of caller)
  confess - die of errors with stack backtrace
  shortmess - return the message that carp and croak produce
  longmess - return the message that cluck and confess produce

but this is not how it appears to work. I created a test program
based on the examples in the manual:

  --- begin carp.pl ---
  use Carp qw(croak cluck);

  sub foo {
      cluck "This is how we got here!";
      print Carp::shortmess("This will have caller's details added");
      print Carp::longmess("This will have stack backtrace added");
      croak "We're outta here!";
  }

  sub bar {
      foo();
  }

  bar();
  --- end carp.pl ---

When I run this program, I get the following output:

  This is how we got here! at carp.pl line 4
          main::foo() called at carp.pl line 11
          main::bar() called at carp.pl line 14
  This will have caller's details added at carp.pl line 5
          main::foo() called at carp.pl line 11
          main::bar() called at carp.pl line 14
  This will have stack backtrace added at carp.pl line 11
          main::bar() called at carp.pl line 14
  We're outta here! at carp.pl line 7
          main::foo() called at carp.pl line 11
          main::bar() called at carp.pl line 14

The message from cluck seems to be OK -- it prints the backtrace,
as it should. The next two, shortmess and longmess, appear
to do the opposite of what they should. shortmess prints the
longest message, backtrace and everything, while longmess only
prints the bottom of the stack. It should've been the other
way around, right? croak also prints the full backtrace, which,
if I understand the manual correctly, is incorrect.

In summary: carp, cluck, croak and confess all print the full
backtrace (same as shortmess), and the longmess message is
never used.

Verified on the following systems:

  Custom built Perl 5.8.4 (-Duse64bitint -des), Caro 1.02
  Custom built Perl 5.8.5 (-Duse64bitint -des), Carp 1.03
  Slackware 10's Perl 5.8.4, Carp 1.02
  Red Hat Enterprise Linux WS release 3's Perl 5.8.4, Carp 1.02

Is this a known bug, or should I report it with perlbug?

-- 
 Haakon


Relevant Pages

  • Carp -- shortmess and longmess
    ... carp - warn of errors ... confess - die of errors with stack backtrace ... shortmess - return the message that carp and croak produce ... longmess - return the message that cluck and confess produce ...
    (comp.lang.perl.misc)
  • Re: Carp -- shortmess and longmess
    ... > confess - die of errors with stack backtrace ... > shortmess - return the message that carp and croak produce ... > longmess - return the message that cluck and confess produce ...
    (comp.lang.perl.modules)