In theory it should be possible to use simple OOP to override the behaviour you do not want. However, I do not know how to get around the problem that the derived class does not export anymore.
package Mouse::Util::TypeConstraints::CarplessErrors {
use Mouse;
extends 'Mouse::Util::TypeConstraints';
sub throw_error :method {
my ($self, $message, %args) = @_;
warn $message;
}
}
package Foo {
use Mouse;
use Mouse::Util::TypeConstraints::CarplessErrors;
enum 'ErrorMode' => qw<carp error both>;
has 'error_mode' => ( is => 'rw', isa => 'ErrorMode', default => '
+error' );
}
Foo->new->error_mode('asdsdf');