stones.gif (8081 байт)

Разные секретные слова для разных пользователей

В предыдущем случае любой пользователь мог угадать одно из трех секретных слов и получить доступ к программе. Если мы хотим, чтобы для каждого пользователя было задано свое секретное слово, нам нужна примерно такая таблица соответствий:

Пользователь Секретное слово
Fred camel
Barney llama
Betty alpaca
Wilma alpaca

Самый простой способ сохранить такую таблицу – использовать хэш . В каждом элементе хэша содержится отдельное скалярное значение (как и в массиве любого другого типа), но в соответствие каждому элементу хэша ставится ключ . Ключом может быть любое скалярное значение. Чтобы создать хэш под именем %words (обратите внимание, что используется символ % вместо @ ) с ключами и значениями, приведенными в данной таблице, мы присвоим %words значение:

%words = qw (
   fred camel
   barney llama
   betty alpaca
   wilma alpaca
);

Каждая пара в этом списке представляет в хэше один ключ и соответствующее ему значение. Для наглядности мы разбили этот список на несколько строк. Это возможно, так как в Perl-программах пробельные символы не играют никакой роли.

Секретное слово для Betty мы можем найти с помощью выражения вроде $words("betty") , значением этой ссылки будет alpaca . Ключом может быть любое выражение, поэтому установка $person в значение betty и вычисление $words($person) также дает в результате alpaca .

В итоге получаем:

%words = qw (
   fred camel
   barney llama
   betty alpaca
   wilma alpaca
);
print "Как Вас зовут? ";
$name = <STDIN>;
chomp($name);
if ($name eq "Alex") {
   print "Привет, Alex! Рад тебя видеть!\n";
} else {
   print "Привет, $name!\n";     #обычное приветствие
   $secretword = $words{$name};   #получить секретное слово
   if ($secretword eq "") {    #не найдено
      $secretword = "groucho";    #можно использовать такое
   }
   print "Секретное слово? ";
   $guess = <STDIN>;
   chomp($guess);
   while ($guess ne $secretword) {
      print "Неверно, попробуйте еще раз. Секретное слово?";
      $guess = <STDIN>;
      chomp($guess);
   }
   print "Угадали!\n";
}

Если имя не найдено то значением $words{$name} будет пустая строка, и мы с помощью оператора if задаем значение $secretword для всех остальных пользователей.

<< Предыдущая страница Содержание Наверх Следующая страница >>

stones.gif (8081 байт)
2000, "Язык Perl. Создание CGI-скриптов на Perl." . Использованы материалы книг: Маслов В.В. Основы программирования на языке Perl - М.: Радио и связь, Горячая линия - Телеком. 1999. - 144 c.: - ISBN 5-256-01356-4; Рэндал Шварц, Том Кристиансен Изучаем Perl : Пер. с англ. - К.: Издательская группа BHV, 1998 - 320 c.: - ISBN 5-7315-0031-2.
Все пожелания - авторам: Алексею Машьянову , Александру Яковлеву .