Conexión a una base de datos a través de la red

El primer paso para consultar una base de datos por medio de DBI será conectarse a su servidor desde nuestro programa Perl, normalmente a través de la red. Para hacerlo debemos crear una instancia de la clase DBI y usar su método connect .

La información necesaria para conectarse es:

Si vas a conectarte a un servidor de base de datos Oracle necesitarás el controlador DBD::Oracle, de la misma manera que necesitarás DBD::mysql para conectarte a una máquina que corra mysql. Puedes descargar de CPAN los controladores que necesites, pero antes comprueba qué controladores hay disponibles en tu sistema con:
$ perl -e 'use DBI; print DBI->available_drivers();'

Aquí muestro un ejemplo de código de conexion a la base de datos test del servidor MySQL servidor.ccg.unam.mx :

#!/usr/bin/perl -w
# Ejemplo escrito por Bruno Contreras Moreira

use strict;
use DBI;

my $conexion = DBI->connect("dbi:mysql:test:servidor.ccg.unam.mx","usuario","clave");
if(!$conexion)
{
	print "No me puedo conectar a mysql:test:servidor.ccg.unam.mx\n$DBI::errstr\n";
	exit(-2);
}

$conexion->disconnect() || warn "Fallo al desconectarme de mysql:test:servidor.ccg.unam.mx\n$DBI::errstr\n";

En principio puedes mantener varias conexiones a la misma base de datos, y cada una de ellas se comportará de forma independiente:

#!/usr/bin/perl -w
# Ejemplo escrito por Bruno Contreras Moreira

use strict;
use DBI;

my $conexion1 = DBI->connect("dbi:mysql:test:servidor.ccg.unam.mx","usuario","clave");
if(!$conexion1)
{
	print "Falla conexion1 a mysql:test:servidor.ccg.unam.mx\n$DBI::errstr\n";
	exit(-2);
}

my $conexion2 = DBI->connect("dbi:mysql:test:servidor.ccg.unam.mx","usuario","clave");
if(!$conexion2)
{
	print "Falla conexion2 a mysql:test:servidor.ccg.unam.mx\n$DBI::errstr\n";
	exit(-3);
}

$conexion1->disconnect() || warn "Falla desconexion1 de mysql:test:servidor.ccg.unam.mx\n$DBI::errstr\n";
$conexion2->disconnect() || warn "Falla desconexion2 de mysql:test:servidor.ccg.unam.mx\n$DBI::errstr\n";

A veces es difícil conectarse a servidores muy cargados de trabajo, por lo que podemos probar a conectarnos varias veces, hasta que lo consigamos:

#!/usr/bin/perl -w
# Ejemplo escrito por Bruno Contreras Moreira

use strict;
use DBI;

my $conexion;

until( $conexion = DBI->connect("dbi:mysql:test:servidor.ccg.unam.mx","usuario","clave") )
{
	warn "No consigo conectarme a a mysql:test:servidor.ccg.unam.mx\nLo intento de nuevo en 1 minuto\n";
	sleep(60);
}

$conexion->disconnect() || warn "Fallo al desconectarme de mysql:test:servidor.ccg.unam.mx\n$DBI::errstr\n";

Bruno Contreras-Moreira
http://www.eead.csic.es/compbio