|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Обратите внимание: у последних двух пользователей одинаковые секретные слова. Такое допускается. Самый простой способ сохранить такую таблицу — использовать хеш. В каждом элементе хеша содержится отдельное скалярное значение (как и в массиве любого другого типа), но в соответствие каждому элементу хеша ставится ключ. Ключом может быть любое скалярное значение (любая строка или число, в том числе нецелые и отрицательные числа). Чтобы создать хеш под именем %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, то получили бы предупреждение на этот счет. Именно поэтому мы его здесь опустили. Содержание (общее) | Содержание раздела | Содержание подраздела Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: |
|