It is so the eval returns true if it succeeds. If an exception is thrown,
eval always returns undef. Thus by this difference you can determine
without fail whether an exception occurred.

-Dan

On Thu, May 9, 2019 at 9:49 AM Luc Larochelle <llaroche...@gmail.com> wrote:

> Hi Dan,
>
> What does the " 1 " stands for in the line : if (eval { ...; *1* }) { ?
>
> I've never used that kind of notation before. I think it could be some
> sort of default *true ?*
>
>
>
> On Wednesday, 8 May 2019 14:10:51 UTC-4, Dan Book wrote:
>>
>> Testing $@ is not the best way to determine an exception occurred. I'd
>> recommend Syntax::Keyword::Try as it handles all the edge cases for you,
>> but otherwise this gets you most of the way:
>>
>> if (eval { ...; 1 }) {
>>   # success
>> } else {
>>   my $err = $@;
>> }
>>
>> And make sure you log errors and rethrow any exceptions you do not
>> handle. You will want to see the error logging later.
>>
>> -Dan
>>
>> On Wed, May 8, 2019 at 1:18 PM Luc Larochelle <llaro...@gmail.com> wrote:
>>
>>> This works just as expected. In my case I wanted to catch foreign key
>>> constraints. Now I'm prepared for the critics, I'll post my "del" route,
>>> it's from an Lite application serving a web app. I wonder if I'm doing
>>> things the right way.
>>>
>>> I tried to make it idempotent for GET, POST, PUT & DEL but since I have
>>> to deal with little exceptions in the given routes, they all have their
>>> definitions. For instance, :id is *id in the GET route, since its principal
>>> task is to display the whole table. The helpers though (model ?) are not
>>> dealing with exceptions at all and are used to execute simple tasks to the
>>> db given the params feeded by the routes.
>>>
>>> I'm very opened to discuss all of this, this has to be my most serious
>>> project since I started using Mojolicious and I'm learning frontend coding
>>> on-the-fly ...
>>>
>>> helper insertOne => sub {
>>> my ($c,$table) = @_;
>>> $c->sqlite->db->insert($table, $c->element);
>>> };
>>>
>>>
>>> helper deleteOne => sub {
>>>
>>> my ($c,$table,$param) = @_;
>>> $c->sqlite->db->delete($table, {$tables->{$table} => $param});
>>> };
>>>
>>>
>>>
>>> del '/api/select/:table/:id' => sub {
>>>
>>> my $c = shift;
>>> if ($c->selectOne($c->param('id'))) {
>>> eval { $c->deleteOne($c->param('table'),$c->param('id')) };
>>> unless($@) {
>>> $c->render(status => 200, json => {message => $c->param('id') .
>>> $messages->{'Del'}});
>>> } elsif ($@ =~ /FOREIGN KEY constraint failed/) {
>>> $c->render(status => 400, json => {message => $c->param('id') .
>>> $messages->{'FK'}});
>>> }
>>> } else {
>>> $c->render(status => 404, json => {message => "Not found"});
>>> }
>>>
>>> };
>>>
>>>
>>>
>>> On Wednesday, 20 March 2019 11:58:04 UTC-4, Luc Larochelle wrote:
>>>>
>>>> Thanks ! Maybe I read only the sections and bold titles :)
>>>>
>>>> I'll have a second look.
>>>>
>>>>
>>>> On Monday, 18 March 2019 12:35:48 UTC-4, Dan Book wrote:
>>>>>
>>>>> As mentioned in the documentation: "Any database errors will throw an
>>>>> exception as RaiseError is automatically enabled, so use eval or
>>>>> Try::Tiny <https://metacpan.org/pod/Try::Tiny> to catch them. "
>>>>>
>>>>> This is the standard way to handle errors in Perl.
>>>>> Syntax::Keyword::Try is also a nicer interface if you can use keyword
>>>>> plugins (perl 5.14+).
>>>>>
>>>>> -Dan
>>>>>
>>>>> On Mon, Mar 18, 2019 at 10:00 AM Luc Larochelle <llaro...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hello Veesh, well to me that looks like "eval" , right ? I meant is
>>>>>> there a way with Mojo::SQLite to check errors ?
>>>>>>
>>>>>> On Saturday, 16 March 2019 15:12:11 UTC-4, Veesh Goldman wrote:
>>>>>>>
>>>>>>> Does Try::Tiny strike your fancy? It'll put the error into $_ in the
>>>>>>> catch block.
>>>>>>>
>>>>>>> Short of that, I'm fairly certain it'll crash your thread if it
>>>>>>> fails.
>>>>>>>
>>>>>>> On Fri, Mar 15, 2019, 10:22 PM Luc Larochelle <llaro...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hello everyone,
>>>>>>>>
>>>>>>>> While a 'select' statement can be double checked by the presence of
>>>>>>>> the returned data, how can I confirm that statements such as 'insert' ,
>>>>>>>> 'update' or 'delete' are successful ?
>>>>>>>>
>>>>>>>> For instance, using SQL::Abstract and some helpers
>>>>>>>>
>>>>>>>> helper insertOne => sub {
>>>>>>>> my ($c,$table) = @_;
>>>>>>>> $c->sqlite->db->insert($table, $c->element);
>>>>>>>> };
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I've seen in the documentation that one could *eval* and look into
>>>>>>>> $@ , but is there a more "inline" way to do this ?
>>>>>>>>
>>>>>>>> Cheers !
>>>>>>>>
>>>>>>>> Luc
>>>>>>>>
>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "Mojolicious" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to mojolicious...@googlegroups.com.
>>>>>>>> To post to this group, send email to mojol...@googlegroups.com.
>>>>>>>> Visit this group at https://groups.google.com/group/mojolicious.
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Mojolicious" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to mojolicious...@googlegroups.com.
>>>>>> To post to this group, send email to mojol...@googlegroups.com.
>>>>>> Visit this group at https://groups.google.com/group/mojolicious.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Mojolicious" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to mojol...@googlegroups.com.
>>> To post to this group, send email to mojol...@googlegroups.com.
>>> Visit this group at https://groups.google.com/group/mojolicious.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/mojolicious/e3480fbb-d830-461f-b644-33f3de62db18%40googlegroups.com
>>> <https://groups.google.com/d/msgid/mojolicious/e3480fbb-d830-461f-b644-33f3de62db18%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Mojolicious" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to mojolicious+unsubscr...@googlegroups.com.
> To post to this group, send email to mojolicious@googlegroups.com.
> Visit this group at https://groups.google.com/group/mojolicious.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/mojolicious/31a95d6e-acdf-429c-b8d0-1cf059338ad5%40googlegroups.com
> <https://groups.google.com/d/msgid/mojolicious/31a95d6e-acdf-429c-b8d0-1cf059338ad5%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/mojolicious/CABMkAVUTMiHWmXyOAEcYpB%3D9T%3DUwLtwN%2BGMhO9uX2q4HhjyoSw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to