From: Junio C Hamano Date: Sat, 02 Feb 2008 21:31:17 GMT Subject: Re: [PATCH 1/2][Perlers?] git-send-email: ssh/login style password requests Message-ID: <7vve5711wa.fsf@gitster.siamese.dyndns.org> In-Reply-To: <1201925161-9864-1-git-send-email-mfwitten@mit.edu> Michael Witten writes: > 2 files changed, 53 insertions(+), 9 deletions(-) Documentation part looks very clear. Thanks. > + if (defined $smtp_authuser) { > + > + if (!defined $smtp_authpass) { > + > + system "stty -echo"; > + > + do { > + $_ = $term->readline("Password: "); > + } while (!defined $_); > + > + system "stty echo"; > + > + $smtp_authpass = $_ if ($_); > + } > + Another example which appears in PerlFAQ #8 uses ReadKey with its ReadLine, like this: use Term::ReadKey; ReadMode('noecho'); $password = ReadLine(0); which is different from Term::ReadLine's "ReadLine". An earlier example you cited from perlfunc.pod's crypt() entry does: system "stty -echo"; print "Password: "; chomp($word = ); print "\n"; system "stty echo"; In either case, I was worried about the interaction between the Term::ReadLine backend implementation and "stty". Actually, I just tried this myself: #!/usr/bin/perl -w use Term::ReadLine; my $term = new Term::ReadLine 'foobar'; my ($user, $password); while (!defined $user) { $user = $term->readline("User: "); } system 'stty -echo'; while (!defined $password) { $password = $term->readline("Password: "); } system 'stty echo'; print "You said <$user><$password>\n"; print "ReadLine backend used was ", $term->ReadLine, "\n"; In my case, the backend was "Term::ReadLine::Perl". A few problems: * After typing "junio " to "User:", an extra newline is left before "Password:" prompt; * "Password:" prompt still echoed password "abc". There was no extra newline before "You said ". * In either case, typing returns an empty string from $term->readline() so the "while (!defined)" loop does not buy us anything.