The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

use strict;
use Test::More tests => 4;
use Test::Exception;

use Storable qw(freeze);
use Class::Monadic qw(:all);

{
	package T;

	sub new{
		my $class =  shift;
		return bless {@_}, $class;
	}

	sub clone{
		Storable::dclone($_[0]);
	}
}

my $t = T->new(foo => 42);
is_deeply $t->clone, $t;

monadic($t)->add_method(pi => sub{ 3.14 });

lives_and{
	my $x = $t->clone;
	isa_ok $t, 'T';
	can_ok $t, 'pi';
};

dies_ok{
	freeze($t);
};