名前

Term::ReadPassword::Win32 - ユーザーにパスワードを尋ねる (Win32 用)

概要

use Term::ReadPassword::Win32;
while (1) {
  my $password = read_password('password: ');
  redo unless defined $password;
  if ($password eq 'flubber') {
    print "Access granted.\n";
    last;
  } else {
    print "Access denied.\n";
    redo;
  }
}

説明

このモジュールは、Term::ReadPassword と同じように、ユーザーに対して パスワードを尋ねます。

ユーザーに対してパスワードの入力を求めるには、Term::ReadPassword を 使うのがよい方法ですが、Term::ReadPassword は Windows 用の ActivePerl では動かないという問題があるため、それを解決するためにこのモジュールを 書きました。

このモジュールは、Windows と Unix のどちらでも使えます。 Windows で使うには、Win32::* のモジュールが必要です。 Unix で使うときは、 このモジュールは Term::ReadPassword に対するラッパーとして動作します。

Term::ReadPassword::Win32::read_password 関数は、 Term::ReadPassword::read_password 関数とほとんど同じように動作します。

最初と2番目のパラメータは、全く同じです。最初のパラメータは、プロンプト として表示する文字列を指定し、2番目のパラメータは、タイムアウト値を秒単位 で指定します。

3番目のパラメータは、少々異なっています。

3番目のパラメータが 0 のときは、Ctrl+C は他の文字と全く同じように、 入力バッファに格納されます。これは Term::ReadPassword::read_password の 3番目のパラメータに false を指定したときの動作と同じです。

3番目のパラメータが 1 のときは、Ctrl+C または Esc が入力されると パスワードの入力を終了します。Term::ReadPassword::read_password の 3番目のパラメータに true を指定したときの動作と似ていますが、Esc でも 入力を終了できる点が異なっています。

3番目のパラメータが 2 のときは、Esc が入力されるとパスワードの入力を 終了します。Ctrl+C が入力された場合は、おそらくプログラムが中断 されます。

Ctrl+U が入力されると、入力バッファはクリアされます。

バグ

マルチバイト文字は正しく扱われません。(マルチバイト文字を1文字削除する 場合に BackSpace を複数回入力する必要があります。)

参考

Term::ReadPassword, Term::Getch

著作権

Copyright (C) 2005 Ken Takata <kentkt@anet.ne.jp>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

ダウンロード

最新版は、 http://webs.to/ken/ から入手できます。