Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Imprimir a varios ficheros

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Lun Jun 23, 2008 12:45 pm
xagutxu_perez
Perlero Nuevo
Perlero Nuevo
Registrado: 04 Abr 2008
Mensajes: 43
Imprimir a varios ficheros Responder citando

Hola a todos:

¿Es posible, en Perl, imprimir a más de un fichero a la vez? ¿Sería válido algo como:

Perl:
my $var;

open (FPTIM, "> ./fich1");
open (FPTOP, "> ./fich2");

print FPTIM, FPTOP $var;
?

Gracias,

Xagutxu
Mensaje Lun Jun 23, 2008 1:08 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

No, no se puede. Al menos, no se puede indicar más de un manipulador de ficheros por cada sentencia print.

No sé si se puede hacer de otra manera. Quizás con alguna variante del open().

Ultima edición por explorer el Lun Sep 01, 2008 4:06 pm, editado 1 vez
Mensaje Lun Jun 23, 2008 3:15 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Si ves la documentación de la función print verás que no es algo posible de hacer.

Creo que no habrás más opción que hacer dos llamadas a print:

Perl:
print FPTIM $var;
print FPTOP $var;


Saludos
Mensaje Lun Jun 23, 2008 4:05 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

Lo encontré. Receta 7.8 del Perl Cookbook.

Mientras que la solución sencilla es hacer un bucle por todos los manipuladores:
Perl:
foreach $filehandle (@FILEHANDLES) {
    print $filehandle $stuff_to_print;
}


otra forma es usar el programa tee

Perl:
open( MANY, "| tee file1 file2 file3 > /dev/null" ) or die $!;
print MANY "data\n"                                 or die $!;
close(MANY)                                         or die $!;


y en caso de no disponer del comando tee en el sistema, se puede usar el módulo IO::Tee

Perl:
use IO::Tee;
$tee = IO::Tee->new(@FILEHANDLES);
print $tee $stuff_to_print;


En la receta hay una explicación más detallada y algún ejemplo más, como redireccionar el propio STDOUT.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group