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% --