http://qs321.pair.com?node_id=11107004


in reply to Non-fatal error handling with Mouse types?

If this is something you want to do on a number of attributes, you could use a method modifier to wrap them with exception handling. Here's an example:

use strict; use warnings; BEGIN { package Foo; use Moo; use Types::Standard qw(Enum); has error_mode => ( is => 'rw', isa => Enum[qw/carp error bot +h/], default => 'error' ); has another_attribute => ( is => 'rw', isa => Enum[qw/doing a thing/ +], default => 'a' ); sub _err { my ( $self, $err ) = @_; warn $err; } around qw(error_mode another_attribute), sub { my ($orig, $self) = (shift, shift); my $return; eval { $return = $self->$orig(@_); 1; } or do { $self->_err($@); return $self->$orig; }; return $return; }; 1; } sub welp { my $f = Foo->new; $f->error_mode("blah"); $f->another_attribute("blah"); } welp();

This would allow you to define all of your attributes using standard Moo* mechanisms, but convert a selection of them to 'soft' error handling.