Как я могу ввести пароль с помощью Perl и заменить символы '*'?

Согласно моему второму редактированию, я придумала что-то, что работает, но имеет несколько ошибок, и это было принято для того, что мне нужно было сделать (во-первых, это никогда не было моей работой, поэтому они не могли жаловаться):

=IF(B2 = SMALL(OFFSET(B2,-C2,0,IF(C3 = 0, C2 + 1,MAX(C2:C5)+1),1), 1),TRUE,FALSE)

Если кто-то может решить проблемы, связанные с функцией SMALL, пропуская значения, одинаковые по диапазону и динамической высоте, то у вас есть надежная формула для подобных вещей.

18
задан brian d foy 31 March 2009 в 15:04
поделиться

5 ответов

Можно играть с Термином:: ReadKey. Вот очень простой пример с некоторым обнаружением для клавиши Backspace и клавиши Delete. Я протестировал его на Mac OS X 10.5, но согласно руководству ReadKey это должно работать в соответствии с Windows. Руководство указывает на это при чтениях неблокирования использования Windows (ReadKey(-1)) перестанет работать. Вот почему я использую ReadKey (0), кто в основном getc (больше на getc в libc руководстве).

#!/usr/bin/perl                                                                                                                                                                                                

use strict;                                                                                                                                                                                                    
use warnings;                                                                                                                                                                                                  
use Term::ReadKey;                                                                                                                                                                                             

my $key = 0;                                                                                                                                                                                                   
my $password = "";                                                                                                                                                                                             

print "\nPlease input your password: ";                                                                                                                                                                        

# Start reading the keys                                                                                                                                                                                       
ReadMode(4); #Disable the control keys                                                                                                                                                                         
while(ord($key = ReadKey(0)) != 10)                                                                                                                                                                            
# This will continue until the Enter key is pressed (decimal value of 10)                                                                                                                                      
{                                                                                                                                                                                                              
    # For all value of ord($key) see http://www.asciitable.com/                                                                                                                                                
    if(ord($key) == 127 || ord($key) == 8) {                                                                                                                                                                   
        # DEL/Backspace was pressed                                                                                                                                                                            
        #1. Remove the last char from the password                                                                                                                                                             
        chop($password);                                                                                                                                                                                       
        #2 move the cursor back by one, print a blank character, move the cursor back by one                                                                                                                   
        print "\b \b";                                                                                                                                                                                         
    } elsif(ord($key) < 32) {                                                                                                                                                                                  
        # Do nothing with these control characters                                                                                                                                                             
    } else {                                                                                                                                                                                                   
        $password = $password.$key;                                                                                                                                                                            
        print "*(".ord($key).")";                                                                                                                                                                              
    }                                                                                                                                                                                                          
}                                                                                                                                                                                                              
ReadMode(0); #Reset the terminal once we are done                                                                                                                                                              
print "\n\nYour super secret password is: $password\n";   
16
ответ дан 30 November 2019 в 05:58
поделиться

В прошлом я использовал IO:: Подсказка для этого.

use IO::Prompt;
my $password = prompt('Password:', -e => '*');
print "$password\n";
24
ответ дан 30 November 2019 в 05:58
поделиться

Необходимо смотреть на любой Термин:: ReadKey или Win32:: Консоль. Можно использовать те модули, чтобы считать единственные нажатия клавиш и испустить '*' или безотносительно.

8
ответ дан 30 November 2019 в 05:58
поделиться

Вы попытались хранить строку (так, чтобы Ваша программа могла все еще считать ее), и узнайте, что ее длина затем создает строку той же длины, но только использует '*'?

-4
ответ дан 30 November 2019 в 05:58
поделиться

Если вы не хотите использовать какие-либо пакеты ... Только для UNIX

system('stty','-echo');
chop($password=<STDIN>);
system('stty','echo');
18
ответ дан 30 November 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: