• Publicidad

Usar un pipe como argumento

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Usar un pipe como argumento

Notapor creating021 » 2008-01-01 20:29 @895

Buenas.

Tengo un programa que toma como argumento un path de X archivo ( perl miprograma.pl ../archivo.dat )

Eso es fácil de hacer ( por ARGV ) pero... ¿Que tal si ejecuto el programa con un pipe?

Algo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
cat ../archivo.dat | perl miprograma.pl
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Cómo trabajo con esto, cómo leo ese archivo?
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Notapor explorer » 2008-01-01 21:02 @918

Estás entubando la salida de cat a la entrada estándar de perl, así que deberás de usar <> (<STDIN>).
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

Notapor creating021 » 2008-01-02 10:22 @474

Claro, eso es... :mrgreen:
¡Gracias!
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor Jenda » 2008-01-02 11:39 @527

explorer escribiste:Estás entubando la salida de cat a la entrada estándar de perl, así que deberás de usar <> (<STDIN>).


Para poner esto más claro .. con <STDIN> lees del input estándart. Que significa del pipe

cat blah.txt | ./programa.pl

o del archivo mandado al stdin del proceso

./programa.pl < blah.txt

o del humano que está delante del compu. En el primero caso cada ves que acabas de leer un archivo obtienes un undef y si sigues a leer Perl abres el archivo siguiente.

Con <> lees de los archivos incluidos cuando lanzas la programa

./programa.pl archivo1.txt archivo2.txt

o del pipe o archivo mandado al stdin o el humano.
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa

Notapor creating021 » 2008-01-02 12:13 @550

:? Qué hago si quero usar el STDIN así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
cat ../archivo.dat | perl miprograma.pl
miprograma.pl: El archivo.dat está corrupto, desea  eliminarlo? [Y|n] y
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

¿Cómo leo ese "y" o ese "n" si estoy usando el STDIN para leer el archivo?
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2008-01-02 15:14 @676

Si esa pregunta sale en pantalla hacia el usuario, en mitad de la lectura del fichero que entra por la entrada estándar, no podrás distinguir lo que recibes del fichero de lo que te responda el usuario.

Pero sí si has consumido todo el fichero. Deberás usar la función clearerr(), según indica el perlfaq8, Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
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

Notapor creating021 » 2008-01-02 16:58 @748

Hmmm... está bien, pero no puedo leer todo el archivo de una sola vez.

Intenté abrir la tty y leer la entrada, pero al crear el pipe desde la terminal el programa no está corriendo desde el dispositivo ( obvio, está corriendo en el pipe ¿O no es eso? ).

Si puedo leer la tty, este problema será historia.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2008-01-02 17:12 @758

¿Y no es más fácil hacer
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
perl miprograma.pl archivo.dat
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
?
Así sabes qué fichero tienes que procesar y te queda la entrada estándar para preguntar al usuario.
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

Notapor creating021 » 2008-01-02 17:27 @768

Sí, lo es, pero no para el que programa en shell y tiene que usar grep o cualquier otro comando.

Lo que quiero hacer es un lector de documentos... la idea es que se pueda ejecutar como less o more.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2008-01-02 17:41 @778

¡Hey! ¡Estamos en Perl! ¡Casi todo ya está hecho!
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    use Term::Pager;
   
    my $t = Term::Pager->new( rows => 25, cols => 80 );
    $t->add_text( $text );
    $t->more();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Hay más módulos en CPAN. Busca por 'pager'.
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

Siguiente

Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados