• Publicidad

Generar fichero de salida

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Generar fichero de salida

Notapor principiante » 2009-08-19 06:12 @300

¿Cómo se puede generar un fichero durante la ejecución de un programa, y escribir los resultados del programa en él?
principiante
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2009-08-16 12:11 @549

Publicidad

Re: Generar fichero de salida

Notapor explorer » 2009-08-19 06:26 @310

El fichero lo abres con open() y lo cierras con close(). Entre medias, usas print() para sacar información al fichero.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Generar fichero de salida

Notapor principiante » 2009-08-19 06:40 @319

Me parece que no me he explicado bien.

Lo que quiero es que durante la ejecución del programa se cree un fichero que antes de empezar no existía y que se almacenen en él los resultados del programa.
principiante
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2009-08-16 12:11 @549

Re: Generar fichero de salida

Notapor ubuntu » 2009-08-19 07:41 @362

Buenas, espero no equivocarme, pero creo que sería:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $datos = "Hola pepito grillo";
  2.  
  3. open(pepito,">pepito.txt");
  4.  
  5. print pepito "$datos\n";
  6.  
  7. close(pepito);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Podemos usar el signo
< o ninguno delante del fichero, para lectura
> para nuevo archivo
>> para añadir al archivo

También podrías poner un nombre al archivo que recoja una variable escalar:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $nombre_archivo = "miarchivo";
  2.  
  3. open(newarchivo,">$nombre_archivo.txt");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Espero que te sirva de ayuda.

Saludos desde Cádiz :)
Avatar de Usuario
ubuntu
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2009-08-19 07:30 @354

Re: Generar fichero de salida

Notapor principiante » 2009-08-19 09:59 @457

Muchas gracias, Ubuntu, me sirvió de mucho te ayuda. Un saludo
principiante
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2009-08-16 12:11 @549

Re: Generar fichero de salida

Notapor salva » 2009-08-19 14:30 @646

ubuntu escribiste:Buenas, espero no equivocarme, pero creo que sería:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(pepito,">pepito.txt");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¡Hay que actualizar un poco ese Perl!

Hace años que Perl soporta la variante de open con tres argumentos (o más, en ciertos casos) que evita muchos problemas de seguridad.

También es aconsejable utilizar variables léxicas para los manejadores de ficheros en vez de los viejos GLOBs.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open(my $fh, '>', $file_name) or die ...;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y ya puestos, un gran invento reciente es el modulo autodie que nos ahorra toda la gestión de errores como ese die ... que acabo de poner (el autor del módulo, Paul Fenwick, lo presentó en la última YAPC::Europe de manera totalmente desternillante, pero aún no se ha publicado el vídeo de la misma para infortunio de los que no lo vieron "Live").

Volviendo al hilo del mensaje, una opción a veces más sencilla para enviar toda la salida de un programa a un fichero es redirigir directamente STDOUT:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open STDOUT, '>', $filename or die ...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Con esto nos evitamos tener que pasar a print (y demás funciones de salida) el manejador de fichero explícitamente.

Algo similar se puede hacer con la función select($fh), pero lo cierto es que no es una solución muy popular probablemente porque no funciona bien con librerías externas que usan directamente las funciones de IO de C (el stdio de toda la vida) y no las de Perl.

En cualquier caso y por si las moscas alguien no lo sabe, la forma mas fácil de redirigir la salida de un programa (escrito en Perl o en cualquier otra cosa) a un fichero es desde la shell:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ foo.pl bar doz > /tmp/out
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado