• Publicidad

Capturar una tecla sin detener un bucle

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

Capturar una tecla sin detener un bucle

Notapor _behoimi » 2018-01-14 15:10 @674

Hola, quisiera saber cómo se puede capturar una tecla del teclado, pero que no me lo solicite explícitamente, es decir, que no se detenga el bucle que se está ejecutando.

Dejaré mi código para que se entienda mejor lo que deseo. Debo mencionar que es sólo con fines educativos que hago este tipo de script, sólo soy un programador aficionado.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use strict;
  3. use warnings;
  4. use IO::Socket::INET;
  5.  
  6. my $sock = new IO::Socket::INET(
  7.         PeerAddr => $ARGV[0],
  8.         PeerPort => $ARGV[1],
  9.         Proto => 'tcp'
  10. ) or die "error creando el socket: $!";
  11.  
  12. my $count;
  13. my $exit = "";
  14. my $data = "just flood";
  15. while ($exit ne "q"){
  16.         $count ++;
  17.         print $sock $data;
  18.         #aquí necesito saber como capturar una tecla sin detener el bucle.
  19. }
  20. print $count;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Sólo quiero saber cuántos paquetes soy capaz de enviar; también debe ser posible saber cuántos bytes son enviados en mi pequeño mensaje, sumadas las cabeceras y el texto.
_behoimi
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-09-13 15:01 @667

Publicidad

Re: Capturar una tecla sin detener un bucle

Notapor explorer » 2018-01-14 15:36 @692

Pues... eso depende del sistema operativo en donde estés ejecutando este programa. ¿Cuál es?
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: Capturar una tecla sin detener un bucle

Notapor _behoimi » 2018-01-14 15:45 @698

Estoy en Windows 7 64 bit, y mi versión de Perl es la última de Strawberry.
_behoimi
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-09-13 15:01 @667

Re: Capturar una tecla sin detener un bucle

Notapor explorer » 2018-01-14 16:42 @737

Puedes intentar usar el módulo Term::ReadKey, pero presta atención a su manual: algunas funciones no están para Windows.

Con un ReadKey -1 debería bastar.

Otra opción, más completa, es usar Win32::Console. Aquí tienes un ejemplo que hace precisamente eso, ver si hay eventos del teclado, y procesarlos.

Esta pregunta está en las FAQ de Perl, en perlfaq5 en concreto, pero la respuesta es algo liosa:
https://learn.perl.org/faq/perlfaq5.htm ... e-keyboard
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: Capturar una tecla sin detener un bucle

Notapor Aceitunas » 2018-01-14 17:17 @761

Si necesitas que el bucle no se pause mientras esperas la pulsación, tienes que crear un nuevo hilo. Por otra parte te comento que para obtener una pulsación de una tecla en Windows puedes usar la función GetAsynckeyState.

https://msdn.microsoft.com/es-es/librar ... 93(v=vs.85).aspx

Un saludo.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Capturar una tecla sin detener un bucle

Notapor _behoimi » 2018-01-14 20:29 @895

Con Term::ReadKey pude lograr lo que quería, no fue nada complicado: sólo cambié la condición del bucle while() a:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while (not defined (my $exit = ReadKey(-1))){
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y voilá. También declaré el uso del módulo, claro.

Gracias.
_behoimi
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-09-13 15:01 @667


Volver a Básico

¿Quién está conectado?

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