| Carp-POE documentation | Contained in the Carp-POE distribution. |
Carp::POE - Carp adapted to POE
use Carp::POE;
use POE;
POE::Session->create(
package_states => [
main => [qw( _start test_event )]
],
);
$poe_kernel->run();
sub _start {
$_[KERNEL]->yield(test_event => 'fail');
}
sub test_event {
my $arg = $_[ARG0];
if ($arg ne 'correct') {
carp "Argument is incorrect!";
}
}
This module provides the same functions as Carp (Carp), but modifies
the behavior of carp() and croak() if called inside a POE
event handler. The file names/line numbers in the emitted warnings are
replaced with POE::Session's $_[CALLER_FILE] and
$_[CALLER_LINE]. This is useful as it will direct you to the code
that posted the event instead of directing you to some subroutine in
POE::Session which actually called the event handler.
Calls to carp() and croak() in subroutines that are not POE event
handlers will not be effected, so it's always safe to use Carp::POE
instead of Carp.
Do something clever with cluck() and confess().
Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
Copyright 2008-2010 Hinrik Örn Sigurðsson
This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.
| Carp-POE documentation | Contained in the Carp-POE distribution. |
package Carp::POE; BEGIN { $Carp::POE::AUTHORITY = 'cpan:HINRIK'; } BEGIN { $Carp::POE::VERSION = '0.09'; } use strict; use warnings FATAL => 'all'; use Carp (); use POE::Session; use base qw(Exporter); our @EXPORT = qw(confess croak carp); our @EXPORT_OK = qw(cluck verbose); our @EXPORT_FAIL = qw(verbose); # from POE::Session my ($file, $line) = (CALLER_FILE, CALLER_LINE); { no warnings 'once'; *export_fail = *Carp::export_fail; *confess = *Carp::confess; *cluck = *Carp::cluck; } sub croak { _is_handler() ? die _caller_info(@_), "\n" : die Carp::shortmess(@_), "\n" ; } sub carp { _is_handler() ? warn _caller_info(@_), "\n" : warn Carp::shortmess(@_), "\n" ; } sub _is_handler { return 1 if (caller(3))[0] eq 'POE::Kernel'; } sub _caller_info { my @args = @_; { package DB; BEGIN { $DB::AUTHORITY = 'cpan:HINRIK'; } BEGIN { $DB::VERSION = '0.09'; } my @throw_away = caller(2); return "@args at $DB::args[$file] line $DB::args[$line]"; } } 1;