View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Karen Etheridge > Carp-REPL-0.18 > Carp::REPL



Annotate this POD


Open  2
View/Report Bugs
Module Version: 0.18   Source  


Carp::REPL - read-eval-print-loop on die and/or warn


The intended way to use this module is through the command line.

    perl -MCarp::REPL
        Can't call method "cover_sheet" without a package or object reference at line 6019.

    # instead of exiting, you get a REPL!

    $ $form

    $ $self->get_form

    $ "ah ha! there's my bug, I thought get_form returned an object"
    ah ha! there's my bug, I thought get_form returned an object




Works as command line argument. This automatically installs the die handler for you, so if you receive a fatal error you get a REPL before the universe explodes. Specifying =warn also installs a warn handler for finding those mysterious warnings.

use Carp::REPL;

use Carp::REPL 'warn';

Same as above.

use Carp::REPL 'nodie';

Loads the module without installing the die handler. Use this if you just want to run Carp::REPL::repl on your own terms.

use Carp::REPL 'test';


Load a REPL on test failure! (as long as it uses "ok" in Test::More)



This module's interface consists of exactly one function: repl. This is provided so you may install your own $SIG{__DIE__} handler if you have no alternatives.

It takes the same arguments as die, and returns no useful value. In fact, don't even depend on it returning at all!

One useful place for calling this manually is if you just want to check the state of things without having to throw a fake error. You can also change any variables and those changes will be seen by the rest of your program.

    use Carp::REPL 'repl';

    sub involved_calculation {
        # ...
        $d = maybe_zero();
        # ...
        repl(); # $d = 1
        $sum += $n / $d;
        # ...

Unfortunately if you instead go with the usual -MCarp::REPL, then $SIG{__DIE__} will be invoked and there's no general way to recover. But you can still change variables to poke at things.


Note that this is not supposed to be a full-fledged debugger. A few commands are provided to aid you in finding out what went awry. See Devel::ebug if you're looking for a serious debugger.



Dynamic scope probably produces unexpected results. I don't see any easy (or even difficult!) solution to this. Therefore it's a caveat and not a bug. :)


Devel::REPL, Devel::ebug, Enbugger, CGI::Inspect


Shawn M Moore, <sartak at>


Please report any bugs or feature requests to bug-carp-repl at, or through the web interface at


Thanks to Nelson Elhage and Jesse Vincent for the idea.

Thanks to Matt Trout and Stevan Little for their advice.


Copyright 2007-2008 Best Practical Solutions.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: