How can I enter a password using Perl and replace the characters with '*'?

后端 未结 7 1007
长发绾君心
长发绾君心 2020-12-03 03:54

I have a Perl script that requires the user to enter a password. How can I echo only \'*\' in place of the character that the user types, as they type it?

I\'m using

7条回答
  •  囚心锁ツ
    2020-12-03 04:06

    Building on Pierr-Luc's program, just added some control on the backslashes. With this, you can't keep pressing backslash forever:

    sub passwordDisplay() {
        my $password = "";
        # Start reading the keys
        ReadMode(4); #Disable the control keys
        my $count = 0;
        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
                        if ($count > 0) {
                                $count--;
                                #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) {
                        $count++;
                        $password = $password.$key;
                        print "*";
                }
        }
        ReadMode(0); #Reset the terminal once we are done
        return $password;
    }
    

提交回复
热议问题