Devel::Events::Filter::Stringify - A simple event filter to prevent leaks


Devel-Events documentation Contained in the Devel-Events distribution.

Index


Code Index:

NAME

Top

Devel::Events::Filter::Stringify - A simple event filter to prevent leaks

SYNOPSIS

Top

	use Devel::Events::Filter::Stringify;

	my $handler = Devel::Events::Filter::Stringify->new(
		handler => $wrapped_handler,
	);

DESCRIPTION

Top

This event filter will remove all reference data from events.

Events may contain references to the data they are reporting on. If the event data is not thrown away immediately this might affect the flow of the program, causing leaks.

This filter prevents leaks from happenning when an event logger is used by simply stringifying all data.

Note that objects that overload stringification will *not* have their stringification callbacks activated unless respect_overloading is set to a true value.

SUBCLASSING

Top

In order ot perform custom dumps of objects that are more descriptive or even useful for log replay, override the stringify method.

ATTRIBUTES

Top

respect_overloading

See respect_overloading

METHODS

Top

filter_event @event

See Devel::Events::Filter.

Will map the values in @event calling stringify on reference elements.

stringify $ref

Simply delegates to stringify_value at this point.

In the future minimal formatting may be added.

stringify_value $ref

This method will do either "$_" or overload::StrVal($_) depending on the value of respect_overloading.


Devel-Events documentation Contained in the Devel-Events distribution.

#!/usr/bin/perl

package Devel::Events::Filter::Stringify;
use Moose;

use Scalar::Util qw/reftype/;
use overload ();

with qw/Devel::Events::Filter/;

has respect_overloading => (
	isa => "Bool",
	is  => "rw",
	default => 0,
);

sub filter_event {
	my ( $self, @event ) = @_;
	map { ref($_) ? $self->stringify($_) : $_ } @event;
}

sub stringify {
	my ( $self, $ref ) = @_;

	$self->stringify_value($ref);
}

sub stringify_value {
	my ( $self, $ref ) = @_;

	if ( $self->respect_overloading ) {
		return "$ref";
	} else {
		return overload::StrVal($ref);
	}
}

__PACKAGE__;

__END__