П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 176118 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 72913 раз(а).

Учебник HTML.
Просмотров 72662 раз(а).

Руководство по PHP5.
Просмотров 43422 раз(а).

Хостинг через призму DNS.
Просмотров 49973 раз(а).

Подборка текстов стандартных документов.
Просмотров 43659 раз(а).

Учебник PHP - Самоучитель
Просмотров 49971 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 50328 раз(а).

Внешние атаки...
Просмотров 40748 раз(а).

Учебник PHP.
Просмотров 35867 раз(а).

SSI в примерах.
Просмотров 26961 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Глава 1: Введение.
1.5. Прогулка по стране Perl
1.5.5. Разные секретные слова для разных пользователей

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

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

Обратите внимание: у последних двух пользователей одинаковые секретные слова. Такое допускается.

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

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

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

Чтобы найти секретное слово для Betty, мы должны использовать имя Betty как ключ в ссылке на хеш %words с помощью выражения вроде %words {"betty"}. Значение этой ссылки - alpaca, это похоже на то, что мы видели раньше, работая с другим массивом. Как и раньше, ключом может быть любое выражение, поэтому установка $person в значение betty и вычисление %words {$person} также дает в результате alpaca.

Сведя все это воедино, мы получаем такую программу:

#! /usr/bin/perl -w 

%words = qw ( fred camel barney llama betty alpaca wilma alpaca);
print "What is your name? ";
$name = <STDIN>;
chomp ( $name);

if ($name eq "Randal") {
  print "Hello, Randal! How good of you to be here!\n";

} else {
  print "Hello, $name !\n"; # обычное приветствие 
  $secretword = $words {$name};  # получить секретное слово 
  print "What is the secret word? ";
  $guess = <STDIN>;
  chomp ($guess);

  while ($guess ne $secretword) {
    print "Wrong, try again. What is the secret word? ";
    $guess = <STDIN>;
    chomp ($guess);
  }
}

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

[...остальная часть программы удалена...]

$secretword = $words ($name}; # получить секретное слово

if ( $secretword eq "") { # не найдено
  $secretword = "groucho"; # конечно, можно использовать 
}

print "What is the secret word? "; 

[...остальная часть программы удалена...]

* На самом деле это значение undef, но для операции eq оно выглядит как пустая строка. Если бы в командной строке вы использовали ключ -w, то получили бы предупреждение на этот счет. Именно поэтому мы его здесь опустили.

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru