• Publicidad

Pulse una tecla para continuar

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

Pulse una tecla para continuar

Notapor pascal » 2007-05-23 07:21 @348

¿Existe alguna función en Perl que haga esto?, algo así como el system("PAUSE") de c++ en win.

Gracias
pascal
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-05-08 15:32 @689

Publicidad

Notapor explorer » 2007-05-23 09:06 @421

Si la tecla a pulsar es el Enter, se puede hacer con esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "Pulse la tecla Enter para continuar:";
<>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El problema es si quieres hacerlo con CUALQUIER tecla. Una forma de resolverlo es con el comando select testeando el canal de entrada estándar del sistema.

También depende un poco del sistema operativo el que se pueda hacer o no.

Aquí tienes una solución más cómoda, usando el módulo Term::ReadKey:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Term:ReadKey;

print "Pulsa una tecla para continuar:";
ReadMode 'cbreak';
$respuesta = ReadKey(0);
ReadMode 'normal';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 pascal » 2007-05-23 12:30 @563

Gracias explorer, me servirá con la tecla enter, pero podrías explicarme como lo hace? es que no entiendo que hace <>, si fuera una comparación con el código ascii de enter lo entendería pero eso no lo se ..
pascal
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-05-08 15:32 @689

Notapor creating021 » 2007-05-23 15:17 @678

Si quieres porgramar tomar la entrada de cualquier tecla sin unar módulos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
binmode STDIN;
my $key;
sysread(STDIN, $key, 1);
print "Usted oprimio ".ord($key)."\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Aunque la forma más optima y protable de programar esto es el código dado (el que he puesto) poniendo, antes de hacer el binmode y depués del sysread, setcc(VTIME, 1) y setcc(VTIME, 0) de POSIX::Termios.

La forma más fácil de hacerlo es la que ha dicho explorer.

En cuanto a lo de < >... se refiere a <STDIN> que las terminales quiere decir Standard Input...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "Oprima enter para continuar \n";
my $string = <STDIN>;
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por creating021 el 2007-05-23 19:51 @869, editado 1 vez en total
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 » 2007-05-23 18:26 @809

Como dice creating021, <> es la forma abreviada de <STDIN>, que es la forma de leer desde la entrada estándar.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "Escriba su nombre: ";
$nombre = <>;
print "Usted es $nombre\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Más información en la página perlop, en la sección de "I/O Operators".
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 pascal » 2007-05-24 08:29 @395

Ok, ya lo entiendo, lo que no sabia es que <> era la forma abreviada.
Muchas gracias la verdad es que es difícil encontrar un foro de programación donde te presten tanta atención :D
pascal
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-05-08 15:32 @689


Volver a Básico

¿Quién está conectado?

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

cron