• Publicidad

POSIX::Termios: Ocultando input en 25 líneas

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

POSIX::Termios: Ocultando input en 25 líneas

Notapor creating021 » 2006-12-20 20:12 @883

:D
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 1: #!/usr/bin/env perl
 2: use strict;
 3: use POSIX qw(:termios_h);
 4: my $termios = new POSIX::Termios;
 5: my $fh_stdin = fileno(STDIN);
 6: $termios->getattr($fh_stdin);
 7: my $flags = $termios->getlflag();
 8: sub noecho {
 9:   $termios->setlflag($flags & ~&POSIX::ECHO);
10:   $termios->setattr($fh_stdin, TCSANOW); #modificamos STDOUT
11: }
13:
14: sub echo {
15:   $termios->setlflag(&POSIX::ECHO);
16:   $termios->setattr($fh_stdin, TCSANOW);
17: }
18:
19: print "Ahora no podemos ver lo que entramos\n";
20: print "Escribe algo: ";
21: noecho();
22: my $entrada = <STDIN>;
23: chomp $entrada;
24: echo();
25: print "\nEscribiste $entrada\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


1: env encuentra el path de perl, lo ejecuta por nosotros.
2: Este es un pragma que limita las posibles inseguridades.
3: Incluimos una librería que nos brinda un estándar POSIX (Portable Operating
System Interface for uniX: estandar IEEE-IX de Open Group pero nombrado por
Richard Stallman) que da interfaces a APIs del kernel como threads, comunicación
Process-to-Process y otras cosas) que actualmente es soportado por todo UNIX®
y Unix-Like (BSD, GNU/Linux... ) tanto como Windows tipo NT (Windows NT, 2000,
2003, XP y Vista)
4: Creamos un nuevo objeto a Termios.
Termios es parte del estándar de las librerías POSIX de C, también de Perl ;) y
es una interface general de terminal, el equivalente en C sería termios.h y
unistd.h
5: Ahora guardamos en $fh_stdin el descriptor de STDIN; fileno se usa para crear
bitmask para trabajar con operaciones para tty (Teletypewriter).
6: Tomamos los atributos de STDIN.
7: Guardamos los parámetros de la terminal (ECHO, ECHOE, ECHOL et cetera).
8: Creamos la sub función.
9: Modificamos los parámetros de ECHO en la terminal.
10: Modificamos STDOUT.
14: Creamos la sub función echo.
15: Modificamos los parámetros a los anteriores.
16: Modificamos STDOUT.
19: Imprimimos un par de cosas.
20: Hacemos el noecho.
22: Guardamos la entrada del "standar input" (STDIN).
23: Cortamos el retorno de carro.
24: Nuevamente permitimos que se vea la entrada en la terminal haciendo echo.
25: Imprimimos la entrada.

También hay otros módulos como IO::Stty:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;
use IO::Stty;
IO::Stty::stty(\*STDIN,'-echo');
print "Password: ";
chomp($pass_in = <STDIN>);
print "\n";
IO::Stty::stty(\*STDIN,$old_mode);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

O se puede usar el comando stty (en Unix) pero con POSIX::Termios podemos hacer algo que correrá en cualquier máquina que soporte POSIX sin tener que instalar nada.
:)
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 » 2006-12-20 21:12 @925

Está muy bien.

Recordar que Term::Screen y Term::ReadKey también permiten leer de la entrada, sin el echo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use Term::ReadKey;
ReadMode 'noecho'; # Activación no echo
print "Login:";
$pass = <>;
print "Pass: $pass";
ReadMode 0; # Reset tty antes de salir
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 creating021 » 2006-12-21 15:25 @684

Pues, creo que es mejor usar Term::ReadPassword que Term::Screen, pero sin duda Term::ReadKey es una buena solución.
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


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 2 invitados

cron