The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 1;
use MooseX::DeclareX plugins => [qw(preprocess postprocess std_constants)];

class Joiner
{
	has separator => (is => read_write, isa => 'Str', required => true);
	
	method go (@strings) {
		join $self->separator => @strings;
	}	
}

role DebuggerForJoiner
{
	preprocess go (@strings) {
		map { "[$_]" } @strings
	}

	postprocess go ($result) {
		return "{$result}";
	}
}

class DebuggedJoiner
	extends Joiner
	with DebuggerForJoiner;

my $j = DebuggedJoiner->new(separator => q[ ]);
is(
	$j->go(qw(foo bar baz)),
	'{[foo] [bar] [baz]}',
);