Readonly my $MAX_ATTEMPTS => 5; my ( $i, $dbh ); for ( $i = 1 ; $i < $MAX_ATTEMPTS ; ++$i ) { $dbh = DBI->connect( "dbi:SQLite:dbname=$DB", "", "" ); if ( !$dbh ) { warn "problem from $host: " . $DBI::errstr; next; } my $ss = "insert into stats values(?,?,?,?,?,?,?,?,?)"; my $ts = strftime( "%F@%T", localtime ); my $rv = $dbh->do( $ss, undef, $host, $load, $sf, $tmeming, $mempct, @stats{ 'runproc', 'users' }, $ts, $msg ); ( $dbh->errstr ) && warn "problem from $host: " . $dbh->errstr; if ($rv) { last; } else { warn "problem from $host: " . $dbh->errstr; } sleep(1); } ## end for ( $i = 1 ; $i < 5 ; ++$i ) if ( $i == $MAX_ATTEMPTS ) { warn "$DB failed write test five times from $host"; } elsif ( $i > 1 ) { my $msg = "$ts $host had to try $i time(s) to write to $DB"; warn $msg; }