package NetHirc::Debug; use strict; use warnings; use POE qw(Kernel Session Wheel::ReadWrite); my @events = qw( _start _stop debug ); sub new { shift; POE::Session->create( 'package_states' => [ 'NetHirc::Debug' => [ @events ] ], 'args' => [ @_ ], ); } sub _start { my ($kernel, $heap, $flags) = @_[KERNEL, HEAP, ARG0]; $kernel->alias_set('nethirc_debug'); my $wheel = new POE::Wheel::ReadWrite( Handle => \*STDERR, ); $heap->{'wheel'} = $wheel; $heap->{'flags'} = $flags; } sub _stop { my ($heap) = $_[HEAP]; delete $heap->{'wheel'}; } sub debug { no warnings; # Sometimes @args will be empty, we know. my ($heap, $flag, $format, @args) = @_[HEAP, ARG0, ARG1, ARG2..ARG9]; my $flags = $heap->{'flags'}; return unless $flags =~ /$flag/; my $wheel = $heap->{'wheel'}; $wheel->put(sprintf("DEBUG($flag,$$): $format", @args)); } 1; __END__