Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: Non-fatal error handling with Mouse types?

by Haarg (Curate)
on Oct 03, 2019 at 10:02 UTC ( #11107004=note: print w/replies, xml ) Need Help??

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.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11107004]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2021-10-26 11:24 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (90 votes). Check out past polls.