eval { $dbh->do(...); }; if (my $e = $@) { if ($dbh->{Active} != 1 || $dbh->state =~ /08\d{3}/){ # reconnect and retry } else { # not connection related error } } #### unless (fork()) { $dbh->{InactiveDestroy} = 0; exit; } wait(); #### sub query { $dbh->selectrow_array(q{ SELECT now() }); } sub ping_and_query { $dbh->selectrow_array(q{ SELECT now() }) if $dbh->ping; } cmpthese(-2, { 'query' => \&query, 'ping+query' => \&ping_and_query, }); --- Rate ping+query query ping+query 6349/s -- -39% query 10327/s 63% --