Re: Carp -- shortmess and longmess

From: Anno Siegel (anno4000_at_lublin.zrz.tu-berlin.de)
Date: 07/26/04

  • Next message: Michael Ragsdale: "Net::SFTP port problem"
    Date: 26 Jul 2004 16:19:58 GMT
    
    

    Haakon Riiser <hakonrk@fys.uio.no> wrote in comp.lang.perl.misc:
    > 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?

    Carp tries to find a location on the call stack where it believes
    the error was introduced. When it can't find one, it switches to
    a full backtrace on its own accord. This seems to be happening here.

    The error location is always a point where a call crosses module
    boundaries. Give it such a call, and the results will be more
    consistent:

        use Carp;

        one();
        exit;

        sub one { Foo::two() }

        package Foo;

        sub two {
            print Carp::shortmess( 'shortmess');
            print Carp::longmess( 'longmess');
        }

    Anno


  • Next message: Michael Ragsdale: "Net::SFTP port problem"

    Relevant Pages

    • Re: Carp -- shortmess and longmess
      ... `' carp - warn of errors ... `' confess - die of errors with stack backtrace ... `' longmess - return the message that cluck and confess produce ... and point 1 says any call into the same package is considered safe. ...
      (comp.lang.perl.misc)
    • Re: Carp -- shortmess and longmess
      ... `' carp - warn of errors ... `' confess - die of errors with stack backtrace ... `' longmess - return the message that cluck and confess produce ... and point 1 says any call into the same package is considered safe. ...
      (comp.lang.perl.modules)
    • 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.modules)
    • 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: Yet another ZFS recv panic; old but rarely seen
      ... KDB: stack backtrace: ... Looks *eerily* similar to this panic fron OpenSolaris: ... GDB backtrace isn't of that much more use, ...
      (freebsd-current)