$@ = ''; eval { $order = TblOrders->find_or_create( order_id => $order_values->{order_id}, ); [... update columns here ...] $order->update; # THIS WORKS }; confess "Could not update order: $@\n" if ($@); # THIS NEXT BIT FAILS $order = TblOrders->retrieve($order_values->{order_id}) or confess "Could not read back order with " . "order ID = $order_values->{order_id}\n"; #### sub store_order { my ($self) = @_; my $order_values = $self->prepare_data_for_database("orders"); my $order; if ($order_values->{order_id}) { # Replace an existing order $@ = ''; eval { $order = EN::OrdersDB::Orders->find_or_create( order_id => $order_values->{order_id}, ); # Update the fields of the object foreach my $field (keys %$order_values) { $order->$field($order_values->{$field}); } $order->update; # Update the database }; confess "Could not update order: $@\n" if ($@); # THIS NEXT BIT FAILS $order = EN::OrdersDB::Orders->retrieve($order_values->{order_id}) or confess "Could not read back order with " . "order ID = $order_values->{order_id}\n"; } else { # Insert a new order [ ... code to insert new order ... ] } return $order; }