Bienvenida a los foros de Perl en Español, pau_dial.
El problema parece bastante sencillo de resolver, ya que, si el xml que obtenemos de la base de datos es lo que tenemos que grabar a un archivo, solo tenemos que realizar la operación de grabar un archivo. No hay ninguna transformación ni procesado intermedio.
Sería algo así (no probado):
Using perl Syntax Highlighting
#!/usr/bin/perl
use DBI;
my $database = 'nombre de la base de datos';
my $host = 'localhost';
my $usuario = 'nombre del usuario';
my $password = 'clave';
my $dsn = "DBI:mysql:database=$database;host=$hostname"; # cadena de conexión
my $dbh = DBI->connect($dsn, $usuario, $password); # conexión
my $sth = $dbh->prepare( # preparar la consulta
"SELECT campo_xml FROM tabla WHERE campo_id = ? LIMIT 1"
);
$sth->execute("42"); # consulta
my $xml;
while (my $ref = $sth->fetchrow_hashref()) { # para cada fila del resultado
$xml = $ref->{'campo_xml'}; # obtenemos el xml del campo
} # realmente, no necesitamos un bucle
$sth->finish; # desconexión
open my $ARCHIVO, q[>], 'archivo.xml'
or die "ERROR: No puedo escribir en archivo_xml:$!\n";
binmode $ARCHIVO; # modo binario de grabación
print $ARCHIVO $xml; # grabación del $xml
close $ARCHIVO;
Coloreado en 0.005 segundos, usando
GeSHi 1.0.8.4
El bucle while() no es necesario si el resultado solo es una fila. Pero queda ahí por si se da el caso de que quieres hacer alguna consulta que devuelva más de una fila. Y si cada xml recuperado debe ir en un archivo, pues habrá que meter las líneas open()..close() dentro del bucle, para que hagan esa grabación.