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";
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:
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);
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.