bliako has asked for the wisdom of the Perl Monks concerning the following question:
I am reading unclean data and inserting to DB. At this stage, I need DB insert() statements to die if something dodgy happens, even a warning, for example I get this Non-integer value supplied for column. I use db-connection parameters these: {RaiseError=>1,PrintError=>1} and wrap my insert() around an eval to catch any die(), like my $rc = eval { $obj->insert(); 1 }; if( $@ || ! $rc ){ die "error for this object: $obj" }
But it does not work. The warning stays a warning and does not elevate to a die as I had hoped.
This works but isn't it too heavy in a loop of thousands of inserts?
for my $obj (@objstoinsert){ local $SIG{__WARN__} = sub { die "died with $_[0], the object was $o +bj" } $obj->insert() }
Isn't there a simple flag to ask to elevate all warnings to errors and die?
p.s. I could localise __WARN__ to an outer scope but messes up other warn()'s.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: DBIx::Class die on warning
by Your Mother (Archbishop) on Apr 04, 2020 at 14:03 UTC | |
|
Re: DBIx::Class die on warning
by hippo (Archbishop) on Apr 04, 2020 at 13:58 UTC | |
by bliako (Abbot) on Apr 04, 2020 at 14:47 UTC |