sub open_db { my ($dsn, $dbh, $defaults); $defaults = (defined $opts{defaults} && -f $opts{defaults}) ? $opts{defaults} : (-e $ENV{HOME}.'/.my.cnf') ? $ENV{HOME}.'/.my.cnf' : (-e '/root/.my.cnf') ? '/root/.my.cnf' : (-e './.my.cnf') ? './.my.cnf' : 'NOTFOUND'; die "No valid defaults file found!" if ($defaults eq 'NOTFOUND' && !defined $opts{host}); $dsn = defined $opts{host} && defined $opts{port} ? sprintf("DBI:mysql:mysql:host=%s;port=%d;mysql_read_default_file=%s;mysql_read_default_group=mysql;", $opts{host}, $opts{port}, $defaults) : defined $opts{host} ? sprintf("DBI:mysql:mysql:host=%s;mysql_read_default_file=%s;mysql_read_default_group=mysql;", $opts{host}, $defaults) : defined $opts{socket} && -e $opts{socket} ? sprintf("DBI:mysql:mysql;mysql_read_default_file=%s;mysql_read_default_group=mysql;mysql_socket=%s;", $defaults, $opts{socket}) : sprintf("DBI:mysql:mysql;mysql_read_default_file=%s;mysql_read_default_group=mysql;", $defaults); $dbh = DBI->connect($dsn, undef, undef, {RaiseError => 1, AutoCommit => 0}); $dbh->do(sprintf('SET SESSION wait_timeout = %d', $opts{interval} > 3500 ? $opts{interval} + 100 : 3600)) || die "Could not set session wait_timeout"; return ($dbh); }